// used to identify pickers var pickercounter=0; /** * Create a toolbar * * @param string tbid ID of the element where to insert the toolbar * @param string edid ID of the editor textarea * @param array tb Associative array defining the buttons * @author Andreas Gohr */ function initToolbar(tbid,edid,tb){ var toolbar = DOKUid(tbid); if(!toolbar) return; var edit = DOKUid(edid); if(!edit) return; if(edit.readOnly) return; //empty the toolbar area: toolbar.innerHTML=''; var cnt = tb.length; for(var i=0; i assign it as onclick actionFunc = 'tb_'+tb[i]['type']; if( isFunction(window[actionFunc]) ){ addEvent(btn,'click', bind(window[actionFunc],btn,tb[i],edid)); toolbar.appendChild(btn); continue; } // type is a init function -> execute it actionFunc = 'addBtnAction'+tb[i]['type'].charAt(0).toUpperCase()+tb[i]['type'].substring(1); if( isFunction(window[actionFunc]) ){ if(window[actionFunc](btn, tb[i], edid)){ toolbar.appendChild(btn); } continue; } alert('unknown toolbar type: '+tb[i]['type']+' '+actionFunc); } // end for } /** * Button action for format buttons * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @author Gabriel Birke * @author Andreas Gohr */ function tb_format(btn, props, edid) { var sample = props['title']; if(props['sample']){ sample = props['sample']; } insertTags(edid, fixtxt(props['open']), fixtxt(props['close']), fixtxt(sample)); pickerClose(); return false; } /** * Button action for format buttons * * This works exactly as tb_format() except that, if multiple lines * are selected, each line will be formatted seperately * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @author Gabriel Birke * @author Andreas Gohr */ function tb_formatln(btn, props, edid) { var sample = props['title']; if(props['sample']){ sample = props['sample']; } sample = fixtxt(sample); props['open'] = fixtxt(props['open']); props['close'] = fixtxt(props['close']); // is something selected? var opts; var selection = getSelection(DOKUid(edid)); if(selection.getLength()){ sample = selection.getText(); opts = {nosel: true}; }else{ opts = { startofs: props['open'].length, endofs: props['close'].length }; } sample = sample.split("\n").join(props['close']+"\n"+props['open']); sample = props['open']+sample+props['close']; pasteText(selection,sample,opts); pickerClose(); return false; } /** * Button action for insert buttons * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @author Gabriel Birke * @author Andreas Gohr */ function tb_insert(btn, props, edid) { insertAtCarret(edid,fixtxt(props['insert'])); pickerClose(); return false; } /** * Button action for the media popup * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @author Andreas Gohr */ function tb_mediapopup(btn, props, edid) { window.open( DOKU_BASE+props['url']+encodeURIComponent(NS), props['name'], props['options']); return false; } /** * Button action for automatic headlines * * Insert a new headline based on the current section level * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @author Andreas Gohr */ function tb_autohead(btn, props, edid){ var lvl = currentHeadlineLevel(edid); // determine new level lvl += props['mod']; if(lvl < 1) lvl = 1; if(lvl > 5) lvl = 5; var tags = '='; for(var i=0; i<=5-lvl; i++) tags += '='; insertTags(edid, tags+' ', ' '+tags+"\n", props['text']); pickerClose(); return false; } /** * Add button action for picker buttons and create picker element * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @return boolean If button should be appended * @author Gabriel Birke */ function addBtnActionPicker(btn, props, edid) { var pickerid = 'picker'+(pickercounter++); createPicker(pickerid, props, edid); addEvent(btn,'click',function(){ pickerToggle(pickerid,btn); return false; }); return true; } /** * Add button action for the link wizard button * * @param DOMElement btn Button element to add the action to * @param array props Associative array of button properties * @param string edid ID of the editor textarea * @return boolean If button should be appended * @author Andreas Gohr */ function addBtnActionLinkwiz(btn, props, edid) { linkwiz.init(DOKUid(edid)); addEvent(btn,'click',function(){ linkwiz.toggle(); return false; }); return true; } /** * Show/Hide a previosly created picker window * * @author Andreas Gohr */ function pickerToggle(pickerid,btn){ var picker = DOKUid(pickerid); if(picker.style.marginLeft == '-10000px'){ var x = findPosX(btn); var y = findPosY(btn); picker.style.left = (x+3)+'px'; picker.style.top = (y+btn.offsetHeight+3)+'px'; picker.style.marginLeft = '0px'; }else{ picker.style.marginLeft = '-10000px'; } } /** * Close all open pickers * * @author Andreas Gohr */ function pickerClose(){ var pobjs = getElementsByClass('picker'); for(var i=0; i