1827 lines
62 KiB
JavaScript
1827 lines
62 KiB
JavaScript
|
/* NicEdit - Micro Inline WYSIWYG
|
|||
|
* Copyright 2007-2008 Brian Kirchoff
|
|||
|
*
|
|||
|
* NicEdit is distributed under the terms of the MIT license
|
|||
|
* For more information visit http://nicedit.com/
|
|||
|
* Do not remove this copyright message
|
|||
|
*
|
|||
|
* Translated, modified table of colors (ColorButton), added `images manager` (ImagesManagerButton) by Lead Pepelats ( http://lead-pepelats.ru/ ), ©2013
|
|||
|
*
|
|||
|
*/
|
|||
|
var bkExtend = function() {
|
|||
|
var args = arguments;
|
|||
|
if (args.length == 1)
|
|||
|
args = [this, args[0]];
|
|||
|
for (var prop in args[1])
|
|||
|
args[0][prop] = args[1][prop];
|
|||
|
return args[0];
|
|||
|
};
|
|||
|
function bkClass() {
|
|||
|
}
|
|||
|
bkClass.prototype.construct = function() {
|
|||
|
};
|
|||
|
bkClass.extend = function(def) {
|
|||
|
var classDef = function() {
|
|||
|
if (arguments[0] !== bkClass) {
|
|||
|
return this.construct.apply(this, arguments);
|
|||
|
}
|
|||
|
};
|
|||
|
var proto = new this(bkClass);
|
|||
|
bkExtend(proto, def);
|
|||
|
classDef.prototype = proto;
|
|||
|
classDef.extend = this.extend;
|
|||
|
return classDef;
|
|||
|
};
|
|||
|
|
|||
|
var bkElement = bkClass.extend({
|
|||
|
construct: function(elm, d) {
|
|||
|
if (typeof(elm) == "string") {
|
|||
|
elm = (d || document).createElement(elm);
|
|||
|
}
|
|||
|
elm = $BK(elm);
|
|||
|
return elm;
|
|||
|
},
|
|||
|
appendTo: function(elm) {
|
|||
|
elm.appendChild(this);
|
|||
|
return this;
|
|||
|
},
|
|||
|
appendBefore: function(elm) {
|
|||
|
elm.parentNode.insertBefore(this, elm);
|
|||
|
return this;
|
|||
|
},
|
|||
|
addEvent: function(type, fn) {
|
|||
|
bkLib.addEvent(this, type, fn);
|
|||
|
return this;
|
|||
|
},
|
|||
|
setContent: function(c) {
|
|||
|
this.innerHTML = c;
|
|||
|
return this;
|
|||
|
},
|
|||
|
pos: function() {
|
|||
|
var curleft = curtop = 0;
|
|||
|
var o = obj = this;
|
|||
|
if (obj.offsetParent) {
|
|||
|
do {
|
|||
|
curleft += obj.offsetLeft;
|
|||
|
curtop += obj.offsetTop;
|
|||
|
} while (obj = obj.offsetParent);
|
|||
|
}
|
|||
|
var b = (!window.opera) ? parseInt(this.getStyle('border-width') || this.style.border) || 0 : 0;
|
|||
|
return [curleft + b, curtop + b + this.offsetHeight];
|
|||
|
},
|
|||
|
noSelect: function() {
|
|||
|
bkLib.noSelect(this);
|
|||
|
return this;
|
|||
|
},
|
|||
|
parentTag: function(t) {
|
|||
|
var elm = this;
|
|||
|
do {
|
|||
|
if (elm && elm.nodeName && elm.nodeName.toUpperCase() == t) {
|
|||
|
return elm;
|
|||
|
}
|
|||
|
elm = elm.parentNode;
|
|||
|
} while (elm);
|
|||
|
return false;
|
|||
|
},
|
|||
|
hasClass: function(cls) {
|
|||
|
return this.className.match(new RegExp('(\\s|^)nicEdit-' + cls + '(\\s|$)'));
|
|||
|
},
|
|||
|
addClass: function(cls) {
|
|||
|
if (!this.hasClass(cls)) {
|
|||
|
this.className += " nicEdit-" + cls
|
|||
|
}
|
|||
|
;
|
|||
|
return this;
|
|||
|
},
|
|||
|
removeClass: function(cls) {
|
|||
|
if (this.hasClass(cls)) {
|
|||
|
this.className = this.className.replace(new RegExp('(\\s|^)nicEdit-' + cls + '(\\s|$)'), ' ');
|
|||
|
}
|
|||
|
return this;
|
|||
|
},
|
|||
|
setStyle: function(st) {
|
|||
|
var elmStyle = this.style;
|
|||
|
for (var itm in st) {
|
|||
|
switch (itm) {
|
|||
|
case 'float':
|
|||
|
elmStyle['cssFloat'] = elmStyle['styleFloat'] = st[itm];
|
|||
|
break;
|
|||
|
case 'opacity':
|
|||
|
elmStyle.opacity = st[itm];
|
|||
|
elmStyle.filter = "alpha(opacity=" + Math.round(st[itm] * 100) + ")";
|
|||
|
break;
|
|||
|
case 'className':
|
|||
|
this.className = st[itm];
|
|||
|
break;
|
|||
|
default:
|
|||
|
//if(document.compatMode || itm != "cursor") { // Nasty Workaround for IE 5.5
|
|||
|
elmStyle[itm] = st[itm];
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|
|||
|
return this;
|
|||
|
},
|
|||
|
getStyle: function(cssRule, d) {
|
|||
|
var doc = (!d) ? document.defaultView : d;
|
|||
|
if (this.nodeType == 1)
|
|||
|
return (doc && doc.getComputedStyle) ? doc.getComputedStyle(this, null).getPropertyValue(cssRule) : this.currentStyle[ bkLib.camelize(cssRule) ];
|
|||
|
},
|
|||
|
remove: function() {
|
|||
|
this.parentNode.removeChild(this);
|
|||
|
return this;
|
|||
|
},
|
|||
|
setAttributes: function(at) {
|
|||
|
for (var itm in at) {
|
|||
|
this[itm] = at[itm];
|
|||
|
}
|
|||
|
return this;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var bkLib = {
|
|||
|
isMSIE: (navigator.appVersion.indexOf("MSIE") != -1),
|
|||
|
addEvent: function(obj, type, fn) {
|
|||
|
(obj.addEventListener) ? obj.addEventListener(type, fn, false) : obj.attachEvent("on" + type, fn);
|
|||
|
},
|
|||
|
toArray: function(iterable) {
|
|||
|
var length = iterable.length, results = new Array(length);
|
|||
|
while (length--) {
|
|||
|
results[length] = iterable[length]
|
|||
|
}
|
|||
|
;
|
|||
|
return results;
|
|||
|
},
|
|||
|
noSelect: function(element) {
|
|||
|
if (element.setAttribute && element.nodeName.toLowerCase() != 'input' && element.nodeName.toLowerCase() != 'textarea') {
|
|||
|
element.setAttribute('unselectable', 'on');
|
|||
|
}
|
|||
|
for (var i = 0; i < element.childNodes.length; i++) {
|
|||
|
bkLib.noSelect(element.childNodes[i]);
|
|||
|
}
|
|||
|
},
|
|||
|
camelize: function(s) {
|
|||
|
return s.replace(/\-(.)/g, function(m, l) {
|
|||
|
return l.toUpperCase()
|
|||
|
});
|
|||
|
},
|
|||
|
inArray: function(arr, item) {
|
|||
|
return (bkLib.search(arr, item) != null);
|
|||
|
},
|
|||
|
search: function(arr, itm) {
|
|||
|
for (var i = 0; i < arr.length; i++) {
|
|||
|
if (arr[i] == itm)
|
|||
|
return i;
|
|||
|
}
|
|||
|
return null;
|
|||
|
},
|
|||
|
cancelEvent: function(e) {
|
|||
|
e = e || window.event;
|
|||
|
if (e.preventDefault && e.stopPropagation) {
|
|||
|
e.preventDefault();
|
|||
|
e.stopPropagation();
|
|||
|
}
|
|||
|
return false;
|
|||
|
},
|
|||
|
domLoad: [],
|
|||
|
domLoaded: function() {
|
|||
|
if (arguments.callee.done)
|
|||
|
return;
|
|||
|
arguments.callee.done = true;
|
|||
|
for (i = 0; i < bkLib.domLoad.length; i++)
|
|||
|
bkLib.domLoad[i]();
|
|||
|
},
|
|||
|
onDomLoaded: function(fireThis) {
|
|||
|
this.domLoad.push(fireThis);
|
|||
|
if (document.addEventListener) {
|
|||
|
document.addEventListener("DOMContentLoaded", bkLib.domLoaded, null);
|
|||
|
} else if (bkLib.isMSIE) {
|
|||
|
document.write("<style>.nicEdit-main p { margin: 0; }</style><scr" + "ipt id=__ie_onload defer " + ((location.protocol == "https:") ? "src='javascript:void(0)'" : "src=//0") + "><\/scr" + "ipt>");
|
|||
|
$BK("__ie_onload").onreadystatechange = function() {
|
|||
|
if (this.readyState == "complete") {
|
|||
|
bkLib.domLoaded();
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
window.onload = bkLib.domLoaded;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
function $BK(elm) {
|
|||
|
if (typeof(elm) == "string") {
|
|||
|
elm = document.getElementById(elm);
|
|||
|
}
|
|||
|
return (elm && !elm.appendTo) ? bkExtend(elm, bkElement.prototype) : elm;
|
|||
|
}
|
|||
|
|
|||
|
var bkEvent = {
|
|||
|
addEvent: function(evType, evFunc) {
|
|||
|
if (evFunc) {
|
|||
|
this.eventList = this.eventList || {};
|
|||
|
this.eventList[evType] = this.eventList[evType] || [];
|
|||
|
this.eventList[evType].push(evFunc);
|
|||
|
}
|
|||
|
return this;
|
|||
|
},
|
|||
|
fireEvent: function() {
|
|||
|
var args = bkLib.toArray(arguments), evType = args.shift();
|
|||
|
if (this.eventList && this.eventList[evType]) {
|
|||
|
for (var i = 0; i < this.eventList[evType].length; i++) {
|
|||
|
this.eventList[evType][i].apply(this, args);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
function __(s) {
|
|||
|
return s;
|
|||
|
}
|
|||
|
|
|||
|
Function.prototype.closure = function() {
|
|||
|
var __method = this, args = bkLib.toArray(arguments), obj = args.shift();
|
|||
|
return function() {
|
|||
|
if (typeof(bkLib) != 'undefined') {
|
|||
|
return __method.apply(obj, args.concat(bkLib.toArray(arguments)));
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
Function.prototype.closureListener = function() {
|
|||
|
var __method = this, args = bkLib.toArray(arguments), object = args.shift();
|
|||
|
return function(e) {
|
|||
|
e = e || window.event;
|
|||
|
if (e.target) {
|
|||
|
var target = e.target;
|
|||
|
} else {
|
|||
|
var target = e.srcElement
|
|||
|
}
|
|||
|
;
|
|||
|
return __method.apply(object, [e, target].concat(args));
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
|
|||
|
var nicEditorConfig = bkClass.extend({
|
|||
|
buttons: {
|
|||
|
'bold': {name: __('Жирный'), command: 'Bold', tags: ['B', 'STRONG'], css: {'font-weight': 'bold'}, key: 'b'},
|
|||
|
'italic': {name: __('Курсив'), command: 'Italic', tags: ['EM', 'I'], css: {'font-style': 'italic'}, key: 'i'},
|
|||
|
'underline': {name: __('Подчеркнутый'), command: 'Underline', tags: ['U'], css: {'text-decoration': 'underline'}, key: 'u'},
|
|||
|
'left': {name: __('Выровнять текст по левому краю'), command: 'justifyleft', noActive: true},
|
|||
|
'center': {name: __('Выровнять текст по центру'), command: 'justifycenter', noActive: true},
|
|||
|
'right': {name: __('Выровнять текст по правому краю'), command: 'justifyright', noActive: true},
|
|||
|
'justify': {name: __('Выравнивание по ширине'), command: 'justifyfull', noActive: true},
|
|||
|
'ol': {name: __('Нумерованный список'), command: 'insertorderedlist', tags: ['OL']},
|
|||
|
'ul': {name: __('Маркированный список'), command: 'insertunorderedlist', tags: ['UL']},
|
|||
|
'subscript': {name: __('Подстрочный'), command: 'subscript', tags: ['SUB']},
|
|||
|
'superscript': {name: __('Надстрочный'), command: 'superscript', tags: ['SUP']},
|
|||
|
'strikethrough': {name: __('Зачеркнутый'), command: 'strikeThrough', css: {'text-decoration': 'line-through'}},
|
|||
|
'removeformat': {name: __('Убрать форматирование'), command: 'removeformat', noActive: true},
|
|||
|
'indent': {name: __('Увеличить отступ'), command: 'indent', noActive: true},
|
|||
|
'outdent': {name: __('Уменьшить отступ'), command: 'outdent', noActive: true},
|
|||
|
'hr': {name: __('Горизонтальная линия'), command: 'insertHorizontalRule', noActive: true}
|
|||
|
},
|
|||
|
iconsPath: 'nicEditorIcons.gif',
|
|||
|
buttonList: ['save', 'bold', 'italic', 'underline', 'left', 'center', 'right', 'justify', 'ol', 'ul', 'fontSize', 'fontFamily', 'fontFormat', 'indent', 'outdent', 'image', 'upload', 'imagesManager', 'link', 'unlink', 'forecolor', 'bgcolor'],
|
|||
|
iconList: {"xhtml": 1, "bgcolor": 2, "forecolor": 3, "bold": 4, "center": 5, "hr": 6, "indent": 7, "italic": 8, "justify": 9, "left": 10, "ol": 11, "outdent": 12, "removeformat": 13, "right": 14, "save": 25, "strikethrough": 16, "subscript": 17, "superscript": 18, "ul": 19, "underline": 20, "image": 21, "link": 22, "unlink": 23, "close": 24, "arrow": 26, "upload": 27, "imagesManager": 28, "folder": 29, "jpg": 30, "png": 31, "gif": 32, "bmp": 33}
|
|||
|
|
|||
|
});
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
|
|||
|
var nicEditors = {
|
|||
|
nicPlugins: [],
|
|||
|
editors: [],
|
|||
|
registerPlugin: function(plugin, options) {
|
|||
|
this.nicPlugins.push({p: plugin, o: options});
|
|||
|
},
|
|||
|
allTextAreas: function(nicOptions) {
|
|||
|
var textareas = document.getElementsByTagName("textarea");
|
|||
|
for (var i = 0; i < textareas.length; i++) {
|
|||
|
nicEditors.editors.push(new nicEditor(nicOptions).panelInstance(textareas[i]));
|
|||
|
}
|
|||
|
return nicEditors.editors;
|
|||
|
},
|
|||
|
findEditor: function(e) {
|
|||
|
var editors = nicEditors.editors;
|
|||
|
for (var i = 0; i < editors.length; i++) {
|
|||
|
if (editors[i].instanceById(e)) {
|
|||
|
return editors[i].instanceById(e);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
var nicEditor = bkClass.extend({
|
|||
|
construct: function(o) {
|
|||
|
this.options = new nicEditorConfig();
|
|||
|
bkExtend(this.options, o);
|
|||
|
this.nicInstances = new Array();
|
|||
|
this.loadedPlugins = new Array();
|
|||
|
|
|||
|
var plugins = nicEditors.nicPlugins;
|
|||
|
for (var i = 0; i < plugins.length; i++) {
|
|||
|
this.loadedPlugins.push(new plugins[i].p(this, plugins[i].o));
|
|||
|
}
|
|||
|
nicEditors.editors.push(this);
|
|||
|
bkLib.addEvent(document.body, 'mousedown', this.selectCheck.closureListener(this));
|
|||
|
},
|
|||
|
panelInstance: function(e, o) {
|
|||
|
e = this.checkReplace($BK(e));
|
|||
|
var panelElm = new bkElement('DIV').setStyle({width: (parseInt(e.getStyle('width')) || e.clientWidth) + 'px'}).appendBefore(e);
|
|||
|
this.setPanel(panelElm);
|
|||
|
return this.addInstance(e, o);
|
|||
|
},
|
|||
|
checkReplace: function(e) {
|
|||
|
var r = nicEditors.findEditor(e);
|
|||
|
if (r) {
|
|||
|
r.removeInstance(e);
|
|||
|
r.removePanel();
|
|||
|
}
|
|||
|
return e;
|
|||
|
},
|
|||
|
addInstance: function(e, o) {
|
|||
|
e = this.checkReplace($BK(e));
|
|||
|
if (e.contentEditable || !!window.opera) {
|
|||
|
var newInstance = new nicEditorInstance(e, o, this);
|
|||
|
} else {
|
|||
|
var newInstance = new nicEditorIFrameInstance(e, o, this);
|
|||
|
}
|
|||
|
this.nicInstances.push(newInstance);
|
|||
|
return this;
|
|||
|
},
|
|||
|
removeInstance: function(e) {
|
|||
|
e = $BK(e);
|
|||
|
var instances = this.nicInstances;
|
|||
|
for (var i = 0; i < instances.length; i++) {
|
|||
|
if (instances[i].e == e) {
|
|||
|
instances[i].remove();
|
|||
|
this.nicInstances.splice(i, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
removePanel: function(e) {
|
|||
|
if (this.nicPanel) {
|
|||
|
this.nicPanel.remove();
|
|||
|
this.nicPanel = null;
|
|||
|
}
|
|||
|
},
|
|||
|
instanceById: function(e) {
|
|||
|
e = $BK(e);
|
|||
|
var instances = this.nicInstances;
|
|||
|
for (var i = 0; i < instances.length; i++) {
|
|||
|
if (instances[i].e == e) {
|
|||
|
return instances[i];
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
setPanel: function(e) {
|
|||
|
this.nicPanel = new nicEditorPanel($BK(e), this.options, this);
|
|||
|
this.fireEvent('panel', this.nicPanel);
|
|||
|
return this;
|
|||
|
},
|
|||
|
nicCommand: function(cmd, args) {
|
|||
|
if (this.selectedInstance) {
|
|||
|
this.selectedInstance.nicCommand(cmd, args);
|
|||
|
}
|
|||
|
},
|
|||
|
getIcon: function(iconName, options) {
|
|||
|
var icon = this.options.iconList[iconName];
|
|||
|
var file = (options.iconFiles) ? options.iconFiles[iconName] : '';
|
|||
|
return {backgroundImage: "url('" + ((icon) ? this.options.iconsPath : file) + "')", backgroundPosition: ((icon) ? ((icon - 1) * -18) : 0) + 'px 0px'};
|
|||
|
},
|
|||
|
selectCheck: function(e, t) {
|
|||
|
var found = false;
|
|||
|
do {
|
|||
|
if (t.className && t.className.indexOf('nicEdit') != -1) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
} while (t = t.parentNode);
|
|||
|
this.fireEvent('blur', this.selectedInstance, t);
|
|||
|
this.lastSelectedInstance = this.selectedInstance;
|
|||
|
this.selectedInstance = null;
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
});
|
|||
|
nicEditor = nicEditor.extend(bkEvent);
|
|||
|
|
|||
|
|
|||
|
var nicEditorInstance = bkClass.extend({
|
|||
|
isSelected: false,
|
|||
|
construct: function(e, options, nicEditor) {
|
|||
|
this.ne = nicEditor;
|
|||
|
this.elm = this.e = e;
|
|||
|
this.options = options || {};
|
|||
|
|
|||
|
newX = parseInt(e.getStyle('width')) || e.clientWidth;
|
|||
|
newY = parseInt(e.getStyle('height')) || e.clientHeight;
|
|||
|
this.initialHeight = newY - 8;
|
|||
|
|
|||
|
var isTextarea = (e.nodeName.toLowerCase() == "textarea");
|
|||
|
if (isTextarea || this.options.hasPanel) {
|
|||
|
var ie7s = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat"))
|
|||
|
var s = {width: newX + 'px', border: '1px solid #ccc', borderTop: 0, overflowY: 'auto', overflowX: 'hidden'};
|
|||
|
s[(ie7s) ? 'height' : 'maxHeight'] = (this.ne.options.maxHeight) ? this.ne.options.maxHeight + 'px' : null;
|
|||
|
this.editorContain = new bkElement('DIV').setStyle(s).appendBefore(e);
|
|||
|
var editorElm = new bkElement('DIV').setStyle({width: (newX - 8) + 'px', margin: '4px', minHeight: newY + 'px'}).addClass('main').appendTo(this.editorContain);
|
|||
|
|
|||
|
e.setStyle({display: 'none'});
|
|||
|
|
|||
|
editorElm.innerHTML = e.innerHTML;
|
|||
|
if (isTextarea) {
|
|||
|
editorElm.setContent(e.value);
|
|||
|
this.copyElm = e;
|
|||
|
var f = e.parentTag('FORM');
|
|||
|
if (f) {
|
|||
|
bkLib.addEvent(f, 'submit', this.saveContent.closure(this));
|
|||
|
}
|
|||
|
}
|
|||
|
editorElm.setStyle((ie7s) ? {height: newY + 'px'} : {overflow: 'hidden'});
|
|||
|
this.elm = editorElm;
|
|||
|
}
|
|||
|
this.ne.addEvent('blur', this.blur.closure(this));
|
|||
|
|
|||
|
this.init();
|
|||
|
this.blur();
|
|||
|
},
|
|||
|
init: function() {
|
|||
|
this.elm.setAttribute('contentEditable', 'true');
|
|||
|
if (this.getContent() == "") {
|
|||
|
this.setContent('<br />');
|
|||
|
}
|
|||
|
this.instanceDoc = document.defaultView;
|
|||
|
this.elm.addEvent('mousedown', this.selected.closureListener(this)).addEvent('keypress', this.keyDown.closureListener(this)).addEvent('focus', this.selected.closure(this)).addEvent('blur', this.blur.closure(this)).addEvent('keyup', this.selected.closure(this));
|
|||
|
this.ne.fireEvent('add', this);
|
|||
|
},
|
|||
|
remove: function() {
|
|||
|
this.saveContent();
|
|||
|
if (this.copyElm || this.options.hasPanel) {
|
|||
|
this.editorContain.remove();
|
|||
|
this.e.setStyle({'display': 'block'});
|
|||
|
this.ne.removePanel();
|
|||
|
}
|
|||
|
this.disable();
|
|||
|
this.ne.fireEvent('remove', this);
|
|||
|
},
|
|||
|
disable: function() {
|
|||
|
this.elm.setAttribute('contentEditable', 'false');
|
|||
|
},
|
|||
|
getSel: function() {
|
|||
|
return (window.getSelection) ? window.getSelection() : document.selection;
|
|||
|
},
|
|||
|
getRng: function() {
|
|||
|
var s = this.getSel();
|
|||
|
if (!s || s.rangeCount === 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
|
|||
|
},
|
|||
|
selRng: function(rng, s) {
|
|||
|
if (window.getSelection) {
|
|||
|
s.removeAllRanges();
|
|||
|
s.addRange(rng);
|
|||
|
} else {
|
|||
|
rng.select();
|
|||
|
}
|
|||
|
},
|
|||
|
selElm: function() {
|
|||
|
var r = this.getRng();
|
|||
|
if (!r) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (r.startContainer) {
|
|||
|
var contain = r.startContainer;
|
|||
|
if (r.cloneContents().childNodes.length == 1) {
|
|||
|
for (var i = 0; i < contain.childNodes.length; i++) {
|
|||
|
var rng = contain.childNodes[i].ownerDocument.createRange();
|
|||
|
rng.selectNode(contain.childNodes[i]);
|
|||
|
if (r.compareBoundaryPoints(Range.START_TO_START, rng) != 1 &&
|
|||
|
r.compareBoundaryPoints(Range.END_TO_END, rng) != -1) {
|
|||
|
return $BK(contain.childNodes[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return $BK(contain);
|
|||
|
} else {
|
|||
|
return $BK((this.getSel().type == "Control") ? r.item(0) : r.parentElement());
|
|||
|
}
|
|||
|
},
|
|||
|
saveRng: function() {
|
|||
|
this.savedRange = this.getRng();
|
|||
|
this.savedSel = this.getSel();
|
|||
|
},
|
|||
|
restoreRng: function() {
|
|||
|
if (this.savedRange) {
|
|||
|
this.selRng(this.savedRange, this.savedSel);
|
|||
|
}
|
|||
|
},
|
|||
|
keyDown: function(e, t) {
|
|||
|
if (e.ctrlKey) {
|
|||
|
this.ne.fireEvent('key', this, e);
|
|||
|
}
|
|||
|
},
|
|||
|
selected: function(e, t) {
|
|||
|
if (!t && !(t = this.selElm)) {
|
|||
|
t = this.selElm();
|
|||
|
}
|
|||
|
if (!e.ctrlKey) {
|
|||
|
var selInstance = this.ne.selectedInstance;
|
|||
|
if (selInstance != this) {
|
|||
|
if (selInstance) {
|
|||
|
this.ne.fireEvent('blur', selInstance, t);
|
|||
|
}
|
|||
|
this.ne.selectedInstance = this;
|
|||
|
this.ne.fireEvent('focus', selInstance, t);
|
|||
|
}
|
|||
|
this.ne.fireEvent('selected', selInstance, t);
|
|||
|
this.isFocused = true;
|
|||
|
this.elm.addClass('selected');
|
|||
|
}
|
|||
|
return false;
|
|||
|
},
|
|||
|
blur: function() {
|
|||
|
this.isFocused = false;
|
|||
|
this.elm.removeClass('selected');
|
|||
|
},
|
|||
|
saveContent: function() {
|
|||
|
if (this.copyElm || this.options.hasPanel) {
|
|||
|
this.ne.fireEvent('save', this);
|
|||
|
(this.copyElm) ? this.copyElm.value = this.getContent() : this.e.innerHTML = this.getContent();
|
|||
|
}
|
|||
|
},
|
|||
|
getElm: function() {
|
|||
|
return this.elm;
|
|||
|
},
|
|||
|
getContent: function() {
|
|||
|
this.content = this.getElm().innerHTML;
|
|||
|
this.ne.fireEvent('get', this);
|
|||
|
return this.content;
|
|||
|
},
|
|||
|
setContent: function(e) {
|
|||
|
this.content = e;
|
|||
|
this.ne.fireEvent('set', this);
|
|||
|
this.elm.innerHTML = this.content;
|
|||
|
},
|
|||
|
nicCommand: function(cmd, args) {
|
|||
|
document.execCommand(cmd, false, args);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var nicEditorIFrameInstance = nicEditorInstance.extend({
|
|||
|
savedStyles: [],
|
|||
|
init: function() {
|
|||
|
var c = this.elm.innerHTML.replace(/^\s+|\s+$/g, '');
|
|||
|
this.elm.innerHTML = '';
|
|||
|
(!c) ? c = "<br />" : c;
|
|||
|
this.initialContent = c;
|
|||
|
|
|||
|
this.elmFrame = new bkElement('iframe').setAttributes({'src': 'javascript:;', 'frameBorder': 0, 'allowTransparency': 'true', 'scrolling': 'no'}).setStyle({height: '100px', width: '100%'}).addClass('frame').appendTo(this.elm);
|
|||
|
|
|||
|
if (this.copyElm) {
|
|||
|
this.elmFrame.setStyle({width: (this.elm.offsetWidth - 4) + 'px'});
|
|||
|
}
|
|||
|
|
|||
|
var styleList = ['font-size', 'font-family', 'font-weight', 'color'];
|
|||
|
for (itm in styleList) {
|
|||
|
this.savedStyles[bkLib.camelize(itm)] = this.elm.getStyle(itm);
|
|||
|
}
|
|||
|
|
|||
|
setTimeout(this.initFrame.closure(this), 50);
|
|||
|
},
|
|||
|
disable: function() {
|
|||
|
this.elm.innerHTML = this.getContent();
|
|||
|
},
|
|||
|
initFrame: function() {
|
|||
|
var fd = $BK(this.elmFrame.contentWindow.document);
|
|||
|
fd.designMode = "on";
|
|||
|
fd.open();
|
|||
|
var css = this.ne.options.externalCSS;
|
|||
|
fd.write('<html><head>' + ((css) ? '<link href="' + css + '" rel="stylesheet" type="text/css" />' : '') + '</head><body id="nicEditContent" style="margin: 0 !important; background-color: transparent !important;">' + this.initialContent + '</body></html>');
|
|||
|
fd.close();
|
|||
|
this.frameDoc = fd;
|
|||
|
|
|||
|
this.frameWin = $BK(this.elmFrame.contentWindow);
|
|||
|
this.frameContent = $BK(this.frameWin.document.body).setStyle(this.savedStyles);
|
|||
|
this.instanceDoc = this.frameWin.document.defaultView;
|
|||
|
|
|||
|
this.heightUpdate();
|
|||
|
this.frameDoc.addEvent('mousedown', this.selected.closureListener(this)).addEvent('keyup', this.heightUpdate.closureListener(this)).addEvent('keydown', this.keyDown.closureListener(this)).addEvent('keyup', this.selected.closure(this));
|
|||
|
this.ne.fireEvent('add', this);
|
|||
|
},
|
|||
|
getElm: function() {
|
|||
|
return this.frameContent;
|
|||
|
},
|
|||
|
setContent: function(c) {
|
|||
|
this.content = c;
|
|||
|
this.ne.fireEvent('set', this);
|
|||
|
this.frameContent.innerHTML = this.content;
|
|||
|
this.heightUpdate();
|
|||
|
},
|
|||
|
getSel: function() {
|
|||
|
return (this.frameWin) ? this.frameWin.getSelection() : this.frameDoc.selection;
|
|||
|
},
|
|||
|
heightUpdate: function() {
|
|||
|
this.elmFrame.style.height = Math.max(this.frameContent.offsetHeight, this.initialHeight) + 'px';
|
|||
|
},
|
|||
|
nicCommand: function(cmd, args) {
|
|||
|
this.frameDoc.execCommand(cmd, false, args);
|
|||
|
setTimeout(this.heightUpdate.closure(this), 100);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
});
|
|||
|
var nicEditorPanel = bkClass.extend({
|
|||
|
construct: function(e, options, nicEditor) {
|
|||
|
this.elm = e;
|
|||
|
this.options = options;
|
|||
|
this.ne = nicEditor;
|
|||
|
this.panelButtons = new Array();
|
|||
|
this.buttonList = bkExtend([], this.ne.options.buttonList);
|
|||
|
|
|||
|
this.panelContain = new bkElement('DIV').setStyle({overflow: 'hidden', width: '100%', border: '1px solid #cccccc', backgroundColor: '#efefef'}).addClass('panelContain');
|
|||
|
this.panelElm = new bkElement('DIV').setStyle({margin: '2px', marginTop: '0px', zoom: 1, overflow: 'hidden'}).addClass('panel').appendTo(this.panelContain);
|
|||
|
this.panelContain.appendTo(e);
|
|||
|
|
|||
|
var opt = this.ne.options;
|
|||
|
var buttons = opt.buttons;
|
|||
|
for (button in buttons) {
|
|||
|
this.addButton(button, opt, true);
|
|||
|
}
|
|||
|
this.reorder();
|
|||
|
e.noSelect();
|
|||
|
},
|
|||
|
addButton: function(buttonName, options, noOrder) {
|
|||
|
var button = options.buttons[buttonName];
|
|||
|
var type = (button['type']) ? eval('(typeof(' + button['type'] + ') == "undefined") ? null : ' + button['type'] + ';') : nicEditorButton;
|
|||
|
var hasButton = bkLib.inArray(this.buttonList, buttonName);
|
|||
|
if (type && (hasButton || this.ne.options.fullPanel)) {
|
|||
|
this.panelButtons.push(new type(this.panelElm, buttonName, options, this.ne));
|
|||
|
if (!hasButton) {
|
|||
|
this.buttonList.push(buttonName);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
findButton: function(itm) {
|
|||
|
for (var i = 0; i < this.panelButtons.length; i++) {
|
|||
|
if (this.panelButtons[i].name == itm)
|
|||
|
return this.panelButtons[i];
|
|||
|
}
|
|||
|
},
|
|||
|
reorder: function() {
|
|||
|
var bl = this.buttonList;
|
|||
|
for (var i = 0; i < bl.length; i++) {
|
|||
|
var button = this.findButton(bl[i]);
|
|||
|
if (button) {
|
|||
|
this.panelElm.appendChild(button.margin);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
remove: function() {
|
|||
|
this.elm.remove();
|
|||
|
}
|
|||
|
});
|
|||
|
var nicEditorButton = bkClass.extend({
|
|||
|
construct: function(e, buttonName, options, nicEditor) {
|
|||
|
this.options = options.buttons[buttonName];
|
|||
|
this.name = buttonName;
|
|||
|
this.ne = nicEditor;
|
|||
|
this.elm = e;
|
|||
|
|
|||
|
this.margin = new bkElement('DIV').setStyle({'float': 'left', marginTop: '2px'}).appendTo(e);
|
|||
|
this.contain = new bkElement('DIV').setStyle({width: '20px', height: '20px'}).addClass('buttonContain').appendTo(this.margin);
|
|||
|
this.border = new bkElement('DIV').setStyle({backgroundColor: '#efefef', border: '1px solid #efefef'}).appendTo(this.contain);
|
|||
|
this.button = new bkElement('DIV').setStyle({width: '18px', height: '18px', overflow: 'hidden', zoom: 1, cursor: 'pointer'}).addClass('button').setStyle(this.ne.getIcon(buttonName, options)).appendTo(this.border);
|
|||
|
this.button.addEvent('mouseover', this.hoverOn.closure(this)).addEvent('mouseout', this.hoverOff.closure(this)).addEvent('mousedown', this.mouseClick.closure(this)).noSelect();
|
|||
|
|
|||
|
if (!window.opera) {
|
|||
|
this.button.onmousedown = this.button.onclick = bkLib.cancelEvent;
|
|||
|
}
|
|||
|
|
|||
|
nicEditor.addEvent('selected', this.enable.closure(this)).addEvent('blur', this.disable.closure(this)).addEvent('key', this.key.closure(this));
|
|||
|
|
|||
|
this.disable();
|
|||
|
this.init();
|
|||
|
},
|
|||
|
init: function() {
|
|||
|
},
|
|||
|
hide: function() {
|
|||
|
this.contain.setStyle({display: 'none'});
|
|||
|
},
|
|||
|
updateState: function() {
|
|||
|
if (this.isDisabled) {
|
|||
|
this.setBg();
|
|||
|
}
|
|||
|
else if (this.isHover) {
|
|||
|
this.setBg('hover');
|
|||
|
}
|
|||
|
else if (this.isActive) {
|
|||
|
this.setBg('active');
|
|||
|
}
|
|||
|
else {
|
|||
|
this.setBg();
|
|||
|
}
|
|||
|
},
|
|||
|
setBg: function(state) {
|
|||
|
switch (state) {
|
|||
|
case 'hover':
|
|||
|
var stateStyle = {border: '1px solid #666', backgroundColor: '#ddd'};
|
|||
|
break;
|
|||
|
case 'active':
|
|||
|
var stateStyle = {border: '1px solid #666', backgroundColor: '#ccc'};
|
|||
|
break;
|
|||
|
default:
|
|||
|
var stateStyle = {border: '1px solid #efefef', backgroundColor: '#efefef'};
|
|||
|
}
|
|||
|
this.border.setStyle(stateStyle).addClass('button-' + state);
|
|||
|
},
|
|||
|
checkNodes: function(e) {
|
|||
|
var elm = e;
|
|||
|
do {
|
|||
|
if (this.options.tags && bkLib.inArray(this.options.tags, elm.nodeName)) {
|
|||
|
this.activate();
|
|||
|
return true;
|
|||
|
}
|
|||
|
} while (elm = elm.parentNode && elm.className != "nicEdit");
|
|||
|
elm = $BK(e);
|
|||
|
while (elm.nodeType == 3) {
|
|||
|
elm = $BK(elm.parentNode);
|
|||
|
}
|
|||
|
if (this.options.css) {
|
|||
|
for (itm in this.options.css) {
|
|||
|
if (elm.getStyle(itm, this.ne.selectedInstance.instanceDoc) == this.options.css[itm]) {
|
|||
|
this.activate();
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
this.deactivate();
|
|||
|
return false;
|
|||
|
},
|
|||
|
activate: function() {
|
|||
|
if (!this.isDisabled) {
|
|||
|
this.isActive = true;
|
|||
|
this.updateState();
|
|||
|
this.ne.fireEvent('buttonActivate', this);
|
|||
|
}
|
|||
|
},
|
|||
|
deactivate: function() {
|
|||
|
this.isActive = false;
|
|||
|
this.updateState();
|
|||
|
if (!this.isDisabled) {
|
|||
|
this.ne.fireEvent('buttonDeactivate', this);
|
|||
|
}
|
|||
|
},
|
|||
|
enable: function(ins, t) {
|
|||
|
this.isDisabled = false;
|
|||
|
this.contain.setStyle({'opacity': 1}).addClass('buttonEnabled');
|
|||
|
this.updateState();
|
|||
|
this.checkNodes(t);
|
|||
|
},
|
|||
|
disable: function(ins, t) {
|
|||
|
this.isDisabled = true;
|
|||
|
this.contain.setStyle({'opacity': 0.6}).removeClass('buttonEnabled');
|
|||
|
this.updateState();
|
|||
|
},
|
|||
|
toggleActive: function() {
|
|||
|
(this.isActive) ? this.deactivate() : this.activate();
|
|||
|
},
|
|||
|
hoverOn: function() {
|
|||
|
if (!this.isDisabled) {
|
|||
|
this.isHover = true;
|
|||
|
this.updateState();
|
|||
|
this.ne.fireEvent("buttonOver", this);
|
|||
|
}
|
|||
|
},
|
|||
|
hoverOff: function() {
|
|||
|
this.isHover = false;
|
|||
|
this.updateState();
|
|||
|
this.ne.fireEvent("buttonOut", this);
|
|||
|
},
|
|||
|
mouseClick: function() {
|
|||
|
if (this.options.command) {
|
|||
|
this.ne.nicCommand(this.options.command, this.options.commandArgs);
|
|||
|
if (!this.options.noActive) {
|
|||
|
this.toggleActive();
|
|||
|
}
|
|||
|
}
|
|||
|
this.ne.fireEvent("buttonClick", this);
|
|||
|
},
|
|||
|
key: function(nicInstance, e) {
|
|||
|
if (this.options.key && e.ctrlKey && String.fromCharCode(e.keyCode || e.charCode).toLowerCase() == this.options.key) {
|
|||
|
this.mouseClick();
|
|||
|
if (e.preventDefault)
|
|||
|
e.preventDefault();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
var nicPlugin = bkClass.extend({
|
|||
|
construct: function(nicEditor, options) {
|
|||
|
this.options = options;
|
|||
|
this.ne = nicEditor;
|
|||
|
this.ne.addEvent('panel', this.loadPanel.closure(this));
|
|||
|
|
|||
|
this.init();
|
|||
|
},
|
|||
|
loadPanel: function(np) {
|
|||
|
var buttons = this.options.buttons;
|
|||
|
for (var button in buttons) {
|
|||
|
np.addButton(button, this.options);
|
|||
|
}
|
|||
|
np.reorder();
|
|||
|
},
|
|||
|
init: function() {
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicPaneOptions = {};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicEditorPane = bkClass.extend({
|
|||
|
construct: function(elm, nicEditor, options, openButton) {
|
|||
|
this.ne = nicEditor;
|
|||
|
this.elm = elm;
|
|||
|
this.pos = elm.pos();
|
|||
|
|
|||
|
this.contain = new bkElement('div').setStyle({zIndex: '99999', overflow: 'hidden', position: 'absolute', left: this.pos[0] + 'px', top: this.pos[1] + 'px'})
|
|||
|
this.pane = new bkElement('div').setStyle({fontSize: '12px', border: '1px solid #ccc', 'overflow': 'hidden', padding: '4px', textAlign: 'left', backgroundColor: '#ffffc9'}).addClass('pane').setStyle(options).appendTo(this.contain);
|
|||
|
|
|||
|
if (openButton && !openButton.options.noClose) {
|
|||
|
this.close = new bkElement('div').setStyle({'float': 'right', height: '16px', width: '16px', cursor: 'pointer'}).setStyle(this.ne.getIcon('close', nicPaneOptions)).addEvent('mousedown', openButton.removePane.closure(this)).appendTo(this.pane);
|
|||
|
}
|
|||
|
|
|||
|
this.contain.noSelect().appendTo(document.body);
|
|||
|
|
|||
|
this.position();
|
|||
|
this.init();
|
|||
|
},
|
|||
|
init: function() {
|
|||
|
},
|
|||
|
position: function() {
|
|||
|
if (this.ne.nicPanel) {
|
|||
|
var panelElm = this.ne.nicPanel.elm;
|
|||
|
var panelPos = panelElm.pos();
|
|||
|
var newLeft = panelPos[0] + parseInt(panelElm.getStyle('width')) - (parseInt(this.pane.getStyle('width')) + 8);
|
|||
|
if (newLeft < this.pos[0]) {
|
|||
|
this.contain.setStyle({left: newLeft + 'px'});
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
toggle: function() {
|
|||
|
this.isVisible = !this.isVisible;
|
|||
|
this.contain.setStyle({display: ((this.isVisible) ? 'block' : 'none')});
|
|||
|
},
|
|||
|
remove: function() {
|
|||
|
if (this.contain) {
|
|||
|
this.contain.remove();
|
|||
|
this.contain = null;
|
|||
|
}
|
|||
|
},
|
|||
|
append: function(c) {
|
|||
|
c.appendTo(this.pane);
|
|||
|
},
|
|||
|
setContent: function(c) {
|
|||
|
this.pane.setContent(c);
|
|||
|
}
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
|
|||
|
var nicEditorAdvancedButton = nicEditorButton.extend({
|
|||
|
init: function() {
|
|||
|
this.ne.addEvent('selected', this.removePane.closure(this)).addEvent('blur', this.removePane.closure(this));
|
|||
|
},
|
|||
|
mouseClick: function() {
|
|||
|
if (!this.isDisabled) {
|
|||
|
if (this.pane && this.pane.pane) {
|
|||
|
this.removePane();
|
|||
|
} else {
|
|||
|
this.pane = new nicEditorPane(this.contain, this.ne, {width: (this.width || '270px'), backgroundColor: '#fff'}, this);
|
|||
|
this.addPane();
|
|||
|
this.ne.selectedInstance.saveRng();
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
addForm: function(f, elm) {
|
|||
|
this.form = new bkElement('form').addEvent('submit', this.submit.closureListener(this));
|
|||
|
this.pane.append(this.form);
|
|||
|
this.inputs = {};
|
|||
|
|
|||
|
for (itm in f) {
|
|||
|
var field = f[itm];
|
|||
|
var val = '';
|
|||
|
if (elm) {
|
|||
|
val = elm.getAttribute(itm);
|
|||
|
}
|
|||
|
if (!val) {
|
|||
|
val = field['value'] || '';
|
|||
|
}
|
|||
|
var type = f[itm].type;
|
|||
|
|
|||
|
if (type == 'title') {
|
|||
|
new bkElement('div').setContent(field.txt).setStyle({fontSize: '14px', fontWeight: 'bold', padding: '0px', margin: '2px 0'}).appendTo(this.form);
|
|||
|
} else {
|
|||
|
var contain = new bkElement('div').setStyle({overflow: 'hidden', clear: 'both'}).appendTo(this.form);
|
|||
|
if (field.txt) {
|
|||
|
new bkElement('label').setAttributes({'for': itm}).setContent(field.txt).setStyle({margin: '2px 4px', fontSize: '13px', width: '60px', lineHeight: '20px', textAlign: 'right', 'float': 'left'}).appendTo(contain);
|
|||
|
}
|
|||
|
|
|||
|
switch (type) {
|
|||
|
case 'text':
|
|||
|
this.inputs[itm] = new bkElement('input').setAttributes({id: itm, 'value': val, 'type': 'text'}).setStyle({margin: '2px 0', fontSize: '13px', 'float': 'left', height: '20px', border: '1px solid #ccc', overflow: 'hidden'}).setStyle(field.style).appendTo(contain);
|
|||
|
break;
|
|||
|
case 'select':
|
|||
|
this.inputs[itm] = new bkElement('select').setAttributes({id: itm}).setStyle({border: '1px solid #ccc', 'float': 'left', margin: '2px 0'}).appendTo(contain);
|
|||
|
for (opt in field.options) {
|
|||
|
var o = new bkElement('option').setAttributes({value: opt, selected: (opt == val) ? 'selected' : ''}).setContent(field.options[opt]).appendTo(this.inputs[itm]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'content':
|
|||
|
this.inputs[itm] = new bkElement('textarea').setAttributes({id: itm}).setStyle({border: '1px solid #ccc', 'float': 'left'}).setStyle(field.style).appendTo(contain);
|
|||
|
this.inputs[itm].value = val;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
new bkElement('input').setAttributes({'type': 'submit'}).setStyle({backgroundColor: '#efefef', border: '1px solid #ccc', margin: '3px 0', 'float': 'left', 'clear': 'both'}).appendTo(this.form);
|
|||
|
this.form.onsubmit = bkLib.cancelEvent;
|
|||
|
},
|
|||
|
submit: function() {
|
|||
|
},
|
|||
|
findElm: function(tag, attr, val) {
|
|||
|
var list = this.ne.selectedInstance.getElm().getElementsByTagName(tag);
|
|||
|
for (var i = 0; i < list.length; i++) {
|
|||
|
if (list[i].getAttribute(attr) == val) {
|
|||
|
return $BK(list[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
removePane: function() {
|
|||
|
if (this.pane) {
|
|||
|
this.pane.remove();
|
|||
|
this.pane = null;
|
|||
|
this.ne.selectedInstance.restoreRng();
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
var nicButtonTips = bkClass.extend({
|
|||
|
construct: function(nicEditor) {
|
|||
|
this.ne = nicEditor;
|
|||
|
nicEditor.addEvent('buttonOver', this.show.closure(this)).addEvent('buttonOut', this.hide.closure(this));
|
|||
|
|
|||
|
},
|
|||
|
show: function(button) {
|
|||
|
this.timer = setTimeout(this.create.closure(this, button), 400);
|
|||
|
},
|
|||
|
create: function(button) {
|
|||
|
this.timer = null;
|
|||
|
if (!this.pane) {
|
|||
|
this.pane = new nicEditorPane(button.button, this.ne, {fontSize: '12px', marginTop: '5px'});
|
|||
|
this.pane.setContent(button.options.name);
|
|||
|
}
|
|||
|
},
|
|||
|
hide: function(button) {
|
|||
|
if (this.timer) {
|
|||
|
clearTimeout(this.timer);
|
|||
|
}
|
|||
|
if (this.pane) {
|
|||
|
this.pane = this.pane.remove();
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
nicEditors.registerPlugin(nicButtonTips);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicSelectOptions = {
|
|||
|
buttons: {
|
|||
|
'fontSize': {name: __('Выбрать размер шрифта'), type: 'nicEditorFontSizeSelect', command: 'fontsize'},
|
|||
|
'fontFamily': {name: __('Выбрать шрифт'), type: 'nicEditorFontFamilySelect', command: 'fontname'},
|
|||
|
'fontFormat': {name: __('Выбрать стиль'), type: 'nicEditorFontFormatSelect', command: 'formatBlock'}
|
|||
|
}
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
var nicEditorSelect = bkClass.extend({
|
|||
|
construct: function(e, buttonName, options, nicEditor) {
|
|||
|
this.options = options.buttons[buttonName];
|
|||
|
this.elm = e;
|
|||
|
this.ne = nicEditor;
|
|||
|
this.name = buttonName;
|
|||
|
this.selOptions = new Array();
|
|||
|
|
|||
|
this.margin = new bkElement('div').setStyle({'float': 'left', margin: '2px 1px 0 1px'}).appendTo(this.elm);
|
|||
|
this.contain = new bkElement('div').setStyle({width: '90px', height: '20px', cursor: 'pointer', overflow: 'hidden'}).addClass('selectContain').addEvent('click', this.toggle.closure(this)).appendTo(this.margin);
|
|||
|
this.items = new bkElement('div').setStyle({overflow: 'hidden', zoom: 1, border: '1px solid #ccc', paddingLeft: '3px', backgroundColor: '#fff'}).appendTo(this.contain);
|
|||
|
this.control = new bkElement('div').setStyle({overflow: 'hidden', 'float': 'right', height: '18px', width: '16px'}).addClass('selectControl').setStyle(this.ne.getIcon('arrow', options)).appendTo(this.items);
|
|||
|
this.txt = new bkElement('div').setStyle({overflow: 'hidden', 'float': 'left', width: '66px', height: '14px', marginTop: '1px', fontFamily: 'sans-serif', textAlign: 'center', fontSize: '12px'}).addClass('selectTxt').appendTo(this.items);
|
|||
|
|
|||
|
if (!window.opera) {
|
|||
|
this.contain.onmousedown = this.control.onmousedown = this.txt.onmousedown = bkLib.cancelEvent;
|
|||
|
}
|
|||
|
|
|||
|
this.margin.noSelect();
|
|||
|
|
|||
|
this.ne.addEvent('selected', this.enable.closure(this)).addEvent('blur', this.disable.closure(this));
|
|||
|
|
|||
|
this.disable();
|
|||
|
this.init();
|
|||
|
},
|
|||
|
disable: function() {
|
|||
|
this.isDisabled = true;
|
|||
|
this.close();
|
|||
|
this.contain.setStyle({opacity: 0.6});
|
|||
|
},
|
|||
|
enable: function(t) {
|
|||
|
this.isDisabled = false;
|
|||
|
this.close();
|
|||
|
this.contain.setStyle({opacity: 1});
|
|||
|
},
|
|||
|
setDisplay: function(txt) {
|
|||
|
this.txt.setContent(txt);
|
|||
|
},
|
|||
|
toggle: function() {
|
|||
|
if (!this.isDisabled) {
|
|||
|
(this.pane) ? this.close() : this.open();
|
|||
|
}
|
|||
|
},
|
|||
|
open: function() {
|
|||
|
this.pane = new nicEditorPane(this.items, this.ne, {width: '88px', padding: '0px', borderTop: 0, borderLeft: '1px solid #ccc', borderRight: '1px solid #ccc', borderBottom: '0px', backgroundColor: '#fff'});
|
|||
|
|
|||
|
for (var i = 0; i < this.selOptions.length; i++) {
|
|||
|
var opt = this.selOptions[i];
|
|||
|
var itmContain = new bkElement('div').setStyle({overflow: 'hidden', borderBottom: '1px solid #ccc', width: '88px', textAlign: 'left', overflow : 'hidden', cursor: 'pointer'});
|
|||
|
var itm = new bkElement('div').setStyle({padding: '0px 4px'}).setContent(opt[1]).appendTo(itmContain).noSelect();
|
|||
|
itm.addEvent('click', this.update.closure(this, opt[0])).addEvent('mouseover', this.over.closure(this, itm)).addEvent('mouseout', this.out.closure(this, itm)).setAttributes('id', opt[0]);
|
|||
|
this.pane.append(itmContain);
|
|||
|
if (!window.opera) {
|
|||
|
itm.onmousedown = bkLib.cancelEvent;
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
close: function() {
|
|||
|
if (this.pane) {
|
|||
|
this.pane = this.pane.remove();
|
|||
|
}
|
|||
|
},
|
|||
|
over: function(opt) {
|
|||
|
opt.setStyle({backgroundColor: '#ccc'});
|
|||
|
},
|
|||
|
out: function(opt) {
|
|||
|
opt.setStyle({backgroundColor: '#fff'});
|
|||
|
},
|
|||
|
add: function(k, v) {
|
|||
|
this.selOptions.push(new Array(k, v));
|
|||
|
},
|
|||
|
update: function(elm) {
|
|||
|
this.ne.nicCommand(this.options.command, elm);
|
|||
|
this.close();
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var nicEditorFontSizeSelect = nicEditorSelect.extend({
|
|||
|
sel: {1: '1 (8pt)', 2: '2 (10pt)', 3: '3 (12pt)', 4: '4 (14pt)', 5: '5 (18pt)', 6: '6 (24pt)'},
|
|||
|
init: function() {
|
|||
|
this.setDisplay('Размер шрифта ...');
|
|||
|
for (itm in this.sel) {
|
|||
|
this.add(itm, '<font size="' + itm + '">' + this.sel[itm] + '</font>');
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var nicEditorFontFamilySelect = nicEditorSelect.extend({
|
|||
|
sel: {'arial': 'Arial', 'comic sans ms': 'Comic Sans', 'courier new': 'Courier New', 'georgia': 'Georgia', 'helvetica': 'Helvetica', 'impact': 'Impact', 'times new roman': 'Times', 'trebuchet ms': 'Trebuchet', 'verdana': 'Verdana'},
|
|||
|
init: function() {
|
|||
|
this.setDisplay('Шрифт ...');
|
|||
|
for (itm in this.sel) {
|
|||
|
this.add(itm, '<font face="' + itm + '">' + this.sel[itm] + '</font>');
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var nicEditorFontFormatSelect = nicEditorSelect.extend({
|
|||
|
sel: {'p': 'Paragraph', 'pre': 'Pre', 'h6': 'Heading 6', 'h5': 'Heading 5', 'h4': 'Heading 4', 'h3': 'Heading 3', 'h2': 'Heading 2', 'h1': 'Heading 1'},
|
|||
|
init: function() {
|
|||
|
this.setDisplay('Стиль ...');
|
|||
|
for (itm in this.sel) {
|
|||
|
var tag = itm.toUpperCase();
|
|||
|
this.add('<' + tag + '>', '<' + itm + ' style="padding: 0px; margin: 0px;">' + this.sel[itm] + '</' + tag + '>');
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicSelectOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicLinkOptions = {
|
|||
|
buttons: {
|
|||
|
'link': {name: 'Добавить ссылку', type: 'nicLinkButton', tags: ['A']},
|
|||
|
'unlink': {name: 'Удалить ссылку', command: 'unlink', noActive: true}
|
|||
|
}
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicLinkButton = nicEditorAdvancedButton.extend({
|
|||
|
addPane: function() {
|
|||
|
this.ln = this.ne.selectedInstance.selElm().parentTag('A');
|
|||
|
this.addForm({
|
|||
|
'': {type: 'title', txt: 'Добавить/изменить ссылку'},
|
|||
|
'href': {type: 'text', txt: 'URL', value: 'http://', style: {width: '150px'}},
|
|||
|
'title': {type: 'text', txt: 'Тайтл'},
|
|||
|
'target': {type: 'select', txt: 'Открыть в', options: {'': 'Текущем окне', '_blank': 'Новом окне'}, style: {width: '100px'}}
|
|||
|
}, this.ln);
|
|||
|
},
|
|||
|
submit: function(e) {
|
|||
|
var url = this.inputs['href'].value;
|
|||
|
if (url == "http://" || url == "") {
|
|||
|
alert("Вы должны указать URL, что бы создать ссылку");
|
|||
|
return false;
|
|||
|
}
|
|||
|
this.removePane();
|
|||
|
|
|||
|
if (!this.ln) {
|
|||
|
var tmp = 'javascript:nicTemp();';
|
|||
|
this.ne.nicCommand("createlink", tmp);
|
|||
|
this.ln = this.findElm('A', 'href', tmp);
|
|||
|
}
|
|||
|
if (this.ln) {
|
|||
|
this.ln.setAttributes({
|
|||
|
href: this.inputs['href'].value,
|
|||
|
title: this.inputs['title'].value,
|
|||
|
target: this.inputs['target'].options[this.inputs['target'].selectedIndex].value
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicLinkOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicColorOptions = {
|
|||
|
buttons: {
|
|||
|
'forecolor': {name: __('Изменить цвет текста'), type: 'nicEditorColorButton', noClose: true},
|
|||
|
'bgcolor': {name: __('Изменить цвет фона'), type: 'nicEditorBgColorButton', noClose: true}
|
|||
|
}
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicEditorColorButton = nicEditorAdvancedButton.extend({
|
|||
|
addPane: function() {
|
|||
|
var colorList = ['ef001b', 'cc0017', 'a60012', '83000e', '5c000a', 'ef0078', 'ce0067', 'ad0057', '8b0045', '6a0035', 'e301ed', 'c501ce', 'a401ab', '88018e', '610066', '6716ef', '5913ce', '4b10af', '3e0d90', '2d0a6a', 'f13449', 'd52437', 'bb1d2e', '980b1a', '70000c', 'f32a8f', 'd5207a', 'b21162', '970c51', '710039', 'e624ef', 'cc20d4', 'ad10b4', '900995', '6f0374', '7b38ed', '6c2fd2', '5c27b5', '471a94', '391379', 'f67684', 'e36875', 'ca5965', 'b34e59', '933c45', 'f563ac', 'de599b', 'cc5490', 'b24d7f', '96416c', 'ee68f4', 'db5fe1', 'c759cc', 'b255b6', '964799', 'a779f5', '976cdf', '8d68cc', '7f5eb7', '6f539c', 'fcc0c6', 'eea8af', 'dd959c', 'ce8c93', 'bc858b', 'fec7e2', 'f4b8d6', 'e5a6c6', 'd495b4', 'bb85a0', 'fabffd', 'eeaff1', 'e19fe4', 'cf90d2', 'b985bb', 'e0c3fd', 'd1b1f1', 'c1a0e2', 'b192d1', 'a489c0', 'fef5f6', 'fdeced', 'f7dee0', 'eacedc', 'dec1d0', 'fef3f8', 'fbe8f1', 'efd0e0', 'e6c7d6', 'd9b8c8', 'fef2fe', 'fae6fb', 'f1d3f2', 'e3c1e4', 'd8bad9', 'f5edfe', 'f0e5fb', 'e1d3ef', 'd9cbe7', 'cdbfdc', '028b6c', '02775d', '02644e', '015441', '013b2e', '1882ed', '1574d4', '115eab', '0e4f90', '0a3764', '0040eb', '0039d0', '0030b1', '002892', '001b64', '50509e', '46468b', '3a3a73', '303060', '222245', '279980', '1c856e', '15705b', '0b5b49', '054637', '3c95ee', '3283d5', '286fb8', '1b5997', '0c3e71', '2a61f3', '1d4ed3', '1640b2', '113699', '022072', '6d6db0', '5d5d99', '4c4c82', '373763', '29294d', '69baa7', '61a898', '57998a', '508b7d', '47776c', '7bb8f5', '6ea7e0', '6195c9', '5684b2', '4c7298', '6d92f5', '5f82e0', '5675c9', '4d68b2', '495f9a', '9b9bc9', '8b8bb6', '7e7ea5', '747496', '5f5f7a', 'd0eae4', 'b3d7cf', '9bc4ba', '8fb4ac', '86a49d', 'c3dffc', 'aacdf0', '9bbde0', '97b4d1', '94acc4', 'bdcdfb', 'a8bbef', '96aae1', '8a9bcb', '8393c0', 'd8d8eb', 'c7c7dc', 'b5b5cc', 'a5a5bc', '9898ac', 'f0f8f6', 'deedea', 'd7e6e2', 'ceddda', 'c8d6d2', 'f1f7fe', 'e5f0fb', 'd8e5f2', 'cfdbe7', 'c3cfda', 'eff3fe', 'e5eafa', 'dde3f4', 'd2d8ea', 'c3cadd', 'f4f4f9', 'e5e5ef', 'dbdbe5', 'd6d6df', 'd1d1d9', '00a000', '008d00', '007700', '006000', '004500', '86d800', '73ba00', '629e00', '528400', '395c00', 'eded00', 'cece00', 'afaf00', '909000', '737300', 'e3ab00', 'c79600', 'aa8000', '856400', '604800', '27b127', '229c22', '1b881b', '0f6e0f', '085408', '96dc24', '84c220', '6ea515', '5c8b0f', '3f6600', 'f1f12c', 'd3d31b', 'b2b211', '959509', '747403', 'e8b827', 'cda220', 'b18a15', '8c6c0a', '6e5300', '68c868', '5cb65c', '56a456', '4b924b', '488248', 'b7e768', 'a8d45f', '97c056', '86aa4d', '718e41', 'f1f164', 'e1e15d', 'caca58', 'b2b24d', '979746', 'eecc65', 'dabc5e', 'c7ac59', 'b09850', '948044', 'c6ecc6', 'addead', '96cd96', '87b987', '87b087', 'e1f6c0', 'd0eba6', 'c1d99a', 'b1c88c', 'a4b786', 'fbfbad', 'f1f194', 'e2e28e', 'cece8c', 'b9b982', 'faeaba', 'f2dfa7', 'e6d090', 'cbbb8b', 'b6a778', 'eef9ee', 'dff1df', 'd5e8d5', 'c6dbc6', 'bed1be', 'f1fbe2', 'e9f5d5', 'dfebcd', 'd4e1c0', 'c9d5b6', 'fefef0', 'fafae3', 'f0f0cb', 'e4e4c5', 'dadaba', 'fdf8ea', 'f9f2de', 'eee4c7', 'dfd7bf', 'd6cfb7', '818181', '676767', '494949', '272727', '000000', '783c00', '673300', '562b00', '472300', '341a00', 'eb4600', 'cd3d00', 'ad3300', '8f2a00', '671e00', 'ed7700', 'd26900', 'af5800', '904800', '643200', '989898', '838383', '646464', '515151', '2f2f2f', '8c5927', '7c4f23', '673f19', '583616', '402408', 'eb5f26', 'd1521e', 'b34315', '95330a', '702303', 'f08c28', 'd47a20', 'b96816', '954f09', '713902', 'c9c9c9', 'a9a9a9', '919191', '787878', '565656', 'af8b68', 'a28264', '917458', '856d55', '715c49', 'f19068', 'dd8561', 'c97654', 'b47053', '985d45', 'f5ac63', 'e1a05f', 'ca9259', 'b78451', '966b41', 'efefef', 'dcdcdc', 'c1c1c1', '9d9d9d', '828282', 'dbcab9', 'ccb8a5', 'bda792', 'a3917f', '9a8979', 'fbcebc', 'f1bba5', 'e1aa93', 'ce9f8b', 'b18b7b', 'fcd7b3', 'f3caa2', 'e7b98c', 'c8a078', 'b29171', 'ffffff', 'f7f7f7', 'ededed', 'dddddd', 'c9c9c9', 'f4efeb', 'efe8e1', 'e6ded6', 'dbd3cc', 'd0c9c2', 'fef5f2', 'fae8e1', 'f0dbd3', 'e1cbc2', 'd6beb5', 'fef7f0', 'faecde', 'f1e2d3', 'e3d3c3', 'dacaba'];
|
|||
|
var colorItems = new bkElement('DIV').setStyle({width: '270px'});
|
|||
|
for (var color in colorList) {
|
|||
|
var colorCode = '#' + colorList[color];
|
|||
|
var colorSquare = new bkElement('DIV').setStyle({'cursor': 'pointer', 'height': '15px', 'float': 'left'}).appendTo(colorItems);
|
|||
|
var colorBorder = new bkElement('DIV').setStyle({border: '2px solid ' + colorCode}).appendTo(colorSquare);
|
|||
|
var colorInner = new bkElement('DIV').setStyle({backgroundColor: colorCode, overflow: 'hidden', width: '9px', height: '12px'}).addEvent('click', this.colorSelect.closure(this, colorCode)).addEvent('mouseover', this.on.closure(this, colorBorder)).addEvent('mouseout', this.off.closure(this, colorBorder, colorCode)).appendTo(colorBorder);
|
|||
|
colorInner.setAttribute('title', colorCode);
|
|||
|
if (!window.opera) {
|
|||
|
colorSquare.onmousedown = colorInner.onmousedown = bkLib.cancelEvent;
|
|||
|
}
|
|||
|
}
|
|||
|
this.pane.append(colorItems.noSelect());
|
|||
|
},
|
|||
|
colorSelect: function(c) {
|
|||
|
this.ne.nicCommand('foreColor', c);
|
|||
|
this.removePane();
|
|||
|
},
|
|||
|
on: function(colorBorder) {
|
|||
|
colorBorder.setStyle({border: '2px solid #000'});
|
|||
|
},
|
|||
|
off: function(colorBorder, colorCode) {
|
|||
|
colorBorder.setStyle({border: '2px solid ' + colorCode});
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var nicEditorBgColorButton = nicEditorColorButton.extend({
|
|||
|
colorSelect: function(c) {
|
|||
|
this.ne.nicCommand('hiliteColor', c);
|
|||
|
this.removePane();
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicColorOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicImageOptions = {
|
|||
|
buttons: {
|
|||
|
'image': {name: 'Добавить изображение', type: 'nicImageButton', tags: ['IMG']}
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicImageButton = nicEditorAdvancedButton.extend({
|
|||
|
addPane: function() {
|
|||
|
this.im = this.ne.selectedInstance.selElm().parentTag('IMG');
|
|||
|
this.addForm({
|
|||
|
'': {type: 'title', txt: 'Добавить/изменить изображение'},
|
|||
|
'src': {type: 'text', txt: 'URL', 'value': 'http://', style: {width: '150px'}},
|
|||
|
'alt': {type: 'text', txt: 'Alt текст', style: {width: '100px'}},
|
|||
|
'align': {type: 'select', txt: 'Выравнивание', options: {none: 'По умолчанию', 'left': 'Слева', 'right': 'Справа'}}
|
|||
|
}, this.im);
|
|||
|
},
|
|||
|
submit: function(e) {
|
|||
|
var src = this.inputs['src'].value;
|
|||
|
if (src == "" || src == "http://") {
|
|||
|
alert("Вы должны указать URL что бы вставить изображение");
|
|||
|
return false;
|
|||
|
}
|
|||
|
this.removePane();
|
|||
|
|
|||
|
if (!this.im) {
|
|||
|
var tmp = 'javascript:nicImTemp();';
|
|||
|
this.ne.nicCommand("insertImage", tmp);
|
|||
|
this.im = this.findElm('IMG', 'src', tmp);
|
|||
|
}
|
|||
|
if (this.im) {
|
|||
|
this.im.setAttributes({
|
|||
|
src: this.inputs['src'].value,
|
|||
|
alt: this.inputs['alt'].value,
|
|||
|
align: this.inputs['align'].value
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicImageOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicSaveOptions = {
|
|||
|
buttons: {
|
|||
|
'save': {name: __('Сохранить контент'), type: 'nicEditorSaveButton'}
|
|||
|
}
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicEditorSaveButton = nicEditorButton.extend({
|
|||
|
init: function() {
|
|||
|
if (!this.ne.options.onSave) {
|
|||
|
this.margin.setStyle({'display': 'none'});
|
|||
|
}
|
|||
|
},
|
|||
|
mouseClick: function() {
|
|||
|
var onSave = this.ne.options.onSave;
|
|||
|
var selectedInstance = this.ne.selectedInstance;
|
|||
|
onSave(selectedInstance.getContent(), selectedInstance.elm.id, selectedInstance);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicSaveOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicUploadOptions = {
|
|||
|
buttons: {
|
|||
|
'upload': {name: 'Загрузить изображение', type: 'nicUploadButton'}
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicUploadButton = nicEditorAdvancedButton.extend({
|
|||
|
nicURI: 'http://api.imgur.com/2/upload.json',
|
|||
|
errorText: 'Не удалось загрузить изображение!',
|
|||
|
addPane: function() {
|
|||
|
if (typeof window.FormData === "undefined") {
|
|||
|
return this.onError("Ваш браузер не поддерживает загрузку изображений, используйте Chrome, Firefox или Safari.");
|
|||
|
}
|
|||
|
this.im = this.ne.selectedInstance.selElm().parentTag('IMG');
|
|||
|
|
|||
|
var container = new bkElement('div')
|
|||
|
.setStyle({padding: '10px'})
|
|||
|
.appendTo(this.pane.pane);
|
|||
|
|
|||
|
new bkElement('div')
|
|||
|
.setStyle({fontSize: '14px', fontWeight: 'bold', paddingBottom: '5px'})
|
|||
|
.setContent('Вставить изображение')
|
|||
|
.appendTo(container);
|
|||
|
|
|||
|
this.fileInput = new bkElement('input')
|
|||
|
.setAttributes({'type': 'file'})
|
|||
|
.appendTo(container);
|
|||
|
|
|||
|
this.progress = new bkElement('progress')
|
|||
|
.setStyle({width: '100%', display: 'none'})
|
|||
|
.setAttributes('max', 100)
|
|||
|
.appendTo(container);
|
|||
|
|
|||
|
this.fileInput.onchange = this.uploadFile.closure(this);
|
|||
|
},
|
|||
|
onError: function(msg) {
|
|||
|
this.removePane();
|
|||
|
alert(msg || "Не удалось загрузить изображение!");
|
|||
|
},
|
|||
|
uploadFile: function() {
|
|||
|
var file = this.fileInput.files[0];
|
|||
|
//console.log(file);
|
|||
|
if (!file || !file.type.match(/image.*/)) {
|
|||
|
this.onError("Загрузить можно только файлы изображений");
|
|||
|
return;
|
|||
|
}
|
|||
|
this.fileInput.setStyle({display: 'none'});
|
|||
|
this.setProgress(0);
|
|||
|
//console.log('setProgress(0)');
|
|||
|
var fd = new FormData(); // https://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader/
|
|||
|
fd.append("image", file);
|
|||
|
fd.append("key", "b7ea18a4ecbda8e92203fa4968d10660");
|
|||
|
var xhr = new XMLHttpRequest();
|
|||
|
xhr.open("POST", this.ne.options.uploadURI || this.nicURI);
|
|||
|
|
|||
|
xhr.onload = function() {
|
|||
|
try {
|
|||
|
//console.log('1');
|
|||
|
//console.log(xhr.responseText);
|
|||
|
var res = JSON.parse(xhr.responseText);
|
|||
|
} catch (e) {
|
|||
|
return this.onError();
|
|||
|
}
|
|||
|
this.onUploaded(res.upload);
|
|||
|
}.closure(this);
|
|||
|
xhr.onerror = this.onError.closure(this);
|
|||
|
xhr.upload.onprogress = function(e) {
|
|||
|
this.setProgress(e.loaded / e.total);
|
|||
|
}.closure(this);
|
|||
|
|
|||
|
//console.log(xhr);
|
|||
|
//console.log(fd);
|
|||
|
xhr.send(fd);
|
|||
|
},
|
|||
|
setProgress: function(percent) {
|
|||
|
this.progress.setStyle({display: 'block'});
|
|||
|
if (percent < .98) {
|
|||
|
this.progress.value = percent;
|
|||
|
} else {
|
|||
|
this.progress.removeAttribute('value');
|
|||
|
}
|
|||
|
},
|
|||
|
onUploaded: function(options) {
|
|||
|
this.removePane();
|
|||
|
var src = options.links.original;
|
|||
|
if (!this.im) {
|
|||
|
this.ne.selectedInstance.restoreRng();
|
|||
|
var tmp = 'javascript:nicImTemp();';
|
|||
|
this.ne.nicCommand("insertImage", src);
|
|||
|
this.im = this.findElm('IMG', 'src', src);
|
|||
|
}
|
|||
|
var w = parseInt(this.ne.selectedInstance.elm.getStyle('width'));
|
|||
|
if (this.im) {
|
|||
|
this.im.setAttributes({
|
|||
|
src: src,
|
|||
|
width: (w && options.image.width) ? Math.min(w, options.image.width) : ''
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicUploadOptions);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
var nicXHTML = bkClass.extend({
|
|||
|
stripAttributes: ['_moz_dirty', '_moz_resizing', '_extended'],
|
|||
|
noShort: ['style', 'title', 'script', 'textarea', 'a'],
|
|||
|
cssReplace: {'font-weight:bold;': 'strong', 'font-style:italic;': 'em'},
|
|||
|
sizes: {1: 'xx-small', 2: 'x-small', 3: 'small', 4: 'medium', 5: 'large', 6: 'x-large'},
|
|||
|
construct: function(nicEditor) {
|
|||
|
this.ne = nicEditor;
|
|||
|
if (this.ne.options.xhtml) {
|
|||
|
nicEditor.addEvent('get', this.cleanup.closure(this));
|
|||
|
}
|
|||
|
},
|
|||
|
cleanup: function(ni) {
|
|||
|
var node = ni.getElm();
|
|||
|
var xhtml = this.toXHTML(node);
|
|||
|
ni.content = xhtml;
|
|||
|
},
|
|||
|
toXHTML: function(n, r, d) {
|
|||
|
var txt = '';
|
|||
|
var attrTxt = '';
|
|||
|
var cssTxt = '';
|
|||
|
var nType = n.nodeType;
|
|||
|
var nName = n.nodeName.toLowerCase();
|
|||
|
var nChild = n.hasChildNodes && n.hasChildNodes();
|
|||
|
var extraNodes = new Array();
|
|||
|
|
|||
|
switch (nType) {
|
|||
|
case 1:
|
|||
|
var nAttributes = n.attributes;
|
|||
|
|
|||
|
switch (nName) {
|
|||
|
case 'b':
|
|||
|
nName = 'strong';
|
|||
|
break;
|
|||
|
case 'i':
|
|||
|
nName = 'em';
|
|||
|
break;
|
|||
|
case 'font':
|
|||
|
nName = 'span';
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if (r) {
|
|||
|
for (var i = 0; i < nAttributes.length; i++) {
|
|||
|
var attr = nAttributes[i];
|
|||
|
|
|||
|
var attributeName = attr.nodeName.toLowerCase();
|
|||
|
var attributeValue = attr.nodeValue;
|
|||
|
|
|||
|
if (!attr.specified || !attributeValue || bkLib.inArray(this.stripAttributes, attributeName) || typeof(attributeValue) == "function") {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
switch (attributeName) {
|
|||
|
case 'style':
|
|||
|
var css = attributeValue.replace(/ /g, "");
|
|||
|
for (itm in this.cssReplace) {
|
|||
|
if (css.indexOf(itm) != -1) {
|
|||
|
extraNodes.push(this.cssReplace[itm]);
|
|||
|
css = css.replace(itm, '');
|
|||
|
}
|
|||
|
}
|
|||
|
cssTxt += css;
|
|||
|
attributeValue = "";
|
|||
|
break;
|
|||
|
case 'class':
|
|||
|
attributeValue = attributeValue.replace("Apple-style-span", "");
|
|||
|
break;
|
|||
|
case 'size':
|
|||
|
cssTxt += "font-size:" + this.sizes[attributeValue] + ';';
|
|||
|
attributeValue = "";
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if (attributeValue) {
|
|||
|
attrTxt += ' ' + attributeName + '="' + attributeValue + '"';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cssTxt) {
|
|||
|
attrTxt += ' style="' + cssTxt + '"';
|
|||
|
}
|
|||
|
|
|||
|
for (var i = 0; i < extraNodes.length; i++) {
|
|||
|
txt += '<' + extraNodes[i] + '>';
|
|||
|
}
|
|||
|
|
|||
|
if (attrTxt == "" && nName == "span") {
|
|||
|
r = false;
|
|||
|
}
|
|||
|
if (r) {
|
|||
|
txt += '<' + nName;
|
|||
|
if (nName != 'br') {
|
|||
|
txt += attrTxt;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if (!nChild && !bkLib.inArray(this.noShort, attributeName)) {
|
|||
|
if (r) {
|
|||
|
txt += ' />';
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (r) {
|
|||
|
txt += '>';
|
|||
|
}
|
|||
|
|
|||
|
for (var i = 0; i < n.childNodes.length; i++) {
|
|||
|
var results = this.toXHTML(n.childNodes[i], true, true);
|
|||
|
if (results) {
|
|||
|
txt += results;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (r && nChild) {
|
|||
|
txt += '</' + nName + '>';
|
|||
|
}
|
|||
|
|
|||
|
for (var i = 0; i < extraNodes.length; i++) {
|
|||
|
txt += '</' + extraNodes[i] + '>';
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
//if(n.nodeValue != '\n') {
|
|||
|
txt += n.nodeValue;
|
|||
|
//}
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return txt;
|
|||
|
}
|
|||
|
});
|
|||
|
nicEditors.registerPlugin(nicXHTML);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
var nicBBCode = bkClass.extend({
|
|||
|
construct: function(nicEditor) {
|
|||
|
this.ne = nicEditor;
|
|||
|
if (this.ne.options.bbCode) {
|
|||
|
nicEditor.addEvent('get', this.bbGet.closure(this));
|
|||
|
nicEditor.addEvent('set', this.bbSet.closure(this));
|
|||
|
|
|||
|
var loadedPlugins = this.ne.loadedPlugins;
|
|||
|
for (itm in loadedPlugins) {
|
|||
|
if (loadedPlugins[itm].toXHTML) {
|
|||
|
this.xhtml = loadedPlugins[itm];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
bbGet: function(ni) {
|
|||
|
var xhtml = this.xhtml.toXHTML(ni.getElm());
|
|||
|
ni.content = this.toBBCode(xhtml);
|
|||
|
},
|
|||
|
bbSet: function(ni) {
|
|||
|
ni.content = this.fromBBCode(ni.content);
|
|||
|
},
|
|||
|
toBBCode: function(xhtml) {
|
|||
|
function rp(r, m) {
|
|||
|
xhtml = xhtml.replace(r, m);
|
|||
|
}
|
|||
|
|
|||
|
rp(/\n/gi, "");
|
|||
|
rp(/<strong>(.*?)<\/strong>/gi, "[b]$1[/b]");
|
|||
|
rp(/<em>(.*?)<\/em>/gi, "[i]$1[/i]");
|
|||
|
rp(/<span.*?style="text-decoration:underline;">(.*?)<\/span>/gi, "[u]$1[/u]");
|
|||
|
rp(/<ul>(.*?)<\/ul>/gi, "[list]$1[/list]");
|
|||
|
rp(/<li>(.*?)<\/li>/gi, "[*]$1[/*]");
|
|||
|
rp(/<ol>(.*?)<\/ol>/gi, "[list=1]$1[/list]");
|
|||
|
rp(/<img.*?src="(.*?)".*?>/gi, "[img]$1[/img]");
|
|||
|
rp(/<a.*?href="(.*?)".*?>(.*?)<\/a>/gi, "[url=$1]$2[/url]");
|
|||
|
rp(/<br.*?>/gi, "\n");
|
|||
|
rp(/<.*?>.*?<\/.*?>/gi, "");
|
|||
|
|
|||
|
return xhtml;
|
|||
|
},
|
|||
|
fromBBCode: function(bbCode) {
|
|||
|
function rp(r, m) {
|
|||
|
bbCode = bbCode.replace(r, m);
|
|||
|
}
|
|||
|
|
|||
|
rp(/\[b\](.*?)\[\/b\]/gi, "<strong>$1</strong>");
|
|||
|
rp(/\[i\](.*?)\[\/i\]/gi, "<em>$1</em>");
|
|||
|
rp(/\[u\](.*?)\[\/u\]/gi, "<span style=\"text-decoration:underline;\">$1</span>");
|
|||
|
rp(/\[list\](.*?)\[\/list\]/gi, "<ul>$1</ul>");
|
|||
|
rp(/\[list=1\](.*?)\[\/list\]/gi, "<ol>$1</ol>");
|
|||
|
rp(/\[\*\](.*?)\[\/\*\]/gi, "<li>$1</li>");
|
|||
|
rp(/\[img\](.*?)\[\/img\]/gi, "<img src=\"$1\" />");
|
|||
|
rp(/\[url=(.*?)\](.*?)\[\/url\]/gi, "<a href=\"$1\">$2</a>");
|
|||
|
rp(/\n/gi, "<br />");
|
|||
|
//rp(/\[.*?\](.*?)\[\/.*?\]/gi,"$1");
|
|||
|
|
|||
|
return bbCode;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
});
|
|||
|
nicEditors.registerPlugin(nicBBCode);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
nicEditor = nicEditor.extend({
|
|||
|
floatingPanel: function() {
|
|||
|
this.floating = new bkElement('DIV').setStyle({position: 'absolute', top: '-1000px'}).appendTo(document.body);
|
|||
|
this.addEvent('focus', this.reposition.closure(this)).addEvent('blur', this.hide.closure(this));
|
|||
|
this.setPanel(this.floating);
|
|||
|
},
|
|||
|
reposition: function() {
|
|||
|
var e = this.selectedInstance.e;
|
|||
|
this.floating.setStyle({width: (parseInt(e.getStyle('width')) || e.clientWidth) + 'px'});
|
|||
|
var top = e.offsetTop - this.floating.offsetHeight;
|
|||
|
if (top < 0) {
|
|||
|
top = e.offsetTop + e.offsetHeight;
|
|||
|
}
|
|||
|
|
|||
|
this.floating.setStyle({top: top + 'px', left: e.offsetLeft + 'px', display: 'block'});
|
|||
|
},
|
|||
|
hide: function() {
|
|||
|
this.floating.setStyle({top: '-1000px'});
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* START CONFIG */
|
|||
|
var nicCodeOptions = {
|
|||
|
buttons: {
|
|||
|
'xhtml': {name: 'Редактировать HTML', type: 'nicCodeButton'}
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
/* END CONFIG */
|
|||
|
|
|||
|
var nicCodeButton = nicEditorAdvancedButton.extend({
|
|||
|
width: '350px',
|
|||
|
addPane: function() {
|
|||
|
this.addForm({
|
|||
|
'': {type: 'title', txt: 'Редактировать HTML'},
|
|||
|
'code': {type: 'content', 'value': this.ne.selectedInstance.getContent(), style: {width: '340px', height: '200px'}}
|
|||
|
});
|
|||
|
},
|
|||
|
submit: function(e) {
|
|||
|
var code = this.inputs['code'].value;
|
|||
|
this.ne.selectedInstance.setContent(code);
|
|||
|
this.removePane();
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicCodeOptions);
|
|||
|
|
|||
|
/* Images Manager Button - Lead Pepelats ©2013 ( http://lead-pepelats.ru/ ) */
|
|||
|
var nicImagesManagerOptions = {
|
|||
|
buttons: {
|
|||
|
'imagesManager': {name: 'Менеджер изображений', type: 'nicImagesManagerButton'}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
var nicImagesManagerButton = nicEditorAdvancedButton.extend({addPane: function() {
|
|||
|
this.uri = this.ne.options.imanagerURI;
|
|||
|
this.requestInterval = 1500;
|
|||
|
this.error = false;
|
|||
|
this.message;
|
|||
|
this.im = this.ne.selectedInstance.selElm().parentTag("IMG");
|
|||
|
this.mgr = new bkElement('DIV').setStyle({height: 'auto', paddingBottom: '15px'}).appendTo(this.pane.pane);
|
|||
|
this.myForm = this.createElement('<form enctype="multipart/form-data"></form>').setAttributes({method: 'post', action: this.uri, target: 'frame'});
|
|||
|
this.frameWrapper = new bkElement('DIV').setStyle({display: 'none'}).appendTo(this.pane.pane);
|
|||
|
this.myFrame = this.createElement('<iframe name="frame"></iframe>').setAttributes({src: this.uri}).appendTo(this.frameWrapper);
|
|||
|
setTimeout(this.updateList.closure(this), 50)
|
|||
|
}, getForm: function(A) {
|
|||
|
new bkElement('DIV').setStyle({margin: "15px 0px 15px 0px", fontSize: "12px", fontWeight: "bold"}).setContent('Загрузить изображение:').appendTo(this.myForm);
|
|||
|
this.createElement('<input type="file" name="nicImage" />').addEvent("change", this.startUpload.closure(this, A)).setStyle({margin: "0px 0px 0px 15px", fontSize: "12px"}).appendTo(this.myForm);
|
|||
|
this.createElement('<input type="hidden" name="path" />').setAttributes({value: (typeof A != 'undefined' ? A : '/')}).appendTo(this.myForm);
|
|||
|
return this.myForm;
|
|||
|
}, startUpload: function(A) {
|
|||
|
this.myForm.submit();
|
|||
|
setTimeout(this.getResponse.closure(this), this.requestInterval)
|
|||
|
setTimeout(this.updateList.closure(this, A), this.requestInterval);
|
|||
|
}, getResponse: function() {
|
|||
|
var data = this.myFrame.contentWindow.document.body.innerHTML;
|
|||
|
if (data) {
|
|||
|
try {
|
|||
|
var response = eval('(' + (data) + ')');
|
|||
|
if (response.status == 'error')
|
|||
|
this.error = true;
|
|||
|
this.message = response.message;
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
this.error = true;
|
|||
|
this.message = 'Не удалось получить разультат загрузки файла';
|
|||
|
}
|
|||
|
}
|
|||
|
}, setMessage: function(E, T) {
|
|||
|
if (typeof E == 'string') {
|
|||
|
var C = '000000';
|
|||
|
if (T == 'error')
|
|||
|
C = 'FF0000';
|
|||
|
if (T == 'message')
|
|||
|
C = '009900';
|
|||
|
return new bkElement('DIV').setStyle({textAlign: 'center', color: '#' + C, margin: '15px 0px 15px 0px', fontSize: "12px"}).setContent(E);
|
|||
|
}
|
|||
|
}, updateList: function(B) {
|
|||
|
this.mgr.setContent('');
|
|||
|
this.myForm.innerHTML = '';
|
|||
|
if (this.message) {
|
|||
|
this.setMessage(this.message, this.error ? 'error' : 'message').appendTo(this.myForm);
|
|||
|
this.error = this.message = '';
|
|||
|
}
|
|||
|
this.mgr.appendChild(this.getList(B));
|
|||
|
}, getList: function(A) {
|
|||
|
var list = new bkElement('DIV');
|
|||
|
if (typeof this.ne.options.imanagerURI == 'string') {
|
|||
|
var wait = new bkElement('DIV').setStyle({margin: '30px 0px', textAlign: 'center', fontSize: "12px"}).setContent('Подождите ...').appendTo(list);
|
|||
|
var $this = this;
|
|||
|
var $list = list;
|
|||
|
var xmlhttp;
|
|||
|
if (window.XMLHttpRequest)
|
|||
|
xmlhttp = new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
|
|||
|
else
|
|||
|
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
|
|||
|
//console.log(this.ne.options.imanagerURI);
|
|||
|
xmlhttp.open("POST", this.ne.options.imanagerURI, true);
|
|||
|
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|||
|
xmlhttp.onreadystatechange = function() {
|
|||
|
//console.log(this.readyState+"="+this.status+"="+this.responseText);
|
|||
|
if (this.readyState == 4) {
|
|||
|
if (this.status == 200) {
|
|||
|
wait.setStyle({display: 'none'});
|
|||
|
if (this.responseText) {
|
|||
|
try {
|
|||
|
var obj = eval('(' + this.responseText + ')');
|
|||
|
new bkElement('DIV').setAttributes({id: 'path'}).setStyle({margin: '15px 0px 15px 0px', fontSize: "12px"}).setContent('<b>Путь:</b> ' + obj.path).appendTo($list);
|
|||
|
for (var i in obj.items) {
|
|||
|
var item = obj.items[i];
|
|||
|
//console.log(item);/*ext: "file" name: "/upload/blog/681/Lekciya2018.docx" type: "file" */
|
|||
|
//if (item.type != 'folder' && typeof $this.ne.options.iconList[item.ext] == 'undefined')
|
|||
|
//if (item.type != 'folder') continue;
|
|||
|
var li = new bkElement('DIV').setStyle({cursor: 'pointer', clear: 'both', margin: '5px 0px 5px 20px', fontSize: "12px"});
|
|||
|
new bkElement('DIV').setStyle({width: '18px', height: '18px', float: 'left', marginRight: '4px', backgroundImage: "url('" + $this.ne.options.iconsPath + "')", backgroundRepeat: 'no-repeat', backgroundPosition: ((typeof $this.ne.options.iconList[item.ext] != 'undefined' ? $this.ne.options.iconList[item.ext] - 1 : 28) * -18) + 'px 0px'}).appendTo(li);
|
|||
|
new bkElement('SPAN').setContent(item.name).appendTo(li);
|
|||
|
if (item.type == 'folder')
|
|||
|
li.addEvent('click', $this.updateList.closure($this, obj.path + item.name)).addEvent('mouseover', $this.on.closure($this, li)).addEvent('mouseout', $this.off.closure($this, li)).appendTo($list);
|
|||
|
else{
|
|||
|
li.addEvent('click', $this.image.closure($this, obj.path + item.name, item.name)).addEvent('mouseover', $this.on.closure($this, li)).addEvent('mouseout', $this.off.closure($this, li)).appendTo($list);
|
|||
|
//console.log(obj.path + item.name+"|");
|
|||
|
}
|
|||
|
if (item.type == 'folder' && item.name == '..')
|
|||
|
var title = 'Перейти на уровень выше';
|
|||
|
else if (item.type == 'folder')
|
|||
|
var title = 'Открыть папку';
|
|||
|
if (item.type == 'file')
|
|||
|
var title = 'Вставить картинку или документ';
|
|||
|
if (typeof title != 'undefined')
|
|||
|
li.setAttribute('title', title);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
alert(e);
|
|||
|
this.setMessage('Произошла ошибка!<br />Не удалось получить список файлов!', 'error').appendTo($list);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
this.setMessage('Ошибка получения данных с сервера', 'error').appendTo($list);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
try {
|
|||
|
xmlhttp.send("path=" + encodeURIComponent(typeof A != 'undefined' ? A : '/'));
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
alert(e);
|
|||
|
}
|
|||
|
this.mgr.appendChild(this.getForm(A));
|
|||
|
}
|
|||
|
else
|
|||
|
this.setMessage('В конфигурации NicEdit не установлены необходимые для работы менеджера изображений параметры (imanagerURI)', 'error').appendTo(list);
|
|||
|
return list;
|
|||
|
}, on: function(A) {
|
|||
|
A.setStyle({textDecoration: 'underline'})
|
|||
|
}, off: function(A) {
|
|||
|
A.setStyle({textDecoration: 'none'})
|
|||
|
}, image: function(A, B) {
|
|||
|
this.removePane();
|
|||
|
//console.log(A);// //upload/blog/681/Lekciya2018.docx
|
|||
|
//console.log(B);// /upload/blog/681/Lekciya2018.docx
|
|||
|
//console.log(e[e.length-1]);
|
|||
|
var e = B.split('.');
|
|||
|
var ext = e[e.length-1];
|
|||
|
/*if(ext!='GIF'&&ext!='JPG'&&ext!='PNG'&&ext!='BMP'&&ext!='gif'&&ext!='jpg'&&ext!='png'&&ext!='bmp'){
|
|||
|
if (!this.im) {
|
|||
|
var C = "javascript:nicTemp();";
|
|||
|
this.ne.nicCommand("createlink", C);
|
|||
|
this.im = this.findElm("A", "href", C)
|
|||
|
}
|
|||
|
if (this.im) {
|
|||
|
this.im.setAttributes({href: A.substring(1), title: B, target:"_blank"})
|
|||
|
}
|
|||
|
}else{*/
|
|||
|
if (!this.im) {
|
|||
|
var C = "javascript:nicImTemp();";
|
|||
|
this.ne.nicCommand("insertImage", C);
|
|||
|
this.im = this.findElm("IMG", "src", C)
|
|||
|
}
|
|||
|
if (this.im) {
|
|||
|
this.im.setAttributes({src: A.substring(1), alt: B})//.setStyle({float: 'left', width: "300px"})
|
|||
|
}
|
|||
|
//}
|
|||
|
if(ext!='GIF'&&ext!='JPG'&&ext!='PNG'&&ext!='BMP'&&ext!='gif'&&ext!='jpg'&&ext!='png'&&ext!='bmp'){
|
|||
|
var tt = B.split('/');
|
|||
|
//console.log(tt);
|
|||
|
this.im.outerHTML = "<a href='"+B+"' target='_blank'>"+tt[4]+"</a>";
|
|||
|
|
|||
|
}
|
|||
|
}, createElement: function(A) {
|
|||
|
if (typeof A == 'string') {
|
|||
|
var tmp = document.createElement('div');
|
|||
|
tmp.innerHTML = A;
|
|||
|
tmp = $BK(tmp.firstChild);
|
|||
|
return tmp;
|
|||
|
}
|
|||
|
}});
|
|||
|
nicEditors.registerPlugin(nicPlugin, nicImagesManagerOptions);
|
|||
|
|