diff --git a/README.md b/README.md index 1a80a44..c2f5121 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,18 @@ bower install angular-contenteditable ## Usage +```javascript +angular.module('myapp', ['contenteditable']) + .controller('Ctrl', function($scope){ + $scope.model="interesting stuff" }) +``` + ```html -
+
+
``` ## Development diff --git a/angular-contenteditable.js b/angular-contenteditable.js index 64cfc64..54c9fb8 100644 --- a/angular-contenteditable.js +++ b/angular-contenteditable.js @@ -15,7 +15,7 @@ }); }); old_render = ngModel.$render; - return ngModel.$render = function() { + ngModel.$render = function() { var el, el2, range, sel; if (old_render != null) { old_render(); @@ -34,6 +34,20 @@ sel.removeAllRanges(); return sel.addRange(range); }; + if (attrs.selectNonEditable && attrs.selectNonEditable !== "false") { + return elmt.click(function(e) { + var range, sel, target; + target = e.toElement; + if (target !== this && angular.element(target).attr('contenteditable') === 'false') { + range = document.createRange(); + sel = window.getSelection(); + range.setStartBefore(target); + range.setEndAfter(target); + sel.removeAllRanges(); + return sel.addRange(range); + } + }); + } } }; }); diff --git a/bower.json b/bower.json index 0db0a92..31419c6 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { "name": "angular-contenteditable" -, "version": "0.1.0" +, "version": "0.2.0" , "main": "angular-contenteditable.js" , "ignore": [ ".*" diff --git a/package.json b/package.json index cd6f48f..717469e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-contenteditable", - "version": "0.1.0", + "version": "0.2.0", "description": "angular extensions", "main": "angular-contenteditable.js", "directories": { diff --git a/src/contenteditable.coffee b/src/contenteditable.coffee index 59687a1..f5083fc 100644 --- a/src/contenteditable.coffee +++ b/src/contenteditable.coffee @@ -26,4 +26,16 @@ angular.module('contenteditable', []) range.collapse(true) sel.removeAllRanges() sel.addRange(range) + + # select whole sub-span if it has contenteditable="false" + if attrs.selectNonEditable && attrs.selectNonEditable != "false" + elmt.click (e) -> + target = e.toElement + if target != @ && angular.element(target).attr('contenteditable') == 'false' + range = document.createRange() + sel = window.getSelection() + range.setStartBefore(target) + range.setEndAfter(target) + sel.removeAllRanges() + sel.addRange(range) ) diff --git a/test/fixtures/select-non-editable.html b/test/fixtures/select-non-editable.html new file mode 100644 index 0000000..f61ba9d --- /dev/null +++ b/test/fixtures/select-non-editable.html @@ -0,0 +1,33 @@ + + + + Simple + + + + + + + +
+ +
+ something +
+
+
+ +
{{ model }}
+
+
+ +