1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-04 15:24:23 +01:00
fab-manager/vendor/assets/components/angular-medium-editor/dist/angular-medium-editor.js
2016-03-23 18:39:41 +01:00

86 lines
2.6 KiB
JavaScript

'use strict';
angular.module('angular-medium-editor', [])
.directive('mediumEditor', function() {
return {
require: 'ngModel',
restrict: 'AE',
scope: { bindOptions: '=' },
link: function(scope, iElement, iAttrs, ctrl) {
angular.element(iElement).addClass('angular-medium-editor');
// Parse options
var opts = {},
placeholder = '';
var prepOpts = function() {
if (iAttrs.options) {
opts = scope.$eval(iAttrs.options);
}
var bindOpts = {};
if (scope.bindOptions !== undefined) {
bindOpts = scope.bindOptions;
}
opts = angular.extend(opts, bindOpts);
};
prepOpts();
placeholder = opts.placeholder;
scope.$watch('bindOptions', function() {
// in case options are provided after mediumEditor directive has been compiled and linked (and after $render function executed)
// we need to re-initialize
if (ctrl.editor) {
ctrl.editor.destroy();
}
prepOpts();
// Hide placeholder when the model is not empty
if (!ctrl.$isEmpty(ctrl.$viewValue)) {
opts.placeholder = '';
}
ctrl.editor = new MediumEditor(iElement, opts);
});
var onChange = function() {
scope.$apply(function() {
// If user cleared the whole text, we have to reset the editor because MediumEditor
// lacks an API method to alter placeholder after initialization
if (iElement.html() === '<p><br></p>' || iElement.html() === '') {
opts.placeholder = placeholder;
var editor = new MediumEditor(iElement, opts);
}
ctrl.$setViewValue(iElement.html());
});
};
// view -> model
iElement.on('blur', onChange);
iElement.on('input', onChange);
iElement.on('paste', onChange);
// model -> view
ctrl.$render = function() {
if (!this.editor) {
// Hide placeholder when the model is not empty
if (!ctrl.$isEmpty(ctrl.$viewValue)) {
opts.placeholder = '';
}
this.editor = new MediumEditor(iElement, opts);
}
iElement.html(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);
// hide placeholder when view is not empty
if(!ctrl.$isEmpty(ctrl.$viewValue)) angular.element(iElement).removeClass('medium-editor-placeholder');
};
}
};
});