diff --git a/src/Umbraco.Core/Manifest/ManifestParser.cs b/src/Umbraco.Core/Manifest/ManifestParser.cs
index e1489a6d75..47dbfacb45 100644
--- a/src/Umbraco.Core/Manifest/ManifestParser.cs
+++ b/src/Umbraco.Core/Manifest/ManifestParser.cs
@@ -128,7 +128,14 @@ namespace Umbraco.Core.Manifest
{
throw new FormatException("The manifest is not formatted correctly contains more than one 'javascript' element");
}
-
+
+ //validate the css
+ var cssinit = deserialized.Properties().Where(x => x.Name == "stylesheet").ToArray();
+ if (cssinit.Length > 1)
+ {
+ throw new FormatException("The manifest is not formatted correctly contains more than one 'stylesheet' element");
+ }
+
//validate the property editors section
var propEditors = deserialized.Properties().Where(x => x.Name == "propertyEditors").ToArray();
if (propEditors.Length > 1)
@@ -139,6 +146,9 @@ namespace Umbraco.Core.Manifest
var jConfig = init.Any() ? (JArray)deserialized["javascript"] : new JArray();
ReplaceVirtualPaths(jConfig);
+ var cssConfig = cssinit.Any() ? (JArray)deserialized["stylesheet"] : new JArray();
+ ReplaceVirtualPaths(cssConfig);
+
//replace virtual paths for each property editor
if (deserialized["propertyEditors"] != null)
{
@@ -158,6 +168,7 @@ namespace Umbraco.Core.Manifest
var manifest = new PackageManifest()
{
JavaScriptInitialize = jConfig,
+ StyleSheetInitialize = cssConfig,
PropertyEditors = propEditors.Any() ? (JArray)deserialized["propertyEditors"] : new JArray(),
ParameterEditors = propEditors.Any() ? (JArray)deserialized["parameterEditors"] : new JArray()
};
diff --git a/src/Umbraco.Core/Manifest/PackageManifest.cs b/src/Umbraco.Core/Manifest/PackageManifest.cs
index 7bf4a7c274..4426bb36fb 100644
--- a/src/Umbraco.Core/Manifest/PackageManifest.cs
+++ b/src/Umbraco.Core/Manifest/PackageManifest.cs
@@ -12,6 +12,11 @@ namespace Umbraco.Core.Manifest
///
public JArray JavaScriptInitialize { get; set; }
+ ///
+ /// The json array used to initialize the application with the CSS dependencies required
+ ///
+ public JArray StyleSheetInitialize { get; set; }
+
///
/// The json array of property editors
///
diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs
index 8c17fcc663..a8a5dc2a63 100644
--- a/src/Umbraco.Web/Editors/BackOfficeController.cs
+++ b/src/Umbraco.Web/Editors/BackOfficeController.cs
@@ -34,8 +34,13 @@ namespace Umbraco.Web.Editors
{
var plugins = new DirectoryInfo(Server.MapPath("~/App_Plugins"));
var parser = new ManifestParser(plugins);
- var requireJs = new JsInitialization(parser);
- var result = requireJs.GetJavascriptInitialization(JsInitialization.GetDefaultInitialization());
+ var initJs = new JsInitialization(parser);
+ var initCss = new CssInitialization(parser);
+
+
+ var result = initJs.GetJavascriptInitialization(JsInitialization.GetDefaultInitialization());
+ result += initCss.GetStylesheetInitialization();
+
return JavaScript(result);
}
diff --git a/src/Umbraco.Web/UI/JavaScript/CssInitialization.cs b/src/Umbraco.Web/UI/JavaScript/CssInitialization.cs
new file mode 100644
index 0000000000..d7b486c46f
--- /dev/null
+++ b/src/Umbraco.Web/UI/JavaScript/CssInitialization.cs
@@ -0,0 +1,51 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Umbraco.Core.IO;
+using Umbraco.Core.Manifest;
+
+namespace Umbraco.Web.UI.JavaScript
+{
+ internal class CssInitialization
+ {
+ private readonly ManifestParser _parser;
+
+ public CssInitialization(ManifestParser parser)
+ {
+ _parser = parser;
+ }
+
+ ///
+ /// Processes all found manifest files and outputs yepnope.injectcss calls for all css files found in all manifests
+ ///
+ public string GetStylesheetInitialization()
+ {
+ JArray merged = new JArray();
+ foreach (var m in _parser.GetManifests())
+ {
+ ManifestParser.MergeJArrays(merged, m.StyleSheetInitialize);
+ }
+
+ return ParseMain(merged);
+ }
+
+
+ ///
+ /// Parses the CssResources.Main and returns a yepnop.injectCss format
+ ///
+ ///
+ ///
+ internal static string ParseMain(JArray files)
+ {
+ StringBuilder sb = new StringBuilder();
+ foreach (var file in files)
+ sb.AppendFormat("{0}yepnope.injectCss('{1}');", Environment.NewLine, file);
+
+ return sb.ToString();
+ }
+
+ }
+}
diff --git a/src/Umbraco.Web/UI/JavaScript/JsInitialize.js b/src/Umbraco.Web/UI/JavaScript/JsInitialize.js
index 9e936f7c87..42ed1c270e 100644
--- a/src/Umbraco.Web/UI/JavaScript/JsInitialize.js
+++ b/src/Umbraco.Web/UI/JavaScript/JsInitialize.js
@@ -27,8 +27,8 @@
*/
/* temporary sorter lib, should be updated
- 'lib/angular/angular-ui-sortable.js',*/
- 'lib/jquery/jquery.sortable/jquery.sortable.js',
+ 'lib/angular/angular-ui-sortable.js',
+ 'lib/jquery/jquery.sortable/jquery.sortable.js',*/
/* App-wide file-upload helper */
'lib/jquery/jquery.upload/js/jquery.fileupload.js',
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index d6c4f74347..161e183bc4 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -373,6 +373,7 @@
+
ASPXCodeBehind