From 66119ba3d8ffe7ae0c12f71e7044b8b51836ebf0 Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 09:06:43 +0100 Subject: [PATCH 01/25] fixes linkpicker broken due to new NiceUrl format --- .../src/views/common/dialogs/linkpicker.controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js index ff75f595bf..b0ad65477e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js @@ -21,7 +21,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", } contentResource.getNiceUrl($scope.target.id).then(function(url){ - $scope.target.url = angular.fromJson(url); + $scope.target.url = url; }); } } @@ -53,7 +53,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", $scope.target.url = "/"; } else { contentResource.getNiceUrl(args.node.id).then(function (url) { - $scope.target.url = angular.fromJson(url); + $scope.target.url = url; }); } } else { From 11c35977d317743c6108c2922f343482dc309763 Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 11:06:09 +0100 Subject: [PATCH 02/25] fixes broken legacy pickers --- .../src/views/common/dialogs/treepicker.controller.js | 9 ++++----- src/Umbraco.Web/Editors/BackOfficeController.cs | 1 + src/Umbraco.Web/Trees/ContentTreeControllerBase.cs | 8 ++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/treepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/treepicker.controller.js index e06952d918..556145c3cc 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/treepicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/treepicker.controller.js @@ -7,13 +7,12 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController", $scope.section = dialogOptions.section; $scope.treeAlias = dialogOptions.treeAlias; $scope.multiPicker = dialogOptions.multiPicker; - $scope.startNodeId = dialogOptions.startNodeId; + + $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1; //create the custom query string param for this tree - $scope.customTreeParams = "startNodeId=" + dialogOptions.startNodeId; - if (dialogOptions.customTreeParams) { - $scope.customTreeParams += "&" + dialogOptions.customTreeParams; - } + $scope.customTreeParams = dialogOptions.startNodeId ? "startNodeId=" + dialogOptions.startNodeId : ""; + $scope.customTreeParams += dialogOptions.customTreeParams ? "&" + dialogOptions.customTreeParams : ""; //search defaults $scope.searcher = searchService.searchContent; diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 1e36107689..ffc312a43e 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -167,6 +167,7 @@ namespace Umbraco.Web.Editors "umbracoSettings", new Dictionary { {"umbracoPath", GlobalSettings.Path}, + {"mediaPath", IOHelper.ResolveUrl(SystemDirectories.Media).TrimEnd('/')}, {"appPluginsPath", IOHelper.ResolveUrl(SystemDirectories.AppPlugins).TrimEnd('/')}, { "imageFileTypes", diff --git a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs index e3a2f57efb..a7a975414a 100644 --- a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs +++ b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs @@ -76,10 +76,14 @@ namespace Umbraco.Web.Trees if (id == Constants.System.Root.ToInvariantString() && UserStartNode == Constants.System.Root) { var nodes = new TreeNodeCollection(); + var altStartId = string.Empty; + + if(queryStrings.HasKey(TreeQueryStringParameters.StartNodeId)) + queryStrings.GetValue(TreeQueryStringParameters.StartNodeId); + //check if a request has been made to render from a specific start node - if (queryStrings.HasKey(TreeQueryStringParameters.StartNodeId) - && queryStrings.GetValue(TreeQueryStringParameters.StartNodeId) != Constants.System.Root.ToString(CultureInfo.InvariantCulture)) + if (!string.IsNullOrEmpty(altStartId) && altStartId != "undefined" && altStartId != Constants.System.Root.ToString(CultureInfo.InvariantCulture)) { id = queryStrings.GetValue(TreeQueryStringParameters.StartNodeId); From f749886bf43485c8e46b88329ffbee7239b4d1cc Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 11:08:51 +0100 Subject: [PATCH 03/25] disable caching on style rules resource --- .../src/common/resources/stylesheet.resource.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/stylesheet.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/stylesheet.resource.js index 20279cb675..1382d78b3c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/stylesheet.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/stylesheet.resource.js @@ -45,7 +45,7 @@ function stylesheetResource($q, $http, umbRequestHelper) { "stylesheetApiBaseUrl", "GetRules", [{ id: id }] - )), + ) +"&rnd=" + Math.floor(Math.random()*1001), {cache: false}), 'Failed to retreive stylesheets '); }, From fb1d6436b781f9260e161344eba037d3b82ae44b Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 11:10:01 +0100 Subject: [PATCH 04/25] wrap rules request in a $q.all() to await response --- .../propertyeditors/rte/rte.controller.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js index 42e4e15dd0..5efbaa9719 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js @@ -1,6 +1,6 @@ angular.module("umbraco") .controller("Umbraco.PropertyEditors.RTEController", - function ($rootScope, $element, $scope, dialogService, $log, imageHelper, assetsService, $timeout, tinyMceService, angularHelper, stylesheetResource) { + function ($rootScope, $element, $scope, $q, dialogService, $log, imageHelper, assetsService, $timeout, tinyMceService, angularHelper, stylesheetResource) { tinyMceService.configuration().then(function(tinyMceConfig){ @@ -27,11 +27,16 @@ angular.module("umbraco") var toolbar = editorConfig.toolbar.join(" | "); var stylesheets = []; var styleFormats = []; + var await = []; + //queue file loading + await.push(assetsService.loadJs("lib/tinymce/tinymce.min.js", $scope)); + + //queue rules loading angular.forEach(editorConfig.stylesheets, function(val, key){ - stylesheets.push("/css/" + val + ".css"); + stylesheets.push("/css/" + val + ".css?" + new Date().getTime()); - stylesheetResource.getRulesByName(val).then(function(rules) { + await.push(stylesheetResource.getRulesByName(val).then(function(rules) { angular.forEach(rules, function(rule) { var r = {}; r.title = rule.name; @@ -49,11 +54,12 @@ angular.module("umbraco") styleFormats.push(r); }); - }); + })); }); - assetsService.loadJs("lib/tinymce/tinymce.min.js", $scope).then(function () { + //wait for queue to end + $q.all(await).then(function () { /** Loads in the editor */ function loadTinyMce() { @@ -126,7 +132,7 @@ angular.module("umbraco") tinyMceService.createInsertMacro(editor, $scope); } }); - }, 1); + }, 500); } loadTinyMce(); From 7cb496ee3c370256cff3a712ec2fa880695b3c8b Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 11:10:58 +0100 Subject: [PATCH 05/25] WIP on better mediapicker view --- .../src/common/services/util.service.js | 66 +++++++++---------- .../common/dialogs/mediapicker.controller.js | 9 +-- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js index 9ede02934b..4a732cfee9 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js @@ -165,41 +165,41 @@ function imageHelper() { if (!options && !options.imageModel) { throw "The options objet does not contain the required parameters: imageModel"; } - if (options.imageModel.contentTypeAlias.toLowerCase() === "image") { - //combine all props, TODO: we really need a better way then this - var props = []; - if(options.imageModel.properties){ - props = options.imageModel.properties; - }else{ - $(options.imageModel.tabs).each(function(i, tab){ - props = props.concat(tab.properties); - }); - } - - var imageProp = _.find(props, function (item) { - return item.alias === 'umbracoFile'; - }); - - if (!imageProp) { - return ""; - } - - var imageVal; - - //our default images might store one or many images (as csv) - var split = imageProp.value.split(','); - var self = this; - imageVal = _.map(split, function(item) { - return { file: item, isImage: self.detectIfImageByExtension(item) }; - }); - - //for now we'll just return the first image in the collection. - //TODO: we should enable returning many to be displayed in the picker if the uploader supports many. - if (imageVal.length && imageVal.length > 0 && imageVal[0].isImage) { - return imageVal[0].file; - } + + //combine all props, TODO: we really need a better way then this + var props = []; + if(options.imageModel.properties){ + props = options.imageModel.properties; + }else{ + $(options.imageModel.tabs).each(function(i, tab){ + props = props.concat(tab.properties); + }); } + + var imageProp = _.find(props, function (item) { + return item.alias === 'umbracoFile'; + }); + + if (!imageProp) { + return ""; + } + + var imageVal; + + //our default images might store one or many images (as csv) + var split = imageProp.value.split(','); + var self = this; + imageVal = _.map(split, function(item) { + return { file: item, isImage: self.detectIfImageByExtension(item) }; + }); + + //for now we'll just return the first image in the collection. + //TODO: we should enable returning many to be displayed in the picker if the uploader supports many. + if (imageVal.length && imageVal.length > 0 && imageVal[0].isImage) { + return imageVal[0].file; + } + return ""; }, /** formats the display model used to display the content to the model used to save the content */ diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js index 8e1de23cf9..6b3acfce69 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js @@ -55,6 +55,7 @@ angular.module("umbraco") _.each($scope.images, function(img) { img.thumbnail = imageHelper.getThumbnail({ imageModel: img, scope: $scope }); }); + //reject all images that have an empty thumbnail - this can occur if there's an image item // that doesn't have an uploaded image. $scope.images = _.reject($scope.images, function(item) { @@ -75,9 +76,7 @@ angular.module("umbraco") if (image.contentTypeAlias.toLowerCase() == 'folder') { $scope.options.formData.currentFolder = image.id; $scope.gotoFolder(image.id); - } - else if (image.contentTypeAlias.toLowerCase() == 'image') { - + }else{ eventsService.publish("Umbraco.Dialogs.MediaPickerController.Select", image); if (dialogOptions && dialogOptions.multiPicker) { @@ -96,11 +95,9 @@ angular.module("umbraco") if (image.contentTypeAlias.toLowerCase() == 'folder') { $scope.options.formData.currentFolder = image.id; $scope.gotoFolder(image.id); - } - else if (image.contentTypeAlias.toLowerCase() == 'image') { + }else{ eventsService.publish("Umbraco.Dialogs.MediaPickerController.Select", image); - if (dialogOptions && dialogOptions.multiPicker) { $scope.select(image); } From 77889f968b6dc4f1451201d2e1a628ba74ba9dd7 Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 14:19:41 +0100 Subject: [PATCH 06/25] turns off imagecropper toxml which has caused issues --- src/umbraco.editorControls/imagecropper/DataTypeData.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/umbraco.editorControls/imagecropper/DataTypeData.cs b/src/umbraco.editorControls/imagecropper/DataTypeData.cs index 7c772b4c47..a2cbfa892a 100644 --- a/src/umbraco.editorControls/imagecropper/DataTypeData.cs +++ b/src/umbraco.editorControls/imagecropper/DataTypeData.cs @@ -7,9 +7,10 @@ namespace umbraco.editorControls.imagecropper public class DataTypeData : umbraco.cms.businesslogic.datatype.DefaultData { public DataTypeData(umbraco.cms.businesslogic.datatype.BaseDataType DataType) : base(DataType) { } - + /* public override XmlNode ToXMl(XmlDocument data) { + if (Value != null && Value.ToString() != "") { var xd = new XmlDocument(); @@ -18,6 +19,6 @@ namespace umbraco.editorControls.imagecropper } return base.ToXMl(data); - } + }*/ } } \ No newline at end of file From 806596f04d82eb488345588103ee6ff20dce2940 Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 19 Nov 2013 14:20:51 +0100 Subject: [PATCH 07/25] Disables the tree header when it has a alt start node --- .../common/directives/umbtree.directive.js | 23 ++++++++----------- .../views/common/dialogs/contentpicker.html | 3 +-- .../src/views/common/dialogs/linkpicker.html | 4 ++-- .../src/views/common/dialogs/mediapicker.html | 12 +++++++--- .../common/dialogs/membergrouppicker.html | 4 ++-- .../views/common/dialogs/memberpicker.html | 4 ++-- .../common/dialogs/treepicker.controller.js | 2 +- .../src/views/common/dialogs/treepicker.html | 4 ++-- .../src/views/content/copy.html | 4 ++-- .../src/views/content/move.html | 4 ++-- .../src/views/media/move.html | 4 ++-- .../Trees/ContentTreeControllerBase.cs | 2 +- 12 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js index 30af946da3..2c60a87db2 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js @@ -13,8 +13,8 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat scope: { section: '@', treealias: '@', - showoptions: '@', - showheader: '@', + hideoptions: '@', + hideheader: '@', cachekey: '@', isdialog: '@', //Custom query string arguments to pass in to the tree as a string, example: "startnodeid=123&something=value" @@ -24,18 +24,13 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat compile: function(element, attrs) { //config - var hideheader = (attrs.showheader === 'false') ? true : false; - var hideoptions = (attrs.showoptions === 'false') ? "hide-options" : ""; - - var template = '
    ' + - '
  • '; - - if (!hideheader) { - template += '
    ' + - '
    {{tree.name}}
    ' + - '' + - '
    '; - } + //var showheader = (attrs.showheader !== 'false'); + var hideoptions = (attrs.hideoptions === 'true') ? "hide-options" : ""; + var template = '
    • '; + template += '
      ' + + '
      {{tree.name}}
      ' + + '' + + '
      '; template += '
        ' + '' + '
      ' + diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/contentpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/contentpicker.html index 7890421360..0932b63286 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/contentpicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/contentpicker.html @@ -38,8 +38,7 @@
      diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html index b3cd07cb44..bf01c5e23c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html @@ -22,8 +22,8 @@
      diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html index a4c4b82638..0b834d6cf5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html @@ -57,9 +57,8 @@ data-file-upload="options" data-file-upload-progress="" data-ng-class="{'fileupl min-width="220" on-click="clickHandler" ng-model="images" - filter-by="searchTerm" - /> - + filter-by="searchTerm"/> +