diff --git a/nicEdit.js b/nicEdit.js index 08f6576..f2537df 100644 --- a/nicEdit.js +++ b/nicEdit.js @@ -1,10 +1,13 @@ -/* NicEdit - Micro Inline WYSIWYG - * Copyright 2007-2008 Brian Kirchoff +/** + * NicEdit - Micro Inline WYSIWYG + * Copyright 2007-2008 Brian Kirchoff, http://nicedit.com/ + * Copyright 2012-2015 Vitaliy Filippov, http://yourcmc.ru/wiki/nicEdit + * Version: 2015-07-13 * * NicEdit is distributed under the terms of the MIT license - * For more information visit http://nicedit.com/ * Do not remove this copyright message */ + var bkExtend = function(){ var args = arguments; if (args.length == 1) args = [this, args[0]]; @@ -68,7 +71,7 @@ var bkElement = bkClass.extend({ } 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]; + return [curleft+b,curtop+b]; }, noSelect : function() { @@ -207,17 +210,20 @@ var bkLib = { arguments.callee.done = true; for (i = 0;i < bkLib.domLoad.length;i++) bkLib.domLoad[i](); }, - onDomLoaded : function(fireThis) { + onDomLoaded: function(fireThis) { this.domLoad.push(fireThis); if (document.addEventListener) { document.addEventListener("DOMContentLoaded", bkLib.domLoaded, null); - } else if(bkLib.isMSIE) { - document.write("<\/scr"+"ipt>"); - $BK("__ie_onload").onreadystatechange = function() { - if (this.readyState == "complete"){bkLib.domLoaded();} + } else if (bkLib.isMSIE) { + var e = document.createElement('script'); + e.setAttribute('defer', 'defer'); + e.setAttribute('src', location.protocol == "https:" ? "javascript:void(0)" : "//0"); + (document.head || document.documentElement).appendChild(e); + e.onreadystatechange = function() { + if (this.readyState == "complete") bkLib.domLoaded(); }; } - window.onload = bkLib.domLoaded; + window.onload = bkLib.domLoaded; } }; @@ -337,6 +343,9 @@ var nicEditor = bkClass.extend({ } nicEditors.editors.push(this); bkLib.addEvent(document.body, 'mousedown', this.selectCheck.closureListener(this)); + var st = document.createElement('style'); + st.appendChild(document.createTextNode(".nicEdit-main p { margin: .3em 0; }")); + (document.head || document.documentElement).appendChild(st); }, panelInstance : function(e,o) { @@ -442,11 +451,21 @@ var nicEditorInstance = bkClass.extend({ 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; + var ie7s = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat")); + var s = { + width: newX+'px', + border: '1px solid #ccc', + boxSizing: 'border-box', + overflowY: 'auto', + overflowX: 'hidden' + }; + s[ie7s ? 'height' : 'maxHeight'] = isTextarea ? newY+'px' : (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); + var editorElm = new bkElement('DIV').setStyle({ + width: (newX-10)+'px', + padding: '4px', + minHeight: (newY-10)+'px' + }).addClass('main').appendTo(this.editorContain); e.setStyle({display : 'none'}); @@ -921,7 +940,7 @@ var nicEditorPane = bkClass.extend({ this.elm = elm; this.pos = elm.pos(); - this.contain = new bkElement('div').setStyle({zIndex: '999', overflow: 'hidden', position: 'absolute', left: this.pos[0]+'px', top : this.pos[1]+'px'}) + this.contain = new bkElement('div').setStyle({zIndex: '999', overflow: 'hidden', position: 'absolute', left: this.pos[0]+'px', top : (this.pos[1]+elm.offsetHeight)+'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) { @@ -1000,9 +1019,9 @@ var nicEditorAdvancedButton = nicEditorButton.extend({ '.niceabf td { padding: 2px 5px 2px 0; }\n'+ '.niceabf td.h { vertical-align: top; padding-top: 4px; white-space: nowrap; }\n'+ '.niceabf h2 { font-size: 14px; font-weight: bold; padding: 0; margin: 0; }\n'+ - '.niceabf input, .niceabf select { vertical-align: middle; font-size: 13px; border: 1px solid #ccc; }\n'+ + '.niceabf input, .niceabf select { text-transform: none; font-weight: normal; height: auto; padding: 1px; vertical-align: middle; font-size: 13px; border: 1px solid #ccc; }\n'+ '.niceabf textarea { border: 1px solid #ccc; }\n'+ - '.niceabf input.button { background-color: #efefef; margin: 3px 0; }\n' + '.niceabf input.button { background-color: #efefef; color: black; margin: 3px 0; }\n' )); document.getElementsByTagName('head')[0].appendChild(document._nicCss); } @@ -1564,7 +1583,7 @@ nicEditors.registerPlugin(nicPlugin,nicTableOptions); nicEditor = nicEditor.extend({ floatingPanel: function() { - this.floating = new bkElement('DIV').setStyle({display: 'inline-block', position: 'absolute', top: '-1000px', zIndex: 100}).appendTo(document.body); + this.floating = new bkElement('DIV').setStyle({display: 'inline-block', position: 'absolute', left: '-1000px', top: '-1000px', zIndex: 100}).appendTo(document.body); this.addEvent('focus', this.reposition.closure(this)).addEvent('blur', this.hide.closure(this)); bkLib.addEvent(window, 'scroll', this.reposition.closure(this)); this.setPanel(this.floating); @@ -1572,28 +1591,16 @@ nicEditor = nicEditor.extend({ reposition: function() { var e = this.selectedInstance; - if (!e || !(e = e.e)) return; + if (!e || !(e = e.elm)) return; var h = this.floating.offsetHeight; - if (this.oldMargin === undefined) this.oldMargin = e.style.marginTop||''; - e.style.marginTop = h+'px'; - var top = e.offsetTop-h; + var p = e.pos(); var d = document; - d = d.body.scrollTop || d.documentElement.scrollTop; - if(top < d) { - top = d; - } - var x = 0; - var c = e; - while (c && c != document.body) { - x += c.offsetLeft; - c = c.offsetParent; - } - this.floating.setStyle({ top: top+'px', left: x+'px' }); + d = window.pageYOffset || d.body.scrollTop || d.documentElement.scrollTop; + var top = p[1]-h; + this.floating.setStyle({ top: (top < d ? d : top)+'px', left: p[0]+'px' }); }, hide: function() { - this.floating.setStyle({ top: '-1000px' }); - if (this.selectedInstance) this.selectedInstance.e.style.marginTop = this.oldMargin; - this.oldMargin = null; + this.floating.setStyle({ top: '-1000px', left: '-1000px' }); } });