User:Cm/ImagePlusjs
From MediaWiki.org
< User:Cm
/** * # Copyright (C) 2007 Florian Mayrhuber <f_mayrhuber@gmx.at> # # This program * is free software; you can redistribute it and/or modify # it under the terms * of the GNU General Public License as published by # the Free Software * Foundation; either version 2 of the License, or # (at your option) any later * version. # # This program is distributed in the hope that it will be useful, # * but WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General * Public License for more details. # # You should have received a copy of the * GNU General Public License along # with this program; if not, write to the * Free Software Foundation, Inc., # 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. # http://www.gnu.org/copyleft/gpl.html # # # # * */ // global variables var startPos; // stores startposition of selection (or cursor position) var endPos; // stores endposition of selection var imgName; // stores imagename var mode; // edit markup or new image /** * shows / hides image plus fields retrieves current selection and runs * corresponding functions */ function showHide () { // reset globals startPos = ""; endPos = ""; mode = ""; imgName = ""; // get text of current selection if (document.getElementById('imageplus').style.display=="none") { // IE if (document.selection && !is_gecko) { document.editform.wpTextbox1.focus(document.editform.wpTextbox1.caretPos); document.editform.wpTextbox1.caretPos = document.selection.createRange().duplicate(); var selection = document.selection.createRange().text; } else { // Mozilla startPos = document.editform.wpTextbox1.selectionStart; endPos = document.editform.wpTextbox1.selectionEnd; var selection = document.editform.wpTextbox1.value.substring(startPos, endPos); } // get markup data from selection editMarkup(selection); // show imageplus fields document.getElementById('imageplus').style.display = 'block'; createMarkup(selection); } else { // hide imageplus fields document.getElementById('imageplus').style.display = 'none'; } } /** * function for editing selected markup from article retrieve all markup * functions from selection and set fields accordingly param selection: string * of current selection */ function editMarkup(selection) { // reset all fields document.getElementById('nonea').checked = true; document.getElementById('nonef').checked = true; document.getElementById('caption').value = ""; document.getElementById('files').value = ""; document.getElementById('markup').value = ""; document.editform.size.value = ""; // remove blanks of selection selection = selection.replace(/\s+$/,""); selection = selection.replace(/^\s+/,""); // check if selection is valid markup options = splitMarkup(selection); // evaluate options and adapt fields acc. if (options != null ) { // set mode to edit and change label of insert button mode = "edit"; // document.getElementById('insert').value = "Insert Markup & Close"; // locate filename in files array var file_name = ""; var sel_name = options[0]; for (var i=0;i<aImages.length;i++) { file_name = aImages[i].substr(0,sel_name.length); if (file_name == sel_name) { imgName = file_name; break; // image name found, exit for } } if ( imgName.length > 0 ) { var dot = imgName.lastIndexOf("."); if( dot == -1 ) return ""; var extension = imgName.substr(dot+1,imgName.length).toLowerCase(); if (extension == 'jpg' || extension == 'jpeg' || extension == 'png' || extension == 'gif') { document.getElementById('imageedit').style.display = 'block'; } else { document.getElementById('imageedit').style.display = 'none'; } } document.getElementById('files').value = imgName; // retrieve format and alignment options and set image plus fields // accordingly for (var i=1;i<options.length;i++) { var o = options[i].replace(/\s+$/,"").replace(/^\s+/,""); o = o.toLowerCase(); if (o == "border" ) document.getElementById('border').checked = true; if (o == "thumb") document.getElementById('thumb').checked = true; if (o == "frame") document.getElementById('frame').checked = true; if (o == "center") document.getElementById('center').checked = true; if (o == "left") document.getElementById('left').checked = true; if (o == "right") document.getElementById('right').checked = true; if (o == "none") document.getElementById('nonea').checked = true; // retrieve caption if (o.substr(0,7) == "caption") { var caption = o.substring(8,o.length); // remove blanks caption = caption.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); document.getElementById('caption').value = caption; } // retrieve image size if (o.substr(options[i].length-2,2) == "px") { var size = o.substring(0,options[i].length-2); var s = size.split("x"); var width = ""; var height = ""; // remove blanks width = s[0].replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); if (s.length != 1) { height = "x" + s[1].replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); } // no values or zero values, do nothing if ((width != "") && (width != "0" && height != "0")) { document.getElementById('size').value = width + height; } } } } } /** * determine if current selection is valid image markup param sel: string of * current selection return options: array with markup options */ function splitMarkup( sel ) { if ( (sel.substr(0,8) == "[[Datei:") && (sel.substr(sel.length-2,2) == "]]") ) { sel = sel.substring(8,sel.length-2); // split selection to get options var options = sel.split("|"); return options; } else return null; } /** * function for creating new image markup read all imageplus fields, create * valid wiki markup and insert it at last cursor position param obj: obj, * object from wich function was called to determine imagename */ function createMarkup( object ) { // textfield if ( object.id == "files" && object.value != "") { imgName = document.getElementById('files').value; // imgName = imgName.replace(/\s+$/,"").replace(/^\s+/,""); var pos = imgName.indexOf("("); imgName = imgName.substring(0,pos-1); document.getElementById('latestFiles').selectedIndex = 0; } // overwrite if called from selectbox if ( object.id == "latestFiles" && object.value != "none") { imgName = document.getElementById('latestFiles').value; var pos = imgName.indexOf("("); imgName = imgName.substring (0,pos-1); document.getElementById('files').value = ""; } if ( imgName.length > 0 ) { var dot = imgName.lastIndexOf("."); if( dot == -1 ) return ""; var extension = imgName.substr(dot+1,imgName.length).toLowerCase(); if (extension == 'jpg' || extension == 'jpeg' || extension == 'png' || extension == 'gif') { document.getElementById('imageedit').style.display = 'block'; } else { document.getElementById('imageedit').style.display = 'none'; } } // initialize markup with opening tag var markup = "[[Datei:"; // assign filename markup += imgName; // create markup for alignment option for (var i=0;i<4;i++) { if (document.editform.position[i].checked) { markup += "|" + document.editform.position[i].value; } } // create markup for image limits var size = document.getElementById('size').value; var pos = size.indexOf("x"); var size = size.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); if (pos != "-1") { // x found => width AND height // remove blanks var width = size.substring(0,pos).replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); var height = size.substring(pos+1,size.length).replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); // no values or zero values, do nothing if ((width != "" || height != "") && (width != "0" || height != "0") ) markup += "|" + width + "x" + height + "px"; } else { // no x, just width if (!isNaN(size) && size != "" && size != "0") markup += "|" + size + "px"; } // create markup for format options for (var i=0;i<3;i++) { if (document.editform.format[i].checked) { markup += "|" + document.editform.format[i].value; } } // create caption markup var cap = document.getElementById('caption').value; if (cap != "Caption") { cap = cap.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""); if (cap != "") markup += "|" + cap; } // add closing tag and put update preview field document.getElementById('markup').value = markup + "]]"; } /** * function for inserting markup into wiki textarea at last cursor position */ function insertMarkup() { var obj = document.editform.wpTextbox1; // existing tag being updated if (endPos != "") { // Mozilla obj.value = obj.value.substr(0,startPos) + document.getElementById('markup').value + obj.value.substr(endPos,obj.value.length); // reset cursor position startPos = startPos + document.getElementById('markup').value.length; endPos = startPos; } else { // IE, goto cursor pos obj.caretPos.text = document.getElementById('markup').value; } // if image markup was edited close image+ document.getElementById('imageplus').style.display = 'none'; } /** * function for formatting the autocomplete textfield result list param sText: * string that should be transformed return: formatted string */ function formatFiles( sText ) { return sText.substr( 0, sText.toLowerCase().indexOf( this.sActiveValue.toLowerCase() ) ) + sText.substr( sText.toLowerCase().indexOf( this.sActiveValue.toLowerCase() ), this.sActiveValue.length ).bold().fontcolor( '#000000' ) + sText.substr( sText.toLowerCase().indexOf( this.sActiveValue.toLowerCase() ) + this.sActiveValue.length ); }