mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-04 15:24:23 +01:00
86 lines
2.6 KiB
JavaScript
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');
|
|
};
|
|
|
|
}
|
|
};
|
|
|
|
});
|