diff options
Diffstat (limited to 'vendors/dokuwiki/lib/scripts/linkwiz.js')
-rw-r--r-- | vendors/dokuwiki/lib/scripts/linkwiz.js | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/vendors/dokuwiki/lib/scripts/linkwiz.js b/vendors/dokuwiki/lib/scripts/linkwiz.js deleted file mode 100644 index 55469c158..000000000 --- a/vendors/dokuwiki/lib/scripts/linkwiz.js +++ /dev/null @@ -1,282 +0,0 @@ -/** - * The Link Wizard - * - * @author Andreas Gohr <gohr@cosmocode.de> - */ -var linkwiz = { - wiz: null, - entry: null, - result: null, - timer: null, - sack: null, - textArea: null, - selected: -1, - selection: null, - - /** - * Initialize the linkwizard by creating the needed HTML - * and attaching the eventhandlers - */ - init: function(textArea){ - // prepare AJAX object - linkwiz.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php'); - linkwiz.sack.AjaxFailedAlert = ''; - linkwiz.sack.encodeURIString = false; - - // create HTML Structure - linkwiz.wiz = document.createElement('div'); - linkwiz.wiz.id = 'link__wiz'; - linkwiz.wiz.className = 'picker'; - linkwiz.wiz.style.top = (findPosY(textArea)+20)+'px'; - linkwiz.wiz.style.left = (findPosX(textArea)+80)+'px'; - linkwiz.wiz.style.marginLeft = '-10000px'; - - linkwiz.wiz.innerHTML = - '<div id="link__wiz_header">'+ - '<img src="'+DOKU_BASE+'lib/images/close.png" width="16" height="16" align="right" alt="" id="link__wiz_close" />'+ - LANG['linkwiz']+'</div>'+ - '<div>'+LANG['linkto']+' <input type="text" class="edit" id="link__wiz_entry" autocomplete="off" /></div>'+ - '<div id="link__wiz_result"></div>'; - textArea.form.parentNode.appendChild(linkwiz.wiz); - linkwiz.textArea = textArea; - linkwiz.result = DOKUid('link__wiz_result'); - linkwiz.entry = DOKUid('link__wiz_entry'); - - // attach event handlers - var obj; - obj = DOKUid('link__wiz_close'); - obj.onclick = linkwiz.hide; - - linkwiz.sack.elementObj = linkwiz.result; - addEvent(linkwiz.entry,'keyup',linkwiz.onEntry); - addEvent(linkwiz.result,'click',linkwiz.onResultClick); - drag.attach(linkwiz.wiz,DOKUid('link__wiz_header')); - }, - - /** - * handle all keyup events in the entry field - */ - onEntry: function(e){ - if(e.keyCode == 37 || e.keyCode == 39){ //left/right - return true; //ignore - } - if(e.keyCode == 27){ - linkwiz.hide(); - e.preventDefault(); - e.stopPropagation(); - return false; - } - if(e.keyCode == 38){ //Up - linkwiz.select(linkwiz.selected -1); - e.preventDefault(); - e.stopPropagation(); - return false; - } - if(e.keyCode == 40){ //Down - linkwiz.select(linkwiz.selected +1); - e.preventDefault(); - e.stopPropagation(); - return false; - } - if(e.keyCode == 13){ //Enter - if(linkwiz.selected > -1){ - var obj = linkwiz.getResult(linkwiz.selected); - if(obj){ - var a = obj.getElementsByTagName('A')[0]; - linkwiz.resultClick(a); - } - }else if(linkwiz.entry.value){ - linkwiz.insertLink(linkwiz.entry.value); - } - - e.preventDefault(); - e.stopPropagation(); - return false; - } - linkwiz.autocomplete(); - }, - - /** - * Get one of the result by index - * - * @param int result div to return - * @returns DOMObject or null - */ - getResult: function(num){ - var obj; - var childs = linkwiz.result.getElementsByTagName('DIV'); - obj = childs[num]; - if(obj){ - return obj; - }else{ - return null; - } - }, - - /** - * Select the given result - */ - select: function(num){ - if(num < 0){ - linkwiz.deselect(); - return; - } - - var obj = linkwiz.getResult(num); - if(obj){ - linkwiz.deselect(); - obj.className += ' selected'; - - // make sure the item is viewable in the scroll view - // FIXME check IE compatibility - if(obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight){ - linkwiz.result.scrollTop += obj.clientHeight; - }else if(obj.offsetTop - linkwiz.result.clientHeight < linkwiz.result.scrollTop){ // this works but isn't quite right, fixes welcome - linkwiz.result.scrollTop -= obj.clientHeight; - } - // now recheck - if still not in view, the user used the mouse to scroll - if( (obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight) || - (obj.offsetTop < linkwiz.result.scrollTop) ){ - obj.scrollIntoView(); - } - - linkwiz.selected = num; - } - }, - - /** - * deselect a result if any is selected - */ - deselect: function(){ - if(linkwiz.selected > -1){ - var obj = linkwiz.getResult(linkwiz.selected); - if(obj){ - obj.className = obj.className.replace(/ ?selected/,''); - } - } - linkwiz.selected = -1; - }, - - /** - * Handle clicks in the result set an dispatch them to - * resultClick() - */ - onResultClick: function(e){ - if(e.target.tagName != 'A') return; - e.stopPropagation(); - e.preventDefault(); - linkwiz.resultClick(e.target); - return false; - }, - - /** - * Handles the "click" on a given result anchor - */ - resultClick: function(a){ - var id = a.title; - if(id == '' || id.substr(id.length-1) == ':'){ - linkwiz.entry.value = id; - linkwiz.autocomplete_exec(); - }else{ - linkwiz.entry.value = id; - if(a.nextSibling && a.nextSibling.tagName == 'SPAN'){ - linkwiz.insertLink(a.nextSibling.innerHTML); - }else{ - linkwiz.insertLink(''); - } - } - }, - - /** - * Insert the id currently in the entry box to the textarea, - * replacing the current selection or at the curso postion. - * When no selection is available the given title will be used - * as link title instead - */ - insertLink: function(title){ - if(!linkwiz.entry.value) return; - - var sel = getSelection(linkwiz.textArea); - if(sel.start == 0 && sel.end == 0) sel = linkwiz.selection; - - var stxt = sel.getText(); - if(!stxt && !DOKU_UHC) stxt=title; - - // prepend colon inside namespaces for non namespace pages - if(linkwiz.textArea.form['id'].value.indexOf(':') != -1 && - linkwiz.entry.value.indexOf(':') == -1){ - linkwiz.entry.value = ':'+linkwiz.entry.value; - } - - var link = '[['+linkwiz.entry.value+'|'; - if(stxt) link += stxt; - link += ']]'; - - var so = linkwiz.entry.value.length+3; - var eo = 2; - - pasteText(sel,link,{startofs: so, endofs: eo}); - linkwiz.hide(); - }, - - /** - * Start the page/namespace lookup timer - * - * Calls autocomplete_exec when the timer runs out - */ - autocomplete: function(){ - if(linkwiz.timer !== null){ - window.clearTimeout(linkwiz.timer); - linkwiz.timer = null; - } - - linkwiz.timer = window.setTimeout(linkwiz.autocomplete_exec,350); - }, - - /** - * Executes the AJAX call for the page/namespace lookup - */ - autocomplete_exec: function(){ - linkwiz.deselect(); - linkwiz.result.innerHTML = '<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />'; - linkwiz.sack.runAJAX('call=linkwiz&q='+encodeURI(linkwiz.entry.value)); - }, - - /** - * Clears the result area - */ - clear: function(){ - linkwiz.result.innerHTML = 'Search for a matching page name above, or browse through the pages on the right'; - linkwiz.entry.value = ''; - }, - - /** - * Show the linkwizard - */ - show: function(){ - linkwiz.selection = getSelection(linkwiz.textArea); - linkwiz.wiz.style.marginLeft = '0px'; - linkwiz.entry.focus(); - linkwiz.autocomplete(); - }, - - /** - * Hide the link wizard - */ - hide: function(){ - linkwiz.wiz.style.marginLeft = '-10000px'; - linkwiz.textArea.focus(); - }, - - /** - * Toggle the link wizard - */ - toggle: function(){ - if(linkwiz.wiz.style.marginLeft == '-10000px'){ - linkwiz.show(); - }else{ - linkwiz.hide(); - } - } -}; - |