From 12fb1ed5742bc08cc3380cb381dc26becfdbd205 Mon Sep 17 00:00:00 2001 From: Mads Lie Jensen Date: Fri, 15 Jul 2016 21:29:29 +0200 Subject: [PATCH 1/4] A fix for #158 --- dist/tinymce.min.js | 2 +- src/tinymce.js | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dist/tinymce.min.js b/dist/tinymce.min.js index cecd364..58166b3 100644 --- a/dist/tinymce.min.js +++ b/dist/tinymce.min.js @@ -1 +1 @@ -angular.module("ui.tinymce",[]).value("uiTinymceConfig",{}).directive("uiTinymce",["$rootScope","$compile","$timeout","$window","$sce","uiTinymceConfig",function(a,b,c,d,e,f){f=f||{};var g=0,h="ui-tinymce";return f.baseUrl&&(tinymce.baseURL=f.baseUrl),{require:["ngModel","^?form"],priority:599,link:function(i,j,k,l){function m(a){a?(n(),p&&p.getBody().setAttribute("contenteditable",!1)):(n(),p&&!p.settings.readonly&&p.getBody().setAttribute("contenteditable",!0))}function n(){p||(p=tinymce.get(k.id))}if(d.tinymce){var o,p,q=l[0],r=l[1]||null,s={debounce:!0},t=function(b){var c=b.getContent({format:s.format}).trim();c=e.trustAsHtml(c),q.$setViewValue(c),a.$$phase||i.$digest()};k.$set("id",h+"-"+g++),o={},angular.extend(o,i.$eval(k.uiTinymce));var u=function(a){var b;return function(d){c.cancel(b),b=c(function(){return function(a){a.isDirty()&&(a.save(),t(a))}(d)},a)}}(400),v={setup:function(b){b.on("init",function(){q.$render(),q.$setPristine(),q.$setUntouched(),r&&r.$setPristine()}),b.on("ExecCommand change NodeChange ObjectResized",function(){return s.debounce?void u(b):(b.save(),void t(b))}),b.on("blur",function(){j[0].blur(),q.$setTouched(),a.$$phase||i.$digest()}),b.on("remove",function(){j.remove()}),f.setup&&f.setup(b,{updateView:t}),o.setup&&o.setup(b,{updateView:t})},format:o.format||"html",selector:"#"+k.id};angular.extend(s,f,o,v),c(function(){s.baseURL&&(tinymce.baseURL=s.baseURL),tinymce.init(s),m(i.$eval(k.ngDisabled))}),q.$formatters.unshift(function(a){return a?e.trustAsHtml(a):""}),q.$parsers.unshift(function(a){return a?e.getTrustedHtml(a):""}),q.$render=function(){n();var a=q.$viewValue?e.getTrustedHtml(q.$viewValue):"";p&&p.getDoc()&&(p.setContent(a),p.fire("change"))},k.$observe("disabled",m),i.$on("$tinymce:refresh",function(a,c){var d=k.id;if(angular.isUndefined(c)||c===d){var e=j.parent(),f=j.clone();f.removeAttr("id"),f.removeAttr("style"),f.removeAttr("aria-hidden"),tinymce.execCommand("mceRemoveEditor",!1,d),e.append(b(f)(i))}}),i.$on("$destroy",function(){n(),p&&(p.remove(),p=null)})}}}}]); \ No newline at end of file +angular.module("ui.tinymce",[]).value("uiTinymceConfig",{}).directive("uiTinymce",["$rootScope","$compile","$timeout","$window","$sce","uiTinymceConfig",function(a,b,c,d,e,f){f=f||{};var g=0,h="ui-tinymce";return f.baseUrl&&(tinymce.baseURL=f.baseUrl),{require:["ngModel","^?form"],priority:599,link:function(i,j,k,l){function m(a){a?(n(),p&&p.getBody().setAttribute("contenteditable",!1)):(n(),p&&!p.settings.readonly&&p.getBody().setAttribute("contenteditable",!0))}function n(){p||(p=tinymce.get(k.id))}if(d.tinymce){var o,p,q=l[0],r=l[1]||null,s={debounce:!0},t=function(b){var c=b.getContent({format:s.format}).trim();c=e.trustAsHtml(c),q.$setViewValue(c),a.$$phase||i.$digest()};k.$set("id",h+"-"+g++),o={};var u=function(a){var b;return function(d){c.cancel(b),b=c(function(){return function(a){a.isDirty()&&(a.save(),t(a))}(d)},a)}}(400),v={setup:function(b){b.on("init",function(){q.$render(),q.$setPristine(),q.$setUntouched(),r&&r.$setPristine()}),b.on("ExecCommand change NodeChange ObjectResized",function(){return s.debounce?void u(b):(b.save(),void t(b))}),b.on("blur",function(){j[0].blur(),q.$setTouched(),a.$$phase||i.$digest()}),b.on("remove",function(){j.remove()}),f.setup&&f.setup(b,{updateView:t}),o.setup&&o.setup(b,{updateView:t})},format:o.format||"html",selector:"#"+k.id};c(function(){angular.extend(o,i.$eval(k.uiTinymce)),angular.extend(s,f,o,v),s.baseURL&&(tinymce.baseURL=s.baseURL),tinymce.init(s),m(i.$eval(k.ngDisabled))}),q.$formatters.unshift(function(a){return a?e.trustAsHtml(a):""}),q.$parsers.unshift(function(a){return a?e.getTrustedHtml(a):""}),q.$render=function(){n();var a=q.$viewValue?e.getTrustedHtml(q.$viewValue):"";p&&p.getDoc()&&(p.setContent(a),p.fire("change"))},k.$observe("disabled",m),i.$on("$tinymce:refresh",function(a,c){var d=k.id;if(angular.isUndefined(c)||c===d){var e=j.parent(),f=j.clone();f.removeAttr("id"),f.removeAttr("style"),f.removeAttr("aria-hidden"),tinymce.execCommand("mceRemoveEditor",!1,d),e.append(b(f)(i))}}),i.$on("$destroy",function(){n(),p&&(p.remove(),p=null)})}}}}]); \ No newline at end of file diff --git a/src/tinymce.js b/src/tinymce.js index 1ce5c6e..2874e64 100644 --- a/src/tinymce.js +++ b/src/tinymce.js @@ -56,8 +56,6 @@ angular.module('ui.tinymce', []) expression = {}; - angular.extend(expression, scope.$eval(attrs.uiTinymce)); - //Debounce update and save action var debouncedUpdate = (function(debouncedUpdateDelay) { var debouncedUpdateTimer; @@ -128,13 +126,17 @@ angular.module('ui.tinymce', []) format: expression.format || 'html', selector: '#' + attrs.id }; - // extend options with initial uiTinymceConfig and - // options from directive attribute value - angular.extend(options, uiTinymceConfig, expression, setupOptions); + // Wrapped in $timeout due to $tinymce:refresh implementation, requires // element to be present in DOM before instantiating editor when // re-rendering directive $timeout(function() { + angular.extend(expression, scope.$eval(attrs.uiTinymce)); + + // extend options with initial uiTinymceConfig and + // options from directive attribute value + angular.extend(options, uiTinymceConfig, expression, setupOptions); + if (options.baseURL){ tinymce.baseURL = options.baseURL; } From 61644443393c4a722d8b8fb8ecba8c5886658861 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 15 Jul 2016 22:26:45 +0200 Subject: [PATCH 2/4] Update version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 05edfd3..812d1e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "angular-ui-tinymce", - "version": "0.0.16", + "name": "gartner-ui-tinymce", + "version": "0.0.17-alpha.1", "descriptin": "This directive allows you to add a tinymce to your form elements.", "author": "https://github.com/angular-ui/ui-tinymce/graphs/contributors", "license": "MIT", From 68a2036fbfe5107195faa2d417bf34c1ec8ba9a1 Mon Sep 17 00:00:00 2001 From: Mads Lie Jensen Date: Fri, 15 Jul 2016 22:29:36 +0200 Subject: [PATCH 3/4] Dont change package name --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 812d1e5..7a594e5 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "gartner-ui-tinymce", + "name": "angular-ui-tinymce", "version": "0.0.17-alpha.1", "descriptin": "This directive allows you to add a tinymce to your form elements.", "author": "https://github.com/angular-ui/ui-tinymce/graphs/contributors", From 39591102267f20f38641eb90c49ea1f46c0707dc Mon Sep 17 00:00:00 2001 From: Mads Lie Jensen Date: Fri, 15 Jul 2016 21:29:29 +0200 Subject: [PATCH 4/4] A fix for #158 --- dist/tinymce.min.js | 2 +- src/tinymce.js | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dist/tinymce.min.js b/dist/tinymce.min.js index cd6b161..ac9ce0c 100644 --- a/dist/tinymce.min.js +++ b/dist/tinymce.min.js @@ -1 +1 @@ -angular.module("ui.tinymce",[]).value("uiTinymceConfig",{}).directive("uiTinymce",["$rootScope","$compile","$timeout","$window","$sce","uiTinymceConfig","uiTinymceService",function(a,b,c,d,e,f,g){return f=f||{},f.baseUrl&&(tinymce.baseURL=f.baseUrl),{require:["ngModel","^?form"],priority:599,link:function(h,i,j,k){function l(a){a?(m(),o&&o.getBody().setAttribute("contenteditable",!1)):(m(),o&&!o.settings.readonly&&o.getDoc()&&o.getBody().setAttribute("contenteditable",!0))}function m(){o||(o=tinymce.get(j.id))}if(d.tinymce){var n,o,p=k[0],q=k[1]||null,r={debounce:!0},s=function(b){var c=b.getContent({format:r.format}).trim();c=e.trustAsHtml(c),p.$setViewValue(c),a.$$phase||h.$digest()},t=g.getUniqueId();j.$set("id",t),n={},angular.extend(n,h.$eval(j.uiTinymce));var u=function(a){var b;return function(d){c.cancel(b),b=c(function(){return function(a){a.isDirty()&&(a.save(),s(a))}(d)},a)}}(400),v={setup:function(b){b.on("init",function(){p.$render(),p.$setPristine(),p.$setUntouched(),q&&q.$setPristine()}),b.on("ExecCommand change NodeChange ObjectResized",function(){return r.debounce?void u(b):(b.save(),void s(b))}),b.on("blur",function(){i[0].blur(),p.$setTouched(),a.$$phase||h.$digest()}),b.on("remove",function(){i.remove()}),f.setup&&f.setup(b,{updateView:s}),n.setup&&n.setup(b,{updateView:s})},format:n.format||"html",selector:"#"+j.id};angular.extend(r,f,n,v),c(function(){r.baseURL&&(tinymce.baseURL=r.baseURL);var a=tinymce.init(r);a&&"function"==typeof a.then?a.then(function(){l(h.$eval(j.ngDisabled))}):l(h.$eval(j.ngDisabled))}),p.$formatters.unshift(function(a){return a?e.trustAsHtml(a):""}),p.$parsers.unshift(function(a){return a?e.getTrustedHtml(a):""}),p.$render=function(){m();var a=p.$viewValue?e.getTrustedHtml(p.$viewValue):"";o&&o.getDoc()&&(o.setContent(a),o.fire("change"))},j.$observe("disabled",l),h.$on("$tinymce:refresh",function(a,c){var d=j.id;if(angular.isUndefined(c)||c===d){var e=i.parent(),f=i.clone();f.removeAttr("id"),f.removeAttr("style"),f.removeAttr("aria-hidden"),tinymce.execCommand("mceRemoveEditor",!1,d),e.append(b(f)(h))}}),h.$on("$destroy",function(){m(),o&&(o.remove(),o=null)})}}}}]).service("uiTinymceService",[function(){var a=function(){var a="ui-tinymce",b=0,c=function(){return b++,a+"-"+b};return{getUniqueId:c}};return new a}]); \ No newline at end of file +angular.module("ui.tinymce",[]).value("uiTinymceConfig",{}).directive("uiTinymce",["$rootScope","$compile","$timeout","$window","$sce","uiTinymceConfig","uiTinymceService",function(a,b,c,d,e,f,g){return f=f||{},f.baseUrl&&(tinymce.baseURL=f.baseUrl),{require:["ngModel","^?form"],priority:599,link:function(h,i,j,k){function l(a){a?(m(),o&&o.getBody().setAttribute("contenteditable",!1)):(m(),o&&!o.settings.readonly&&o.getDoc()&&o.getBody().setAttribute("contenteditable",!0))}function m(){o||(o=tinymce.get(j.id))}if(d.tinymce){var n,o,p=k[0],q=k[1]||null,r={debounce:!0},s=function(b){var c=b.getContent({format:r.format}).trim();c=e.trustAsHtml(c),p.$setViewValue(c),a.$$phase||h.$digest()},t=g.getUniqueId();j.$set("id",t),n={};var u=function(a){var b;return function(d){c.cancel(b),b=c(function(){return function(a){a.isDirty()&&(a.save(),s(a))}(d)},a)}}(400),v={setup:function(b){b.on("init",function(){p.$render(),p.$setPristine(),p.$setUntouched(),q&&q.$setPristine()}),b.on("ExecCommand change NodeChange ObjectResized",function(){return r.debounce?void u(b):(b.save(),void s(b))}),b.on("blur",function(){i[0].blur(),p.$setTouched(),a.$$phase||h.$digest()}),b.on("remove",function(){i.remove()}),f.setup&&f.setup(b,{updateView:s}),n.setup&&n.setup(b,{updateView:s})},format:n.format||"html",selector:"#"+j.id};c(function(){angular.extend(n,h.$eval(j.uiTinymce)),angular.extend(r,f,n,v),r.baseURL&&(tinymce.baseURL=r.baseURL);var a=tinymce.init(r);a&&"function"==typeof a.then?a.then(function(){l(h.$eval(j.ngDisabled))}):l(h.$eval(j.ngDisabled))}),p.$formatters.unshift(function(a){return a?e.trustAsHtml(a):""}),p.$parsers.unshift(function(a){return a?e.getTrustedHtml(a):""}),p.$render=function(){m();var a=p.$viewValue?e.getTrustedHtml(p.$viewValue):"";o&&o.getDoc()&&(o.setContent(a),o.fire("change"))},j.$observe("disabled",l),h.$on("$tinymce:refresh",function(a,c){var d=j.id;if(angular.isUndefined(c)||c===d){var e=i.parent(),f=i.clone();f.removeAttr("id"),f.removeAttr("style"),f.removeAttr("aria-hidden"),tinymce.execCommand("mceRemoveEditor",!1,d),e.append(b(f)(h))}}),h.$on("$destroy",function(){m(),o&&(o.remove(),o=null)})}}}}]).service("uiTinymceService",[function(){var a=function(){var a="ui-tinymce",b=0,c=function(){return b++,a+"-"+b};return{getUniqueId:c}};return new a}]); \ No newline at end of file diff --git a/src/tinymce.js b/src/tinymce.js index c0291af..26188d6 100644 --- a/src/tinymce.js +++ b/src/tinymce.js @@ -56,8 +56,6 @@ angular.module('ui.tinymce', []) expression = {}; - angular.extend(expression, scope.$eval(attrs.uiTinymce)); - //Debounce update and save action var debouncedUpdate = (function(debouncedUpdateDelay) { var debouncedUpdateTimer; @@ -128,13 +126,17 @@ angular.module('ui.tinymce', []) format: expression.format || 'html', selector: '#' + attrs.id }; - // extend options with initial uiTinymceConfig and - // options from directive attribute value - angular.extend(options, uiTinymceConfig, expression, setupOptions); + // Wrapped in $timeout due to $tinymce:refresh implementation, requires // element to be present in DOM before instantiating editor when // re-rendering directive $timeout(function() { + angular.extend(expression, scope.$eval(attrs.uiTinymce)); + + // extend options with initial uiTinymceConfig and + // options from directive attribute value + angular.extend(options, uiTinymceConfig, expression, setupOptions); + if (options.baseURL){ tinymce.baseURL = options.baseURL; }