diff --git a/OpenContent/App_LocalResources/EditData.ascx.resx b/OpenContent/App_LocalResources/EditData.ascx.resx index 84c283be..e5ce0a54 100644 --- a/OpenContent/App_LocalResources/EditData.ascx.resx +++ b/OpenContent/App_LocalResources/EditData.ascx.resx @@ -117,16 +117,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Type of data - - - Versions - Import Demo Data Rest Api Doc + + Save to file As default + + + Type of data + + + Versions + \ No newline at end of file diff --git a/OpenContent/App_LocalResources/EditGlobalSettings.ascx.resx b/OpenContent/App_LocalResources/EditGlobalSettings.ascx.resx index f77a18f0..58f84327 100644 --- a/OpenContent/App_LocalResources/EditGlobalSettings.ascx.resx +++ b/OpenContent/App_LocalResources/EditGlobalSettings.ascx.resx @@ -162,4 +162,7 @@ Load Glyphicons on Edit Form (for bootstrap 4) + + Composite & Minify Template Css (require DNN 8 or greater) + \ No newline at end of file diff --git a/OpenContent/App_LocalResources/View.ascx.resx b/OpenContent/App_LocalResources/View.ascx.resx index ae0e866b..483c7ccc 100644 --- a/OpenContent/App_LocalResources/View.ascx.resx +++ b/OpenContent/App_LocalResources/View.ascx.resx @@ -199,4 +199,13 @@ Clone Module + + Create + + + Start by creating a new template based on one available from the web. + + + Advanced... + \ No newline at end of file diff --git a/OpenContent/Components/Alpaca/AlpacaEngine.cs b/OpenContent/Components/Alpaca/AlpacaEngine.cs index fd152e59..7847c2c0 100644 --- a/OpenContent/Components/Alpaca/AlpacaEngine.cs +++ b/OpenContent/Components/Alpaca/AlpacaEngine.cs @@ -189,7 +189,17 @@ private void RegisterFields(bool bootstrap) } if (allFields || fieldTypes.Contains("ckeditor") || fieldTypes.Contains("mlckeditor")) { - ClientResourceManager.RegisterScript(Page, "~/DesktopModules/OpenContent/js/CKEditor/ckeditor.js", FileOrder.Js.DefaultPriority); + //ClientResourceManager.RegisterScript(Page, "~/DesktopModules/OpenContent/js/CKEditor/ckeditor.js", FileOrder.Js.DefaultPriority); + + ClientScriptManager cs = Page.ClientScript; + Type csType = GetType(); + const string CsName = "CKEdScript"; + if (!cs.IsClientScriptIncludeRegistered(csType, CsName)) + { + cs.RegisterClientScriptInclude( + csType, CsName, Page.ResolveUrl("~/DesktopModules/OpenContent/js/CKEditor/ckeditor.js")); + } + DotNetNuke.UI.Utilities.ClientAPI.RegisterClientVariable(Page, "PortalId", PortalId.ToString(), true); /* var CKDNNporid = new HiddenField(); @@ -205,9 +215,12 @@ private void RegisterFields(bool bootstrap) } if (allFields || fieldTypes.Contains("icon")) { - ClientResourceManager.RegisterScript(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/jquery.fonticonpicker.min.js", FileOrder.Js.DefaultPriority, "DnnPageHeaderProvider"); - ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.min.css", FileOrder.Css.DefaultPriority); - ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/themes/grey-theme/jquery.fonticonpicker.grey.min.css", FileOrder.Css.DefaultPriority); + ClientResourceManager.RegisterScript(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/js/jquery.fonticonpicker.js", FileOrder.Js.DefaultPriority, "DnnPageHeaderProvider"); + ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.min.css", FileOrder.Css.DefaultPriority); + //if (bootstrap) + // ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.min.css", FileOrder.Css.DefaultPriority); + //else + ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.min.css", FileOrder.Css.DefaultPriority); ClientResourceManager.RegisterStyleSheet(Page, "~/DesktopModules/OpenContent/css/glyphicons/glyphicons.css", FileOrder.Css.DefaultPriority + 1); } if (allFields || fieldTypes.Contains("summernote") || fieldTypes.Contains("mlsummernote")) diff --git a/OpenContent/Components/Common/Utils.cs b/OpenContent/Components/Common/Utils.cs index ed7cfdda..46da372e 100644 --- a/OpenContent/Components/Common/Utils.cs +++ b/OpenContent/Components/Common/Utils.cs @@ -1,4 +1,5 @@ using System; +using System.Web; namespace Satrabel.OpenContent.Components { @@ -14,6 +15,13 @@ public static string RemoveQueryParams(this string url) return url; } + public static string GetFullUrl(HttpRequest request, string relativeUrl) + { + return String.Format("{0}://{1}{2}", + request.Url.Scheme, + request.Url.Authority, + VirtualPathUtility.ToAbsolute(relativeUrl)); + } #endregion diff --git a/OpenContent/Components/Handlebars/HandlebarsEngine.cs b/OpenContent/Components/Handlebars/HandlebarsEngine.cs index 79fcbd96..4a0be7e7 100644 --- a/OpenContent/Components/Handlebars/HandlebarsEngine.cs +++ b/OpenContent/Components/Handlebars/HandlebarsEngine.cs @@ -48,6 +48,7 @@ public void Compile(string source) RegisterReplaceHelper(hbs); RegisterReplaceNewlineHelper(hbs); RegisterTemplateHelper(hbs); + RegisterRawHelper(hbs); _template = hbs.Compile(source); } catch (Exception ex) @@ -124,6 +125,7 @@ private static void RegisterHelpers(IHandlebars hbs) RegisterReplaceHelper(hbs); RegisterReplaceNewlineHelper(hbs); RegisterTemplateHelper(hbs); + RegisterRawHelper(hbs); } private static void RegisterTruncateWordsHelper(HandlebarsDotNet.IHandlebars hbs) @@ -435,6 +437,15 @@ private static void RegisterHandlebarsHelper(HandlebarsDotNet.IHandlebars hbs) writer.WriteSafeString(""); }); } + + private static void RegisterRawHelper(HandlebarsDotNet.IHandlebars hbs) + { + hbs.RegisterHelper("raw", (writer, options, context, parameters) => { + options.Template(writer, null); + }); + + } + private void RegisterRegisterScriptHelper(HandlebarsDotNet.IHandlebars hbs, Page page, string sourceFolder) { hbs.RegisterHelper("registerscript", (writer, context, parameters) => diff --git a/OpenContent/Components/InitAPIController.cs b/OpenContent/Components/InitAPIController.cs new file mode 100644 index 00000000..ec65847e --- /dev/null +++ b/OpenContent/Components/InitAPIController.cs @@ -0,0 +1,427 @@ +#region Copyright + +// +// Copyright (c) 2015-2017 +// by Satrabel +// + +#endregion + +#region Using Statements + +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; +using DotNetNuke.Web.Api; +using Newtonsoft.Json.Linq; +using System.IO; +using DotNetNuke.Security; +using Satrabel.OpenContent.Components.Json; +using DotNetNuke.Entities.Modules; +using System.Collections.Generic; +using DotNetNuke.Services.Localization; +using Satrabel.OpenContent.Components.Alpaca; +using Satrabel.OpenContent.Components.Manifest; +using Satrabel.OpenContent.Components.Datasource; +using Satrabel.OpenContent.Components.Dnn; +using DotNetNuke.Entities.Tabs; +using System.Web.Hosting; +using Satrabel.OpenContent.Components.Logging; + +#endregion + +namespace Satrabel.OpenContent.Components +{ + [SupportedModules("OpenContent")] + public class InitAPIController : DnnApiController + { + public object TemplateAvailable { get; private set; } + + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpGet] + public List GetModules() + { + IEnumerable modules = (new ModuleController()).GetModules(ActiveModule.PortalID).Cast(); + modules = modules.Where(m => m.ModuleDefinition.DefinitionName == App.Config.Opencontent && m.IsDeleted == false && !m.OpenContentSettings().IsOtherModule); + var listItems = new List(); + foreach (var item in modules) + { + if (item.TabModuleID != ActiveModule.TabModuleID) + { + var tc = new TabController(); + var tab = tc.GetTab(item.TabID, ActiveModule.PortalID, false); + if (!tab.IsNeutralCulture && tab.CultureCode != DnnLanguageUtils.GetCurrentCultureCode()) + { + // skip other cultures + continue; + } + var tabpath = tab.TabPath.Replace("//", "/").Trim('/'); + var li = new ModuleDto() + { + Text = string.Format("{1} - {0}", item.ModuleTitle, tabpath), + TabModuleId = item.TabModuleID + }; + listItems.Add(li); + } + } + return listItems.OrderBy(x => x.Text).ToList(); + } + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpGet] + public List GetTemplates() + { + var scriptFileSetting = ActiveModule.OpenContentSettings().Template; + var templates = OpenContentUtils.ListOfTemplatesFiles(PortalSettings, ActiveModule.ModuleID, scriptFileSetting, App.Config.Opencontent); + return templates.Select(t => new TemplateDto() + { + Value = t.Value, + Text = t.Text + }).ToList(); + } + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpGet] + public List GetTemplates(int tabModuleId) + { + var dsModule = (new ModuleController()).GetTabModule(tabModuleId); + var dsSettings = dsModule.OpenContentSettings(); + var templates = OpenContentUtils.ListOfTemplatesFiles(PortalSettings, ActiveModule.ModuleID, dsSettings.Template, App.Config.Opencontent, dsSettings.Template.MainTemplateUri()); + return templates.Select(t => new TemplateDto() + { + Value = t.Value, + Text = t.Text + }).ToList(); + } + + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpGet] + public List GetTemplates(bool web) + { + if (web) + { + var templates = GithubTemplateUtils.GetTemplateList(ActiveModule.PortalID).Where(t => t.Type == Components.Github.TypeEnum.Dir).OrderBy(t => t.Name); + return templates.Select(t => new TemplateDto() + { + Value = t.Path, + Text = t.Name + }).ToList(); + } + else + { + var scriptFileSetting = ActiveModule.OpenContentSettings().Template; + var templates = OpenContentUtils.GetTemplates(PortalSettings, ActiveModule.ModuleID, scriptFileSetting, App.Config.Opencontent); + return templates.Select(t => new TemplateDto() + { + Value = t.Value, + Text = t.Text + }).ToList(); + } + + } + + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpGet] + public ModuleStateDto GetTemplateState() + { + //create tmp TemplateManifest + //var templateManifest = new FileUri(template).ToTemplateManifest(); + var settings = ActiveModule.OpenContentSettings(); + var templateManifest = settings.Template; + if (templateManifest == null) + { + return new ModuleStateDto() + { + Template = "" + }; + } + else + { + return new ModuleStateDto() + { + Template = settings.TemplateKey.ToString(), + SettingsNeeded = templateManifest.SettingsNeeded(), + //templateDefined = templateDefined && (!ddlTemplate.Visible || (settings.Template.Key.ToString() == ddlTemplate.SelectedValue)); + SettingsDefined = !string.IsNullOrEmpty(settings.Data) + }; + } + } + [ValidateAntiForgeryToken] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [HttpPost] + public ModuleStateDto SaveTemplate(SaveDto input) + { + ModuleController mc = new ModuleController(); + if (!input.otherModule) // this module + { + mc.DeleteModuleSetting(ActiveModule.ModuleID, "tabid"); + mc.DeleteModuleSetting(ActiveModule.ModuleID, "moduleid"); + } + else // other module + { + var dsModule = (new ModuleController()).GetTabModule(input.tabModuleId); + mc.UpdateModuleSetting(ActiveModule.ModuleID, "tabid", dsModule.TabID.ToString()); + mc.UpdateModuleSetting(ActiveModule.ModuleID, "moduleid", dsModule.ModuleID.ToString()); + } + if (!input.newTemplate) // existing + { + mc.UpdateModuleSetting(ActiveModule.ModuleID, "template", input.template); + ActiveModule.ModuleSettings["template"] = input.template; + } + else // new + { + try + { + if (!input.fromWeb) // site + { + string oldFolder = HostingEnvironment.MapPath(input.template); + var template = OpenContentUtils.CopyTemplate(ActiveModule.PortalID, oldFolder, input.templateName); + mc.UpdateModuleSetting(ActiveModule.ModuleID, "template", template); + ActiveModule.ModuleSettings["template"] = template; + } + else // web + { + //string fileName = ddlTemplate.SelectedValue; + //string template = OpenContentUtils.ImportFromWeb(ModuleContext.PortalId, fileName, tbTemplateName.Text); + //mc.UpdateModuleSetting(ModuleContext.ModuleId, "template", template); + //ModuleContext.Settings["template"] = template; + //string fileName = ddlTemplate.SelectedValue; + + var template = GithubTemplateUtils.ImportFromGithub(ActiveModule.PortalID, input.template, input.template, input.templateName); + + mc.UpdateModuleSetting(ActiveModule.ModuleID, "template", template); + ActiveModule.ModuleSettings["template"] = template; + } + } + catch (Exception ex) + { + return new ModuleStateDto() + { + Error = ex.Message + }; + } + } + //mc.UpdateModuleSetting(ActiveModule.ModuleID, "detailtabid", ddlDetailPage.SelectedValue); + + + //don't reset settings. Sure they might be invalid, but maybe not. And you can't ever revert. + //mc.DeleteModuleSetting(ModuleContext.ModuleId, "data"); + + var settings = ActiveModule.OpenContentSettings(); + var templateManifest = settings.Template; + if (templateManifest.SettingsNeeded()) + { + var settingsFilename = templateManifest.MainTemplateUri().PhysicalFullDirectory + "\\" + templateManifest.Key.ShortKey + "-data.json"; + if (File.Exists(settingsFilename)) + { + var settingContent = File.ReadAllText(settingsFilename); + mc.UpdateModuleSetting(ActiveModule.ModuleID, "data", settingContent); + ActiveModule.ModuleSettings["data"] = settingContent; + settings = ActiveModule.OpenContentSettings(); + } + } + bool defaultData = false; + if (templateManifest.DataNeeded()) + { + var dataFilename = templateManifest.MainTemplateUri().PhysicalFullDirectory + "\\data.json"; + if (File.Exists(dataFilename)) + { + var module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings); + IDataSource ds = DataSourceManager.GetDataSource(settings.Manifest.DataSource); + var dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID); + ds.Add(dsContext, JObject.Parse(File.ReadAllText(dataFilename))); + defaultData = true; + } + } + + return new ModuleStateDto() + { + SettingsNeeded = templateManifest.SettingsNeeded(), + SettingsDefined = !string.IsNullOrEmpty(settings.Data), + DataNeeded = settings.Template.DataNeeded() && !defaultData, + Template = settings.TemplateKey.ToString(), + Error = "" + }; + } + + public List GetDetailPages(string template, int tabModuleId) + { + string format; + int othermoduleTabId = ActiveModule.TabID; + int moduleId = ActiveModule.ModuleID; + + var listItems = new List(); + var templateUri = new FileUri(template); + var manifest = templateUri.ToTemplateManifest(); + + int othermoduleDetailTabId = -1; + if (manifest.IsListTemplate && manifest.Manifest.Templates.Any(t => t.Value.Detail != null)) + { + if (tabModuleId > 0) + { + var dsModule = (new ModuleController()).GetTabModule(tabModuleId); + othermoduleTabId = dsModule.TabID; + moduleId = dsModule.ModuleID; + othermoduleDetailTabId = GetOtherModuleDetailTabId(othermoduleTabId, moduleId); + //if (othermoduleDetailTabId > 0) + //{ + // //add extra li with "Default Detail Page" directly to dropdown + // format = LogContext.IsLogActive ? "Main Module Detail Page - [{0}]" : "Main Module Detail Page"; + // listItems.Add(new PageDto() + // { + // Text = string.Format(format, othermoduleDetailTabId), + // TabId = othermoduleDetailTabId + // }); + //} + } + + Dictionary tabs = TabController.GetTabPathDictionary(ActiveModule.PortalID, DnnLanguageUtils.GetCurrentCultureCode()); + + foreach (var tabId in tabs.Where(i => IsTabWithModuleWithSameMainModule(i.Value, moduleId) && IsAccessibleTab(i.Value))) + { + string tabname = tabId.Key.Replace("//", " / ").TrimStart(" / "); + + List infoText = new List(); + + if (othermoduleDetailTabId > 0 && tabId.Value == othermoduleDetailTabId) + { + infoText.Add("Main Module Detail"); + } + + if ((othermoduleTabId > 0 && tabId.Value == othermoduleTabId) || (othermoduleTabId == -1 && tabId.Value == ActiveModule.TabID)) + { + //add extra li with "Main Module Page" directly to dropdown + //format = LogContext.IsLogActive ? "Main Module Page - {0} [{1}]" : "Main Module Page"; + //listItems.Add(new PageDto() + //{ + // Text = string.Format(format, tabname, tabId.Value), + // TabId = -1 + //}); + infoText.Add("Main Module "); + } + if (othermoduleTabId > 0 && tabId.Value == ActiveModule.TabID) + { + //add extra li with "CurrentPage" directly to dropdown + //format = LogContext.IsLogActive ? "Current Page - {0} [{1}]" : "Current Page"; + //listItems.Add(new PageDto() + //{ + // Text = string.Format(format, tabname, tabId.Value), + // TabId = tabId.Value + //}); + infoText.Add("Current"); + } + + format = LogContext.IsLogActive ? "{0} [{1}]" : "{0}"; + if (othermoduleTabId > 0 && tabId.Value == ActiveModule.TabID) + { + listItems.Add(new PageDto() + { + Text = string.Format(format, tabname, tabId.Value) + " (Current)", + TabId = tabId.Value + }); + } + else + { + listItems.Add(new PageDto() + { + Text = string.Format(format, tabname, tabId.Value) + (infoText.Any() ? " (" + string.Join(",", infoText.ToArray()) + ")" : ""), + TabId = tabId.Value + }); + } + + } + + return listItems.OrderBy(x => x.Text).ToList(); + } + return listItems; + } + private int GetOtherModuleDetailTabId(int othermoduleTabId, int dataModuleId) + { + //If tab<0 then the data does not come from an other module + if (othermoduleTabId < 0) return 0; + + var moduleInfo = DnnUtils.GetDnnModule(othermoduleTabId, dataModuleId); + if (moduleInfo == null) + { + //This should never happen + App.Services.Logger.Error($"Module {dataModuleId} not found while in GetOtherModuleDetailTabId()"); + return 0; + } + + var mainModuleSettings = moduleInfo.OpenContentSettings(); + + if (mainModuleSettings == null) return 0; + if (mainModuleSettings.TabId > -1) return 0; //the other module gets his data also from another module?! Let's not support that. + + return mainModuleSettings.DetailTabId == -1 ? moduleInfo.TabID : mainModuleSettings.DetailTabId; + } + private bool IsAccessibleTab(int tabId) + { + //ignore redirected tabs + var tabinfo = TabController.Instance.GetTab(tabId, ActiveModule.PortalID); + return tabinfo.IsPublishedTab(); + } + + private bool IsTabWithModuleWithSameMainModule(int tabId, int datamoduleId) + { + //only tabs with oc-module with main-moduleId= CurrentMainModuleId + var tabinfo = TabController.Instance.GetTab(tabId, ActiveModule.PortalID); + foreach (var item in tabinfo.ChildModules) + { + ModuleInfo moduleInfo = item.Value; + if (moduleInfo.ModuleDefinition.FriendlyName == App.Config.Opencontent && !moduleInfo.IsDeleted) + { + if (moduleInfo.OpenContentSettings().GetModuleId(moduleInfo.ModuleID) == datamoduleId) + { + return true; + } + } + } + return false; + } + } + + public class PageDto + { + public int TabId { get; set; } + public string Text { get; set; } + } + + public class SaveDto + { + public string template { get; set; } + public bool otherModule { get; set; } + public int tabModuleId { get; set; } + public bool newTemplate { get; set; } + public bool fromWeb { get; set; } + public string templateName { get; set; } + } +} + +public class ModuleStateDto +{ + public bool SettingsNeeded { get; set; } + public bool SettingsDefined { get; set; } + public bool DataNeeded { get; internal set; } + public string Template { get; set; } + public string Error { get; set; } +} + +public class TemplateDto +{ + public string Text { get; set; } + public string Value { get; set; } +} + +public class ModuleDto +{ + public string Text { get; set; } + public int TabModuleId { get; set; } +} + + diff --git a/OpenContent/Components/Manifest/OpenContentModuleConfig.cs b/OpenContent/Components/Manifest/OpenContentModuleConfig.cs index 2c547340..b3f1da44 100644 --- a/OpenContent/Components/Manifest/OpenContentModuleConfig.cs +++ b/OpenContent/Components/Manifest/OpenContentModuleConfig.cs @@ -120,6 +120,7 @@ internal string EditUrl(int moduleId) public string HostName => _portalSettings.PortalAlias.HTTPAlias; public bool PreviewEnabled => _portalSettings != null && (_portalSettings.UserMode == PortalSettings.Mode.View); + public string PortalName => _portalSettings.PortalName; #endregion } diff --git a/OpenContent/Components/Render/ModelFactoryBase.cs b/OpenContent/Components/Render/ModelFactoryBase.cs index 80146c31..2800ba0c 100644 --- a/OpenContent/Components/Render/ModelFactoryBase.cs +++ b/OpenContent/Components/Render/ModelFactoryBase.cs @@ -280,6 +280,7 @@ protected void ExtendModel(JObject model, bool onlyData, bool onlyMainData) context["MainUrl"] = _module.GetUrl(_detailTabId, GetCurrentCultureCode()); context["HomeDirectory"] = _module.HomeDirectory; context["HTTPAlias"] = _module.HostName; + context["PortalName"] = _module.PortalName; } } diff --git a/OpenContent/Components/Render/RenderEngine.cs b/OpenContent/Components/Render/RenderEngine.cs index 82ebeba1..90c54ebf 100644 --- a/OpenContent/Components/Render/RenderEngine.cs +++ b/OpenContent/Components/Render/RenderEngine.cs @@ -223,10 +223,13 @@ private static void IncludeResourses(Page page, RenderInfo renderInfo) { if (template.MainTemplateUri() != null) { - var cssfilename = new FileUri(Path.ChangeExtension(template.MainTemplateUri().FilePath, "css")); - if (cssfilename.FileExists) + if (!App.Services.CreateGlobalSettingsRepository(PortalSettings.Current.PortalId).GetCompositeCss()) { - App.Services.ClientResourceManager.RegisterStyleSheet(page, cssfilename.UrlFilePath); + var cssfilename = new FileUri(Path.ChangeExtension(template.MainTemplateUri().FilePath, "css")); + if (cssfilename.FileExists) + { + App.Services.ClientResourceManager.RegisterStyleSheet(page, cssfilename.UrlFilePath); + } } var jsfilename = new FileUri(Path.ChangeExtension(template.MainTemplateUri().FilePath, "js")); if (jsfilename.FileExists) diff --git a/OpenContent/Components/ResourceController.cs b/OpenContent/Components/ResourceController.cs new file mode 100644 index 00000000..6b132e91 --- /dev/null +++ b/OpenContent/Components/ResourceController.cs @@ -0,0 +1,78 @@ +#region Copyright + +// +// Copyright (c) 2015-2017 +// by Satrabel +// + +#endregion + +#region Using Statements + +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; +using DotNetNuke.Web.Api; +using Newtonsoft.Json.Linq; +using System.IO; +using DotNetNuke.Security; +using Satrabel.OpenContent.Components.Json; +using DotNetNuke.Entities.Modules; +using System.Collections.Generic; +using DotNetNuke.Services.Localization; +using Satrabel.OpenContent.Components.Alpaca; +using Satrabel.OpenContent.Components.Manifest; +using Satrabel.OpenContent.Components.Datasource; +using Satrabel.OpenContent.Components.Dnn; +using DotNetNuke.Entities.Tabs; +using System.Web.Hosting; +using Satrabel.OpenContent.Components.Logging; +using System.Text; +using ClientDependency.Core.CompositeFiles; +using System.Net.Http.Headers; + +#endregion + +namespace Satrabel.OpenContent.Components +{ + public class ResourceController : DnnApiController + { + [AllowAnonymous] + [HttpGet] + public HttpResponseMessage Css(int tabid, int portalid) + { + List templates = new List(); + StringBuilder css = new StringBuilder(); + var tab = TabController.Instance.GetTab(tabid, portalid); + foreach (ModuleInfo module in tab.Modules.Cast().Where(m => m.ModuleDefinition.DefinitionName == App.Config.Opencontent && !m.IsDeleted)) + { + var moduleSettings = module.OpenContentSettings(); + if (moduleSettings.Template != null) + { + var filePath = moduleSettings.Template.MainTemplateUri().FilePath; + if (!templates.Contains(filePath)) + { + var cssfilename = new FileUri(Path.ChangeExtension(filePath, "css")); + if (cssfilename.FileExists) + { + if (UserInfo.IsSuperUser) + { + css.Append("/*").Append((cssfilename.FilePath)).AppendLine("*/"); + } + css.AppendLine(CssMin.CompressCSS(File.ReadAllText(cssfilename.PhysicalFilePath))); + } + templates.Add(filePath); + } + } + } + var res = new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StringContent(css.ToString(), Encoding.UTF8, "text/css") + }; + res.Headers.CacheControl = new CacheControlHeaderValue { MaxAge = new TimeSpan(365, 0, 0, 0), Public=true, Private=false }; + return res; + } + } +} \ No newline at end of file diff --git a/OpenContent/Components/Settings/DnnGlobalSettingsRepository.cs b/OpenContent/Components/Settings/DnnGlobalSettingsRepository.cs index 372017ea..d5b52638 100644 --- a/OpenContent/Components/Settings/DnnGlobalSettingsRepository.cs +++ b/OpenContent/Components/Settings/DnnGlobalSettingsRepository.cs @@ -19,6 +19,8 @@ public class DnnGlobalSettingsRepository : IGlobalSettingsRepository private const string SETTINGS_GOOGLE_API_KEY = "OpenContent_GoogleApiKey"; private const string SETTINGS_LEGACY_HANDLEBARS = "OpenContent_LegacyHandlebars"; private const bool SETTINGS_DEFAULT_LEGACY_HANDLEBARS = false; + private const string SETTINGS_COMPOSITE_CSS = "OpenContent_CompositeCss"; + private const bool SETTINGS_DEFAULT_COMPOSITE_CSS = false; private const string SETTINGS_GITHUB_REPOSITORY = "OpenContent_GithubRepository"; private const string DEFAULT_GITHUB_REPOSITORY = "sachatrauwaen/OpenContent-Templates"; @@ -106,6 +108,21 @@ public bool GetLegacyHandlebars() return SETTINGS_DEFAULT_LEGACY_HANDLEBARS; } + public void SetCompositeCss(bool compositeCss) + { + PortalController.UpdatePortalSetting(_portalId, SETTINGS_COMPOSITE_CSS, compositeCss.ToString(), true); + } + + public bool GetCompositeCss() + { + if (_portalId == -1) return SETTINGS_DEFAULT_COMPOSITE_CSS; + var LegacyHandlebarsSetting = PortalController.GetPortalSetting(SETTINGS_COMPOSITE_CSS, _portalId, string.Empty); + bool LegacyHandlebars; + if (!string.IsNullOrWhiteSpace(LegacyHandlebarsSetting) && bool.TryParse(LegacyHandlebarsSetting, out LegacyHandlebars)) + return LegacyHandlebars; + return SETTINGS_DEFAULT_COMPOSITE_CSS; + } + public void SetLegacyHandlebars(bool LegacyHandlebars) { PortalController.UpdatePortalSetting(_portalId, SETTINGS_LEGACY_HANDLEBARS, LegacyHandlebars.ToString(), true); diff --git a/OpenContent/Components/Settings/IGlobalSettingsRepository.cs b/OpenContent/Components/Settings/IGlobalSettingsRepository.cs index 616aecf9..606016d4 100644 --- a/OpenContent/Components/Settings/IGlobalSettingsRepository.cs +++ b/OpenContent/Components/Settings/IGlobalSettingsRepository.cs @@ -22,6 +22,10 @@ public interface IGlobalSettingsRepository bool GetLegacyHandlebars(); void SetLegacyHandlebars(bool @checked); + bool GetCompositeCss(); + void SetCompositeCss(bool @checked); + + bool GetAutoAttach(); void SetAutoAttach(string value); diff --git a/OpenContent/Components/Utils/OpenContentUtils.cs b/OpenContent/Components/Utils/OpenContentUtils.cs index 8009e76e..2faf7ffc 100644 --- a/OpenContent/Components/Utils/OpenContentUtils.cs +++ b/OpenContent/Components/Utils/OpenContentUtils.cs @@ -19,6 +19,7 @@ using Satrabel.OpenContent.Components.Datasource; using Satrabel.OpenContent.Components.Lucene.Config; using UserRoleInfo = Satrabel.OpenContent.Components.Querying.UserRoleInfo; +using DotNetNuke.UI.Skins; namespace Satrabel.OpenContent.Components { @@ -49,7 +50,14 @@ public static string GetSiteTemplateFolder(PortalSettings portalSettings, string } public static string GetSkinTemplateFolder(PortalSettings portalSettings, string moduleSubDir) { - return portalSettings.ActiveTab.SkinPath + moduleSubDir + "/Templates/"; + var SkinPath = portalSettings.ActiveTab.SkinPath; + if (string.IsNullOrEmpty(SkinPath)) + { + var SkinSrc = SkinController.FormatSkinSrc(!string.IsNullOrEmpty(portalSettings.ActiveTab.SkinSrc) ? portalSettings.ActiveTab.SkinSrc : portalSettings.DefaultPortalSkin, portalSettings); + SkinPath = SkinController.FormatSkinPath(SkinSrc); + //SkinPath = DotNetNuke.Entities.Tabs.TabController.Instance.GetTab(portalSettings.ActiveTab.TabID, portalSettings.PortalId).SkinPath; + } + return SkinPath + moduleSubDir + "/Templates/"; } public static List GetTemplates(PortalSettings portalSettings, int moduleId, string selectedTemplate, string moduleSubDir) @@ -196,81 +204,84 @@ public static List ListOfTemplatesFiles(PortalSettings portalSettings, } } // skin - basePath = HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir)); - if (Directory.Exists(basePath)) + //if (!string.IsNullOrEmpty(portalSettings.ActiveTab.SkinPath)) { - dirs = Directory.GetDirectories(basePath); - if (otherModuleTemplate != null /*&& */ ) + basePath = HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir)); + if (Directory.Exists(basePath)) { - var selDir = otherModuleTemplate.PhysicalFullDirectory; - if (!dirs.Contains(selDir)) + dirs = Directory.GetDirectories(basePath); + if (otherModuleTemplate != null /*&& */ ) { - selDir = Path.GetDirectoryName(selDir); + var selDir = otherModuleTemplate.PhysicalFullDirectory; + if (!dirs.Contains(selDir)) + { + selDir = Path.GetDirectoryName(selDir); + } + if (dirs.Contains(selDir)) + dirs = new string[] { selDir }; + else + dirs = new string[] { }; } - if (dirs.Contains(selDir)) - dirs = new string[] { selDir }; - else - dirs = new string[] { }; - } - foreach (var dir in dirs) - { - string templateCat = "Skin"; + foreach (var dir in dirs) + { + string templateCat = "Skin"; - IEnumerable files = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories); - IEnumerable manifestfiles = files.Where(s => s.EndsWith("manifest.json")); - var manifestTemplateFound = false; + IEnumerable files = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories); + IEnumerable manifestfiles = files.Where(s => s.EndsWith("manifest.json")); + var manifestTemplateFound = false; - if (manifestfiles.Any()) - { - foreach (string manifestFile in manifestfiles) + if (manifestfiles.Any()) { - FileUri manifestFileUri = FileUri.FromPath(manifestFile); - var manifest = ManifestUtils.LoadManifestFileFromCacheOrDisk(manifestFileUri); - if (manifest != null && manifest.HasTemplates) + foreach (string manifestFile in manifestfiles) { - manifestTemplateFound = true; - foreach (var template in manifest.Templates) + FileUri manifestFileUri = FileUri.FromPath(manifestFile); + var manifest = ManifestUtils.LoadManifestFileFromCacheOrDisk(manifestFileUri); + if (manifest != null && manifest.HasTemplates) { - FileUri templateUri = new FileUri(manifestFileUri.FolderPath, template.Key); - string templateName = Path.GetDirectoryName(manifestFile).Substring(basePath.Length).Replace("\\", " / "); - if (!String.IsNullOrEmpty(template.Value.Title)) + manifestTemplateFound = true; + foreach (var template in manifest.Templates) { - templateName = templateName + " - " + template.Value.Title; + FileUri templateUri = new FileUri(manifestFileUri.FolderPath, template.Key); + string templateName = Path.GetDirectoryName(manifestFile).Substring(basePath.Length).Replace("\\", " / "); + if (!String.IsNullOrEmpty(template.Value.Title)) + { + templateName = templateName + " - " + template.Value.Title; + } + var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + templateName, templateUri.FilePath); + if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) + { + item.Selected = true; + } + lst.Add(item); } - var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + templateName, templateUri.FilePath); - if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) - { - item.Selected = true; - } - lst.Add(item); } } } - } - if (!manifestTemplateFound) - { - var scriptfiles = - Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories) - .Where(s => s.EndsWith(".cshtml") || s.EndsWith(".vbhtml") || s.EndsWith(".hbs")); - foreach (string script in scriptfiles) + if (!manifestTemplateFound) { - string scriptName = script.Remove(script.LastIndexOf(".")).Replace(basePath, ""); - if (scriptName.ToLower().EndsWith("template")) scriptName = scriptName.Remove(scriptName.LastIndexOf("\\")); - else scriptName = scriptName.Replace("\\", " - "); - - FileUri templateUri = FileUri.FromPath(script); - var item = new ListItem(templateCat + " : " + scriptName, templateUri.FilePath); - if (selectedTemplate != null - && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) + var scriptfiles = + Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories) + .Where(s => s.EndsWith(".cshtml") || s.EndsWith(".vbhtml") || s.EndsWith(".hbs")); + foreach (string script in scriptfiles) { - item.Selected = true; + string scriptName = script.Remove(script.LastIndexOf(".")).Replace(basePath, ""); + if (scriptName.ToLower().EndsWith("template")) scriptName = scriptName.Remove(scriptName.LastIndexOf("\\")); + else scriptName = scriptName.Replace("\\", " - "); + + FileUri templateUri = FileUri.FromPath(script); + var item = new ListItem(templateCat + " : " + scriptName, templateUri.FilePath); + if (selectedTemplate != null + && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) + { + item.Selected = true; + } + lst.Add(item); } - lst.Add(item); } } - } + } } return lst; } @@ -313,21 +324,24 @@ public static List GetTemplates(PortalSettings portalSettings, int mod lst.Add(item); } // skin - basePath = HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir)); - if (Directory.Exists(basePath)) + //if (!string.IsNullOrEmpty(portalSettings.ActiveTab.SkinPath)) { - foreach (var dir in Directory.GetDirectories(basePath)) + basePath = HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir)); + if (Directory.Exists(basePath)) { - string templateCat = "Skin"; - string scriptName = dir; - scriptName = templateCat + ":" + scriptName.Substring(scriptName.LastIndexOf("\\") + 1); - string scriptPath = FolderUri.ReverseMapPath(dir); - var item = new ListItem(scriptName, scriptPath); - if (selectedTemplate != null && scriptPath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) + foreach (var dir in Directory.GetDirectories(basePath)) { - item.Selected = true; + string templateCat = "Skin"; + string scriptName = dir; + scriptName = templateCat + ":" + scriptName.Substring(scriptName.LastIndexOf("\\") + 1); + string scriptPath = FolderUri.ReverseMapPath(dir); + var item = new ListItem(scriptName, scriptPath); + if (selectedTemplate != null && scriptPath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant()) + { + item.Selected = true; + } + lst.Add(item); } - lst.Add(item); } } return lst; diff --git a/OpenContent/EditData.ascx b/OpenContent/EditData.ascx index 441ba0bc..ca191ff8 100644 --- a/OpenContent/EditData.ascx +++ b/OpenContent/EditData.ascx @@ -29,7 +29,7 @@
  • -
  • +
  • @@ -46,6 +46,10 @@
  • +
  • + +
  • + + + \ No newline at end of file diff --git a/OpenContent/View.ascx.cs b/OpenContent/View.ascx.cs index fb9e69b4..46848fc5 100644 --- a/OpenContent/View.ascx.cs +++ b/OpenContent/View.ascx.cs @@ -127,12 +127,30 @@ protected override void OnLoad(EventArgs e) DotNetNuke.UI.Skins.Skin.AddModuleMessage(this, ex.Message, DotNetNuke.UI.Skins.Controls.ModuleMessage.ModuleMessageType.RedError); } } + if (App.Services.CreateGlobalSettingsRepository(ModuleContext.PortalId).GetCompositeCss()) + { + //var absUrl = Utils.GetFullUrl(Request, Page.ResolveUrl($"~/DesktopModules/OpenContent/API/Resource/Css?tabid={activeTab.TabID}&portalid={activeTab.PortalID}")); + //var absUrl = Utils.GetFullUrl(Request, Page.ResolveUrl($"~/API/OpenContent/Resource/Css?tabid={ModuleContext.TabId}&portalid={ModuleContext.PortalId}")); + //App.Services.ClientResourceManager.RegisterStyleSheet(Page, absUrl); + + //var cssControl = Page.Header.FindControl("OpenContentCss"); + //if (cssControl == null) + //{ + // System.Web.UI.HtmlControls.HtmlLink css = new System.Web.UI.HtmlControls.HtmlLink(); + // css.Href = Page.ResolveUrl($"~/API/OpenContent/Resource/Css?tabid={ModuleContext.TabId}&portalid={ModuleContext.PortalId}&cdv={ModuleContext.PortalSettings.CdfVersion}"); + // css.Attributes["rel"] = "stylesheet"; + // css.Attributes["type"] = "text/css"; + // css.ID = "OpenContentCss"; + // Page.Header.Controls.Add(css); + //} + } } protected override void OnPreRender(EventArgs e) { //base.OnPreRender(e); //pHelp.Visible = false; + pInit.Visible = false; GenerateAndRenderDemoData(); if (_renderinfo.Template != null && !string.IsNullOrEmpty(_renderinfo.OutputString)) { @@ -153,7 +171,7 @@ protected override void OnPreRender(EventArgs e) StringBuilder logScript = new StringBuilder(); //logScript.AppendLine(""); @@ -246,7 +264,7 @@ private void AutoEditMode() if (defaultMode == PortalSettings.Mode.Edit) { string setting = Convert.ToString(Personalization.GetProfile("Usability", "UserMode" + PortalSettings.Current.PortalId)); - if (!IsPageAdmin() & IsModuleAdmin()) + //if (!IsPageAdmin() & IsModuleAdmin()) { if (setting != "EDIT") { @@ -365,10 +383,16 @@ private void GenerateAndRenderDemoData() private void RenderInitForm() { - TemplateInit ti = (TemplateInit)TemplateInitControl; - ti.RenderInitForm(); + //TemplateInit ti = (TemplateInit)TemplateInitControl; + //ti.RenderInitForm(); + pInit.Visible = true; + //App.Services.ClientResourceManager.RegisterStyleSheet(page, cssfilename.UrlFilePath); + App.Services.ClientResourceManager.RegisterScript(Page, "~/DesktopModules/OpenContent/js/vue/vue.js"); + } + public string Resource(string key) + { + return Localization.GetString(key + ".Text", LocalResourceFile); } - #endregion #region IActionable diff --git a/OpenContent/View.ascx.designer.cs b/OpenContent/View.ascx.designer.cs index a1cceb98..43afb9e0 100644 --- a/OpenContent/View.ascx.designer.cs +++ b/OpenContent/View.ascx.designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ -// -// This code was generated by a tool. +// +// Ce code a été généré par un outil. // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. +// //------------------------------------------------------------------------------ namespace Satrabel.OpenContent { @@ -13,12 +13,30 @@ namespace Satrabel.OpenContent { public partial class View { /// - /// TemplateInitControl control. + /// Contrôle TemplateInitControl. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Champ généré automatiquement. + /// Pour modifier, déplacez la déclaration de champ du fichier de concepteur dans le fichier code-behind. /// protected global::System.Web.UI.UserControl TemplateInitControl; + + /// + /// Contrôle pInit. + /// + /// + /// Champ généré automatiquement. + /// Pour modifier, déplacez la déclaration de champ du fichier de concepteur dans le fichier code-behind. + /// + protected global::System.Web.UI.WebControls.Panel pInit; + + /// + /// Contrôle pVue. + /// + /// + /// Champ généré automatiquement. + /// Pour modifier, déplacez la déclaration de champ du fichier de concepteur dans le fichier code-behind. + /// + protected global::System.Web.UI.WebControls.Panel pVue; } } diff --git a/OpenContent/js/alpacaengine.js b/OpenContent/js/alpacaengine.js index ac6790e0..d9dc6453 100644 --- a/OpenContent/js/alpacaengine.js +++ b/OpenContent/js/alpacaengine.js @@ -99,8 +99,7 @@ alpacaEngine.engine = function (config) { var windowTop = parent; //needs to be assign to a varaible for Opera compatibility issues. var popup = windowTop.jQuery("#iPopUp"); if (popup.length > 0 && windowTop.WebForm_GetElementById('dnn_ctr' + self.moduleId + '_View__UP')) { - windowTop.__doPostBack('dnn_ctr' + self.moduleId + '_View__UP', ''); - //$('#'+'dnn_ctr' + self.moduleId + '_View__UP').click(); + setTimeout(function () { windowTop.__doPostBack('dnn_ctr' + self.moduleId + '_View__UP', ''); }, 1); dnnModal.closePopUp(false, ""); } else { @@ -266,15 +265,13 @@ alpacaEngine.engine = function (config) { data: JSON.stringify(postData), beforeSend: self.sf.setModuleHeaders }).done(function (data) { - //alert('ok:' + data); //self.loadSettings(); //window.location.href = href; if (data.isValid) { var windowTop = parent; //needs to be assign to a varaible for Opera compatibility issues. var popup = windowTop.jQuery("#iPopUp"); if (popup.length > 0 && windowTop.WebForm_GetElementById('dnn_ctr' + self.moduleId + '_View__UP')) { - windowTop.__doPostBack('dnn_ctr' + self.moduleId + '_View__UP', ''); - //$('#' + 'dnn_ctr' + self.moduleId + '_View__UP').click(); + setTimeout(function () { windowTop.__doPostBack('dnn_ctr' + self.moduleId + '_View__UP', ''); }, 1); dnnModal.closePopUp(false, href); } else { diff --git a/OpenContent/js/ckeditor/config.js b/OpenContent/js/ckeditor/config.js new file mode 100644 index 00000000..fed42311 --- /dev/null +++ b/OpenContent/js/ckeditor/config.js @@ -0,0 +1,10 @@ +/** + * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see https://ckeditor.com/legal/ckeditor-oss-license + */ + +CKEDITOR.editorConfig = function( config ) { + // Define changes to default configuration here. For example: + // config.language = 'fr'; + // config.uiColor = '#AADC6E'; +}; diff --git a/OpenContent/js/ckeditor/plugins/dnnpages/plugin.js b/OpenContent/js/ckeditor/plugins/dnnpages/plugin.js index d631b389..cd538355 100644 --- a/OpenContent/js/ckeditor/plugins/dnnpages/plugin.js +++ b/OpenContent/js/ckeditor/plugins/dnnpages/plugin.js @@ -110,7 +110,7 @@ // Pass the link to be selected along with event data. evt.data.link = element; - } else if ( CKEDITOR.link.dnnpages.tryRestoreFakeAnchor( editor, element ) ) { + } else if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) ) { evt.data.dialog = 'anchor'; } } @@ -164,7 +164,7 @@ var anchor = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ); - if (!anchor && !(anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) + if ( !anchor && !( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) return null; var menu = {}; @@ -460,7 +460,7 @@ */ parseLinkAttributes: function( editor, element ) { var href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '', - compiledProtectionFunction = editor.plugins.link.compiledProtectionFunction, + compiledProtectionFunction = editor.plugins.dnnpages.compiledProtectionFunction, emailProtection = editor.config.emailProtection, javascriptMatch, emailMatch, anchorMatch, urlMatch, telMatch, retval = {}; diff --git a/OpenContent/js/ckeditor/styles.js b/OpenContent/js/ckeditor/styles.js new file mode 100644 index 00000000..69b040ab --- /dev/null +++ b/OpenContent/js/ckeditor/styles.js @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin which shows the Styles drop-down +// list containing all styles in the editor toolbar. Other plugins, like +// the "div" plugin, use a subset of the styles for their features. +// +// If you do not have plugins that depend on this file in your editor build, you can simply +// ignore it. Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. +// +// For more information refer to: https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules + +CKEDITOR.stylesSet.add( 'default', [ + /* Block styles */ + + // These styles are already available in the "Format" drop-down list ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles drop-down list, removing them from the toolbar. + // (This requires the "stylescombo" plugin.) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object styles */ + + { + name: 'Styled Image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled Image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact Table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } }, + + /* Widget styles */ + + { name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } }, + { name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } }, + + { name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } }, + + { name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } }, + + { name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' }, + { name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' }, + { name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' }, + { name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' }, + { name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' }, + + // Adding space after the style name is an intended workaround. For now, there + // is no option to create two styles with the same name for different widget types. See https://dev.ckeditor.com/ticket/16664. + { name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' }, + { name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' }, + { name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' }, + { name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' }, + { name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' } + +] ); + diff --git a/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.css.map b/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.css.map new file mode 100644 index 00000000..a5582bbb --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["base/","base/jquery.fonticonpicker.scss","partials/_mixins.scss"],"names":[],"mappings":"AAAA;;;;;;;GAAA;ACUA,WACC,uBAAyB,AACzB,6CAA+C,AAC/C,sQAGoE,AACpE,gBAAmB,AACnB,iBAAkB,CAAA,AAGnB,gBAUC,qBAAqB,AACrB,sBAAsB,AACtB,eAAgB,CAgMhB,AA5MD,8HCXG,+BAAA,AAAuB,sBAAA,CACvB,ADUH,kBCLC,aAAa,AACb,oHAAwH,AACxH,SAAS,AACT,UAAU,AACV,SAAS,AACT,eAAe,AACf,uBAAwB,CDMvB,AAPF,iCAgBE,WAAW,AACX,YAAY,AACZ,cAAa,AACb,kBAAkB,AAClB,eAAe,AACf,UAAW,CAMX,AA3BF,mCAwBG,iBAAiB,AACjB,iBAAkB,CAClB,AA1BH,+BA+BE,cAAc,AACd,WAAW,AACX,YAAY,AACZ,WAAW,AACX,iBAAkB,CAOlB,AA1CF,iCAsCG,iBAAiB,AACjB,eAAe,AACf,cAAe,CACf,AAzCH,yEA+CE,kBAAkB,AAClB,cAAc,AACd,YAAY,AACZ,WAAY,CACZ,AAnDF,gCAuDE,gBAAe,AACf,YAAY,AACZ,YAAY,AACZ,YAAY,AACZ,yBAAyB,AACzB,iBAAkB,CAClB,AA7DF,0BAiEE,YAAY,AACZ,WAAY,CACZ,AAnEF,4FAwEE,SAAS,AACT,iBAAiB,AACjB,kBAAkB,AAClB,WAAW,AAEX,8BAA8B,AAC9B,sBAAsB,AACtB,kBAAkB,AAClB,eAAe,AACf,aAAc,CACd,AAlFF,0CAoFE,WAAY,CAIZ,AAxFF,iDAsFG,YAAa,CACb,AAvFH,iDA4FE,wBAAyB,CA5F3B,AA6FE,yFADA,wBAAyB,CA5F3B,AA6FE,mCADA,wBAAyB,CACzB,AA7FF,iCAiGE,iBAAkB,CAMlB,AAvGF,mCAmGG,kBAAkB,AAClB,WAAW,AACX,OAAQ,CACR,AAtGH,qCA2GE,WAAW,AAEX,8BAA8B,AAC9B,sBAAsB,AACtB,WAAY,CAUZ,AAzHF,8CAmHG,eAAc,AACd,cAAa,AACb,eAAc,AACd,kBAAiB,AACjB,UAAU,CACV,AAxHH,yBA6HE,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,iBAAiB,AACjB,kBAAkB,AAClB,eAAe,AACf,mBAAmB,AACnB,WAAY,CACZ,AArIF,iCAyIE,iBAAiB,AACjB,kBAAsB,AACtB,kBAAkB,AAElB,cAAe,CAmBf,AAhKF,mCA+IG,cAAe,CACf,AAhJH,kDAmJG,WAAY,CAIZ,AAvJH,oDAqJI,cAAe,CACf,AAtJJ,iDA0JG,eAAe,AACf,UAAW,CACX,AA5JH,oCA8JG,iBAAkB,CAClB,AA/JH,6CAoKE,UAAW,CACX,AArKF,uFA0KE,uBAAyB,AACzB,kBAAkB,AAClB,gBAAmB,AACnB,WAAW,AACX,qBAAqB,AACrB,wBAAwB,AACxB,UAAU,AACV,kBAAkB,AAClB,kBAAkB,AAClB,oBAAoB,AACpB,oBAAoB,AACpB,gBAAgB,AAChB,gBAAiB,CACjB,AAvLF,wCAyL2B,gBAAgB,AAAE,cAAe,CAAK,AAzLjE,wCA2L2B,gBAAgB,AAAE,cAAe,CAAK,AA3LjE,uCA6L0B,gBAAgB,AAAE,aAAc,CAAK,AA7L/D,0CA+L6B,eAAgB,CAAK,AA/LlD,wCAiM2B,eAAgB,CAAK,AAjMhD,0CAmM6B,eAAgB,CAAK,AAnMlD,2CAqM8B,eAAgB,CAAK,AArMnD,uCAuM0B,eAAgB,CAAK,AAvM/C,gCAyME,0CAAA,AAAkC,kCAAA,AAClC,oBAAqB,CACrB,AAGF,wBACC,GACC,+BAAA,AAAuB,sBAAA,CAAA,AAGxB,GACC,iCAAA,AAAyB,wBAAA,CAAA,CAN3B,AAM2B,gBAL1B,GACC,+BAAA,AAAuB,sBAAA,CAAA,AAGxB,GACC,iCAAA,AAAyB,wBAAA,CAAA,CAAA","file":"jquery.fonticonpicker.css","sourcesContent":[null,"/**\n * CSS file for fontIconPicker\n * This file holds the basic CSS\n * {@link https://github.com/micc83/fontIconPicker}\n */\n\n@import '../partials/variables';\n@import '../partials/mixins';\n\n/* Icons Fonts */\n@font-face {\n\tfont-family: 'iconpicker';\n\tsrc: url('../../fonts/iconpicker.eot?90190138');\n\tsrc: url('../../fonts/iconpicker.eot?90190138#iefix') format('embedded-opentype'),\n\t\turl('../../fonts/iconpicker.woff?90190138') format('woff'),\n\t\turl('../../fonts/iconpicker.ttf?90190138') format('truetype'),\n\t\turl('../../fonts/iconpicker.svg?90190138#iconpicker') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n.#{$main-selector} {\n\t/** Reset box sizing */\n\t@include box-sizing();\n\n\t/** Reset (thx to Eric A. and Kathryn S. Meyer) */\n\t* {\n\t\t@include reset();\n\t}\n\n\t/* Display */\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\ttext-align: left;\n\n\t/** Selector open button */\n\t.selector-button {\n\t\twidth: 39px;\n\t\theight: 100%;\n\t\tdisplay:block;\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\t\tfloat: left;\n\t\t/* Selector open button icon */\n\t\ti {\n\t\t\tline-height: 38px;\n\t\t\ttext-align: center;\n\t\t}\n\t}\n\n\t/* Selected icon container */\n\t.selected-icon {\n\t\tdisplay: block;\n\t\twidth: 60px;\n\t\theight: 100%;\n\t\tfloat: left;\n\t\ttext-align: center;\n\t\t/* Selected icon */\n\t\ti {\n\t\t\tline-height: 40px;\n\t\t\tfont-size: 18px;\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t/* IconPicker Popup Wrap */\n\t.selector-popup-wrap,\n\t&.selector-popup-wrap {\n\t\tposition: absolute;\n\t\tz-index: 10000;\n\t\twidth: 352px;\n\t\theight: auto;\n\t}\n\n\t/** selector popup */\n\t.selector-popup {\n\t\tmargin-top:-1px;\n\t\tpadding: 5px;\n\t\twidth: 342px;\n\t\theight: auto;\n\t\tbackground-color: #fefefe;\n\t\tposition: absolute;\n\t}\n\n\t/* Icon selector */\n\t.selector {\n\t\twidth: 100px;\n\t\theight: 40px;\n\t}\n\n\t/* Search input & category selector */\n\t.selector-search input[type=\"text\"],\n\t.selector-category select {\n\t\tborder: 0;\n\t\tline-height: 20px;\n\t\tpadding: 10px 2.5%;\n\t\twidth: 100%;\n\t\t-moz-box-sizing: border-box;\n\t\t-webkit-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t\tmargin-bottom: 5px;\n\t\tfont-size: 12px;\n\t\tdisplay: block; /* Fixes the positioning inside hidden/floated/text-aligned elements, where it would leave a margin */\n\t}\n\t.selector-category select {\n\t\theight: 40px;\n\t\toption {\n\t\t\tpadding: 10px;\n\t\t}\n\t}\n\n\t/* Search input placeholder */\n\tinput::placeholder {\n\t\ttext-transform: uppercase;\n\t}\n\n\t/* Search and cancel icon */\n\t.selector-search {\n\t\tposition: relative;\n\t\ti {\n\t\t\tposition: absolute;\n\t\t\tright: 10px;\n\t\t\ttop: 7px;\n\t\t}\n\t}\n\n\t/* Icon Container inside Popup */\n\t.fip-icons-container {\n\t\twidth: 100%;\n\t\t-moz-box-sizing: border-box;\n\t\t-webkit-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t\tpadding: 5px;\n\n\t\t/* Icon container loading */\n\t\t.loading {\n\t\t\tfont-size:24px;\n\t\t\tmargin:0 auto;\n\t\t\tpadding:20px 0;\n\t\t\ttext-align:center;\n\t\t\twidth:100%;\n\t\t}\n\t}\n\n\t/* Single icon box */\n\t.fip-box {\n\t\tdisplay: inline-block;\n\t\tmargin: 2px;\n\t\twidth: 60px;\n\t\tline-height: 42px;\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\t\tvertical-align: top;\n\t\theight: 40px;\n\t}\n\n\t/* Popup footer */\n\t.selector-footer {\n\t\tline-height: 12px;\n\t\tpadding: 5px 5px 0 5px;\n\t\ttext-align: center;\n\t\t/* Pagination and footer icons */\n\t\tfont-size: 14px;\n\t\ti {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t/** Pagination arrows container */\n\t\t.selector-arrows {\n\t\t\tfloat: right;\n\t\t\ti {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t\t/** Pagination text */\n\t\t.selector-pages {\n\t\t\tfont-size: 11px;\n\t\t\tfloat: left;\n\t\t}\n\t\tem {\n\t\t\tfont-style: italic;\n\t\t}\n\t}\n\n\t/* No icons found */\n\t.icons-picker-error i:before {\n\t\tcolor: #eee;\n\t}\n\n\t/** Icons */\n\t[class^=\"fip-icon-\"]:before,\n\t[class*=\" fip-icon-\"]:before {\n\t\tfont-family: \"iconpicker\"; // stylelint-disable-line\n\t\tfont-style: normal;\n\t\tfont-weight: normal;\n\t\tspeak: none; // stylelint-disable-line\n\t\tdisplay: inline-block;\n\t\ttext-decoration: inherit;\n\t\twidth: 1em;\n\t\tmargin-right: .2em;\n\t\ttext-align: center;\n\t\tfont-variant: normal;\n\t\ttext-transform: none;\n\t\tline-height: 1em;\n\t\tmargin-left: .2em;\n\t}\n\t/* Search icon */\n\t.fip-icon-search:before { content: '\\e812';cursor: default; }\n\t/* Cancel search icon */\n\t.fip-icon-cancel:before { content: '\\e814';cursor: pointer; }\n\t/* No icon set */\n\t.fip-icon-block:before { content: '\\e84e';color: #fed0d0; }\n\t/* Open picker icon */\n\t.fip-icon-down-dir:before { content: '\\e800'; }\n\t/* Close picker icon */\n\t.fip-icon-up-dir:before { content: '\\e813'; }\n\t/* Prev page icon */\n\t.fip-icon-left-dir:before { content: '\\e801'; }\n\t/* Next page icon */\n\t.fip-icon-right-dir:before { content: '\\e802'; }\n\t/* Loading icon */\n\t.fip-icon-spin3:before { content: '\\e815'; }\n\t.fip-icon-spin3 {\n\t\tanimation: spin 2s infinite linear;\n\t\tdisplay: inline-block;\n\t}\n}\n\n@keyframes spin {\n\t0% {\n\t\ttransform: rotate(0deg);\n\t}\n\n\t100% {\n\t\ttransform: rotate(359deg);\n\t}\n}\n","@mixin box-sizing() {\n\tbox-sizing: content-box;\n\t&::before,\n\t&::after {\n\t\tbox-sizing: content-box;\n\t}\n\t* {\n\t\tbox-sizing: content-box;\n\t\t&::before,\n\t\t&::after {\n\t\t\tbox-sizing: content-box;\n\t\t}\n\t}\n}\n\n@mixin reset() {\n\tfont: inherit;\n\tfont-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n}\n"]} \ No newline at end of file diff --git a/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.min.css b/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.min.css new file mode 100644 index 00000000..45b9cc2d --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/base/jquery.fonticonpicker.min.css @@ -0,0 +1,10 @@ +/*! + * CSS files for fontIconPicker + * + * @license MIT + * @version 3.1.1 + * {@link https://github.com/micc83/fontIconPicker} + * + */ +@font-face{font-family:iconpicker;src:url(../../fonts/iconpicker.eot?90190138);src:url(../../fonts/iconpicker.eot?90190138#iefix) format("embedded-opentype"),url(../../fonts/iconpicker.woff?90190138) format("woff"),url(../../fonts/iconpicker.ttf?90190138) format("truetype"),url(../../fonts/iconpicker.svg?90190138#iconpicker) format("svg");font-weight:400;font-style:normal}.icons-selector{display:inline-block;vertical-align:middle;text-align:left}.icons-selector,.icons-selector *,.icons-selector:after,.icons-selector :after,.icons-selector:before,.icons-selector :before{-webkit-box-sizing:content-box;box-sizing:content-box}.icons-selector *{font:inherit;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}.icons-selector .selector-button{width:39px;height:100%;display:block;text-align:center;cursor:pointer;float:left}.icons-selector .selector-button i{line-height:38px;text-align:center}.icons-selector .selected-icon{display:block;width:60px;height:100%;float:left;text-align:center}.icons-selector .selected-icon i{line-height:40px;font-size:18px;cursor:default}.icons-selector.selector-popup-wrap,.icons-selector .selector-popup-wrap{position:absolute;z-index:10000;width:352px;height:auto}.icons-selector .selector-popup{margin-top:-1px;padding:5px;width:342px;height:auto;background-color:#fefefe;position:absolute}.icons-selector .selector{width:100px;height:40px}.icons-selector .selector-category select,.icons-selector .selector-search input[type=text]{border:0;line-height:20px;padding:10px 2.5%;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:5px;font-size:12px;display:block}.icons-selector .selector-category select{height:40px}.icons-selector .selector-category select option{padding:10px}.icons-selector input::-webkit-input-placeholder{text-transform:uppercase}.icons-selector input:-ms-input-placeholder,.icons-selector input::-ms-input-placeholder{text-transform:uppercase}.icons-selector input::placeholder{text-transform:uppercase}.icons-selector .selector-search{position:relative}.icons-selector .selector-search i{position:absolute;right:10px;top:7px}.icons-selector .fip-icons-container{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px}.icons-selector .fip-icons-container .loading{font-size:24px;margin:0 auto;padding:20px 0;text-align:center;width:100%}.icons-selector .fip-box{display:inline-block;margin:2px;width:60px;line-height:42px;text-align:center;cursor:pointer;vertical-align:top;height:40px}.icons-selector .selector-footer{line-height:12px;padding:5px 5px 0;text-align:center;font-size:14px}.icons-selector .selector-footer i{font-size:14px}.icons-selector .selector-footer .selector-arrows{float:right}.icons-selector .selector-footer .selector-arrows i{cursor:pointer}.icons-selector .selector-footer .selector-pages{font-size:11px;float:left}.icons-selector .selector-footer em{font-style:italic}.icons-selector .icons-picker-error i:before{color:#eee}.icons-selector [class*=" fip-icon-"]:before,.icons-selector [class^=fip-icon-]:before{font-family:iconpicker;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icons-selector .fip-icon-search:before{content:"\e812";cursor:default}.icons-selector .fip-icon-cancel:before{content:"\e814";cursor:pointer}.icons-selector .fip-icon-block:before{content:"\e84e";color:#fed0d0}.icons-selector .fip-icon-down-dir:before{content:"\e800"}.icons-selector .fip-icon-up-dir:before{content:"\e813"}.icons-selector .fip-icon-left-dir:before{content:"\e801"}.icons-selector .fip-icon-right-dir:before{content:"\e802"}.icons-selector .fip-icon-spin3:before{content:"\e815"}.icons-selector .fip-icon-spin3{-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} +/*# sourceMappingURL=jquery.fonticonpicker.css.map */ diff --git a/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.css b/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.css deleted file mode 100644 index 1941583c..00000000 --- a/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.css +++ /dev/null @@ -1,308 +0,0 @@ -/** - * CSS file for fontIconPicker - * This file holds the basic CSS - * {@link https://github.com/micc83/fontIconPicker} - */ -/* Reset (thx to Eric A. and Kathryn S. Meyer) */ -.icons-selector * { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; - font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; -} -.icons-selector, -.icons-selector:before, -.icons-selector:after, -.icons-selector *, -.icons-selector *:before, -.icons-selector *:after { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -/* Display */ -.icons-selector { - display: inline-block; - vertical-align: middle; - text-align: left; -} - -/* Icon selector */ -.icons-selector .selector { - width: 100px; - height: 40px; -} - -/* Selector open button */ -.icons-selector .selector-button { - width: 39px; - height: 100%; - display:block; - text-align: center; - cursor: pointer; - float: left; -} - -/* Selector open button icon */ -.icons-selector .selector-button i { - line-height: 38px; - text-align: center; -} - -/* Selected icon container */ -.icons-selector .selected-icon { - display: block; - width: 60px; - height: 100%; - float: left; - text-align: center; -} - -/* Selected icon */ -.icons-selector .selected-icon i { - line-height: 40px; - font-size: 18px; - cursor: default; -} - -/* IconPicker Popup */ -.icons-selector .selector-popup { - position: absolute; - z-index: 10000; - background-color: #fefefe; - padding: 5px; - height: auto; - width: 342px; - margin-top:-1px; -} - -/* Search input & category selector */ -.icons-selector .selector-search input[type="text"], -.icons-selector .selector-category select { - border: 0; - line-height: 20px; - padding: 10px 2.5%; - width: 100%; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin-bottom: 5px; - font-size: 12px; - display: block; /* Fixes the positioning inside hidden/floated/text-aligned elements, where it would leave a margin */ -} -.icons-selector .selector-category select { - height: 40px; -} -.icons-selector .selector-category select option { - padding: 10px; -} - - -/* Search input placeholder */ -.icons-selector input::-webkit-input-placeholder { text-transform: uppercase; } -.icons-selector input:-moz-placeholder { text-transform: uppercase; } -.icons-selector input::-moz-placeholder { text-transform: uppercase;} -.icons-selector input:-ms-input-placeholder { text-transform: uppercase; } - -/* Search and cancel icon */ -.icons-selector .selector-search { - position: relative; -} -.icons-selector .selector-search i { - position: absolute; - right: 10px; - top: 7px; -} - -/* Icon Container inside Popup */ -.icons-selector .fip-icons-container { - width: 100%; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 5px; -} - -/* Icon container loading */ -.icons-selector .fip-icons-container .loading { - font-size:24px; - margin:0 auto; - padding:20px 0; - text-align:center; - width:100%; -} - -/* Single icon box */ -.icons-selector .fip-box { - display: inline-block; - margin: 2px; - width: 60px; - line-height: 42px; - text-align: center; - cursor: pointer; - vertical-align: top; - height: 40px; -} - -/* Popup footer */ -.icons-selector .selector-footer { - line-height: 12px; - padding: 5px 5px 0 5px; - text-align: center; -} - -/* Pagination and footer icons */ -.icons-selector .selector-footer, .icons-selector .selector-footer i { - font-size: 14px; -} -/* Pagination arrows container */ -.icons-selector .selector-arrows { - float: right; -} -/* Pagination text */ -.icons-selector .selector-pages { - font-size: 11px; - float: left; -} -/* Pagination arrows icons */ -.icons-selector .selector-arrows i { - cursor: pointer; -} -/* Total icons */ -.icons-selector .selector-footer em { - font-style: italic; -} - - -/* No icons found */ -.icons-selector .icons-picker-error i:before { - color: #eee; -} - -/* Icons */ -@font-face { - font-family: 'iconpicker'; - src: url('iconpicker.eot?90190138'); - src: url('iconpicker.eot?90190138#iefix') format('embedded-opentype'), - url('iconpicker.woff?90190138') format('woff'), - url('iconpicker.ttf?90190138') format('truetype'), - url('iconpicker.svg?90190138#iconpicker') format('svg'); - font-weight: normal; - font-style: normal; -} -.icons-selector [class^="fip-icon-"]:before, .icons-selector [class*=" fip-icon-"]:before { - font-family: "iconpicker"; - font-style: normal; - font-weight: normal; - speak: none; - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - font-variant: normal; - text-transform: none; - line-height: 1em; - margin-left: .2em; -} -/* Search icon */ -.icons-selector .fip-icon-search:before { content: '\e812';cursor: default; } -/* Cancel search icon */ -.icons-selector .fip-icon-cancel:before { content: '\e814';cursor: pointer; } -/* No icon set */ -.icons-selector .fip-icon-block:before { content: '\e84e';color: #fed0d0; } -/* Open picker icon */ -.icons-selector .fip-icon-down-dir:before { content: '\e800'; } -/* Close picker icon */ -.icons-selector .fip-icon-up-dir:before { content: '\e813'; } -/* Prev page icon */ -.icons-selector .fip-icon-left-dir:before { content: '\e801'; } -/* Next page icon */ -.icons-selector .fip-icon-right-dir:before { content: '\e802'; } -/* Loading icon */ -.icons-selector .fip-icon-spin3:before { content: '\e815'; } -.icons-selector .fip-icon-spin3 { - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - -webkit-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; - display: inline-block; -} -@-moz-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - - 100% { - -moz-transform: rotate(359deg); - -o-transform: rotate(359deg); - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@-webkit-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - - 100% { - -moz-transform: rotate(359deg); - -o-transform: rotate(359deg); - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@-o-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - - 100% { - -moz-transform: rotate(359deg); - -o-transform: rotate(359deg); - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@-ms-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - - 100% { - -moz-transform: rotate(359deg); - -o-transform: rotate(359deg); - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes spin { - 0% { - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - - 100% { - -moz-transform: rotate(359deg); - -o-transform: rotate(359deg); - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} diff --git a/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.min.css b/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.min.css deleted file mode 100644 index a160994e..00000000 --- a/OpenContent/js/fontIconPicker/css/jquery.fonticonpicker.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/* fontIconPicker main CSS file {@link https://github.com/micc83/fontIconPicker} */ -.icons-selector *{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline;font-family:HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif}.icons-selector,.icons-selector *,.icons-selector :after,.icons-selector :before,.icons-selector:after,.icons-selector:before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.icons-selector{display:inline-block;vertical-align:middle;text-align:left}.icons-selector .selector{width:100px;height:40px}.icons-selector .selector-button{width:39px;height:100%;display:block;text-align:center;cursor:pointer;float:left}.icons-selector .selector-button i{line-height:38px;text-align:center}.icons-selector .selected-icon{display:block;width:60px;height:100%;float:left;text-align:center}.icons-selector .selected-icon i{line-height:40px;font-size:18px;cursor:default}.icons-selector .selector-popup{position:absolute;z-index:10000;background-color:#fefefe;padding:5px;height:auto;width:342px;margin-top:-1px}.icons-selector .selector-category select,.icons-selector .selector-search input[type=text]{border:0;line-height:20px;padding:10px 2.5%;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:5px;font-size:12px;display:block}.icons-selector .selector-category select{height:40px}.icons-selector .selector-category select option{padding:10px}.icons-selector input::-webkit-input-placeholder{text-transform:uppercase}.icons-selector input:-moz-placeholder{text-transform:uppercase}.icons-selector input::-moz-placeholder{text-transform:uppercase}.icons-selector input:-ms-input-placeholder{text-transform:uppercase}.icons-selector .selector-search{position:relative}.icons-selector .selector-search i{position:absolute;right:10px;top:7px}.icons-selector .fip-icons-container{width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px}.icons-selector .fip-icons-container .loading{font-size:24px;margin:0 auto;padding:20px 0;text-align:center;width:100%}.icons-selector .fip-box{display:inline-block;margin:2px;width:60px;line-height:42px;text-align:center;cursor:pointer;vertical-align:top;height:40px}.icons-selector .selector-footer{line-height:12px;padding:5px 5px 0;text-align:center}.icons-selector .selector-footer,.icons-selector .selector-footer i{font-size:14px}.icons-selector .selector-arrows{float:right}.icons-selector .selector-pages{font-size:11px;float:left}.icons-selector .selector-arrows i{cursor:pointer}.icons-selector .selector-footer em{font-style:italic}.icons-selector .icons-picker-error i:before{color:#eee}@font-face{font-family:iconpicker;src:url(iconpicker.eot?90190138);src:url(iconpicker.eot?90190138#iefix) format('embedded-opentype'),url(iconpicker.woff?90190138) format('woff'),url(iconpicker.ttf?90190138) format('truetype'),url(iconpicker.svg?90190138#iconpicker) format('svg');font-weight:400;font-style:normal}.icons-selector [class*=" fip-icon-"]:before,.icons-selector [class^=fip-icon-]:before{font-family:iconpicker;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icons-selector .fip-icon-search:before{content:'\e812';cursor:default}.icons-selector .fip-icon-cancel:before{content:'\e814';cursor:pointer}.icons-selector .fip-icon-block:before{content:'\e84e';color:#fed0d0}.icons-selector .fip-icon-down-dir:before{content:'\e800'}.icons-selector .fip-icon-up-dir:before{content:'\e813'}.icons-selector .fip-icon-left-dir:before{content:'\e801'}.icons-selector .fip-icon-right-dir:before{content:'\e802'}.icons-selector .fip-icon-spin3:before{content:'\e815'}.icons-selector .fip-icon-spin3{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}} diff --git a/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.css.map b/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.css.map new file mode 100644 index 00000000..2c29cdc0 --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["themes/bootstrap-theme/","themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.scss"],"names":[],"mappings":"AAAA;;;;;;;GAAA;ACIA,8BAGE,cAAe,CAgJf,AAnJF,wCAOG,cAAc,AACd,6BAA6B,AAC7B,WAAY,CACZ,AAVH,+CAcG,sBAAsB,AACtB,sBAAsB,AACtB,0BAA0B,AAC1B,wDAAoE,AACpE,8BAAA,AAAsB,sBAAA,AACtB,WAAW,AACX,0BAA2B,CAkB3B,AAtCH,iDAuBI,WAAW,AACX,wBAA6B,CAC7B,AAzBJ,qDA4BI,yBAAyB,AACzB,2BAA4B,CAI5B,AAjCJ,uDA+BK,UAAW,CACX,AAhCL,sDAoCI,oDAAA,AAAgD,2CAAA,CAChD,AArCJ,6CA0CG,sBAAsB,AACtB,oBAAoB,AACpB,sBAAsB,AACtB,0BAA0B,AAC1B,8BAAA,AAAsB,qBAAA,CAItB,AAlDH,+CAgDI,aAAc,CACd,AAjDJ,8CAsDG,+CAAA,AAA2C,uCAAA,AAC3C,iCAAqC,AACrC,kBAAkB,AAClB,qBAAsB,CACtB,AA1DH,wHA+DG,sBAAsB,AACtB,WAAW,AAEX,wBAAwB,AACxB,gBAAgB,AAChB,aAAa,AACb,iBAAkB,CAMlB,AA3EH,oIAwEI,qBAAqB,AACrB,iFAAA,AAAkF,wEAAA,CAClF,AA1EJ,+DA+EG,oBAAqB,CA/ExB,AAgFG,qHADA,oBAAqB,CA/ExB,AAgFG,iDADA,oBAAqB,CACrB,AAhFH,iDAoFG,UAAW,CACX,AArFH,mDAyFG,sBAAsB,AACtB,sBAAsB,AACtB,iBAAkB,CAKlB,AAhGH,4DA8FI,UAAU,CACV,AA/FJ,uCAoGG,sBAAsB,AACtB,kBAAkB,AAClB,qBAAsB,CAQtB,AA9GH,6CAwGI,sBAAsB,AACtB,qBAAqB,AACrB,iFAAA,AAAkF,yEAAA,AAClF,gBAAgB,AAChB,wBAAyB,CACzB,AA7GJ,gGAoHI,aAAc,CAKd,AAzHJ,uDAuHK,aAAc,CACd,AAxHL,sGA+HG,yBAAyB,AACzB,WAAW,AACX,wBAAyB,CACzB,AAlIH,0GAqIG,UAAW,CACX,AAtIH,2DA0IG,UAAW,CACX,AA3IH,+JAiJG,uCAAA,AAAiC,8BAAA,CACjC","file":"jquery.fonticonpicker.bootstrap.css","sourcesContent":[null,"/* fontIconPicker Bootstrap Theme {@link https://github.com/micc83/fontIconPicker} */\n@import '../../partials/variables';\n@import '../../partials/mixins';\n/* Main container */\n.#{$main-selector} {\n\t// Themed scope\n\t&.fip-bootstrap {\n\t\tfont-size: 16px;\n\n\t\t/* Icon selector */\n\t\t.selector {\n\t\t\tborder: 0 none;\n\t\t\tbackground-color: transparent;\n\t\t\twidth: 102px;\n\t\t}\n\n\t\t/* Selector open button */\n\t\t.selector-button {\n\t\t\tbackground-color: #fff;\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 0 4px 4px 0;\n\t\t\tbackground-image: linear-gradient(to bottom, #fff 0px, #e0e0e0 100%);\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: 41px;\n\t\t\tbackground-repeat: repeat-x;\n\t\t\t/** open button icon */\n\t\t\ti {\n\t\t\t\tcolor: #aaa;\n\t\t\t\ttext-shadow: 0px 1px 0px #FFF;\n\t\t\t}\n\t\t\t/** hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #e0e0e0;\n\t\t\t\tbackground-position: 0 -15px;\n\t\t\t\ti {\n\t\t\t\t\tcolor: #999;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/** active */\n\t\t\t&:active {\n\t\t\t\tbox-shadow: 0 3px 5px rgba(0, 0, 0, 0.125) inset;\n\t\t\t}\n\t\t}\n\n\t\t/* Selected icon */\n\t\t.selected-icon {\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-right: 0 none;\n\t\t\tbackground-color: #fff;\n\t\t\tborder-radius: 4px 0 0 4px;\n\t\t\tbox-sizing: border-box;\n\t\t\ti {\n\t\t\t\tcolor: #404040;\n\t\t\t}\n\t\t}\n\n\t\t/* IconPicker Popup */\n\t\t.selector-popup {\n\t\t\tbox-shadow: 0 6px 12px rgba(0, 0, 0, 0.176);\n\t\t\tborder: 1px solid rgba(0, 0, 0, 0.15);\n\t\t\tborder-radius: 4px;\n\t\t\tbackground-color: #fff;\n\t\t}\n\n\t\t/* Search input & category selector */\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select {\n\t\t\tborder: 1px solid #ccc;\n\t\t\tcolor: #555;\n\t\t\t-moz-box-shadow: none;\n\t\t\t-webkit-box-shadow: none;\n\t\t\tbox-shadow: none;\n\t\t\toutline: none;\n\t\t\tborder-radius: 4px;\n\n\t\t\t&:focus {\n\t\t\t\tborder-color: #66AFE9;\n\t\t\t\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(102, 175, 233, 0.6);\n\t\t\t}\n\t\t}\n\n\t\t/** Input placeholder */\n\t\tinput::placeholder {\n\t\t\tcolor:#aaa !important;\n\t\t}\n\n\t\t/* Search and cancel icon */\n\t\t.selector-search i {\n\t\t\tcolor: #aaa;\n\t\t}\n\n\t\t/* Icon Container inside Popup */\n\t\t.fip-icons-container {\n\t\t\tbackground-color: #fff;\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 4px;\n\t\t\t/* Icon container loading */\n\t\t\t.loading {\n\t\t\t\tcolor:#ddd;\n\t\t\t}\n\t\t}\n\n\t\t/* Single icon box */\n\t\t.fip-box {\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 2px;\n\t\t\tbackground-color: #eee;\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder-color: #66AFE9;\n\t\t\t\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(102, 175, 233, 0.6);\n\t\t\t\tfont-size: 1.6em;\n\t\t\t\ttext-shadow: 0 0 1px #fff;\n\t\t\t}\n\t\t}\n\n\t\t/* Pagination and footer icons */\n\t\t.selector-footer {\n\t\t\tcolor: #428BCA;\n\t\t\ti {\n\t\t\t\tcolor: #428BCA;\n\t\t\t\t/* Pagination arrows icons hover */\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: #2A6496;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Currently selected icon color */\n\t\tspan.current-icon,\n\t\tspan.current-icon:hover {\n\t\t\tbackground-color: #428BCA;\n\t\t\tcolor: #fff;\n\t\t\tborder: 1px solid #428BCA;\n\t\t}\n\t\tspan.current-icon i,\n\t\tspan.current-icon:hover i {\n\t\t\tcolor: #fff;\n\t\t}\n\n\t\t/* No icons found */\n\t\t.icons-picker-error i:before {\n\t\t\tcolor: #ccc;\n\t\t}\n\n\t\t/* Transitions */\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select,\n\t\t.fip-box {\n\t\t\ttransition: all 300ms ease-in-out;\n\t\t}\n\t}\n}\n\n\n\n\n\n\n"]} \ No newline at end of file diff --git a/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.min.css b/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.min.css new file mode 100644 index 00000000..6dd07622 --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * CSS files for fontIconPicker + * + * @license MIT + * @version 3.1.1 + * {@link https://github.com/micc83/fontIconPicker} + * + */ +.icons-selector.fip-bootstrap{font-size:16px}.icons-selector.fip-bootstrap .selector{border:0 none;background-color:transparent;width:102px}.icons-selector.fip-bootstrap .selector-button{background-color:#fff;border:1px solid #ccc;border-radius:0 4px 4px 0;background-image:linear-gradient(180deg,#fff 0,#e0e0e0);-webkit-box-sizing:border-box;box-sizing:border-box;width:41px;background-repeat:repeat-x}.icons-selector.fip-bootstrap .selector-button i{color:#aaa;text-shadow:0 1px 0 #fff}.icons-selector.fip-bootstrap .selector-button:hover{background-color:#e0e0e0;background-position:0 -15px}.icons-selector.fip-bootstrap .selector-button:hover i{color:#999}.icons-selector.fip-bootstrap .selector-button:active{-webkit-box-shadow:0 3px 5px rgba(0,0,0,.125) inset;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.icons-selector.fip-bootstrap .selected-icon{border:1px solid #ccc;border-right:0 none;background-color:#fff;border-radius:4px 0 0 4px;-webkit-box-sizing:border-box;box-sizing:border-box}.icons-selector.fip-bootstrap .selected-icon i{color:#404040}.icons-selector.fip-bootstrap .selector-popup{-webkit-box-shadow:0 6px 12px rgba(0,0,0,.176);box-shadow:0 6px 12px rgba(0,0,0,.176);border:1px solid rgba(0,0,0,.15);border-radius:4px;background-color:#fff}.icons-selector.fip-bootstrap .selector-category select,.icons-selector.fip-bootstrap .selector-search input[type=text]{border:1px solid #ccc;color:#555;-webkit-box-shadow:none;box-shadow:none;outline:none;border-radius:4px}.icons-selector.fip-bootstrap .selector-category select:focus,.icons-selector.fip-bootstrap .selector-search input[type=text]:focus{border-color:#66afe9;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.icons-selector.fip-bootstrap input::-webkit-input-placeholder{color:#aaa!important}.icons-selector.fip-bootstrap input:-ms-input-placeholder,.icons-selector.fip-bootstrap input::-ms-input-placeholder{color:#aaa!important}.icons-selector.fip-bootstrap input::placeholder{color:#aaa!important}.icons-selector.fip-bootstrap .selector-search i{color:#aaa}.icons-selector.fip-bootstrap .fip-icons-container{background-color:#fff;border:1px solid #ccc;border-radius:4px}.icons-selector.fip-bootstrap .fip-icons-container .loading{color:#ddd}.icons-selector.fip-bootstrap .fip-box{border:1px solid #ccc;border-radius:2px;background-color:#eee}.icons-selector.fip-bootstrap .fip-box:hover{background-color:#fff;border-color:#66afe9;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);font-size:1.6em;text-shadow:0 0 1px #fff}.icons-selector.fip-bootstrap .selector-footer,.icons-selector.fip-bootstrap .selector-footer i{color:#428bca}.icons-selector.fip-bootstrap .selector-footer i:hover{color:#2a6496}.icons-selector.fip-bootstrap span.current-icon,.icons-selector.fip-bootstrap span.current-icon:hover{background-color:#428bca;color:#fff;border:1px solid #428bca}.icons-selector.fip-bootstrap span.current-icon:hover i,.icons-selector.fip-bootstrap span.current-icon i{color:#fff}.icons-selector.fip-bootstrap .icons-picker-error i:before{color:#ccc}.icons-selector.fip-bootstrap .fip-box,.icons-selector.fip-bootstrap .selector-category select,.icons-selector.fip-bootstrap .selector-search input[type=text]{-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out} +/*# sourceMappingURL=jquery.fonticonpicker.bootstrap.css.map */ diff --git a/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.css.map b/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.css.map new file mode 100644 index 00000000..2cf7f3de --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["themes/dark-grey-theme/","themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.scss"],"names":[],"mappings":"AAAA;;;;;;;GAAA;ACIA,6BAIE,cAAe,CAiJf,AArJF,uCAQG,cAAc,AACd,6BAA6B,AAC7B,WAAY,CACZ,AAXH,8CAeG,sBAAsB,AACtB,sBAAsB,AACtB,0BAA0B,AAC1B,mFAAA,AAA6C,4CAAA,AAC7C,8BAAA,AAAsB,sBAAA,AACtB,UAAW,CAkBX,AAtCH,gDAuBI,WAAW,AACX,wBAA6B,CAC7B,AAzBJ,oDA4BI,yBAAyB,AACzB,sFAAA,AAAgD,8CAAA,CAIhD,AAjCJ,sDA+BK,UAAW,CACX,AAhCL,qDAmCI,sBAAsB,AACtB,sFAAA,AAAgD,8CAAA,CAChD,AArCJ,4CA0CG,sBAAsB,AACtB,sBAAsB,AACtB,oBAAoB,AACpB,yCAAA,AAAiC,iCAAA,AACjC,0BAA0B,AAC1B,8BAAA,AAAsB,qBAAA,CAItB,AAnDH,8CAiDI,aAAc,CACd,AAlDJ,6CAwDG,6CAA8C,AAC9C,qCAAsC,AACtC,sBAAsB,AACtB,iBAAkB,CAClB,AA5DH,sHAiEG,sBAAsB,AACtB,cAAc,AACd,wBAAA,AAAgB,gBAAA,AAChB,aAAa,AACb,iBAAkB,CAMlB,AA3EH,kIAwEI,kBAAkB,AAClB,gCAAA,AAAwB,uBAAA,CACxB,AA1EJ,8DA+EG,oBAAqB,CA/ExB,AAgFG,mHADA,oBAAqB,CA/ExB,AAgFG,gDADA,oBAAqB,CACrB,AAhFH,gDAoFG,UAAW,CACX,AArFH,kDAyFG,sBAAsB,AACtB,sBAAsB,AACtB,iBAAkB,CAKlB,AAhGH,2DA8FI,UAAU,CACV,AA/FJ,sCAoGG,sBAAsB,AACtB,iBAAkB,CASlB,AA9GH,4CAwGI,sBAAsB,AACtB,kBAAkB,AAClB,mDAAA,AAA4C,2CAAA,AAC5C,gBAAgB,AAChB,wBAAyB,CACzB,AA7GJ,8FAmHG,UAAW,CACX,AApHH,sDAwHG,UAAW,CACX,AAzHH,oGA8HG,yBAAyB,AACzB,WAAW,AACX,yBAAyB,AACzB,mCAAA,AAA2B,0BAAA,CAC3B,AAlIH,wGAqIG,WAAW,AACX,wBAAyB,CACzB,AAvIH,0DA2IG,UAAW,CACX,AA5IH,0MAmJG,uCAAA,AAAiC,8BAAA,CACjC","file":"jquery.fonticonpicker.darkgrey.css","sourcesContent":[null,"/* fontIconPicker Dark Grey Theme {@link https://github.com/micc83/fontIconPicker} */\n@import '../../partials/variables';\n@import '../../partials/mixins';\n/** Main Selector */\n.#{$main-selector} {\n\t/** scoped to theme */\n\t&.fip-darkgrey {\n\t\t/* Main container */\n\t\tfont-size: 16px;\n\n\t\t/* Icon selector */\n\t\t.selector {\n\t\t\tborder: 0 none;\n\t\t\tbackground-color: transparent;\n\t\t\twidth: 102px;\n\t\t}\n\n\t\t/* Selector open button */\n\t\t.selector-button {\n\t\t\tbackground-color: #eee;\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 0 4px 4px 0;\n\t\t\tbackground-image: linear-gradient(#eee, #ddd);\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: 41px;\n\t\t\t/* Selector open button icon */\n\t\t\ti {\n\t\t\t\tcolor: #aaa;\n\t\t\t\ttext-shadow: 0px 1px 0px #FFF;\n\t\t\t}\n\t\t\t/* Selector open button hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #f1f1f1;\n\t\t\t\tbackground-image: linear-gradient(#f1f1f1, #ddd);\n\t\t\t\ti {\n\t\t\t\t\tcolor: #999;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&:active {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tbackground-image: linear-gradient(#f1f1f1, #eee);\n\t\t\t}\n\t\t}\n\n\t\t/* Selected icon */\n\t\t.selected-icon {\n\t\t\tbackground-color: #fff;\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-right: 0 none;\n\t\t\tbox-shadow: inset -1px 0 2px #ddd;\n\t\t\tborder-radius: 4px 0 0 4px;\n\t\t\tbox-sizing: border-box;\n\t\t\ti {\n\t\t\t\tcolor: #404040;\n\t\t\t}\n\t\t}\n\n\t\t/* IconPicker Popup */\n\t\t.selector-popup {\n\t\t\t-moz-box-shadow: 0 1px 1px rgba(0,0,0,0.04);\n\t\t\t-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);\n\t\t\tbox-shadow: 0 1px 1px rgba(0,0,0,0.04);\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 4px;\n\t\t}\n\n\t\t/* Search input & category selector */\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select {\n\t\t\tborder: 1px solid #ddd;\n\t\t\tcolor: #404040;\n\t\t\tbox-shadow: none;\n\t\t\toutline: none;\n\t\t\tborder-radius: 4px;\n\t\t\t/** focus state */\n\t\t\t&:focus {\n\t\t\t\tborder-color: #ccc;\n\t\t\t\tbox-shadow: 0 0 2px #ccc;\n\t\t\t}\n\t\t}\n\n\t\t/* Search input placeholder */\n\t\tinput::placeholder {\n\t\t\tcolor:#ccc !important;\n\t\t}\n\n\t\t/* Search and cancel icon */\n\t\t.selector-search i {\n\t\t\tcolor: #ccc;\n\t\t}\n\n\t\t/* Icon Container inside Popup */\n\t\t.fip-icons-container {\n\t\t\tbackground-color: #fff;\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 4px;\n\t\t\t/* Icon container loading */\n\t\t\t.loading {\n\t\t\t\tcolor:#ddd;\n\t\t\t}\n\t\t}\n\n\t\t/* Single icon box */\n\t\t.fip-box {\n\t\t\tborder: 1px solid #ddd;\n\t\t\tborder-radius: 2px;\n\t\t\t/* Single icon box hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #eee;\n\t\t\t\tborder-color: #ccc;\n\t\t\t\tbox-shadow: 0 0 2px #aaa, 0 0 2px #fff inset;\n\t\t\t\tfont-size: 1.6em;\n\t\t\t\ttext-shadow: 0 0 1px #fff;\n\t\t\t}\n\t\t}\n\n\t\t/* Pagination and footer icons */\n\t\t.selector-footer,\n\t\t.selector-footer i {\n\t\t\tcolor: #666;\n\t\t}\n\n\t\t/* Pagination arrows icons hover */\n\t\t.selector-arrows i:hover {\n\t\t\tcolor: #999;\n\t\t}\n\n\t\t/* Currently selected icon color */\n\t\tspan.current-icon,\n\t\tspan.current-icon:hover {\n\t\t\tbackground-color: #2EA2CC;\n\t\t\tcolor: #fff;\n\t\t\tborder: 1px solid #298CBA;\n\t\t\tbox-shadow: 0 0 2px #298CBA;\n\t\t}\n\t\tspan.current-icon i,\n\t\tspan.current-icon:hover i {\n\t\t\tcolor: #fff;\n\t\t\ttext-shadow: 0 0 1px #666;\n\t\t}\n\n\t\t/* No icons found */\n\t\t.icons-picker-error i:before {\n\t\t\tcolor: #eee;\n\t\t}\n\n\t\t/* Transitions */\n\t\t.selector-button,\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select,\n\t\t.fip-box {\n\t\t\ttransition: all 300ms ease-in-out;\n\t\t}\n\t}\n}\n"]} \ No newline at end of file diff --git a/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.min.css b/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.min.css new file mode 100644 index 00000000..19c71327 --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.min.css @@ -0,0 +1,10 @@ +/*! + * CSS files for fontIconPicker + * + * @license MIT + * @version 3.1.1 + * {@link https://github.com/micc83/fontIconPicker} + * + */ +.icons-selector.fip-darkgrey{font-size:16px}.icons-selector.fip-darkgrey .selector{border:0 none;background-color:transparent;width:102px}.icons-selector.fip-darkgrey .selector-button{background-color:#eee;border:1px solid #ccc;border-radius:0 4px 4px 0;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#ddd));background-image:linear-gradient(#eee,#ddd);-webkit-box-sizing:border-box;box-sizing:border-box;width:41px}.icons-selector.fip-darkgrey .selector-button i{color:#aaa;text-shadow:0 1px 0 #fff}.icons-selector.fip-darkgrey .selector-button:hover{background-color:#f1f1f1;background-image:-webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#ddd));background-image:linear-gradient(#f1f1f1,#ddd)}.icons-selector.fip-darkgrey .selector-button:hover i{color:#999}.icons-selector.fip-darkgrey .selector-button:active{background-color:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#eee));background-image:linear-gradient(#f1f1f1,#eee)}.icons-selector.fip-darkgrey .selected-icon{background-color:#fff;border:1px solid #ccc;border-right:0 none;-webkit-box-shadow:inset -1px 0 2px #ddd;box-shadow:inset -1px 0 2px #ddd;border-radius:4px 0 0 4px;-webkit-box-sizing:border-box;box-sizing:border-box}.icons-selector.fip-darkgrey .selected-icon i{color:#404040}.icons-selector.fip-darkgrey .selector-popup{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #ccc;border-radius:4px}.icons-selector.fip-darkgrey .selector-category select,.icons-selector.fip-darkgrey .selector-search input[type=text]{border:1px solid #ddd;color:#404040;-webkit-box-shadow:none;box-shadow:none;outline:none;border-radius:4px}.icons-selector.fip-darkgrey .selector-category select:focus,.icons-selector.fip-darkgrey .selector-search input[type=text]:focus{border-color:#ccc;-webkit-box-shadow:0 0 2px #ccc;box-shadow:0 0 2px #ccc}.icons-selector.fip-darkgrey input::-webkit-input-placeholder{color:#ccc!important}.icons-selector.fip-darkgrey input:-ms-input-placeholder,.icons-selector.fip-darkgrey input::-ms-input-placeholder{color:#ccc!important}.icons-selector.fip-darkgrey input::placeholder{color:#ccc!important}.icons-selector.fip-darkgrey .selector-search i{color:#ccc}.icons-selector.fip-darkgrey .fip-icons-container{background-color:#fff;border:1px solid #ccc;border-radius:4px}.icons-selector.fip-darkgrey .fip-icons-container .loading{color:#ddd}.icons-selector.fip-darkgrey .fip-box{border:1px solid #ddd;border-radius:2px}.icons-selector.fip-darkgrey .fip-box:hover{background-color:#eee;border-color:#ccc;-webkit-box-shadow:0 0 2px #aaa,0 0 2px #fff inset;box-shadow:0 0 2px #aaa,inset 0 0 2px #fff;font-size:1.6em;text-shadow:0 0 1px #fff}.icons-selector.fip-darkgrey .selector-footer,.icons-selector.fip-darkgrey .selector-footer i{color:#666}.icons-selector.fip-darkgrey .selector-arrows i:hover{color:#999}.icons-selector.fip-darkgrey span.current-icon,.icons-selector.fip-darkgrey span.current-icon:hover{background-color:#2ea2cc;color:#fff;border:1px solid #298cba;-webkit-box-shadow:0 0 2px #298cba;box-shadow:0 0 2px #298cba}.icons-selector.fip-darkgrey span.current-icon:hover i,.icons-selector.fip-darkgrey span.current-icon i{color:#fff;text-shadow:0 0 1px #666}.icons-selector.fip-darkgrey .icons-picker-error i:before{color:#eee}.icons-selector.fip-darkgrey .fip-box,.icons-selector.fip-darkgrey .selector-button,.icons-selector.fip-darkgrey .selector-category select,.icons-selector.fip-darkgrey .selector-search input[type=text]{-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out} +/*# sourceMappingURL=jquery.fonticonpicker.darkgrey.css.map */ diff --git a/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.css.map b/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.css.map new file mode 100644 index 00000000..1f729b33 --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["themes/grey-theme/","themes/grey-theme/jquery.fonticonpicker.grey.scss"],"names":[],"mappings":"AAAA;;;;;;;GAAA;ACOA,yBAIE,cAAe,CA0Ff,AA9FF,mCAOG,yBAAyB,AACzB,4BAA6B,CAC7B,AATH,0CAYG,yBAAyB,AACzB,6BAA8B,CAa9B,AA1BH,4CAgBI,WAAW,AACX,wBAA6B,CAC7B,AAlBJ,gDAqBI,wBAAyB,CAIzB,AAzBJ,kDAuBK,UAAW,CACX,AAxBL,wCA6BG,qBAAsB,CAItB,AAjCH,0CA+BI,aAAc,CACd,AAhCJ,yCAoCG,6CAAA,AAAsC,qCAAA,AACtC,wBAAyB,CACzB,AAtCH,8GA0CG,yBAAyB,AACzB,cAAc,AACd,wBAAA,AAAgB,gBAAA,AAChB,YAAa,CACb,AA9CH,0DAiDG,oBAAqB,CAjDxB,AAkDG,2GADA,oBAAqB,CAjDxB,AAkDG,4CADA,oBAAqB,CACrB,AAlDH,4CAqDG,UAAW,CACX,AAtDH,8CAyDG,sBAAsB,AACtB,wBAAyB,CAKzB,AA/DH,uDA6DI,UAAU,CACV,AA9DJ,kCAkEG,wBAAyB,CAKzB,AAvEH,wCAqEI,wBAAyB,CACzB,AAtEJ,sFA4EG,UAAW,CACX,AA7EH,kDAiFG,UAAW,CACX,AAlFH,4FAsFG,yBAAyB,AACzB,WAAW,AACX,wBAAyB,CACzB,AAzFH,sDA4FG,UAAW,CACX","file":"jquery.fonticonpicker.grey.css","sourcesContent":[null,"/**\n * Grey Theme file for fontIconPicker\n * {@link https://github.com/micc83/fontIconPicker}\n */\n@import '../../partials/variables';\n@import '../../partials/mixins';\n/** main selector */\n.#{$main-selector} {\n\t/** scoped to theme */\n\t&.fip-grey {\n\t\t/* Main Container */\n\t\tfont-size: 16px;\n\t\t/* Icon selector */\n\t\t.selector {\n\t\t\tborder: 1px solid #EDEDED;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t\t/* Selector open button */\n\t\t.selector-button {\n\t\t\tbackground-color: #F4F4F4;\n\t\t\tborder-left: 1px solid #E1E1E1;\n\t\t\t/* Selector open button icon */\n\t\t\ti {\n\t\t\t\tcolor: #aaa;\n\t\t\t\ttext-shadow: 0px 1px 0px #FFF;\n\t\t\t}\n\t\t\t/* Selector open button hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #f1f1f1;\n\t\t\t\ti {\n\t\t\t\t\tcolor: #999;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t/* Selected icon */\n\t\t.selected-icon {\n\t\t\tbackground-color: #fff;\n\t\t\ti {\n\t\t\t\tcolor: #404040;\n\t\t\t}\n\t\t}\n\t\t/* IconPicker Popup */\n\t\t.selector-popup {\n\t\t\tbox-shadow: 0 1px 1px rgba(0,0,0,0.04);\n\t\t\tborder: 1px solid #E5E5E5;\n\t\t}\n\t\t/* Search input & category selector */\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select {\n\t\t\tborder: 1px solid #EDEDED;\n\t\t\tcolor: #404040;\n\t\t\tbox-shadow: none;\n\t\t\toutline: none;\n\t\t}\n\t\t/* Search input placeholder */\n\t\tinput::placeholder {\n\t\t\tcolor:#ddd !important;\n\t\t}\n\t\t/* Search and cancel icon */\n\t\t.selector-search i {\n\t\t\tcolor: #eee;\n\t\t}\n\t\t/* Icon Container inside Popup */\n\t\t.fip-icons-container {\n\t\t\tbackground-color: #fff;\n\t\t\tborder: 1px solid #EDEDED;\n\t\t\t/* Icon container loading */\n\t\t\t.loading {\n\t\t\t\tcolor:#eee;\n\t\t\t}\n\t\t}\n\t\t/* Single icon box */\n\t\t.fip-box {\n\t\t\tborder: 1px solid #EFEFEF;\n\t\t\t/* Single icon box hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #f6f6f6;\n\t\t\t}\n\t\t}\n\n\t\t/* Pagination and footer icons */\n\t\t.selector-footer,\n\t\t.selector-footer i {\n\t\t\tcolor: #ddd;\n\t\t}\n\n\t\t/* Pagination arrows icons hover */\n\t\t.selector-arrows i:hover {\n\t\t\tcolor: #777;\n\t\t}\n\t\t/* Currently selected icon color */\n\t\tspan.current-icon,\n\t\tspan.current-icon:hover {\n\t\t\tbackground-color: #2EA2CC;\n\t\t\tcolor: #fff;\n\t\t\tborder: 1px solid #298CBA;\n\t\t}\n\t\t/* No icons found */\n\t\t.icons-picker-error i:before {\n\t\t\tcolor: #eee;\n\t\t}\n\t}\n}\n"]} \ No newline at end of file diff --git a/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.min.css b/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.min.css new file mode 100644 index 00000000..3ae13d8f --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/grey-theme/jquery.fonticonpicker.grey.min.css @@ -0,0 +1,10 @@ +/*! + * CSS files for fontIconPicker + * + * @license MIT + * @version 3.1.1 + * {@link https://github.com/micc83/fontIconPicker} + * + */ +.icons-selector.fip-grey{font-size:16px}.icons-selector.fip-grey .selector{border:1px solid #ededed;background-color:transparent}.icons-selector.fip-grey .selector-button{background-color:#f4f4f4;border-left:1px solid #e1e1e1}.icons-selector.fip-grey .selector-button i{color:#aaa;text-shadow:0 1px 0 #fff}.icons-selector.fip-grey .selector-button:hover{background-color:#f1f1f1}.icons-selector.fip-grey .selector-button:hover i{color:#999}.icons-selector.fip-grey .selected-icon{background-color:#fff}.icons-selector.fip-grey .selected-icon i{color:#404040}.icons-selector.fip-grey .selector-popup{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5}.icons-selector.fip-grey .selector-category select,.icons-selector.fip-grey .selector-search input[type=text]{border:1px solid #ededed;color:#404040;-webkit-box-shadow:none;box-shadow:none;outline:none}.icons-selector.fip-grey input::-webkit-input-placeholder{color:#ddd!important}.icons-selector.fip-grey input:-ms-input-placeholder,.icons-selector.fip-grey input::-ms-input-placeholder{color:#ddd!important}.icons-selector.fip-grey input::placeholder{color:#ddd!important}.icons-selector.fip-grey .selector-search i{color:#eee}.icons-selector.fip-grey .fip-icons-container{background-color:#fff;border:1px solid #ededed}.icons-selector.fip-grey .fip-icons-container .loading{color:#eee}.icons-selector.fip-grey .fip-box{border:1px solid #efefef}.icons-selector.fip-grey .fip-box:hover{background-color:#f6f6f6}.icons-selector.fip-grey .selector-footer,.icons-selector.fip-grey .selector-footer i{color:#ddd}.icons-selector.fip-grey .selector-arrows i:hover{color:#777}.icons-selector.fip-grey span.current-icon,.icons-selector.fip-grey span.current-icon:hover{background-color:#2ea2cc;color:#fff;border:1px solid #298cba}.icons-selector.fip-grey .icons-picker-error i:before{color:#eee} +/*# sourceMappingURL=jquery.fonticonpicker.grey.css.map */ diff --git a/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.css.map b/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.css.map new file mode 100644 index 00000000..e5b9be0a --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["themes/inverted-theme/","themes/inverted-theme/jquery.fonticonpicker.inverted.scss"],"names":[],"mappings":"AAAA;;;;;;;GAAA;ACOA,6BAGE,eAAe,AACf,UAAW,CAgGX,AApGF,uCAQG,sBAAsB,AACtB,4BAA6B,CAC7B,AAVH,8CAaG,sBAAsB,AACtB,0BAA2B,CAY3B,AA1BH,gDAiBI,UAAW,CACX,AAlBJ,oDAqBI,qBAAsB,CAItB,AAzBJ,sDAuBK,UAAW,CACX,AAxBL,4CA8BG,qBAAsB,CAKtB,AAnCH,8CAgCI,WAAW,AACX,wBAAyB,CACzB,AAlCJ,6CAsCG,iDAAA,AAA4C,yCAAA,AAC5C,sBAAsB,AACtB,wBAAyB,CACzB,AAzCH,sHA6CG,sBAAsB,AACtB,gBAAgB,AAChB,WAAW,AACX,wBAAA,AAAgB,gBAAA,AAChB,YAAa,CACb,AAlDH,8DAqDG,oBAAqB,CArDxB,AAsDG,mHADA,oBAAqB,CArDxB,AAsDG,gDADA,oBAAqB,CACrB,AAtDH,gDAyDG,UAAW,CACX,AA1DH,kDA6DG,sBAAsB,AACtB,qBAAsB,CAKtB,AAnEH,2DAiEI,UAAU,CACV,AAlEJ,sCAsEG,qBAAsB,CAMtB,AA5EH,4CAyEI,sBAAsB,AACtB,UAAW,CACX,AA3EJ,8FAiFG,UAAW,CACX,AAlFH,sDAsFG,UAAW,CACX,AAvFH,oGA2FG,sBAAsB,AACtB,UAAW,CACX,AA7FH,8GAiGG,WAAc,AACd,gBAAiB,CAChB","file":"jquery.fonticonpicker.inverted.css","sourcesContent":[null,"/**\n * inverted Theme file for fontIconPicker\n * {@link https://github.com/micc83/fontIconPicker}\n */\n@import '../../partials/variables';\n@import '../../partials/mixins';\n/* Main Container */\n.#{$main-selector} {\n\t/** scoped to theme */\n\t&.fip-inverted {\n\t\tfont-size: 16px;\n\t\tcolor: #aaa;\n\n\t\t/* Icon selector */\n\t\t.selector {\n\t\t\tborder: 1px solid #111;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t\t/* Selector open button */\n\t\t.selector-button {\n\t\t\tbackground-color: #222;\n\t\t\tborder-left: 1px solid #111;\n\t\t\t/* Selector open button icon */\n\t\t\ti {\n\t\t\t\tcolor: #eee;\n\t\t\t}\n\t\t\t/* Selector open button hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #000;\n\t\t\t\ti {\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Selected icon */\n\t\t.selected-icon {\n\t\t\tbackground-color: #333;\n\t\t\ti {\n\t\t\t\tcolor: #ccc;\n\t\t\t\ttext-shadow: 0 0 1px #000;\n\t\t\t}\n\t\t}\n\t\t/* IconPicker Popup */\n\t\t.selector-popup {\n\t\t\tbox-shadow: 0 1px 1px rgba(255,255,255,0.04);\n\t\t\tborder: 1px solid #111;\n\t\t\tbackground-color: #101010;\n\t\t}\n\t\t/* Search input & category selector */\n\t\t.selector-search input[type=\"text\"],\n\t\t.selector-category select {\n\t\t\tborder: 1px solid #111;\n\t\t\tbackground: #333;\n\t\t\tcolor: #aaa;\n\t\t\tbox-shadow: none;\n\t\t\toutline: none;\n\t\t}\n\t\t/* Search input placeholder */\n\t\tinput::placeholder {\n\t\t\tcolor:#aaa !important;\n\t\t}\n\t\t/* Search and cancel icon */\n\t\t.selector-search i {\n\t\t\tcolor: #aaa;\n\t\t}\n\t\t/* Icon Container inside Popup */\n\t\t.fip-icons-container {\n\t\t\tbackground-color: #333;\n\t\t\tborder: 1px solid #111;\n\t\t\t/* Icon container loading */\n\t\t\t.loading {\n\t\t\t\tcolor:#aaa;\n\t\t\t}\n\t\t}\n\t\t/* Single icon box */\n\t\t.fip-box {\n\t\t\tborder: 1px solid #111;\n\t\t\t/* Single icon box hover */\n\t\t\t&:hover {\n\t\t\t\tbackground-color: #000;\n\t\t\t\tcolor: #eee;\n\t\t\t}\n\t\t}\n\n\t\t/* Pagination and footer icons */\n\t\t.selector-footer,\n\t\t.selector-footer i {\n\t\t\tcolor: #aaa;\n\t\t}\n\n\t\t/* Pagination arrows icons hover */\n\t\t.selector-arrows i:hover {\n\t\t\tcolor: #000;\n\t\t}\n\t\t/* Currently selected icon color */\n\t\tspan.current-icon,\n\t\tspan.current-icon:hover {\n\t\t\tbackground-color: #000;\n\t\t\tcolor: #fff;\n\t\t}\n\t\t/* No icons found */\n\t\t.icons-picker-error i:before,\n\t\t.fip-icon-block:before {\n\t\t\tcolor: #663333;\n\t\t\ttext-shadow: none;\n\t\t }\n\t}\n}\n\n"]} \ No newline at end of file diff --git a/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.min.css b/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.min.css new file mode 100644 index 00000000..e54c2730 --- /dev/null +++ b/OpenContent/js/fontIconPicker/css/themes/inverted-theme/jquery.fonticonpicker.inverted.min.css @@ -0,0 +1,10 @@ +/*! + * CSS files for fontIconPicker + * + * @license MIT + * @version 3.1.1 + * {@link https://github.com/micc83/fontIconPicker} + * + */ +.icons-selector.fip-inverted{font-size:16px;color:#aaa}.icons-selector.fip-inverted .selector{border:1px solid #111;background-color:transparent}.icons-selector.fip-inverted .selector-button{background-color:#222;border-left:1px solid #111}.icons-selector.fip-inverted .selector-button i{color:#eee}.icons-selector.fip-inverted .selector-button:hover{background-color:#000}.icons-selector.fip-inverted .selector-button:hover i{color:#fff}.icons-selector.fip-inverted .selected-icon{background-color:#333}.icons-selector.fip-inverted .selected-icon i{color:#ccc;text-shadow:0 0 1px #000}.icons-selector.fip-inverted .selector-popup{-webkit-box-shadow:0 1px 1px hsla(0,0%,100%,.04);box-shadow:0 1px 1px hsla(0,0%,100%,.04);border:1px solid #111;background-color:#101010}.icons-selector.fip-inverted .selector-category select,.icons-selector.fip-inverted .selector-search input[type=text]{border:1px solid #111;background:#333;color:#aaa;-webkit-box-shadow:none;box-shadow:none;outline:none}.icons-selector.fip-inverted input::-webkit-input-placeholder{color:#aaa!important}.icons-selector.fip-inverted input:-ms-input-placeholder,.icons-selector.fip-inverted input::-ms-input-placeholder{color:#aaa!important}.icons-selector.fip-inverted input::placeholder{color:#aaa!important}.icons-selector.fip-inverted .selector-search i{color:#aaa}.icons-selector.fip-inverted .fip-icons-container{background-color:#333;border:1px solid #111}.icons-selector.fip-inverted .fip-icons-container .loading{color:#aaa}.icons-selector.fip-inverted .fip-box{border:1px solid #111}.icons-selector.fip-inverted .fip-box:hover{background-color:#000;color:#eee}.icons-selector.fip-inverted .selector-footer,.icons-selector.fip-inverted .selector-footer i{color:#aaa}.icons-selector.fip-inverted .selector-arrows i:hover{color:#000}.icons-selector.fip-inverted span.current-icon,.icons-selector.fip-inverted span.current-icon:hover{background-color:#000;color:#fff}.icons-selector.fip-inverted .fip-icon-block:before,.icons-selector.fip-inverted .icons-picker-error i:before{color:#633;text-shadow:none} +/*# sourceMappingURL=jquery.fonticonpicker.inverted.css.map */ diff --git a/OpenContent/js/fontIconPicker/css/iconpicker.eot b/OpenContent/js/fontIconPicker/fonts/iconpicker.eot similarity index 100% rename from OpenContent/js/fontIconPicker/css/iconpicker.eot rename to OpenContent/js/fontIconPicker/fonts/iconpicker.eot diff --git a/OpenContent/js/fontIconPicker/css/iconpicker.svg b/OpenContent/js/fontIconPicker/fonts/iconpicker.svg similarity index 100% rename from OpenContent/js/fontIconPicker/css/iconpicker.svg rename to OpenContent/js/fontIconPicker/fonts/iconpicker.svg diff --git a/OpenContent/js/fontIconPicker/css/iconpicker.ttf b/OpenContent/js/fontIconPicker/fonts/iconpicker.ttf similarity index 100% rename from OpenContent/js/fontIconPicker/css/iconpicker.ttf rename to OpenContent/js/fontIconPicker/fonts/iconpicker.ttf diff --git a/OpenContent/js/fontIconPicker/css/iconpicker.woff b/OpenContent/js/fontIconPicker/fonts/iconpicker.woff similarity index 100% rename from OpenContent/js/fontIconPicker/css/iconpicker.woff rename to OpenContent/js/fontIconPicker/fonts/iconpicker.woff diff --git a/OpenContent/js/fontIconPicker/jquery.fonticonpicker.js b/OpenContent/js/fontIconPicker/jquery.fonticonpicker.js deleted file mode 100644 index 5b4a3f69..00000000 --- a/OpenContent/js/fontIconPicker/jquery.fonticonpicker.js +++ /dev/null @@ -1,823 +0,0 @@ -/** - * jQuery fontIconPicker - v2.0.0 - * - * An icon picker built on top of font icons and jQuery - * - * http://codeb.it/fontIconPicker - * - * Made by Alessandro Benoit & Swashata - * Under MIT License - * - * {@link https://github.com/micc83/fontIconPicker} - */ - -;(function ($) { - - 'use strict'; - - // Create the defaults once - var defaults = { - theme : 'fip-grey', // The CSS theme to use with this fontIconPicker. You can set different themes on multiple elements on the same page - source : false, // Icons source (array|false|object) - emptyIcon : true, // Empty icon should be shown? - emptyIconValue : '', // The value of the empty icon, change if you select has something else, say "none" - iconsPerPage : 20, // Number of icons per page - hasSearch : true, // Is search enabled? - searchSource : false, // Give a manual search values. If using attributes then for proper search feature we also need to pass icon names under the same order of source - useAttribute : false, // Whether to use attribute selector for printing icons - attributeName : 'data-icon', // HTML Attribute name - convertToHex : true, // Whether or not to convert to hexadecimal for attribute value. If true then please pass decimal integer value to the source (or as value="" attribute of the select field) - allCategoryText : 'From all categories', // The text for the select all category option - unCategorizedText : 'Uncategorized' // The text for the select uncategorized option - }; - - // The actual plugin constructor - function Plugin(element, options) { - this.element = $(element); - this.settings = $.extend({}, defaults, options); - if (this.settings.emptyIcon) { - this.settings.iconsPerPage--; - } - this.iconPicker = $('
    ', { - 'class': 'icons-selector', - style: 'position: relative', - html: '
    ' + - '' + - '' + - '' + - '' + - '' + - '' + - '
    ' + - '' - }); - this.iconContainer = this.iconPicker.find('.fip-icons-container'); - this.searchIcon = this.iconPicker.find('.selector-search i'); - this.iconsSearched = []; - this.isSearch = false; - this.totalPage = 1; - this.currentPage = 1; - this.currentIcon = false; - this.iconsCount = 0; - this.open = false; - - // Set the default values for the search related variables - this.searchValues = []; - this.availableCategoriesSearch = []; - - // The trigger event for change - this.triggerEvent = null; - - // Backups - this.backupSource = []; - this.backupSearch = []; - - // Set the default values of the category related variables - this.isCategorized = false; // Automatically detects if the icon listing is categorized - this.selectCategory = this.iconPicker.find('.icon-category-select'); // The category SELECT input field - this.selectedCategory = false; // false means all categories are selected - this.availableCategories = []; // Available categories, it is a two dimensional array which holds categorized icons - this.unCategorizedKey = null; // Key of the uncategorized category - - // Initialize plugin - this.init(); - - } - - Plugin.prototype = { - /** - * Init - */ - init: function () { - - // Add the theme CSS to the iconPicker - this.iconPicker.addClass(this.settings.theme); - - // To properly calculate iconPicker height and width - // We will first append it to body (with left: -9999px so that it is not visible) - this.iconPicker.css({ - left: -9999 - }).appendTo('body'); - var iconPickerHeight = this.iconPicker.outerHeight(), - iconPickerWidth = this.iconPicker.outerWidth(); - - // Now reset the iconPicker CSS - this.iconPicker.css({ - left: '' - }); - - // Add the icon picker after the select - this.element.before(this.iconPicker); - - - // Hide source element - // Instead of doing a display:none, we would rather - // make the element invisible - // and adjust the margin - this.element.css({ - visibility: 'hidden', - top: 0, - position: 'relative', - zIndex: '-1', - left: '-' + iconPickerWidth + 'px', - display: 'inline-block', - height: iconPickerHeight + 'px', - width: iconPickerWidth + 'px', - // Reset all margin, border and padding - padding: '0', - margin: '0 -' + iconPickerWidth + 'px 0 0', // Left margin adjustment to account for dangling space - border: '0 none', - verticalAlign: 'top' - }); - - // Set the trigger event - if ( ! this.element.is('select') ) { - // Determine the event that is fired when user change the field value - // Most modern browsers supports input event except IE 7, 8. - // IE 9 supports input event but the event is still not fired if I press the backspace key. - // Get IE version - // https://gist.github.com/padolsey/527683/#comment-7595 - var ieVersion = (function() { - var v = 3, div = document.createElement('div'), a = div.all || []; - while (div.innerHTML = '', a[0]); - return v > 4 ? v : !v; - }()); - var el = document.createElement('div'); - this.triggerEvent = (ieVersion === 9 || !('oninput' in el)) ? ['keyup'] : ['input', 'keyup']; // Let's keep the keyup event for scripts that listens to it - } - - // If current element is SELECT populate settings.source - if (!this.settings.source && this.element.is('select')) { - // Reset the source and searchSource - // These will be populated according to the available options - this.settings.source = []; - this.settings.searchSource = []; - - // Check if optgroup is present within the select - // If it is present then the source has to be grouped - if ( this.element.find('optgroup').length ) { - // Set the categorized to true - this.isCategorized = true; - this.element.find('optgroup').each($.proxy(function(i, el) { - // Get the key of the new category array - var thisCategoryKey = this.availableCategories.length, - // Create the new option for the selectCategory SELECT field - categoryOption = $('').prependTo(this.selectCategory); - - // Show it and set default value to all categories - this.selectCategory.show().val('all').trigger('change'); - }, - - /** - * Load icons - */ - loadIcons: function () { - - // Set the content of the popup as loading - this.iconContainer.html(''); - - // If source is set - if (this.settings.source instanceof Array) { - - // Render icons - this.renderIconContainer(); - - } - - }, - - /** - * Render icons inside the popup - */ - renderIconContainer: function () { - - var offset, iconsPaged = []; - - // Set a temporary array for icons - if (this.isSearch) { - iconsPaged = this.iconsSearched; - } else { - iconsPaged = this.settings.source; - } - - // Count elements - this.iconsCount = iconsPaged.length; - - // Calculate total page number - this.totalPage = Math.ceil(this.iconsCount / this.settings.iconsPerPage); - - // Hide footer if no pagination is needed - if (this.totalPage > 1) { - this.iconPicker.find('.selector-footer').show(); - } else { - this.iconPicker.find('.selector-footer').hide(); - } - - // Set the text for page number index and total icons - this.iconPicker.find('.selector-pages').html(this.currentPage + '/' + this.totalPage + ' (' + this.iconsCount + ')'); - - // Set the offset for slice - offset = (this.currentPage - 1) * this.settings.iconsPerPage; - - // Should empty icon be shown? - if (this.settings.emptyIcon) { - // Reset icon container HTML and prepend empty icon - this.iconContainer.html(''); - - // If not show an error when no icons are found - } else if (iconsPaged.length < 1) { - this.iconContainer.html(''); - return; - - // else empty the container - } else { - this.iconContainer.html(''); - } - - // Set an array of current page icons - iconsPaged = iconsPaged.slice(offset, offset + this.settings.iconsPerPage); - - // List icons - for (var i = 0, item; item = iconsPaged[i++];) { - // Set the icon title - var flipBoxTitle = item; - $.grep(this.settings.source, $.proxy(function(e, i) { - if ( e === item ) { - flipBoxTitle = this.searchValues[i]; - return true; - } - return false; - }, this)); - - // Set the icon box - $('', { - html: '', - 'class': 'fip-box', - title: flipBoxTitle - }).appendTo(this.iconContainer); - } - - // If no empty icon is allowed and no current value is set or current value is not inside the icon set - if (!this.settings.emptyIcon && (!this.element.val() || $.inArray(this.element.val(), this.settings.source) === -1)) { - - // Get the first icon - this.setSelectedIcon(iconsPaged[0]); - - } else if ($.inArray(this.element.val(), this.settings.source) === -1) { - - // Set empty - this.setSelectedIcon(); - - } else { - - // Set the default selected icon even if not set - this.setSelectedIcon(this.element.val()); - } - - }, - - /** - * Set Highlighted icon - */ - setHighlightedIcon: function () { - this.iconContainer.find('.current-icon').removeClass('current-icon'); - if (this.currentIcon) { - this.iconContainer.find('[data-fip-value="' + this.currentIcon + '"]').parent('span').addClass('current-icon'); - } - }, - - /** - * Set selected icon - * - * @param {string} theIcon - */ - setSelectedIcon: function (theIcon) { - if (theIcon === 'fip-icon-block') { - theIcon = ''; - } - - // Check if attribute is to be used - if ( this.settings.useAttribute ) { - if ( theIcon ) { - this.iconPicker.find('.selected-icon').html('' ); - } else { - this.iconPicker.find('.selected-icon').html(''); - } - // Use class - } else { - this.iconPicker.find('.selected-icon').html(''); - } - // Set the value of the element and trigger change event - this.element.val((theIcon === '' ? this.settings.emptyIconValue : theIcon )).trigger('change'); - if ( this.triggerEvent !== null ) { - // Trigger other events - for ( var eventKey in this.triggerEvent ) { - this.element.trigger(this.triggerEvent[eventKey]); - } - } - this.currentIcon = theIcon; - this.setHighlightedIcon(); - }, - - /** - * Open/close popup (toggle) - */ - toggleIconSelector: function () { - this.open = (!this.open) ? 1 : 0; - this.iconPicker.find('.selector-popup').slideToggle(300); - this.iconPicker.find('.selector-button i').toggleClass('fip-icon-down-dir'); - this.iconPicker.find('.selector-button i').toggleClass('fip-icon-up-dir'); - if (this.open) { - this.iconPicker.find('.icons-search-input').focus().select(); - } - }, - - /** - * Reset search - */ - resetSearch: function () { - - // Empty input - this.iconPicker.find('.icons-search-input').val(''); - - // Reset search icon class - this.searchIcon.removeClass('fip-icon-cancel'); - this.searchIcon.addClass('fip-icon-search'); - - // Go back to page 1 and remove back arrow - this.iconPicker.find('.selector-arrow-left').hide(); - this.currentPage = 1; - this.isSearch = false; - - // Rerender icons - this.renderIconContainer(); - - // Restore pagination if needed - if (this.totalPage > 1) { - this.iconPicker.find('.selector-arrow-right').show(); - } - } - }; - - // Lightweight plugin wrapper - $.fn.fontIconPicker = function (options) { - - // Instantiate the plugin - this.each(function () { - if (!$.data(this, "fontIconPicker")) { - $.data(this, "fontIconPicker", new Plugin(this, options)); - } - }); - - // setIcons method - this.setIcons = $.proxy(function (newIcons, iconSearch) { - if ( undefined === newIcons ) { - newIcons = false; - } - if ( undefined === iconSearch ) { - iconSearch = false; - } - this.each(function () { - $.data(this, "fontIconPicker").settings.source = newIcons; - $.data(this, "fontIconPicker").settings.searchSource = iconSearch; - $.data(this, "fontIconPicker").initSourceIndex(); - $.data(this, "fontIconPicker").resetSearch(); - $.data(this, "fontIconPicker").loadIcons(); - }); - }, this); - - // destroy method - this.destroyPicker = $.proxy(function() { - this.each(function() { - if (!$.data(this, "fontIconPicker")) { - return; - } - // Remove the iconPicker - $.data(this, "fontIconPicker").iconPicker.remove(); - // Reset the CSS - $.data(this, "fontIconPicker").element.css({ - visibility: '', - top: '', - position: '', - zIndex: '', - left: '', - display: '', - height: '', - width: '', - padding: '', - margin: '', - border: '', - verticalAlign: '' - }); - - // destroy data - $.removeData(this, "fontIconPicker"); - }); - }, this); - - // reInit method - this.refreshPicker = $.proxy(function(newOptions) { - if ( ! newOptions ) { - newOptions = options; - } - // First destroy - this.destroyPicker(); - - // Now reset - this.each(function() { - if (!$.data(this, "fontIconPicker")) { - $.data(this, "fontIconPicker", new Plugin(this, newOptions)); - } - }); - }, this); - - return this; - }; - -})(jQuery); diff --git a/OpenContent/js/fontIconPicker/jquery.fonticonpicker.min.js b/OpenContent/js/fontIconPicker/jquery.fonticonpicker.min.js deleted file mode 100644 index 53da65a9..00000000 --- a/OpenContent/js/fontIconPicker/jquery.fonticonpicker.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * jQuery fontIconPicker - v2.0.0 - * - * An icon picker built on top of font icons and jQuery - * - * http://codeb.it/fontIconPicker - * - * Made by Alessandro Benoit & Swashata - * Under MIT License - * - * {@link https://github.com/micc83/fontIconPicker} - */ -!function(a){"use strict";function c(c,d){this.element=a(c),this.settings=a.extend({},b,d),this.settings.emptyIcon&&this.settings.iconsPerPage--,this.iconPicker=a("
    ",{"class":"icons-selector",style:"position: relative",html:'
    "}),this.iconContainer=this.iconPicker.find(".fip-icons-container"),this.searchIcon=this.iconPicker.find(".selector-search i"),this.iconsSearched=[],this.isSearch=!1,this.totalPage=1,this.currentPage=1,this.currentIcon=!1,this.iconsCount=0,this.open=!1,this.searchValues=[],this.availableCategoriesSearch=[],this.triggerEvent=null,this.backupSource=[],this.backupSearch=[],this.isCategorized=!1,this.selectCategory=this.iconPicker.find(".icon-category-select"),this.selectedCategory=!1,this.availableCategories=[],this.unCategorizedKey=null,this.init()}var b={theme:"fip-grey",source:!1,emptyIcon:!0,emptyIconValue:"",iconsPerPage:20,hasSearch:!0,searchSource:!1,useAttribute:!1,attributeName:"data-icon",convertToHex:!0,allCategoryText:"From all categories",unCategorizedText:"Uncategorized"};c.prototype={init:function(){this.iconPicker.addClass(this.settings.theme),this.iconPicker.css({left:-9999}).appendTo("body");var b=this.iconPicker.outerHeight(),c=this.iconPicker.outerWidth();if(this.iconPicker.css({left:""}),this.element.before(this.iconPicker),this.element.css({visibility:"hidden",top:0,position:"relative",zIndex:"-1",left:"-"+c+"px",display:"inline-block",height:b+"px",width:c+"px",padding:"0",margin:"0 -"+c+"px 0 0",border:"0 none",verticalAlign:"top"}),!this.element.is("select")){var d=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="",c[0];);return a>4?a:!a}(),e=document.createElement("div");this.triggerEvent=9!==d&&"oninput"in e?["input","keyup"]:["keyup"]}!this.settings.source&&this.element.is("select")?(this.settings.source=[],this.settings.searchSource=[],this.element.find("optgroup").length?(this.isCategorized=!0,this.element.find("optgroup").each(a.proxy(function(b,c){var d=this.availableCategories.length,e=a("