diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/colorpicker.directive.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/colorpicker.directive.js new file mode 100644 index 0000000000..fed5886dff --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/colorpicker.directive.js @@ -0,0 +1,69 @@ + +/*********************************************************************************************************/ +/* spectrum color picker directive */ +/*********************************************************************************************************/ + +angular.module('colorpicker', ['spectrumcolorpicker']) + .directive('colorpicker', ['dialogService', function (dialogService) { + return { + restrict: 'EA', + scope: { + ngModel: '=' + }, + link: function (scope, $element) { + + scope.openColorDialog = function () { + var config = { + template: "colorModal.html", + change: function (data) { + scope.ngModel = data; + }, + callback: function (data) { + scope.ngModel = data; + }, + cancel: function (data) { + scope.ngModel = data; + }, + dialogItem: scope.ngModel, + scope: scope + }; + + dialogService.open(config); + } + + scope.setColor = false; + + scope.submitAndClose = function () { + if (scope.ngModel != "") { + scope.setColor = true; + scope.submit(scope.ngModel); + } else { + scope.cancel(); + } + + }; + + scope.cancelAndClose = function () { + scope.cancel(); + } + + }, + template: + '
' + + '
' + + '' + + '
', + replace: true + }; + }]) \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/dialog.service.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/dialog.service.js index d4abc2741d..c362dd50dc 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/dialog.service.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/dialog.service.js @@ -5,12 +5,14 @@ angular.module("Umbraco.canvasdesigner").factory('dialogService', function ($rootScope, $q, $http, $timeout, $compile, $templateCache) { - - function closeDialog(dialog) { + function closeDialog(dialog, destroyScope) { if (dialog.element) { dialog.element.removeClass("selected"); dialog.element.html(""); - dialog.scope.$destroy(); + + if (destroyScope) { + dialog.scope.$destroy(); + } } } @@ -32,7 +34,11 @@ angular.module("Umbraco.canvasdesigner").factory('dialogService', function ($roo }; var dialog = angular.extend(defaults, options); + var destroyScope = true; + if (options && options.scope) { + destroyScope = false; + } var scope = (options && options.scope) || $rootScope.$new(); // Save original value for cancel action @@ -42,10 +48,11 @@ angular.module("Umbraco.canvasdesigner").factory('dialogService', function ($roo /************************************/ + // Close dialog if the user clicks outside the dialog. (Not working well with colorpickers and datepickers) $(document).mousedown(function (e) { var container = dialog.element; if (!container.is(e.target) && container.has(e.target).length === 0) { - closeDialog(dialog); + closeDialog(dialog, destroyScope); } }); /************************************/ @@ -66,7 +73,7 @@ angular.module("Umbraco.canvasdesigner").factory('dialogService', function ($roo if (dialog.cancel) { dialog.cancel(originalDialogItem); } - closeDialog(dialog); + closeDialog(dialog, destroyScope); } scope.change = function (data) { @@ -79,11 +86,11 @@ angular.module("Umbraco.canvasdesigner").factory('dialogService', function ($roo if (dialog.callback) { dialog.callback(data); } - closeDialog(dialog); + closeDialog(dialog, destroyScope); }; scope.close = function () { - closeDialog(dialog); + closeDialog(dialog, destroyScope); } scope.dialogData = dialog.dialogData; diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js index a8e9ce21ea..214190a9b9 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js @@ -9,7 +9,10 @@ angular.module('spectrumcolorpicker', []) restrict: 'E', transclude: true, scope: { - colorselected: '=' + colorselected: '=', + setColor: '=', + flat: '=', + showPalette: '=' }, link: function (scope, $element) { @@ -18,9 +21,13 @@ angular.module('spectrumcolorpicker', []) $element.find("input").spectrum({ color: scope.colorselected, allowEmpty: true, - preferredFormat: "rgb", + preferredFormat: "hex", showAlpha: true, showInput: true, + flat: scope.flat, + localStorageKey: "spectrum.panel", + showPalette: scope.showPalette, + palette: [], change: function (color) { if (color) { @@ -45,8 +52,10 @@ angular.module('spectrumcolorpicker', []) }); - scope.$watch('colorselected', function () { - $element.find("input").spectrum("set", scope.colorselected); + scope.$watch('setcolor', function (setColor) { + if (scope.$eval(setColor) === true) { + $element.find("input").spectrum("set", scope.colorselected); + } }, true); }, diff --git a/src/Umbraco.Web.UI.Client/src/less/canvasdesigner.less b/src/Umbraco.Web.UI.Client/src/less/canvasdesigner.less index 9aa69092a6..c97442f72d 100644 --- a/src/Umbraco.Web.UI.Client/src/less/canvasdesigner.less +++ b/src/Umbraco.Web.UI.Client/src/less/canvasdesigner.less @@ -700,6 +700,46 @@ h4.panel-title { display: block; } +.canvasdesigner .color-picker-preview { + height: 26px; + border: 1px solid #CDCDCD; + border-radius: 1px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); + cursor: pointer; +} + +.canvasdesigner .spectrumcolorpicker { + +} + +.canvasdesigner .float-panel .sp-container.sp-flat { + background-color: transparent; + border: none; + padding: 10px; + width: 100%; +} + +.canvasdesigner .float-panel .sp-container.sp-flat .sp-picker-container { + padding: 0; + margin: 0px; + margin-bottom: 10px; + border: none; + width: 100%; +} + +.canvasdesigner .float-panel .sp-container.sp-flat .sp-palette-container { + padding: 0; + height: 32px; + width: 100%; + float: left; + margin: 0; + border: none; +} + +.canvasdesigner .float-panel .sp-container.sp-flat .sp-button-container { + display: none; +} + .colorPickerDelete { position: absolute; margin: -23px 0 0 0;