Code coverage report for src/angular-summernote.js

Statements: 91.94% (57 / 62)      Branches: 78.13% (25 / 32)      Functions: 89.47% (17 / 19)      Lines: 90.57% (48 / 53)      Ignored: none     

All files » src/ » angular-summernote.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125            1         30     30 30 30 30 1 1         29 29 29 29 29 29 29 29     29           29 29 9 9 4 4 4         29 3 3     29   29   29 5     5 2 2 2 5   2       3 3           29 7 9       29     29 1           28                                       29     29        
/**
 * Copyright (c) 2013 JeongHoon Byun aka "Outsider", <http://blog.outsider.ne.kr/>
 * Licensed under the MIT license.
 * <http://outsider.mit-license.org/>
 */
/* global angular */
angular.module('summernote', [])
 
  .controller('SummernoteController', ['$scope', '$attrs', function($scope, $attrs) {
    'use strict';
 
    var currentElement,
        summernoteConfig = $scope.summernoteConfig || {};
 
    if (angular.isDefined($attrs.height)) { summernoteConfig.height = $attrs.height; }
    if (angular.isDefined($attrs.focus)) { summernoteConfig.focus = true; }
    if (angular.isDefined($attrs.airmode)) { summernoteConfig.airMode = true; }
    if (angular.isDefined($attrs.lang)) {
      Eif (!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}); };
    summernoteConfig.onChange = function(contents, editable$) {
      $scope.change({contents:contents, editable$: editable$});
    };
    Iif (angular.isDefined($attrs.onImageUpload)) {
      summernoteConfig.onImageUpload = function(files, editor, welEditable) {
        $scope.imageUpload({files:files, editor:editor, welEditable:welEditable});
      };
    }
 
    this.activate = function(scope, element, ngModel) {
      var updateNgModel = function() {
        var newValue = element.code();
        if (ngModel && ngModel.$viewValue !== newValue) {
          ngModel.$setViewValue(newValue);
          Eif ($scope.$$phase !== '$apply' || $scope.$$phase !== '$digest' ) {
            scope.$apply();
          }
        }
      };
 
      summernoteConfig.onChange = function(contents, editable$) {
        updateNgModel();
        $scope.change({contents:contents, editable$: editable$});
      };
 
      element.summernote(summernoteConfig);
 
      var editor$ = element.next('.note-editor'),
          unwatchNgModel;
      editor$.find('.note-toolbar').click(function() {
        updateNgModel();
 
        // sync ngModel in codeview mode
        if (editor$.hasClass('codeview')) {
          editor$.on('keyup', updateNgModel);
          Eif (ngModel) {
            unwatchNgModel = scope.$watch(function () {
              return ngModel.$modelValue;
            }, function(newValue, oldValue) {
              editor$.find('.note-codable').val(newValue);
            });
          }
        } else {
          editor$.off('keyup', updateNgModel);
          Iif (angular.isFunction(unwatchNgModel)) {
            unwatchNgModel();
          }
        }
      });
 
      if (ngModel) {
        ngModel.$render = function() {
          element.code(ngModel.$viewValue || '');
        };
      }
 
      currentElement = element;
    };
 
    $scope.$on('$destroy', function () {
      currentElement.destroy();
    });
  }])
  .directive('summernote', [function() {
    'use strict';
 
    return {
      restrict: 'EA',
      transclude: true,
      replace: true,
      require: ['summernote', '^?ngModel'],
      controller: 'SummernoteController',
      scope: {
        summernoteConfig: '=config',
        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);
      }
    };
  }]);