diff options
Diffstat (limited to 'wiki/lib/scripts/editor.js')
-rw-r--r-- | wiki/lib/scripts/editor.js | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/wiki/lib/scripts/editor.js b/wiki/lib/scripts/editor.js deleted file mode 100644 index c9cb312..0000000 --- a/wiki/lib/scripts/editor.js +++ /dev/null @@ -1,205 +0,0 @@ -/** - * The DokuWiki editor features - * - * These are the advanced features of the editor. It does NOT contain any - * code for the toolbar buttons and it functions. See toolbar.js for that. - */ - -var dw_editor = { - - /** - * initialize the default editor functionality - * - * All other functions can also be called separately for non-default - * textareas - */ - init: function(){ - var $editor = jQuery('#wiki__text'); - if($editor.length === 0) { - return; - } - - dw_editor.initSizeCtl('#size__ctl',$editor); - - if($editor.attr('readOnly')) { - return; - } - - $editor.keydown(dw_editor.keyHandler); - - }, - - /** - * Add the edit window size and wrap controls - * - * Initial values are read from cookie if it exists - * - * @param selector ctlarea the div to place the controls - * @param selector editor the textarea to control - */ - initSizeCtl: function(ctlarea,editor){ - var $ctl = jQuery(ctlarea), - $textarea = jQuery(editor); - - if($ctl.length === 0 || $textarea.length === 0) { - return; - } - - $textarea.css('height', DokuCookie.getValue('sizeCtl') || '300px'); - - var wrp = DokuCookie.getValue('wrapCtl'); - if(wrp){ - dw_editor.setWrap($textarea[0], wrp); - } // else use default value - - jQuery.each([ - ['larger', function(){dw_editor.sizeCtl(editor,100);}], - ['smaller', function(){dw_editor.sizeCtl(editor,-100);}], - ['wrap', function(){dw_editor.toggleWrap(editor);}] - ], function (_, img) { - jQuery(document.createElement('img')) - .attr('src', DOKU_BASE+'lib/images/' + img[0] + '.gif') - .attr('alt', '') - .click(img[1]) - .appendTo($ctl); - }); - }, - - /** - * This sets the vertical size of the editbox and adjusts the cookie - * - * @param selector editor the textarea to control - * @param int val the relative value to resize in pixel - */ - sizeCtl: function(editor,val){ - var $textarea = jQuery(editor), - height = parseInt($textarea.css('height')) + val; - $textarea.css('height', height+'px'); - DokuCookie.setValue('sizeCtl',$textarea.css('height')); - }, - - /** - * Toggle the wrapping mode of the editor textarea and adjusts the - * cookie - * - * @param selector editor the textarea to control - */ - toggleWrap: function(editor){ - var $textarea = jQuery(editor), - wrap = $textarea.attr('wrap'); - dw_editor.setWrap($textarea[0], - (wrap && wrap.toLowerCase() == 'off') ? 'soft' : 'off'); - DokuCookie.setValue('wrapCtl',$textarea.attr('wrap')); - }, - - /** - * Set the wrapping mode of a textarea - * - * @author Fluffy Convict <fluffyconvict@hotmail.com> - * @author <shutdown@flashmail.com> - * @link http://news.hping.org/comp.lang.javascript.archive/12265.html - * @link https://bugzilla.mozilla.org/show_bug.cgi?id=41464 - * @param DomObject textarea - * @param string wrapAttrValue - */ - setWrap: function(textarea, wrapAttrValue){ - textarea.setAttribute('wrap', wrapAttrValue); - - // Fix display for mozilla - var parNod = textarea.parentNode; - var nxtSib = textarea.nextSibling; - parNod.removeChild(textarea); - parNod.insertBefore(textarea, nxtSib); - }, - - /** - * Make intended formattings easier to handle - * - * Listens to all key inputs and handle indentions - * of lists and code blocks - * - * Currently handles space, backspace, enter and - * ctrl-enter presses - * - * @author Andreas Gohr <andi@splitbrain.org> - * @fixme handle tabs - * @param event e - the key press event object - */ - keyHandler: function(e){ - if(jQuery.inArray(e.keyCode,[8, 10, 13, 32]) === -1) { - return; - } - var selection = DWgetSelection(this); - if(selection.getLength() > 0) { - return; //there was text selected, keep standard behavior - } - var search = "\n"+this.value.substr(0,selection.start); - var linestart = Math.max(search.lastIndexOf("\n"), - search.lastIndexOf("\r")); //IE workaround - search = search.substr(linestart); - - if((e.keyCode == 13 || e.keyCode == 10) && e.ctrlKey) { // Ctrl-Enter (With Chrome workaround) - // Submit current edit - jQuery('#edbtn__save').click(); - e.preventDefault(); // prevent enter key - return false; - }else if(e.keyCode == 13){ // Enter - // keep current indention for lists and code - var match = search.match(/(\n +([\*-] ?)?)/); - if(match){ - var scroll = this.scrollHeight; - var match2 = search.match(/^\n +[\*-]\s*$/); - // Cancel list if the last item is empty (i. e. two times enter) - if (match2 && this.value.substr(selection.start).match(/^($|\r?\n)/)) { - this.value = this.value.substr(0, linestart) + "\n" + - this.value.substr(selection.start); - selection.start = linestart + 1; - selection.end = linestart + 1; - DWsetSelection(selection); - } else { - insertAtCarret(this.id,match[1]); - } - this.scrollTop += (this.scrollHeight - scroll); - e.preventDefault(); // prevent enter key - return false; - } - }else if(e.keyCode == 8){ // Backspace - // unindent lists - var match = search.match(/(\n +)([*-] ?)$/); - if(match){ - var spaces = match[1].length-1; - - if(spaces > 3){ // unindent one level - this.value = this.value.substr(0,linestart)+ - this.value.substr(linestart+2); - selection.start = selection.start - 2; - selection.end = selection.start; - }else{ // delete list point - this.value = this.value.substr(0,linestart)+ - this.value.substr(selection.start); - selection.start = linestart; - selection.end = linestart; - } - DWsetSelection(selection); - e.preventDefault(); // prevent backspace - return false; - } - }else if(e.keyCode == 32){ // Space - // intend list item - var match = search.match(/(\n +)([*-] )$/); - if(match){ - this.value = this.value.substr(0,linestart)+' '+ - this.value.substr(linestart); - selection.start = selection.start + 2; - selection.end = selection.start; - DWsetSelection(selection); - e.preventDefault(); // prevent space - return false; - } - } - } - - -}; - -jQuery(dw_editor.init); |