From bd4ecafc743cd70390cfbf2c7daba28c07e34b58 Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 10:45:12 +0200 Subject: [PATCH 01/14] Richtext null ref exception fixed --- .../umbraco/controls/ContentTypeControlNew.ascx | 2 +- src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs | 4 +++- .../umbraco/controls/ContentTypeControlNew.ascx.cs | 1 - 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco/controls/ContentTypeControlNew.ascx b/src/Umbraco.Web.UI/umbraco/controls/ContentTypeControlNew.ascx index 278009ba22..2bbdaeeee4 100644 --- a/src/Umbraco.Web.UI/umbraco/controls/ContentTypeControlNew.ascx +++ b/src/Umbraco.Web.UI/umbraco/controls/ContentTypeControlNew.ascx @@ -113,7 +113,7 @@ UmbClientMgr.openAngularModalWindow({ template: 'views/common/dialogs/iconpicker.html', callback: function(data){ - jQuery(that).next().val("." + data); + jQuery(that).next().val(data); jQuery(that).find("i").attr("class", data); }}); diff --git a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs index 736d7444d4..e30d5f5dcf 100644 --- a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs @@ -34,8 +34,10 @@ namespace Umbraco.Web.PropertyEditors /// public override object FormatDataForEditor(object dbValue) { - var parsed = MacroTagParser.FormatRichTextPersistedDataForEditor(dbValue.ToString(), new Dictionary()); + if (dbValue == null) + return dbValue; + var parsed = MacroTagParser.FormatRichTextPersistedDataForEditor(dbValue.ToString(), new Dictionary()); return parsed; } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs index 603365956b..b747e0bee6 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs @@ -429,7 +429,6 @@ namespace umbraco.controls txtName.Text = _contentType.GetRawText(); txtAlias.Text = _contentType.Alias; description.Text = _contentType.GetRawDescription(); - tb_icon.Value = _contentType.IconUrl; if(string.IsNullOrEmpty(_contentType.IconUrl)) From 9bad5d023339bbc36f897c1a4e0be604ce16ae48 Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:29:44 +0200 Subject: [PATCH 02/14] Updateds media picker styles --- .../src/common/resources/media.resource.js | 2 +- .../src/common/services/dialog.service.js | 7 +- .../src/common/services/tinymce.service.js | 4 +- .../common/dialogs/mediapicker.controller.js | 8 +- .../src/views/common/dialogs/mediapicker.html | 26 +++---- .../mediapicker/mediapicker.controller.js | 77 ++++++++++--------- .../mediapicker/mediapicker.html | 40 ++-------- 7 files changed, 70 insertions(+), 94 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js index 0362012189..fc138fe28c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js @@ -122,7 +122,7 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) { "mediaApiBaseUrl", "GetByIds", idQuery)), - 'Failed to retreive data for media id ' + id); + 'Failed to retreive data for media ids ' + ids); }, /** diff --git a/src/Umbraco.Web.UI.Client/src/common/services/dialog.service.js b/src/Umbraco.Web.UI.Client/src/common/services/dialog.service.js index 5c370fcde1..198022dbfe 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/dialog.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/dialog.service.js @@ -64,8 +64,7 @@ angular.module('umbraco.services') var dialog = angular.extend(defaults, options); var scope = options.scope || $rootScope.$new(); - delete dialog.scope; - + //Modal dom obj and unique id dialog.element = $('
'); var id = dialog.template.replace('.html', '').replace('.aspx', '').replace(/[\/|\.|:\&\?\=]/g, "-") + '-' + scope.$id; @@ -78,6 +77,7 @@ angular.module('umbraco.services') dialog.element.addClass("modal"); dialog.element.addClass("hide"); } + //set the id and add classes dialog.element .attr('id', id) @@ -332,8 +332,9 @@ angular.module('umbraco.services') * @returns {Object} modal object */ macroPicker: function (options) { - options.template = 'views/common/dialogs/macroPicker.html'; + options.template = 'views/common/dialogs/insertmacro.html'; options.show = true; + options.modalClass = "span7 umb-modal"; return openDialog(options); }, diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index 580fa89a7b..28ba32b04f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -289,9 +289,7 @@ function tinyMceService(dialogService, $log, imageHelper, assetsService, $timeou }, onclick: function () { - dialogService.open({ - show: true, - template: "views/common/dialogs/insertmacro.html", + dialogService.macroPicker({ scope: $scope, callback: function(data) { 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 e1b44dc5e1..a813f76d67 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 @@ -30,7 +30,7 @@ angular.module("umbraco") if(folderId > 0){ entityResource.getAncestors(folderId, "media") .then(function(anc){ - anc.splice(0,1); + // anc.splice(0,1); $scope.path = anc; }); }else{ @@ -55,19 +55,17 @@ angular.module("umbraco") $scope.gotoFolder($scope.options.formData.currentFolder); }); - $scope.selectMediaItem = function(image) { if (image.contentTypeAlias.toLowerCase() == 'folder') { $scope.options.formData.currentFolder = image.id; $scope.gotoFolder(image.id); - } - else if (image.contentTypeAlias.toLowerCase() == 'image') { + }else if (image.contentTypeAlias.toLowerCase() == 'image') { eventsService.publish("Umbraco.Dialogs.MediaPickerController.Select", image).then(function(image){ if(dialogOptions && dialogOptions.multipicker){ $scope.select(image); }else{ - $scope.submit(image); + $scope.submit(image); } }); } 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 88b69a7e65..68660a25ee 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 @@ -63,28 +63,26 @@ data-file-upload="options" data-file-upload-progress="" data-ng-class="{'fileupl ng-click="selectMediaItem(image)" prevent-default> + {{image.name}} - {{image.name}} - - -
- {{image.name}} - -
- - {{image.name}} -
-
- +
+ + {{image.name}} +
+ - diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js index 8d2385f409..c028217f71 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js @@ -2,48 +2,53 @@ //with a specified callback, this callback will receive an object with a selection on it angular.module('umbraco').controller("Umbraco.Editors.MediaPickerController", function($rootScope, $scope, dialogService, mediaResource, imageHelper, $log){ - // - //$( "#draggable" ).draggable(); + + + $scope.images = []; + $scope.ids = []; + if($scope.model.value){ + $scope.ids = $scope.model.value.split(','); - //saved value contains a list of images with their coordinates a Dot coordinates - //this will be $scope.model.value... - var sampleData = [ - {id: 1143, coordinates: {x:123,y:345}, center: {x:123,y:12}}, - {id: 1144, coordinates: {x:123,y:345}, center: {x:123,y:12}}, - {id: 1145, coordinates: {x:123,y:345}, center: {x:123,y:12}}, - ]; - - $scope.images = sampleData; - $($scope.images).each(function(i,img){ - mediaResource.getById(img.id).then(function(media){ + mediaResource.getByIds($scope.ids).then(function(medias){ //img.media = media; - - //shortcuts - //TODO, do something better then this for searching - img.src = imageHelper.getImagePropertyValue({imageModel: media}); - img.thumbnail = imageHelper.getThumbnailFromPath(img.src); + $(medias).each(function(i, media){ + //shortcuts + //TODO, do something better then this for searching + var img = {}; + img.src = imageHelper.getImagePropertyValue({imageModel: media}); + img.thumbnail = imageHelper.getThumbnailFromPath(img.src); + $scope.images.push(img); + }); }); - }); + } - //List of crops with name and size - $scope.config = { - crops: [ - {name: "default", x:300,y:400}, - {name: "header", x:23,y:40}, - {name: "tiny", x:10,y:10} - ]}; + $scope.remove = function(index){ + $scope.images.splice(index, 1); + $scope.ids.splice(index, 1); + $scope.sync(); + }; + $scope.add = function(){ + dialogService.mediaPicker({multipicker:true, callback: function(data){ + $(data.selection).each(function(i, media){ + //shortcuts + //TODO, do something better then this for searching - $scope.openMediaPicker =function(value){ - var d = dialogService.mediaPicker({scope: $scope, callback: populate}); - }; + var img = {}; + img.id = media.id; + img.src = imageHelper.getImagePropertyValue({imageModel: media}); + img.thumbnail = imageHelper.getThumbnailFromPath(img.src); + $scope.images.push(img); + $scope.ids.push(img.id); + }); - $scope.crop = function(image){ - $scope.currentImage = image; - }; + $scope.sync(); + }}); + }; - function populate(data){ - $scope.model.value = data.selection; - } - }); + $scope.sync = function(){ + $scope.model.value = $scope.ids.join(); + }; + +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html index 0d90298811..d21b95bacd 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html @@ -1,41 +1,17 @@
-
-
- - - -
- -
- - - -
-
- - - - -
\ No newline at end of file From 7f8045dc555458cb872ee5c92accbbbba6ddbc63 Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:30:39 +0200 Subject: [PATCH 03/14] Filters out media items that returns null --- .../WebApi/Filters/FilterAllowedOutgoingMediaAttribute.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web/WebApi/Filters/FilterAllowedOutgoingMediaAttribute.cs b/src/Umbraco.Web/WebApi/Filters/FilterAllowedOutgoingMediaAttribute.cs index 5c0d141e82..e16dd7cea4 100644 --- a/src/Umbraco.Web/WebApi/Filters/FilterAllowedOutgoingMediaAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/FilterAllowedOutgoingMediaAttribute.cs @@ -77,12 +77,13 @@ namespace Umbraco.Web.WebApi.Filters var toRemove = new List(); foreach (dynamic item in items) { - var hasPathAccess = UserExtensions.HasPathAccess(item.Path, user.StartContentId, Constants.System.RecycleBinContent); + var hasPathAccess = (item != null && UserExtensions.HasPathAccess(item.Path, user.StartContentId, Constants.System.RecycleBinContent)); if (!hasPathAccess) { toRemove.Add(item); } } + foreach (var item in toRemove) { items.Remove(item); From 0adf0d1fb69fd16e183a380a928d39e4d86f71d0 Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:30:50 +0200 Subject: [PATCH 04/14] Css for panel footer --- src/Umbraco.Web.UI.Client/src/less/panel.less | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/less/panel.less b/src/Umbraco.Web.UI.Client/src/less/panel.less index 07799ba1cd..2970446ffb 100644 --- a/src/Umbraco.Web.UI.Client/src/less/panel.less +++ b/src/Umbraco.Web.UI.Client/src/less/panel.less @@ -95,6 +95,11 @@ h1.headline{height: 40px; padding: 30px 0 0 20px;} .umb-panel-footer { margin: 0; padding: 20px; + z-index: 999; + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; } From 6ab4d177e49a56054289f03fd212c24bb5a536ca Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:31:12 +0200 Subject: [PATCH 05/14] fixes xslt dialog ysod --- src/Umbraco.Web.UI/umbraco/create/xslt.ascx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco/create/xslt.ascx b/src/Umbraco.Web.UI/umbraco/create/xslt.ascx index e36313e285..f4c5fe64c8 100644 --- a/src/Umbraco.Web.UI/umbraco/create/xslt.ascx +++ b/src/Umbraco.Web.UI/umbraco/create/xslt.ascx @@ -2,18 +2,18 @@ <%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - - + + * - + - + Clean - + From b9d066b262ea1880a23bbcfb5af1b4c5ef041c8a Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:32:18 +0200 Subject: [PATCH 06/14] Fixes rte property validation null refs --- src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs index e30d5f5dcf..77155bb470 100644 --- a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs @@ -49,8 +49,10 @@ namespace Umbraco.Web.PropertyEditors /// public override object FormatDataForPersistence(Core.Models.Editors.ContentPropertyData editorValue, object currentValue) { - var parsed = MacroTagParser.FormatRichTextContentForPersistence(editorValue.Value.ToString()); + if (editorValue.Value == null) + return null; + var parsed = MacroTagParser.FormatRichTextContentForPersistence(editorValue.Value.ToString()); return parsed; } } From 640286c283b1a384fabe6261decfd05e0994b8cb Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 13:32:26 +0200 Subject: [PATCH 07/14] minor tweaks --- src/Umbraco.Web.UI.Client/src/less/hacks.less | 1 + src/umbraco.businesslogic/BasePages/ClientTools.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/hacks.less b/src/Umbraco.Web.UI.Client/src/less/hacks.less index ba59d7b2c2..0fb87df154 100644 --- a/src/Umbraco.Web.UI.Client/src/less/hacks.less +++ b/src/Umbraco.Web.UI.Client/src/less/hacks.less @@ -76,6 +76,7 @@ iframe, .content-column-body { background-size: contain; display: none; } + .fileupload-processing .fileupload-loading { display: block; } diff --git a/src/umbraco.businesslogic/BasePages/ClientTools.cs b/src/umbraco.businesslogic/BasePages/ClientTools.cs index 4a16603a10..45344ce412 100644 --- a/src/umbraco.businesslogic/BasePages/ClientTools.cs +++ b/src/umbraco.businesslogic/BasePages/ClientTools.cs @@ -46,7 +46,7 @@ namespace umbraco.BasePages public static string RefreshAdmin { get { return "setTimeout('" + GetMainWindow + ".location.reload()', {0});"; } } public static string ShowSpeechBubble { get { return GetMainWindow + ".UmbSpeechBubble.ShowMessage('{0}','{1}', '{2}');"; } } public static string ChangeContentFrameUrl(string url) { - return string.Format("alert('sdsd'); " + ClientMgrScript + ".contentFrame('{0}');", url); + return string.Format(ClientMgrScript + ".contentFrame('{0}');", url); } public static string ReloadContentFrameUrlIfPathLoaded(string url) { return string.Format(ClientMgrScript + ".reloadContentFrameUrlIfPathLoaded('{0}');", url); From d0c500824e62796c175b98929c90f1a452a0f85d Mon Sep 17 00:00:00 2001 From: perploug Date: Mon, 23 Sep 2013 14:10:39 +0200 Subject: [PATCH 08/14] Added umb-editor width classes to all property editors --- src/Umbraco.Web.UI.Client/src/less/forms.less | 6 ++++++ src/Umbraco.Web.UI.Client/src/less/main.less | 8 ++++++-- src/Umbraco.Web.UI.Client/src/less/modals.less | 1 + src/Umbraco.Web.UI.Client/src/less/property-editors.less | 1 - .../src/views/propertyeditors/boolean/boolean.html | 2 +- .../views/propertyeditors/checkboxlist/checkboxlist.html | 2 +- .../propertyeditors/contentpicker/contentpicker.html | 3 ++- .../src/views/propertyeditors/datepicker/datepicker.html | 2 +- .../src/views/propertyeditors/dropdown/dropdown.html | 2 ++ .../src/views/propertyeditors/fileupload/fileupload.html | 2 +- .../propertyeditors/folderbrowser/folderbrowser.html | 7 +++++-- .../src/views/propertyeditors/googlemaps/googlemaps.html | 2 +- .../src/views/propertyeditors/grid/grid.html | 2 +- .../src/views/propertyeditors/integer/integer.html | 2 +- .../src/views/propertyeditors/listview/listview.html | 9 ++++++--- .../views/propertyeditors/mediapicker/mediapicker.html | 2 +- .../propertyeditors/multipletextbox/multipletextbox.html | 2 +- .../views/propertyeditors/radiobuttons/radiobuttons.html | 2 +- .../propertyeditors/readonlyvalue/readonlyvalue.html | 2 +- .../src/views/propertyeditors/rte/rte.html | 2 +- .../src/views/propertyeditors/tags/tags.html | 2 +- .../propertyeditors/templatepicker/templatepicker.html | 2 +- .../src/views/propertyeditors/textarea/textarea.html | 2 +- .../src/views/propertyeditors/textbox/textbox.html | 2 +- 24 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/forms.less b/src/Umbraco.Web.UI.Client/src/less/forms.less index fc4d49b75c..e29b0e22af 100644 --- a/src/Umbraco.Web.UI.Client/src/less/forms.less +++ b/src/Umbraco.Web.UI.Client/src/less/forms.less @@ -24,6 +24,12 @@ label.control-label { .controls-row label{padding: 0px 10px 0px 10px; vertical-align: center} + + +//standard editor width +.umb-editor{width: 460px;} + + //utill styll to hide child untill hover .hover-show{visibility: hidden;} *:hover > .hover-show{visibility: visible;} diff --git a/src/Umbraco.Web.UI.Client/src/less/main.less b/src/Umbraco.Web.UI.Client/src/less/main.less index 222b4493aa..ca00e90d1d 100644 --- a/src/Umbraco.Web.UI.Client/src/less/main.less +++ b/src/Umbraco.Web.UI.Client/src/less/main.less @@ -147,13 +147,17 @@ div.umb-codeeditor .umb-btn-toolbar { } - - /* FORM GRID */ .umb-pane { margin: 30px 20px; } +.umb-control-group { + border-bottom: 1px solid @grayLighter; + padding-bottom: 30px; + margin-bottom: 25px !important; +} + .umb-control-group .umb-el-wrap { padding: 0 } diff --git a/src/Umbraco.Web.UI.Client/src/less/modals.less b/src/Umbraco.Web.UI.Client/src/less/modals.less index faab7f1709..0e7ef77c62 100644 --- a/src/Umbraco.Web.UI.Client/src/less/modals.less +++ b/src/Umbraco.Web.UI.Client/src/less/modals.less @@ -84,6 +84,7 @@ transition: opacity 0.3s linear, top 0.3s ease-out; height: 100% !important; } + .umb-modal.fade.in { top: 0 !important; left: 100% !important; diff --git a/src/Umbraco.Web.UI.Client/src/less/property-editors.less b/src/Umbraco.Web.UI.Client/src/less/property-editors.less index e9f7ee87a3..572660bbe6 100644 --- a/src/Umbraco.Web.UI.Client/src/less/property-editors.less +++ b/src/Umbraco.Web.UI.Client/src/less/property-editors.less @@ -1,7 +1,6 @@ // // Color picker // -------------------------------------------------- - ul.color-picker li { padding: 2px; margin: 3px; diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html index 3384a18580..37e1030614 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html @@ -1,3 +1,3 @@ -
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html index 65819d3631..cfed867ae2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html @@ -1,4 +1,4 @@ -
+