From 28e9016401b03b4d5fa7ae4737febc3cd897a61e Mon Sep 17 00:00:00 2001 From: MichaelBuen Date: Mon, 12 Oct 2015 14:31:43 +0800 Subject: [PATCH 1/3] Fixed the eagerly dirtied state --- angular-pagedown.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/angular-pagedown.js b/angular-pagedown.js index 9eb962e..6780344 100644 --- a/angular-pagedown.js +++ b/angular-pagedown.js @@ -85,7 +85,9 @@ angular.module("ui.pagedown", []) editorElement.val(scope.ngModel); converter.hooks.chain("postConversion", function (text) { - ngModel.$setViewValue(editorElement.val()); + + if (scope.ngModel !== editorElement.val()) + ngModel.$setViewValue(editorElement.val()); // update scope.previewContent = text; From 2a77bda5db1b4f85528ee9ebad0e606e382c638e Mon Sep 17 00:00:00 2001 From: MichaelBuen Date: Mon, 12 Oct 2015 15:36:45 +0800 Subject: [PATCH 2/3] Fixed the delayed model value when ng-change is called. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turns out calling $setViewValue in newElement’s ng-change( the scope.changed() ) would automatically call the user’s own ng-change, no need to do scope.$parent.$eval(attrs.ngChange) by ourselves. Correct: http://plnkr.co/edit/0vOkOmm9z4yCZY3ATuFp?p=preview --- angular-pagedown.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/angular-pagedown.js b/angular-pagedown.js index 6780344..6b52ffd 100644 --- a/angular-pagedown.js +++ b/angular-pagedown.js @@ -33,10 +33,7 @@ angular.module("ui.pagedown", []) }, link: function (scope, element, attrs, ngModel) { - scope.changed = function () { - ngModel.$setDirty(); - scope.$parent.$eval(attrs.ngChange); - }; + var editorUniqueId; @@ -84,13 +81,23 @@ angular.module("ui.pagedown", []) editorElement.val(scope.ngModel); + + scope.changed = function () { + var v = editorElement.val(); + ngModel.$setViewValue(v); + }; + converter.hooks.chain("postConversion", function (text) { - if (scope.ngModel !== editorElement.val()) - ngModel.$setViewValue(editorElement.val()); + var v = editorElement.val(); + if (scope.ngModel !== v) { + ngModel.$setViewValue(v); + } + // update scope.previewContent = text; + return text; }); From 3182af22583cb9d6cb1f55a995ab12e4d358ff12 Mon Sep 17 00:00:00 2001 From: MichaelBuen Date: Mon, 12 Oct 2015 16:01:50 +0800 Subject: [PATCH 3/3] Updated the documentation --- README.md | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 3d8ae99..10a8bf7 100644 --- a/README.md +++ b/README.md @@ -35,34 +35,45 @@ This package comes with 2 directives: ## Editor ```html - + ``` Options: -#### content +#### ng-model -1. An expression. +1. An expression. 1. *Expression*: Mandatory -1. Example: `` -1. Example: `` +1. Example: `` +1. Example: `` + +#### ng-change + +1. An expression. +1. *Expression*: Optional +1. Example: `` + +#### $dirty + +- `` + - ``
`` #### show-preview -1. Should a live preview be displayed. +1. Should a live preview be displayed. 1. *Boolean*: Default to true #### help -1. An expression to invoke upon clicking the help (?) button. +1. An expression to invoke upon clicking the help (?) button. 1. *Expression*: Default to open http://daringfireball.net/projects/markdown/syntax in new window -1. Example: `` +1. Example: `` #### insert-image -1. An expression to invoke upon clicking the "Insert Image" button. +1. An expression to invoke upon clicking the "Insert Image" button. 1. *Expression*: Default to `noop` -1. Example: `` +1. Example: `` 1. The parent scope function `promptImageUrl` must return either: - A string of image URL. - A promise resolved with a string of image URL. @@ -71,15 +82,15 @@ Options: 1. An expression. 1. *Expression*: Default to empty string -1. Example: `` +1. Example: `` #### editor-class 1. An expression to use as [ngClass](https://docs.angularjs.org/api/ng/directive/ngClass). 1. *Expression*: Default to `wmd-input` -1. Example: `` -1. Example: `` -1. Example: `` +1. Example: `` +1. Example: `` +1. Example: `` #### editor-rows