New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

angular-summernote

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-summernote - npm Package Compare versions

Comparing version

to
0.4.0

6

bower.json
{
"name": "angular-summernote",
"description": "AngularJS directive to Summernote",
"version": "0.3.2",
"version": "0.4.0",
"main": [

@@ -36,3 +36,3 @@ "./dist/angular-summernote.js"

"dependencies": {
"summernote": "~0.6.0",
"summernote": "~0.6.4",
"angular": "~1.3.0"

@@ -42,3 +42,3 @@ },

"angular-1.2": "https://raw.githubusercontent.com/angular/bower-angular/v1.2.26/angular.min.js",
"chai": "~1.10.0",
"chai": "~2.3.0",
"angular-mocks": "~1.3.0",

@@ -45,0 +45,0 @@ "angular-mocks-1.2": "https://raw.githubusercontent.com/angular/bower-angular-mocks/v1.2.26/angular-mocks.js"

@@ -0,1 +1,11 @@

# 0.4.0 (2015-05-25)
## Breaking changes
* Support Summernote v0.6.4+. It's not compatible with the version under v0.6.4.
If you use summernote v0.6.3-, use angular-summernote v0.3.2.
* Now, editor object exposed via `editor` attribute.
## Features
* Support `ngModelOptions`
* Support `onToolbarClick` event
* Publish in npm registry
# 0.3.2 (2015-02-13)

@@ -2,0 +12,0 @@ * bug fixes

@@ -25,12 +25,11 @@ /**

summernoteConfig.oninit = $scope.init;
summernoteConfig.onenter = function(evt) { $scope.enter({evt:evt}); };
summernoteConfig.onfocus = function(evt) { $scope.focus({evt:evt}); };
summernoteConfig.onblur = function(evt) { $scope.blur({evt:evt}); };
summernoteConfig.onpaste = function(evt) { $scope.paste({evt:evt}); };
summernoteConfig.onkeyup = function(evt) { $scope.keyup({evt:evt}); };
summernoteConfig.onkeydown = function(evt) { $scope.keydown({evt:evt}); };
summernoteConfig.onInit = $scope.init;
summernoteConfig.onEnter = function(evt) { $scope.enter({evt:evt}); };
summernoteConfig.onFocus = function(evt) { $scope.focus({evt:evt}); };
summernoteConfig.onPaste = function(evt) { $scope.paste({evt:evt}); };
summernoteConfig.onKeyup = function(evt) { $scope.keyup({evt:evt}); };
summernoteConfig.onKeydown = function(evt) { $scope.keydown({evt:evt}); };
if (angular.isDefined($attrs.onImageUpload)) {
summernoteConfig.onImageUpload = function(files, editor) {
$scope.imageUpload({files:files, editor:editor, editable: $scope.editable});
summernoteConfig.onImageUpload = function(files) {
$scope.imageUpload({files:files, editable: $scope.editable});
};

@@ -40,10 +39,8 @@ }

this.activate = function(scope, element, ngModel) {
var promise;
var updateNgModel = function() {
var newValue = element.code();
if (ngModel && ngModel.$viewValue !== newValue) {
if (promise) { $timeout.cancel(promise); }
var promise = $timeout(function() {
$timeout(function() {
ngModel.$setViewValue(newValue);
}, 400);
}, 0);
}

@@ -56,2 +53,11 @@ };

};
summernoteConfig.onBlur = function(evt) {
element.blur();
$scope.blur({evt:evt});
};
if (angular.isDefined($attrs.onToolbarClick)) {
element.on('summernote.toolbar.click', function (evt) {
$scope.toolbarClick({evt: evt});
});
}

@@ -93,2 +99,5 @@ element.summernote(summernoteConfig);

}
if (angular.isDefined($attrs.editor)) {
$scope.editor = element;
}

@@ -122,2 +131,3 @@ currentElement = element;

editable: '=',
editor: '=',
init: '&onInit',

@@ -131,2 +141,3 @@ enter: '&onEnter',

change: '&onChange',
toolbarClick: '&onToolbarClick',
imageUpload: '&onImageUpload'

@@ -133,0 +144,0 @@ },

/*
angular-summernote v0.3.2
angular-summernote v0.4.0
Copyright 2014 Jeonghoon Byun
License: MIT
*/
angular.module("summernote",[]).controller("SummernoteController",["$scope","$attrs","$timeout",function($scope,$attrs,$timeout){"use strict";var currentElement,summernoteConfig=$scope.summernoteConfig||{};if(angular.isDefined($attrs.height)&&(summernoteConfig.height=$attrs.height),angular.isDefined($attrs.focus)&&(summernoteConfig.focus=!0),angular.isDefined($attrs.airmode)&&(summernoteConfig.airMode=!0),angular.isDefined($attrs.lang)){if(!angular.isDefined($.summernote.lang[$attrs.lang]))throw new Error('"'+$attrs.lang+'" lang file must be exist.');summernoteConfig.lang=$attrs.lang}summernoteConfig.oninit=$scope.init,summernoteConfig.onenter=function(evt){$scope.enter({evt:evt})},summernoteConfig.onfocus=function(evt){$scope.focus({evt:evt})},summernoteConfig.onblur=function(evt){$scope.blur({evt:evt})},summernoteConfig.onpaste=function(evt){$scope.paste({evt:evt})},summernoteConfig.onkeyup=function(evt){$scope.keyup({evt:evt})},summernoteConfig.onkeydown=function(evt){$scope.keydown({evt:evt})},angular.isDefined($attrs.onImageUpload)&&(summernoteConfig.onImageUpload=function(files,editor){$scope.imageUpload({files:files,editor:editor,editable:$scope.editable})}),this.activate=function(scope,element,ngModel){var updateNgModel=function(){var newValue=element.code();ngModel&&ngModel.$viewValue!==newValue&&$timeout(function(){ngModel.$setViewValue(newValue)},0)};summernoteConfig.onChange=function(contents){updateNgModel(),$scope.change({contents:contents,editable:$scope.editable})},element.summernote(summernoteConfig);var unwatchNgModel,editor$=element.next(".note-editor");editor$.find(".note-toolbar").click(function(){updateNgModel(),editor$.hasClass("codeview")?(editor$.on("keyup",updateNgModel),ngModel&&(unwatchNgModel=scope.$watch(function(){return ngModel.$modelValue},function(newValue){editor$.find(".note-codable").val(newValue)}))):(editor$.off("keyup",updateNgModel),angular.isFunction(unwatchNgModel)&&unwatchNgModel())}),ngModel&&(ngModel.$render=function(){element.code(ngModel.$viewValue||"")}),angular.isDefined($attrs.editable)&&($scope.editable=editor$.find(".note-editable")),currentElement=element,element.on("$destroy",function(){element.destroy(),$scope.summernoteDestroyed=!0})},$scope.$on("$destroy",function(){$scope.summernoteDestroyed||currentElement.destroy()})}]).directive("summernote",[function(){"use strict";return{restrict:"EA",transclude:!0,replace:!0,require:["summernote","^?ngModel"],controller:"SummernoteController",scope:{summernoteConfig:"=config",editable:"=",init:"&onInit",enter:"&onEnter",focus:"&onFocus",blur:"&onBlur",paste:"&onPaste",keyup:"&onKeyup",keydown:"&onKeydown",change:"&onChange",imageUpload:"&onImageUpload"},template:'<div class="summernote"></div>',link:function(scope,element,attrs,ctrls){var summernoteController=ctrls[0],ngModel=ctrls[1];summernoteController.activate(scope,element,ngModel)}}}]);
angular.module("summernote",[]).controller("SummernoteController",["$scope","$attrs","$timeout",function($scope,$attrs,$timeout){"use strict";var currentElement,summernoteConfig=$scope.summernoteConfig||{};if(angular.isDefined($attrs.height)&&(summernoteConfig.height=$attrs.height),angular.isDefined($attrs.focus)&&(summernoteConfig.focus=!0),angular.isDefined($attrs.airmode)&&(summernoteConfig.airMode=!0),angular.isDefined($attrs.lang)){if(!angular.isDefined($.summernote.lang[$attrs.lang]))throw new Error('"'+$attrs.lang+'" lang file must be exist.');summernoteConfig.lang=$attrs.lang}summernoteConfig.onInit=$scope.init,summernoteConfig.onEnter=function(evt){$scope.enter({evt:evt})},summernoteConfig.onFocus=function(evt){$scope.focus({evt:evt})},summernoteConfig.onPaste=function(evt){$scope.paste({evt:evt})},summernoteConfig.onKeyup=function(evt){$scope.keyup({evt:evt})},summernoteConfig.onKeydown=function(evt){$scope.keydown({evt:evt})},angular.isDefined($attrs.onImageUpload)&&(summernoteConfig.onImageUpload=function(files){$scope.imageUpload({files:files,editable:$scope.editable})}),this.activate=function(scope,element,ngModel){var updateNgModel=function(){var newValue=element.code();ngModel&&ngModel.$viewValue!==newValue&&$timeout(function(){ngModel.$setViewValue(newValue)},0)};summernoteConfig.onChange=function(contents){updateNgModel(),$scope.change({contents:contents,editable:$scope.editable})},summernoteConfig.onBlur=function(evt){element.blur(),$scope.blur({evt:evt})},angular.isDefined($attrs.onToolbarClick)&&element.on("summernote.toolbar.click",function(evt){$scope.toolbarClick({evt:evt})}),element.summernote(summernoteConfig);var unwatchNgModel,editor$=element.next(".note-editor");editor$.find(".note-toolbar").click(function(){updateNgModel(),editor$.hasClass("codeview")?(editor$.on("keyup",updateNgModel),ngModel&&(unwatchNgModel=scope.$watch(function(){return ngModel.$modelValue},function(newValue){editor$.find(".note-codable").val(newValue)}))):(editor$.off("keyup",updateNgModel),angular.isFunction(unwatchNgModel)&&unwatchNgModel())}),ngModel&&(ngModel.$render=function(){element.code(ngModel.$viewValue||"")}),angular.isDefined($attrs.editable)&&($scope.editable=editor$.find(".note-editable")),angular.isDefined($attrs.editor)&&($scope.editor=element),currentElement=element,element.on("$destroy",function(){element.destroy(),$scope.summernoteDestroyed=!0})},$scope.$on("$destroy",function(){$scope.summernoteDestroyed||currentElement.destroy()})}]).directive("summernote",[function(){"use strict";return{restrict:"EA",transclude:!0,replace:!0,require:["summernote","^?ngModel"],controller:"SummernoteController",scope:{summernoteConfig:"=config",editable:"=",editor:"=",init:"&onInit",enter:"&onEnter",focus:"&onFocus",blur:"&onBlur",paste:"&onPaste",keyup:"&onKeyup",keydown:"&onKeydown",change:"&onChange",toolbarClick:"&onToolbarClick",imageUpload:"&onImageUpload"},template:'<div class="summernote"></div>',link:function(scope,element,attrs,ctrls){var summernoteController=ctrls[0],ngModel=ctrls[1];summernoteController.activate(scope,element,ngModel)}}}]);
{
"name": "angular-summernote",
"description": "AngularJS directive to Summernote",
"version": "0.3.2",
"version": "0.4.0",
"author": {

@@ -6,0 +6,0 @@ "name": "\"Outsider\" Jeonghoon Byun",

@@ -28,3 +28,3 @@ # angular-summernote - [AngularJS](http://angularjs.org/) directive to [Summernote](http://summernote.org/)

See at [JSFiddle](http://jsfiddle.net/outsider/n8dt4/158/embedded/result%2Chtml%2Cjs%2Ccss/)
See at [JSFiddle](http://jsfiddle.net/outsider/n8dt4/198/embedded/result%2Chtml%2Cjs%2Ccss/)
or run example in projects(need to run `bower install` before run)

@@ -162,4 +162,4 @@

$scope.keydown = function(e) { console.log('Key is pressed:', e.keyCode); }
$scope.imageUpload = function(files, editor) {
console.log('image upload:', files, editor);
$scope.imageUpload = function(files) {
console.log('image upload:', files);
console.log('image upload\'s editable:', $scope.editable);

@@ -174,3 +174,4 @@ }

on-keydown="keydown(evt)" on-change="change(contents)"
on-image-upload="imageUpload(files, editor)" editable="editable">
on-toolbar-click="toolbarClick(evt)"
on-image-upload="imageUpload(files)" editable="editable" editor="editor">
</summernote>

@@ -181,5 +182,10 @@ ```

(see [summernote's callback](http://summernote.org/#/features#callbacks)),
you should defined `editable` attribute and use it in `$scope`.
you should define `editable` attribute and use it in `$scope`.
(Because [AngularJS 1.3.x restricts access to DOM nodes from within expressions](https://docs.angularjs.org/error/$parse/isecdom))
Since summernote v0.6.4, APIs have been changed. So, If you use the verions,
`onImageUpload` is not return `editor` object anymore. If you want to user
`editor` object, you should define `editor` attribute and use it in `$scope`.
Futhermore, you can use summernote's APIs via the `editor` object.
### i18n Support

@@ -186,0 +192,0 @@

@@ -25,11 +25,11 @@ /**

summernoteConfig.oninit = $scope.init;
summernoteConfig.onenter = function(evt) { $scope.enter({evt:evt}); };
summernoteConfig.onfocus = function(evt) { $scope.focus({evt:evt}); };
summernoteConfig.onpaste = function(evt) { $scope.paste({evt:evt}); };
summernoteConfig.onkeyup = function(evt) { $scope.keyup({evt:evt}); };
summernoteConfig.onkeydown = function(evt) { $scope.keydown({evt:evt}); };
summernoteConfig.onInit = $scope.init;
summernoteConfig.onEnter = function(evt) { $scope.enter({evt:evt}); };
summernoteConfig.onFocus = function(evt) { $scope.focus({evt:evt}); };
summernoteConfig.onPaste = function(evt) { $scope.paste({evt:evt}); };
summernoteConfig.onKeyup = function(evt) { $scope.keyup({evt:evt}); };
summernoteConfig.onKeydown = function(evt) { $scope.keydown({evt:evt}); };
if (angular.isDefined($attrs.onImageUpload)) {
summernoteConfig.onImageUpload = function(files, editor) {
$scope.imageUpload({files:files, editor:editor, editable: $scope.editable});
summernoteConfig.onImageUpload = function(files) {
$scope.imageUpload({files:files, editable: $scope.editable});
};

@@ -52,6 +52,11 @@ }

};
summernoteConfig.onblur = function(evt) {
summernoteConfig.onBlur = function(evt) {
element.blur();
$scope.blur({evt:evt});
};
if (angular.isDefined($attrs.onToolbarClick)) {
element.on('summernote.toolbar.click', function (evt) {
$scope.toolbarClick({evt: evt});
});
}

@@ -93,2 +98,5 @@ element.summernote(summernoteConfig);

}
if (angular.isDefined($attrs.editor)) {
$scope.editor = element;
}

@@ -122,2 +130,3 @@ currentElement = element;

editable: '=',
editor: '=',
init: '&onInit',

@@ -131,2 +140,3 @@ enter: '&onEnter',

change: '&onChange',
toolbarClick: '&onToolbarClick',
imageUpload: '&onImageUpload'

@@ -133,0 +143,0 @@ },

@@ -340,3 +340,2 @@ /**

var timer = setInterval(function() {
$timeout.flush();
if (element.code() !== text) {

@@ -364,3 +363,3 @@ expect(element.code()).to.match(/gravatar/);

it('oninit should be invoked', function(done) {
it('onInit should be invoked', function(done) {
scope.init = function() {

@@ -374,3 +373,3 @@ expect(true).to.be.true;

it('onenter should be invoked', function(done) {
it('onEnter should be invoked', function(done) {
scope.enter = function() {

@@ -386,4 +385,4 @@ // then

// when
var e= jQuery.Event('keypress');
// e.keyCode = 13; // Enter key
var e= jQuery.Event('keydown');
e.keyCode = 13; // Enter key
element.next().find('.note-editable').trigger(e);

@@ -396,3 +395,3 @@ scope.$digest();

it('onfocus should be invoked', function(done) {
it('onFocus should be invoked', function(done) {
scope.focus = function(e) {

@@ -415,3 +414,3 @@ // then

it('onblur should be invoked', function(done) {
it('onBlur should be invoked', function(done) {
scope.blur = function(e) {

@@ -434,3 +433,3 @@ // then

it('onpaste should be invoked', function(done) {
it('onPaste should be invoked', function(done) {
scope.paste = function() {

@@ -456,3 +455,3 @@ // then

it('onkeyup should be invoked', function(done) {
it('onKeyup should be invoked', function(done) {
scope.keyup = function(e) {

@@ -475,3 +474,3 @@ // then

it('onkeydown should be invoked', function(done) {
it('onKeydown should be invoked', function(done) {
scope.keydown = function(e) {

@@ -532,2 +531,20 @@ // then

it('onToolbarClick should be invoked', function(done) {
scope.click = function(e) {
// then
expect(e).to.be.exist;
done();
};
// given
var el = $('<summernote on-toolbar-click="click(evt)"></summernote>').appendTo(document.body);
var element = $compile(el)(scope);
scope.$digest();
// when
element.next().find('.note-toolbar').click();
scope.$digest();
// tear down
el.next().remove();
el.remove();
});
// TODO: add tests for onImageUpload

@@ -555,2 +572,21 @@ });

describe('"editor" attribute', function() {
var scope;
beforeEach(function() {
scope = $rootScope.$new();
});
it('should be assigned as editor object', function () {
var el = $('<summernote editor="snote"></summernote>');
var element = $compile(el)(scope);
scope.$digest();
expect(element.get(0)).to.be.equal(scope.snote.get(0));
el.next().remove();
el.remove();
});
});
});

Sorry, the diff of this file is not supported yet