|
|
(63 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| /* Version: 3.1 | | /* See the history of this page for the main body of code behind the obsolete extended editing toolbar (XEB). See the history of the documentation page for further information. --Iritscen */ |
| * ============================================================
| |
| * en: ADD SOME EXTRA BUTTONS TO THE EDITPANEL
| |
| * de: FÜGE NEUE BUTTON IN DIE WERKZEUGLEISTE
| |
| * pt: ACRESCENTA ALGUNS BOTÕES EXTRAS AO PAINEL DE EDIÇÃO
| |
| * ============================================================
| |
| * Vorschläge für neue Buttons werden gerne entgegengenommen
| |
| * Die Reihenfolge und Anzahl der Buttons ist über die (alphabetische) Variable XEBOrder wählbar.
| |
| *
| |
| * ================================
| |
| * Control Variables
| |
| *
| |
| * window.rmEditButtons - Removes standard toolbar buttons
| |
| * window.XEBOrder - The order in which the buttons are displayed
| |
| * window.myButtons - Add user defined buttons
| |
| */
| |
| | |
| mw.loader.load( '//wiki.oni2.net/w/index.php?title=MediaWiki:live.css&action=raw&ctype=text/css', 'text/css' );
| |
| | |
| if (typeof XEBPopups === 'undefined') {
| |
| XEBPopups = true;
| |
| }
| |
| if (typeof XEBHideDelay === 'undefined') {
| |
| // Time before the popup disappears after the mouse moves out
| |
| window.XEBHideDelay = 1.0;
| |
| }
| |
| if (typeof XEBExtendEditSummary === 'undefined') {
| |
| // Is the edit summary extended after a popup
| |
| window.XEBExtendEditSummary = true;
| |
| }
| |
| | |
| if (typeof usersignature === 'undefined') {
| |
| var usersignature = '-- ~~' + '~~';
| |
| }
| |
| | |
| var Isrc = '//wiki.oni2.net/w/images/';
| |
| | |
| var BDict = {
| |
| 'A':['e/e9/Button_headline2.png','Third-level headline','\n===','===','Secondary headline'],
| |
| 'B':['1/13/Button_enter.png','Line break','<br />','',''],
| |
| 'C':['f/f7/Button_align_center.png','Center-aligned text','<div style="text-align: center;">\n','\n<\/div>','Centered text'],
| |
| 'D':['e/ea/Button_align_left.png','Left-aligned text','<div style="text-align: left; direction: ltr; margin-left: 1em;">\n','\n<\/div>','Left-aligned text'],
| |
| 'D1':['a/a5/Button_align_right.png','Right-aligned text','<div style="text-align: right; direction: ltr; margin-left: 1em;">\n','\n<\/div>','Right-aligned text'],
| |
| 'E':['7/79/Button_cmpl_table.png','Simple table','\n{| class="wikitable" \n|- \n| 1 || 2\n|- \n| 3 || 4','\n|}\n',''],
| |
| 'E1':['8/80/Button_smart_table.png', 'Smart table wizard', '','',''],
| |
| 'F':['1/1e/Button_font_color.png','Colored text','<span style="color: ','">Colored text<\/span>','ColorName'],
| |
| 'FS':['6/6d/Button_unsigned.png','Unsigned post','{{subst:unsigned|','|date}}','user name or IP'],
| |
| 'G':['1/12/Button_gallery.png','Image gallery',"\n<gallery>\nImage:","|[[M63]]\nImage:Mona Lisa.jpg|[[Mona Lisa]]\nImage:Truite arc-en-ciel.jpg|Eine [[Forelle ]]\n<\/gallery>",'M63.jpg'],
| |
| 'H':['7/74/Button_comment.png','Comment',"<!--","-->",'Comment'],
| |
| 'I1':['d/d6/Button_superscript.png','Superscript','<sup>','<\/sup>','Superscript text'],
| |
| 'I2':['b/bf/Button_subscript.png','Subscript','<sub>','<\/sub>','Subscript text'],
| |
| 'J1':['d/d5/Button_small_text.png','Small text','<small>','<\/small>','Small Text'],
| |
| 'J2':['9/99/Button_big_text.png','Big text','<big>','<\/big>','Big text'],
| |
| 'K':['1/11/Button_category.png','Category',"[[Category:","]]",'Category name'],
| |
| 'L':['e/e2/Button_tab_in.png','Insert tab',':','',':'],
| |
| 'M':['f/fd/Button_blockquote.png','Quoted text block','<blockquote style="border: 1px solid blue; padding: 2em;">\n','\n<\/blockquote>','Block quote'],
| |
| 'N':['4/4b/Button_nbsp.png','Insert non-breaking space',' ','',''],
| |
| 'O':['2/23/Button_code.png','Code block','<code>','<\/code>','Code'],
| |
| 'P':['3/3c/Button_pre.png','Pre-formatted text block','<pre>','<\/pre>','Pre-formatted text'],
| |
| 'P1':['2/2e/Button_subpage.png','Link to sub-page','[[','/Sub_Page]]','Page'],
| |
| 'Q':['1/1f/Button_list_tab.png','Definition (tabbed) list','\n; ','\n: Item 1\n: Item 2','Definition'],
| |
| 'R':['e/ef/Button_reflink_start.png','Insert a reference','<ref>','<\/ref>','Insert reference material'],
| |
| 'R1':['5/5f/Button_reflink_smart.png','Reference Wizard','<ref name="','','Reference name'],
| |
| 'R2':['c/cb/Button_reflink_footer.png','Insert reference footer',"<references/>",'',''],
| |
| 'R3': ['1/1a/Button_reflink_advanced_3.png', 'No reference material', '', '"/>', ''],
| |
| 'R4': ['9/9a/Button_references.png', 'Reference footer', "\n==Notes==\n<!--See http://en.wikipedia.org/wiki/Wikipedia:Footnotes for an explanation of how to generate footnotes using the <ref(erences/)> tags-->\n<div class=\'references-small\'>\n<references/>\n</div>", '', ''],
| |
| 'S':['c/c9/Button_strike.png','Strikeout text','<s>','<\/s>','Struck-out text'],
| |
| 'T':['5/59/Button_template.png','Template','{{','}}','Template name'],
| |
| 'TS':['a/a1/Button_table_start.png','Start a table','{|','',''],
| |
| 'TC':['5/59/Button_table_cell.png','Table cell','|','',''],
| |
| 'TE':['f/f0/Button_table_end.png','End a table','','|}',''],
| |
| 'TR':['7/70/Button_table_row.png','Start a table row','|-','',''],
| |
| 'T1':['8/82/Button_teletype.png','Teletype text','<tt>','<\/tt>','Teletype Text'],
| |
| 'TL':['d/d3/Button_subst_tmpl.png','Template (substituted)',"{{subst:"+"tl|",'}}','Template name'],
| |
| 'U':['f/fd/Button_underline.png','Underlined text',"<u>","<\/u>",'Underlined text'],
| |
| 'V':['c/c8/Button_redirect.png','Redirect',"#REDIRECT [[","]]",'Article Name'],
| |
| 'W':['5/50/Button_list_num.png','Numbered list',"\n# ","\n# Element 2\n# Element 3",'Element 1'],
| |
| 'X':['f/fa/Button_list_bull.png','Bulleted list',"\n* ","\n* Element B\n* Element C",'Element A'],
| |
| 'Y1':['d/d5/Button_noinclude.png','No include',"<noinclude>","<\/noinclude>",'Text'],
| |
| 'Y2':['6/63/Button_includeonly.png','Include only',"<includeonly>","<\/includeonly>",'Text'],
| |
| 'Z':['3/35/Button_substitute.png','Substituted page link',"{{subst:","}}",'Template'],
| |
| 'AI':['c/cc/Button_adv_image.png','Advanced image',"[[Image:","|thumb|right|px|Caption]]",'FileName.jpg'],
| |
| 'GEO': ['b/b8/Button_Globe.png', 'Geo location', "", "", ""],
| |
| 'TALK': ['4/49/Button_talk.png', 'Add talk template', "", "", ""],
| |
| 'BF': ['e/ec/Button_base.png', 'Insert BSL function', "", "", ""]
| |
| };
| |
| | |
| var XEBOrder2 = [];
| |
| | |
| | |
| | |
| | |
| initButtons();
| |
| if (!mw.config.get( 'wgIsArticle' )) {
| |
| // only if edit
| |
| if (XEBPopups) {
| |
| $(extendButtons);
| |
| }
| |
| }
| |
| | |
| function initButtons() {
| |
| | |
| var bc, d, i, customTools = {};
| |
| | |
| if (typeof XEBOrder !== 'string') {
| |
| // can be modified
| |
| XEBOrder2 = '0,1,U,F,D,C,D1,4,A,2,3,E,G,8,H,9'.split(',');
| |
| } else if (XEBOrder.toLowerCase() === 'all') {
| |
| $.each(BDict, function( b, value ){
| |
| XEBOrder2.push(b);
| |
| });
| |
| } else {
| |
| XEBOrder2 = XEBOrder.toUpperCase().split(',');
| |
| }
| |
| | |
| $.each(BDict, function( b, value ){
| |
| // Add the start of the URL (Isrc) to the XEB buttons
| |
| BDict[b][0] = Isrc + BDict[b][0];
| |
| });
| |
| // If the user has defined any buttons then add them into the available button lists
| |
| if (typeof myButtons === 'object') {
| |
| $.each(myButtons, function( b, value ){
| |
| // custom user buttons
| |
| BDict[b] = myButtons[b];
| |
| });
| |
| }
| |
| | |
| mw.loader.using( 'user.options', function () {
| |
| if ( mw.user.options.get('usebetatoolbar') ) {
| |
| // Use the enhanced edit toolbar
| |
| mw.loader.using( 'ext.wikiEditor.toolbar', function () {
| |
| $(function(){
| |
| // Build the new buttons
| |
| for (i = 0; i < XEBOrder2.length; i++) {
| |
| bc = BDict[XEBOrder2[i]];
| |
| | |
| //Check if bc is an object
| |
| // - protects if user specified a non-existant buttons
| |
| // - IE causes a javascript error when viewing a page
| |
| if (typeof bc === 'object') {
| |
| customTools[ XEBOrder2[i] ] = {
| |
| label: bc[1],
| |
| type: 'button',
| |
| icon: bc[0],
| |
| action: {
| |
| type: 'encapsulate',
| |
| options: {
| |
| pre: bc[2],
| |
| peri: bc[4],
| |
| post: bc[3]
| |
| }
| |
| }
| |
| };
| |
| }
| |
| }
| |
| | |
| $('#wpTextbox1').wikiEditor( 'addToToolbar', {
| |
| 'sections': {
| |
| 'extra': {
| |
| 'type': 'toolbar',
| |
| 'label': 'Extras'
| |
| }
| |
| },
| |
| 'section': 'extra',
| |
| 'groups': {
| |
| 'my-buttons': {
| |
| 'label': 'My buttons',
| |
| 'tools': customTools
| |
| }
| |
| }
| |
| } );
| |
| });
| |
| | |
| } );
| |
| } else {
| |
| // Use the old edit toolbar
| |
| // Add the MediaWiki standard buttons into the available buttons
| |
| $.each(mw.toolbar.buttons, function( b, value ){
| |
| // add standard buttons for full XEB order changing
| |
| // BDict[b]=[];
| |
| BDict[b] = [ value.imageFile, value.speedTip, value.tagOpen, value.tagClose, value.sampleText];
| |
| | |
| // for (d in value) {BDict[b].push(value}[d]);
| |
| });
| |
| | |
| // Build the new buttons
| |
| for (i = 0; i < XEBOrder2.length; i++) {
| |
| bc = BDict[XEBOrder2[i]];
| |
| | |
| //Check if bc is an object
| |
| // - protects if user specified a non-existant buttons
| |
| // - IE causes a javascript error when viewing a page
| |
| if (typeof bc === 'object') {
| |
| | |
| //Call addButton from module mediawiki.action.edit
| |
| mw.toolbar.addButton(bc[0], bc[1], bc[2], bc[3], bc[4] /* , imageId, selectText */ );
| |
| }
| |
| }
| |
| | |
| // Remove the default buttons (if requested by the user)
| |
| eraseButtons();
| |
| }
| |
| } );
| |
| }
| |
| | |
| | |
| /** en: Removes arbitrary standard buttons from the toolbar
| |
| * @author: [[:de:User:Olliminatore]]
| |
| * @version: 0.1 (01.10.2006) **/
| |
| | |
| function eraseButtons() {
| |
| var x, i, enExtraButtons;
| |
| | |
| //Remove the buttons the user doesn't want
| |
| if (typeof rmEditButtons !== 'object') {
| |
| return;
| |
| }
| |
| | |
| if (typeof rmEditButtons[0] === 'string' && rmEditButtons[0].toLowerCase() === 'all') {
| |
| // English Wikipedia creates 11 extra buttons which are stored in mwCustomEditButtons
| |
| // rather than mw.toolbar.buttons. However, there is no guarantee it will always be 11
| |
| // so we count them here.
| |
| enExtraButtons = window.mwCustomEditButtons.length;
| |
| | |
| mw.toolbar.buttons = [];
| |
| for (i = 0; i < enExtraButtons; i++) {
| |
| window.mwCustomEditButtons.shift();
| |
| }
| |
| }
| |
| //Sort the user's requests so we remove the button with the highest index first
| |
| //- This ensures we remove the buttons the user expects whatever order he requested the buttons in
| |
| window.rmEditButtons.sort(sortit);
| |
| | |
| //Remove individual buttons the user doesn't want
| |
| for (i = 0; i < rmEditButtons.length; i++) {
| |
| var n = rmEditButtons[i];
| |
| //Standard Wikimedia buttons
| |
| if (n >= 0 && n < mw.toolbar.buttons.length) {
| |
| if (n < mw.toolbar.buttons.length) {
| |
| x = -1;
| |
| while ((++x) < mw.toolbar.buttons.length) {
| |
| if (x >= n) {
| |
| mw.toolbar.buttons[x] = mw.toolbar.buttons[x + 1];
| |
| }
| |
| }
| |
| }
| |
| mw.toolbar.buttons.pop();
| |
| }
| |
| //Extra buttons in English Wikipedia
| |
| n = n - mw.toolbar.buttons.length;
| |
| if (n > 0 && n < window.mwCustomEditButtons.length) {
| |
| if (n < window.mwCustomEditButtons.length) {
| |
| x = -1;
| |
| while ((++x) < window.mwCustomEditButtons.length) {
| |
| if (x >= n) {
| |
| window.mwCustomEditButtons[x] = window.mwCustomEditButtons[x + 1];
| |
| }
| |
| }
| |
| }
| |
| window.mwCustomEditButtons.pop();
| |
| }
| |
| }
| |
| }
| |
| | |
| //Function:
| |
| // sortit
| |
| //Purpose:
| |
| // Used to sort the rmEditButtons array into descending order
| |
| function sortit(a, b) {
| |
| return (b - a);
| |
| }
| |
| | |
| | |
| //Function:
| |
| //Purpose:
| |
| // Adds extended onclick-function to some buttons
| |
| function extendButtons() {
| |
| | |
| var allEditButtons = document.getElementById('toolbar');
| |
| if ( !allEditButtons ) {
| |
| return false;
| |
| }
| |
| if (typeof editform !== 'undefined') {
| |
| if (!(window.editform = document.forms.editform)) {
| |
| return false;
| |
| }
| |
| }
| |
| | |
| // table
| |
| extendAButton(Isrc + '8/80/Button_smart_table.png',XEBPopupTable)
| |
| extendAButton(Isrc + 'e/ef/Button_reflink_start.png',XEBPopupRef)
| |
| extendAButton(Isrc + 'b/b8/Button_Globe.png', XEBPopupGeoLink);
| |
| extendAButton(Isrc + '4/49/Button_talk.png', XEBPopupTalk);
| |
| extendAButton(Isrc + 'c/cc/Button_adv_image.png',XEBPopupImage);
| |
| extendAButton(Isrc + 'e/ec/Button_base.png',XEBPopupBSLfunc);
| |
| //extendAButton(Isrc+'d/d6/Button_superscript.png',XEBPopupFormattedText);
| |
| | |
| // redirect -##IE doesn't like this line. Object doesn't support this property or method
| |
| //c=XEBOrder2.getIndex('V');
| |
| | |
| // if(c != -1)
| |
| // allEditButtons[bu_len+c].onclick=function(){
| |
| // var a='#REDIRECT \[\['+prompt("Which page do you want to redirect to\?")+'\]\]';
| |
| // document.editform.elements['wpTextbox1'].value=a;
| |
| // document.editform.elements['wpSummary'].value=a;
| |
| // document.editform.elements['wpWatchthis'].checked=false
| |
| // };
| |
| }
| |
| | |
| function extendAButton(url, newfunc) {
| |
| var i;
| |
| var allEditButtons = document.getElementById('toolbar');
| |
| if ( !allEditButtons ) {
| |
| return false;
| |
| }
| |
| if (typeof editform !== 'undefined') {
| |
| if (!(window.editform = document.forms.editform)) {
| |
| return false;
| |
| }
| |
| }
| |
| allEditButtons = allEditButtons.getElementsByTagName('img');
| |
| | |
| for (i = 0; i < allEditButtons.length; i++) {
| |
| if (allEditButtons[i].src.indexOf(url) != -1) {
| |
| //if (allEditButtons[i].src === url) { // Cannot work because "url" does not start with "http://"; using indexOf() instead. -Iritscen
| |
| allEditButtons[i].onclick = newfunc;
| |
| }
| |
| }
| |
| }
| |
| | |
| //==========================================================================================================
| |
| // General purpose popup code
| |
| //==========================================================================================================
| |
| | |
| function getXEBPopupDiv(name) {
| |
| var XEBMainDiv = document.getElementById('XEB');
| |
| if (XEBMainDiv === null) {
| |
| XEBMainDiv = document.createElement('div');
| |
| document.body.appendChild(XEBMainDiv);
| |
| XEBMainDiv.id = 'XEB';
| |
| }
| |
| | |
| var me = document.getElementById('XEBPopup' && name);
| |
| if (me !== null) {
| |
| return me;
| |
| }
| |
| me = document.createElement('div');
| |
| XEBMainDiv.appendChild(me);
| |
| | |
| me.id = 'XEBPopup';
| |
| me.style.position = 'absolute';
| |
| me.display = 'none';
| |
| me.visibility = 'hidden';
| |
| me.onmouseout = CheckHideXEBPopup;
| |
| me.onmouseover = cancelHidePopup;
| |
| return me;
| |
| }
| |
| | |
| //Function:
| |
| // CheckHideXEBPopup
| |
| //Purpose:
| |
| // Looks at the cursor position and if it has moved outside the popup it will close the popup
| |
| //Called:
| |
| // When the onMouseEvent is fired on the popup
| |
| | |
| function CheckHideXEBPopup(e) {
| |
| var x, y, ph, s, pl, pt, pw;
| |
| var m = document.getElementById('XEBmnu');
| |
| if (is_gecko) {
| |
| ph = m.offsetHeight;
| |
| x = e.clientX + window.scrollX;
| |
| y = e.clientY + window.scrollY;
| |
| s = window.getComputedStyle(m, '');
| |
| ph = s.height;
| |
| ph = Number(ph.substring(0, ph.length - 2));
| |
| } else {
| |
| x = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
| |
| y = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
| |
| ph = m.offsetHeight;
| |
| }
| |
| pl = curPopup.x;
| |
| pt = curPopup.y;
| |
| pw = m.style.width;
| |
| pw = Number(pw.substring(0, pw.length - 2));
| |
| | |
| if (x > (pl + 2) && x < (pl + pw - 5) && y > (pt + 2) && y < (pt + ph - 5)) {
| |
| return;
| |
| }
| |
| curPopup.hideTimeout = setTimeout(hideXEBPopup, XEBHideDelay * 1000);
| |
| }
| |
| | |
| function cancelHidePopup() {
| |
| clearTimeout(curPopup.hideTimeout);
| |
| }
| |
| | |
| function hideXEBPopup() {
| |
| var XEBMainDiv = document.getElementById('XEB');
| |
| var m = document.getElementById('XEBPopup');
| |
| XEBMainDiv.removeChild(m);
| |
| }
| |
| | |
| function XEBstartDrag(e) {
| |
| var m = new GetPos(e || event);
| |
| curPopup.startDrag.mouse = m;
| |
| curPopup.startDrag.floatpopup.y = parseInt(curPopup.div.style.top, 10);
| |
| curPopup.startDrag.floatpopup.x = parseInt(curPopup.div.style.left, 10);
| |
| curPopup.dragging = true;
| |
| }
| |
| | |
| function XEBstopDrag(e) {
| |
| if (curPopup.dragging === false) {
| |
| return;
| |
| }
| |
| curPopup.dragging = false;
| |
| }
| |
| | |
| function XEBDrag(e) {
| |
| if (curPopup.dragging === false) {
| |
| return;
| |
| }
| |
| | |
| var m = new GetPos(e || event);
| |
| var x = parseInt(curPopup.startDrag.floatpopup.x + (m.x - curPopup.startDrag.mouse.x), 10);
| |
| var y = parseInt(curPopup.startDrag.floatpopup.y + (m.y - curPopup.startDrag.mouse.y), 10);
| |
| | |
| curPopup.div.style.top = y + 'px';
| |
| curPopup.div.style.left = x + 'px';
| |
| | |
| curPopup.x = x;
| |
| curPopup.y = y;
| |
| }
| |
| | |
| //=============================================================================
| |
| // Popup: Table
| |
| //=============================================================================
| |
| | |
| function XEBPopup(name, x, y) {
| |
| // Make sure the popup can appear on the screen
| |
| this.IESelectedRange = XEBgetIESelectedRange();
| |
| | |
| var winW = (is_gecko) ? window.innerWidth : document.body.offsetWidth;
| |
| if ((winW - this.width) < x) {
| |
| x = (winW - this.width - 60);
| |
| }
| |
| | |
| this.div = getXEBPopupDiv(name);
| |
| this.div.style.zIndex = 2000;
| |
| this.div.display = 'inline';
| |
| this.div.visibility = 'visible';
| |
| this.div.style.top = y + 'px';
| |
| this.x = x;
| |
| this.y = y;
| |
| this.name = name;
| |
| | |
| this.startDrag = {};
| |
| this.startDrag.floatpopup = {};
| |
| }
| |
| | |
| function setInnerHTML(html, title) {
| |
| var i;
| |
| var winW = (is_gecko) ? window.innerWidth : document.body.offsetWidth;
| |
| if ((winW - this.width) < this.x) {
| |
| this.x = (winW - this.width);
| |
| }
| |
| this.div.style.left = this.x + 'px';
| |
| | |
| var mt = '<div id="XEBmnu" style="width:' + this.width + 'px" >';
| |
| mt += '<div id="XEBmnuTitle" class="XEBPopupTitle" onmousedown="XEBstartDrag(event)" onmouseup="XEBstopDrag(event)" onmousemove="XEBDrag(event)">' + title + '</div>';
| |
| mt += html;
| |
| mt += '</div>';
| |
| this.div.innerHTML = mt;
| |
| //Turn off autocomplete. If the mouse moves over the autocomplete popup then x,y in CheckHidePopup is relative to the
| |
| // autocomplete popup and our popup is hidden
| |
| var InTexts = this.div.getElementsByTagName('input');
| |
| for (i = 0; i < InTexts.length; i++) {
| |
| var theInput = InTexts[i];
| |
| if (theInput.type === 'text') {
| |
| theInput.setAttribute('autocomplete', 'off');
| |
| }
| |
| }
| |
| //Add rollover features to menu items. Doing it here means we don't have to do it for each menu
| |
| var x = XEBgetElementsByClassName(this.div, 'XEBMnuItm', 'span');
| |
| for (i = 0; i < x.length; i++) {
| |
| var theItm = x[i];
| |
| theItm.onmouseout = XEBMenuMouseOut;
| |
| theItm.onmouseover = XEBMenuMouseOver;
| |
| }
| |
| | |
| this.div.style.borderWidth = 'thin';
| |
| this.div.style.borderStyle = 'solid';
| |
| this.div.style.backgroundColor = '#D0D0D0';
| |
| }
| |
| XEBPopup.prototype.width = 250;
| |
| XEBPopup.prototype.dragging = false;
| |
| XEBPopup.prototype.setInnerHTML = setInnerHTML;
| |
| | |
| var curPopup;
| |
| | |
| function GetPos(e) {
| |
| this.x = e.clientX - 10 + document.documentElement.scrollLeft + document.body.scrollLeft;
| |
| this.y = e.clientY - 10 + document.documentElement.scrollTop + document.body.scrollTop;
| |
| }
| |
| | |
| function XEBPopupTable(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('table', m.x, m.y);
| |
| | |
| var mt = '<p>Enter the table parameters below: <\/p>' +
| |
| '<form name="XEBPopupTableForm">' +
| |
| 'Table caption: <input type="checkbox" name="inputCaption"><p\/>' +
| |
| 'Table alignment: center<input type="checkbox" name="inputAlign"><p\/>' +
| |
| 'Table headline: colored<input type="checkbox" name="inputHead"><p\/>' +
| |
| 'Number of rows: <input type="text" name="inputRow" value="3" size="2"><p\/>' +
| |
| 'Number of columns: <input type="text" name="inputCol" value="3" size="2"><p\/>' +
| |
| // 'Alternating grey lines: <input type="checkbox" name="inputLine" checked="1" ><p\/>' +
| |
| 'Item column: <input type="checkbox" name="inputItems" ><p\/>' +
| |
| 'Sortable: <input type="checkbox" name="inputSort" ><p\/>' +
| |
| '<\/form>' +
| |
| '<i>The default table allows for fields and values only.<\/i><p\/>' +
| |
| 'Check "Item column" to allow for the table to have fields, items, and values.<\/i><p\/>' +
| |
| '<p><button onClick="javascript:insertTableCode()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button>';
| |
| | |
| curPopup.setInnerHTML(mt, "Table parameters");
| |
| | |
| return true;
| |
| }
| |
| | |
| function insertTableCode() {
| |
| var i;
| |
| var f = document.XEBPopupTableForm;
| |
| var caption = (f.inputCaption.checked) ? '|+ TABLE CAPTION \n' : '';
| |
| var exhead = (f.inputHead.checked) ? '|- style="background: #DDFFDD;"\n' : '';
| |
| var nbRow = parseInt(f.inputRow.value, 10);
| |
| var nbCol = parseInt(f.inputCol.value, 10);
| |
| var exfield = f.inputItems.checked;
| |
| var align = (f.inputAlign.checked) ? 'align="center"' : '';
| |
| | |
| //generateTable(caption, exhead, nbCol, nbRow, exfield, align);
| |
| var code = '\n';
| |
| code += '{| ' + align + ' ';
| |
| code += (f.inputSort.checked) ? 'class="wikitable sortable" \n' : '\n';
| |
| code += caption + exhead;
| |
| if (exfield) {
| |
| code += '!\n';
| |
| }
| |
| for (i = 1; i < nbCol + 1; i++) {
| |
| code += '! COLUMN ' + i + '\n';
| |
| }
| |
| var items = 0;
| |
| for (var j = 0; j < nbRow; j++) {
| |
| if (exfield) {
| |
| items++;
| |
| code += '|-\n! style="background: #FFDDDD;"|ITEM ' + items + '\n';
| |
| } else {
| |
| code += '|-\n';
| |
| }
| |
| for (i = 0; i < nbCol; i++) {
| |
| code += '| Element ' + i + '\n';
| |
| }
| |
| }
| |
| code += '|}\n';
| |
| hideXEBPopup();
| |
| insertTags('', '', code);
| |
| extendSummary('table');
| |
| | |
| return false;
| |
| }
| |
| | |
| function XEBPopupBSLfunc(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('bslfunc', m.x, m.y + 22);
| |
| XEBPopup.prototype.width = 500;
| |
| | |
| var mt = '<form name="XEBPopupBSLfuncForm">' +
| |
| '<div id="bsl_platform_label">Platform(s):</div>' +
| |
| '<div id="bsl_platform_mac"><input type="checkbox" id="mac_ckbox" name="inputMac" checked="1"><label for="mac_ckbox">Mac</label></div>' +
| |
| '<div id="bsl_platform_win"><input type="checkbox" id="win_ckbox" name="inputWin" checked="1"><label for="win_ckbox">Win</label></div>' +
| |
| '<div id="bsl_optional_label">Optional:</div>' +
| |
| '<div id="bsl_optional_arg1"><input type="checkbox" name="inputArg1Opt" checked="0"></div>' +
| |
| '<div id="bsl_type_label">Type:</div>' +
| |
| '<div id="bsl_type_func"><select name="inputFuncType"><option value="void">void</option><option value="bool">bool</option><option value="int">int</option><option value="float">float</option><option value="string">string</option></select></div>' +
| |
| '<div id="bsl_type_arg1"><select name="inputArg1Type"><option value="void">void</option><option value="bool">bool</option><option value="int">int</option><option value="float">float</option><option value="string">string</option></select></div>' +
| |
| '<div id="bsl_name_label">Name:</div>' +
| |
| '<div id="bsl_name_func"><input type="text" name="inputFuncName" value="" size="20"></div>' +
| |
| '<div id="bsl_name_arg1"><input type="text" name="inputArg1Name" value="" size="20"></div>' +
| |
| '<div id="bsl_default_label">Default value:</div>' +
| |
| '<div id="bsl_default_func"><input type="text" name="inputFuncReturn" value="" size="10"></div>' +
| |
| '<div id="bsl_default_arg1"><input type="text" name="inputArg1Default" value="" size="10"></div>' +
| |
| '<div id="bsl_alt_label">Alternate:</div>' +
| |
| '<div id="bsl_alt_arg1"><input type="checkbox" name="inputArg1Alt" checked="0"></div>' +
| |
| '<div id="bsl_alttype_label">Alt. Type:</div>' +
| |
| '<div id="bsl_alttype_arg1"><select name="inputArg1AltType"><option value="void">void</option><option value="bool">bool</option><option value="int">int</option><option value="float">float</option><option value="string">string</option></select></div>' +
| |
| '<div id="bsl_altname_label">Alt. Name:</div>' +
| |
| '<div id="bsl_altname_arg1"><input type="text" name="inputArg1AltName" value="" size="20"></div>' +
| |
| '<\/form>' +
| |
| '<div id="bsl_notes"><i>Instructions go here.<\/i></div><p\/>' +
| |
| '<div id="bsl_buttons"><p><button onClick="javascript:insertBSLfuncCode()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button></div>';
| |
| | |
| curPopup.setInnerHTML(mt, "BSL function information");
| |
| | |
| return true;
| |
| }
| |
| | |
| function insertBSLfuncCode() {
| |
| var i;
| |
| var f = document.XEBPopupTableForm;
| |
| var caption = (f.inputCaption.checked) ? '|+ TABLE CAPTION \n' : '';
| |
| var exhead = (f.inputHead.checked) ? '|- style="background: #DDFFDD;"\n' : '';
| |
| var nbRow = parseInt(f.inputRow.value, 10);
| |
| var nbCol = parseInt(f.inputCol.value, 10);
| |
| var exfield = f.inputItems.checked;
| |
| var align = (f.inputAlign.checked) ? 'align="center"' : '';
| |
| | |
| //generateTable(caption, exhead, nbCol, nbRow, exfield, align);
| |
| var code = '\n';
| |
| code += '{| ' + align + ' ';
| |
| code += (f.inputSort.checked) ? 'class="wikitable sortable" \n' : '\n';
| |
| code += caption + exhead;
| |
| if (exfield) {
| |
| code += '!\n';
| |
| }
| |
| for (i = 1; i < nbCol + 1; i++) {
| |
| code += '! COLUMN ' + i + '\n';
| |
| }
| |
| var items = 0;
| |
| for (var j = 0; j < nbRow; j++) {
| |
| if (exfield) {
| |
| items++;
| |
| code += '|-\n! style="background: #FFDDDD;"|ITEM ' + items + '\n';
| |
| } else {
| |
| code += '|-\n';
| |
| }
| |
| for (i = 0; i < nbCol; i++) {
| |
| code += '| Element ' + i + '\n';
| |
| }
| |
| }
| |
| code += '|}\n';
| |
| hideXEBPopup();
| |
| insertTags('', '', code);
| |
| extendSummary('table');
| |
| | |
| return false;
| |
| }
| |
| | |
| // Get the text currently selected by user in the textAra
| |
| // This code is based on part of the insertTags function in wikibits.js
| |
| | |
| function XEBGetSelectedText() {
| |
| var txtarea, theSelection;
| |
| if (document.editform) {
| |
| txtarea = document.editform.wpTextbox1;
| |
| } else {
| |
| // some alternate form? take the first one we can find
| |
| var areas = document.getElementsByTagName('textarea');
| |
| | |
| txtarea = areas[0];
| |
| }
| |
| // IE & Opera
| |
| if (document.selection && !is_gecko) {
| |
| theSelection = document.selection.createRange().text;
| |
| if (!theSelection) {
| |
| theSelection = '';
| |
| }
| |
| }
| |
| // Mozilla
| |
| else if (txtarea.selectionStart || txtarea.selectionStart === 0) {
| |
| var replaced = false;
| |
| var startPos = txtarea.selectionStart;
| |
| var endPos = txtarea.selectionEnd;
| |
| theSelection = (txtarea.value).substring(startPos, endPos);
| |
| if (!theSelection) {
| |
| theSelection = '';
| |
| }
| |
| }
| |
| return theSelection;
| |
| }
| |
| | |
| //Notes:
| |
| // IE loses the cursor position in the textarea when the popup is used.
| |
| // So we save the cursor position here
| |
| function XEBgetIESelectedRange() {
| |
| var IESel = {};
| |
| var txtarea;
| |
| if (document.editform) {
| |
| txtarea = document.editform.wpTextbox1;
| |
| } else {
| |
| // some alternate form? take the first one we can find
| |
| var areas = document.getElementsByTagName('textarea');
| |
| | |
| txtarea = areas[0];
| |
| }
| |
| // IE & Opera
| |
| if (document.selection && !is_gecko) {
| |
| txtarea.focus();
| |
| IESel.Rng = document.selection.createRange();
| |
| return IESel;
| |
| }
| |
| }
| |
| | |
| function XEBinsertText(beforeText, selText, afterText, IESelectedRange) {
| |
| var newText = beforeText + selText + afterText;
| |
| var txtarea, tr;
| |
| if (document.editform) {
| |
| txtarea = document.editform.wpTextbox1;
| |
| } else {
| |
| // some alternate form? take the first one we can find
| |
| var areas = document.getElementsByTagName('textarea');
| |
| txtarea = areas[0];
| |
| }
| |
| | |
| // IE
| |
| if (document.selection && !is_gecko) {
| |
| | |
| tr = IESelectedRange.Rng;
| |
| tr.text = newText;
| |
| txtarea.focus();
| |
| //txtarea.caretpos=tr.duplicate();
| |
| tr.select();
| |
| | |
| return;
| |
| | |
| // Mozilla
| |
| } else if (txtarea.selectionStart || txtarea.selectionStart === 0) {
| |
| var replaced = false;
| |
| var startPos = txtarea.selectionStart;
| |
| var endPos = txtarea.selectionEnd;
| |
| | |
| if (endPos - startPos) {
| |
| replaced = true;
| |
| }
| |
| var scrollTop = txtarea.scrollTop;
| |
| // var myText = (txtarea.value).substring(startPos, endPos);
| |
| // if (!myText) {
| |
| // myText=sampleText;
| |
| // }
| |
| // if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
| |
| // subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
| |
| // } else {
| |
| // subst = tagOpen + myText + tagClose;
| |
| // }
| |
| txtarea.value = txtarea.value.substring(0, startPos) + newText + txtarea.value.substring(endPos, txtarea.value.length);
| |
| txtarea.focus();
| |
| //set new selection
| |
| if (!replaced) {
| |
| var cPos = startPos + (newText.length);
| |
| txtarea.selectionStart = cPos;
| |
| txtarea.selectionEnd = cPos;
| |
| } else {
| |
| txtarea.selectionStart = startPos + beforeText.length;
| |
| txtarea.selectionEnd = startPos + beforeText.length + selText.length;
| |
| }
| |
| txtarea.scrollTop = scrollTop;
| |
| | |
| // All other browsers get no toolbar.
| |
| // There was previously support for a crippled "help"
| |
| // bar, but that caused more problems than it solved.
| |
| }
| |
| // reposition cursor if possible
| |
| if (txtarea.createTextRange) {
| |
| | |
| txtarea.caretPos = document.selection.createRange().duplicate();
| |
| //txtarea.caretPos =IESelectedRange.Rng;
| |
| }
| |
| txtarea.focus();
| |
| }
| |
| | |
| | |
| //============================================================
| |
| // Table generator
| |
| //============================================================
| |
| /** en: Generate an array using MediaWiki syntax
| |
| * @author: originally from fr:user:dake
| |
| * @version: 0.2 */
| |
| function generateTable(caption, exhead, nbCol, nbRow, exfield, align) {
| |
| }
| |
| | |
| | |
| function XEBPopupRef(e) {
| |
| | |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('ref', m.x, m.y);
| |
| curPopup.width = 300;
| |
| var mt = '<p>Enter the reference parameters below: <\/p>' +
| |
| '<form name="XEBPopupRefForm">' +
| |
| 'Name:<input type="text" name="refName" value="" size="10"><p\/>' +
| |
| 'Material:<input type="text" name="refMaterial" value="' + XEBGetSelectedText() +
| |
| '" size="20">' +
| |
| '<\/form>' +
| |
| '<p><button onClick="javascript:insertRef()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button>';
| |
| | |
| curPopup.setInnerHTML(mt, "Reference parameters");
| |
| // document.XEBPopupRefForm.refName.focus();
| |
| return true;
| |
| }
| |
| | |
| function insertRef() {
| |
| var f = document.XEBPopupRefForm;
| |
| var refName = f.refName.value;
| |
| var refMaterial = f.refMaterial.value;
| |
| | |
| hideXEBPopup();
| |
| var code1 = '<ref';
| |
| code1 += (refName) ? ' name="' + refName + '">' : '>';
| |
| var code2 = refMaterial;
| |
| var code3 = '<\/ref>';
| |
| XEBinsertText(code1, code2, code3, curPopup.IESelectedRange);
| |
| | |
| extendSummary('ref');
| |
| return false;
| |
| }
| |
| | |
| //===GEO LINK Function==================================================
| |
| | |
| function XEBPopupGeoLink(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('geo', m.x, m.y);
| |
| curPopup.width = 300;
| |
| var mt = '<p>Enter the location parameters below: <\/p>' +
| |
| '<form name="XEBPopupGeoLinkForm">' +
| |
| 'Location:<p\/>' +
| |
| '<table style="background: transparent;">' +
| |
| '<tr><td>Latitude:<\/td><td><input type="text" autocomplete="off" name="geoLatDeg" value="" size="4"><\/td>' +
| |
| '<td><input type="text" name="geoLatMin" size="4"><\/td>' +
| |
| '<td><input type="text" name="geoLatSec" size="4"><\/td>' +
| |
| '<td><select name="geoLatNS"><option value="N">N<option value="S">S</select><\/td><\/tr>' +
| |
| '<tr><td>Longitude:<\/td><td><input type="text" name="geoLonDeg" value="" size="4"><\/td>' +
| |
| '<td><input type="text" name="geoLonMin" value="" size="4"><\/td>' +
| |
| '<td><input type="text" name="geoLonSec" value="" size="4"><\/td>' +
| |
| '<td><select name="geoLonEW"><option value="E">E<option value="W">W</select><\/td><\/tr>' +
| |
| '<\/table>' +
| |
| 'Region:<input type="text" name="geoRegion" value="" size="4"><p\/>' +
| |
| 'Type:' +
| |
| '<SELECT NAME="geoType" size="5">' +
| |
| '<OPTION VALUE="country">Country<OPTION VALUE="state">State' +
| |
| '<OPTION VALUE="adm1st">Admin unit, 1st level<OPTION VALUE="adm2st">Admin unit, 2nd level' +
| |
| '<OPTION VALUE="city">City<OPTION VALUE="airport">Airport' +
| |
| '<OPTION VALUE="mountain">Mountain<OPTION VALUE="isle">Isle' +
| |
| '<OPTION VALUE="waterbody">Waterbody<OPTION VALUE="landmark" SELECTED>Landmark' +
| |
| '<OPTION VALUE="forest">forest</SELECT><br>' +
| |
| 'Title: <input type="checkbox" name="geoTitle" ><p\/>' +
| |
| '<\/form>' +
| |
| '<p><button onClick="javascript:insertGeoLink()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button>';
| |
| | |
| curPopup.setInnerHTML(mt, "Location parameters");
| |
| document.paramForm.refName.focus();
| |
| return true;
| |
| | |
| }
| |
| function insertGeoLink() {
| |
| var f = document.XEBPopupGeoLinkForm;
| |
| | |
| var code = '{{Coor ';
| |
| if (f.geoTitle.checked) {
| |
| code += 'title ';
| |
| }
| |
| var ft = 'dms';
| |
| if (f.geoLatSec.value === '' && f.geoLonSec.value === '') {
| |
| ft = 'dm';
| |
| }
| |
| if (ft === 'dm' && f.geoLatMin.value === '' && f.geoLonMin.value === '') {
| |
| ft = 'd';
| |
| }
| |
| code += ft;
| |
| code += '|' + f.geoLatDeg.value;
| |
| code += (ft === 'dm' || ft === 'dms') ? '|' + f.geoLatMin.value : '';
| |
| code += (ft === 'dms') ? '|' + f.geoLatSec.value : '';
| |
| code += '|' + f.geoLatNS.value;
| |
| code += '|' + f.geoLonDeg.value;
| |
| code += (ft === 'dm' || ft === 'dms') ? '|' + f.geoLonMin.value : '';
| |
| code += (ft === 'dms') ? '|' + f.geoLonSec.value : '';
| |
| code += '|' + f.geoLonEW.value;
| |
| code += '|type:' + f.geoType.value + '_region:' + f.geoRegion.value;
| |
| code += '}}';
| |
| insertTags('', '', code);
| |
| extendSummary('geo-location');
| |
| hideXEBPopup();
| |
| return false;
| |
| }
| |
| | |
| //===Talk Page entry Function===========================================
| |
| | |
| function XEBPopupTalk(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('talk', m.x, m.y);
| |
| curPopup.width = 200;
| |
| var mt = '<div style="font-size:medium"><p>Please choose:<\/p>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(1)">Test1<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(2)">Self Test<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(3)">Nonsense<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(4)">Please stop<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(5)">Last chance<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(6)">Blanking<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(7)">Blatant<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" ;onclick="XEBInsertTalk(8)">*BLOCKED*<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(9)">Spam<\/span><br>';
| |
| mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(10)">Npov<\/span><br>';
| |
| | |
| curPopup.setInnerHTML(mt, "Talk Page");
| |
| | |
| return true;
| |
| | |
| }
| |
| | |
| function XEBInsertTalk(itm) {
| |
| var code = {
| |
| 1: '{' + '{subst:test1-n|}}',
| |
| 2: '{' + '{subst:selftest-n|}}',
| |
| 3: '{' + '{subst:test2-n|}}',
| |
| 4: '{' + '{subst:test3-n|}}',
| |
| 5: '{' + '{subst:test4-n|}}',
| |
| 6: '{' + '{subst:test2a-n|}}',
| |
| 7: '{' + '{subst:bv-n|}}',
| |
| 8: '{' + '{subst:blantant|}}',
| |
| 9: '{' + '{subst:spam-n|}}',
| |
| 10: '{' + '{subst:NPOV user}}'
| |
| };
| |
| hideXEBPopup();
| |
| insertTags('', '', code[ itm ]);
| |
| return false;
| |
| }
| |
| function XEBPopupImage(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('image', m.x, m.y);
| |
| curPopup.width = 300;
| |
| | |
| var mt = '<p>Enter the image parameters below: <\/p>' +
| |
| '<form name="XEBPopupImageForm">' +
| |
| 'File:<input type="text" name="imgFile" value="' + XEBGetSelectedText() + '" size="30"><br>' +
| |
| 'Type:<SELECT NAME="imgType">' +
| |
| '<OPTION VALUE="thumb">Thumbnail' +
| |
| '<OPTION VALUE="frame">Frame' +
| |
| '<OPTION VALUE="none">[not specified]' +
| |
| '</SELECT><br>' +
| |
| 'Location:<SELECT NAME="imgLocation">' +
| |
| '<OPTION VALUE="left">Left' +
| |
| '<OPTION VALUE="center">Centre' +
| |
| '<OPTION VALUE="right">Right' +
| |
| '<OPTION VALUE="none">None' +
| |
| '</SELECT><br>' +
| |
| 'Size:<input type="text" name="imgSize" value="100" size="3">px<br>' +
| |
| 'Caption:<input type="text" name="imgCaption" value="" size="30"><\/p>' +
| |
| '<\/form>' +
| |
| '<p><button onClick="javascript:XEBInsertImage()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button>';
| |
| | |
| curPopup.setInnerHTML(mt, "Image Parameters");
| |
| | |
| return true;
| |
| }
| |
| | |
| function XEBInsertImage() {
| |
| var f = document.XEBPopupImageForm;
| |
| hideXEBPopup();
| |
| var code = '[[Image:';
| |
| code += f.imgFile.value;
| |
| code += '|' + f.imgType.value;
| |
| code += '|' + f.imgLocation.value;
| |
| code += '|' + f.imgSize.value;
| |
| code += '|' + f.imgCaption.value;
| |
| code += ']]';
| |
| insertTags('', '', code);
| |
| extendSummary('image');
| |
| | |
| return false;
| |
| }
| |
| | |
| function XEBPopupFormattedText(e) {
| |
| var m = new GetPos(e || event);
| |
| | |
| curPopup = new XEBPopup('image', m.x, m.y);
| |
| curPopup.width = 300;
| |
| | |
| var mt = '<form name="XEBPopupImageForm">' +
| |
| '<table style="background: transparent;">' +
| |
| '<tr><td>Bold:<\/td><td><input type="checkbox" name="textBold"><\/td>' +
| |
| '<td>Superscript:<\/td><td><input type="checkbox" name="textSuperscript"><\/td><\/tr>' +
| |
| '<tr><td>Italic:<\/td><td><input type="checkbox" name="textItalic"><\/td>' +
| |
| '<td>Subscript:<\/td><td><input type="checkbox" name="textSubscript"><\/td><\/tr>' +
| |
| '<tr><td>Strike:<\/td><td><input type="checkbox" name="textStrike"><\/td>' +
| |
| '<td> <\/td><\/tr>' +
| |
| '</table>' +
| |
| 'Size:<SELECT NAME="textSize">' +
| |
| '<OPTION VALUE="small">small' +
| |
| '<OPTION VALUE="normal">[Normal]' +
| |
| '<OPTION VALUE="big">big' +
| |
| '</SELECT><br><table style="background:transparent;"><tr><td>Colour:<\/td><td>' +
| |
| '<table width="100px">' +
| |
| '<tr><td colspan="4">None<\/td></tr>' +
| |
| '<tr><td bgcolor="aqua"> <\/td><td bgcolor="gray"> <\/td>' +
| |
| '<td bgcolor="olive"> <\/td><td bgcolor="navy"> <\/td><\/tr>' +
| |
| '<tr><td bgcolor="black"> <\/td><td bgcolor="green"> <\/td>' +
| |
| '<td bgcolor="purple"> <\/td><td bgcolor="teal"> <\/td><\/tr>' +
| |
| '<tr><td bgcolor="blue"> <\/td><td bgcolor="lime"> <\/td>' +
| |
| '<td bgcolor="red"> <\/td><td bgcolor="white"> <\/td><\/tr>' +
| |
| '<tr><td bgcolor="fuchsia"> <\/td><td bgcolor="maroon"> <\/td>' +
| |
| '<td bgcolor="silver"> <\/td><td bgcolor="yellow"> <\/td><\/tr>' +
| |
| '</table><\/td><\/tr>' +
| |
| '<\/form>' +
| |
| 'Sample:' +
| |
| '<span id="sampleText">Text</span>"' +
| |
| '<p><button onClick="javascript:XEBInsertFormattedText()">Insert</button>' +
| |
| '<button onClick="hideXEBPopup()">Cancel</button>';
| |
| | |
| curPopup.setInnerHTML(mt, "Text Format Options");
| |
| | |
| return true;
| |
| }
| |
| | |
| function XEBUpdateSampleText() {
| |
| var f = document.XEBPopupImageForm;
| |
| }
| |
| | |
| //====================
| |
| | |
| function XEBMenuMouseOut(e) {
| |
| var targ;
| |
| if (!e) {
| |
| e = window.event;
| |
| }
| |
| if (e.target) {
| |
| targ = e.target;
| |
| } else if (e.srcElement) {
| |
| targ = e.srcElement;
| |
| }
| |
| | |
| targ.style.color = 'black';
| |
| }
| |
| | |
| function XEBMenuMouseOver(e) {
| |
| var targ;
| |
| if (!e) {
| |
| e = window.event;
| |
| }
| |
| if (e.target) {
| |
| targ = e.target;
| |
| } else if (e.srcElement) {
| |
| targ = e.srcElement;
| |
| }
| |
| | |
| targ.style.color = 'red';
| |
| }
| |
| | |
| //=======================================================================
| |
| // Other functions
| |
| //=======================================================================
| |
| | |
| function XEBgetElementsByClassName(parent, clsName, htmltag) {
| |
| var arr = [], elem;
| |
| var elems = parent.getElementsByTagName(htmltag);
| |
| for (var cls, i = 0;
| |
| (elem = elems[i]); i++) {
| |
| if (elem.className === clsName) {
| |
| arr[arr.length] = elem;
| |
| }
| |
| }
| |
| return arr;
| |
| }
| |
| | |
| function extendSummary(newText) {
| |
| if (!XEBExtendEditSummary) {
| |
| return;
| |
| }
| |
| var s = document.editform.elements.wpSummary.value;
| |
| s += (s === '') ? newText : ' +' + newText;
| |
| document.editform.elements.wpSummary.value = s;
| |
| }
| |
| | |
| function bug(msg) {
| |
| if (mw.config.get( 'wgUserName' ) === 'MarkS') {
| |
| alert(msg);
| |
| }
| |
| }
| |