:en:User:Cacycle/wikEd.js

//

// JSHint options

/* jshint -W004, -W100, newcap: false, browser: true, jquery: true, sub: true, bitwise: true, curly: true, evil: true, forin: true, freeze: true, globalstrict: true, immed: true, latedef: true, loopfunc: true, quotmark: single, strict: true, undef: true */

/* global GM_getValue, GM_setValue, GM_xmlhttpRequest, console */

// turn on ECMAScript 5 strict mode

'use strict';

// We will not log errors for users using this script due to volume of bugs.

mw.loader.using('mediawiki.storage').then(function () {

mw.storage.session.set( 'client-error-opt-out', '1' );

});

// define global object

var wikEd; if (wikEd === undefined) { wikEd = {}; }

// default to null (all checks are against null so make sure it starts as null)

if (wikEd.paste === undefined) {

wikEd.paste = null;

}

wikEd.Meta = function () {/*

// ==UserScript==

// @name wikEd

// @version 0.9.155

// @date November 5, 2017

// @namespace https://en.wikipedia.org/wiki/User:Cacycle/

// @description A full-featured in-browser editor for Wikipedia and other MediaWikis

// @include *

// @homepage https://en.wikipedia.org/wiki/User:Cacycle/wikEd

// @source https://en.wikipedia.org/wiki/User:Cacycle/wikEd.js

// @author Cacycle (https://en.wikipedia.org/wiki/User:Cacycle)

// @license Released into the public domain

// @grant GM_getValue

// @grant GM_xmlhttpRequest

// ==/UserScript==

wikEd is a full-featured edit page text editor for regular to advanced users on Wikipedia and other MediaWikis.

wikEd features syntax highlighting, reference, template, and code folding,

on-page Show preview and Show changes, and advanced search and replace functions.

wikEd works under all web browsers except Internet Explorer.

This code has to be saved as UTF-8 in your editor to preserve Unicode characters like ♥ (heart symbol).

  • /};

// define global objects

var wikEdConfig;

var wikEdText;

var WED;

var WikEdDiff;

//

// start of user configurable variables

//

//

// wikEd.InitGlobalsConfigs: initialize user configurable variables

//

wikEd.InitGlobalConfigs = function () {

// user readable texts, copy changes to https://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js, also defined in wikEdDiff.js

if (wikEd.config.text === undefined) { wikEd.config.text = {}; }

// wikEd.InitText: define built-in user interface texts

wikEd.InitText = function () {

wikEd.InitObject(wikEd.config.text, {

// logo

'wikEdLogo alt': 'wikEd',

'wikEdLogo title': 'wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to disable',

'wikEdLogo error alt': 'wikEd error',

'wikEdLogo error title': 'Loading error - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to disable',

'wikEdLogo browser alt': '(wikEd)',

'wikEdLogo browser title': 'Browser not supported - wikEd {wikEdProgramVersion} ({wikEdProgramDate})',

'wikEdLogo incompatible alt': '(wikEd)',

'wikEdLogo incompatible title': 'Incompatible script, gadget, or add-on: {wikEdParameter} - wikEd {wikEdProgramVersion} ({wikEdProgramDate})',

'wikEdLogo disabled alt': '(wikEd)',

'wikEdLogo disabled title': 'Disabled - wikEd {wikEdProgramVersion} ({wikEdProgramDate}) Click to enable',

'wikEdLogo testVersion alt': 'wikEd_dev',

'wikEdLogo testVersion title': 'wikEd_dev (unstable test version) {wikEdProgramVersion} ({wikEdProgramDate}) Click to disable',

// top jumper

'wikEdScrollToEdit4 alt': 'Scroll to edit',

'wikEdScrollToEdit4 title': 'Scroll to edit field',

// button bar grip titles

'wikEdGripFormat title': 'Formatting buttons (click to hide or show)',

'wikEdGripTextify title': 'Textify and wikify buttons (click to hide or show)',

'wikEdGripCustom1 title': 'Custom buttons (click to hide or show)',

'wikEdGripFind title': 'Find buttons (click to hide or show)',

'wikEdGripFix title': 'Fixing buttons (click to hide or show)',

'wikEdGripCustom2 title': 'Custom buttons (click to hide or show)',

'wikEdGripControl title': 'wikEd control buttons (click to hide or show)',

// button bar background titles

'wikEdBarFormat title': '',

'wikEdBarTextify title': '',

'wikEdBarCustom1 title': '',

'wikEdBarFind title': '',

'wikEdBarFix title': '',

'wikEdBarCustom2 title': '',

'wikEdBarControl title': 'wikEd {wikEdProgramVersion} ({wikEdProgramDate})',

'wikEdBarPreview title': '',

'wikEdBarPreview2 title': '',

'wikEdBarJump title': '',

'wikEdBarPasted title': '',

// formatting buttons, top row

'wikEdUndo alt': 'Undo',

'wikEdUndo title': 'Undo',

'wikEdRedo alt': 'Redo',

'wikEdRedo title': 'Redo',

'wikEdBold alt': 'Bold',

'wikEdBold title': 'Bold text',

'wikEdItalic alt': 'Italic',

'wikEdItalic title': 'Italic text',

'wikEdUnderline alt': 'Underline',

'wikEdUnderline title': 'Underline text',

'wikEdStrikethrough alt': 'Strikethrough',

'wikEdStrikethrough title': 'Strikethrough text',

'wikEdNowiki alt': 'Nowiki',

'wikEdNowiki title': 'Nowiki markup text',

'wikEdSuperscript alt': 'Superscript',

'wikEdSuperscript title': 'Superscript text',

'wikEdSubscript alt': 'Subscript',

'wikEdSubscript title': 'Subscript text',

'wikEdRef alt': 'Ref',

'wikEdRef title': 'In-text reference (shift-click: named tag)',

'wikEdCase alt': 'Case',

'wikEdCase title': 'Toggle between lowercase, uppercase first, and uppercase',

'wikEdSort alt': 'Sort',

'wikEdSort title': 'Sort alphabetically',

'wikEdRedirect alt': 'Redirect',

'wikEdRedirect title': 'Create redirect, deletes whole text',

'wikEdUndoAll alt': 'Undo all',

'wikEdUndoAll title': 'Undo all changes',

'wikEdRedoAll alt': 'Redo all',

'wikEdRedoAll title': 'Redo all changes',

// formatting buttons, bottom row

'wikEdWikiLink alt': 'Link',

'wikEdWikiLink title': 'Wiki link',

'wikEdWebLink alt': 'Weblink',

'wikEdWebLink title': 'External weblink',

'wikEdHeading alt': 'Heading',

'wikEdHeading title': 'Increase heading levels (shift-click: decrease)',

'wikEdBulletList alt': 'Bullet list',

'wikEdBulletList title': 'Increase bulleted list level (shift-click: decrease)',

'wikEdNumberList alt': 'Number list',

'wikEdNumberList title': 'Increase numbered list level (shift-click: decrease)',

'wikEdIndentList alt': 'Indent list',

'wikEdIndentList title': 'Increase indention (shift-click: decrease)',

'wikEdDefinitionList alt': 'Def list',

'wikEdDefinitionList title': 'Definition list',

'wikEdImage alt': 'Image',

'wikEdImage title': 'Image',

'wikEdTable alt': 'Table',

'wikEdTable title': 'Table',

'wikEdReferences alt': 'References',

'wikEdReferences title': 'References location (shift-click: references section)',

'wikEdSign alt': 'Signature',

'wikEdSign title': 'Signature ~~~~ (shift-click: name only ~~~)',

// textify buttons

'wikEdWikify alt': 'Wikify',

'wikEdWikify title': 'Convert pasted content to wiki code, update highlighting',

'wikEdTextify alt': 'Textify',

'wikEdTextify title': 'Convert pasted content to plain text, update highlighting (shift-click: forced highlighting)',

'wikEdPastedWikify alt': 'Wikify pasted',

'wikEdPastedWikify title': 'Convert pasted content to wiki code',

'wikEdPastedTextify alt': 'Textify pasted',

'wikEdPastedTextify title': 'Convert pasted content to plain text',

'wikEdPastedClose alt': 'x',

'wikEdPastedClose title': 'Close',

// find and replace buttons, top row

'wikEdFindAll alt': 'Find all',

'wikEdFindAll title': 'Find all matches',

'wikEdFindPrev alt': 'Find prev',

'wikEdFindPrev title': 'Find previous match',

'wikEdFindSelect title': 'Select a previous search or jump to a heading',

'wikEdFindNext alt': 'Find next',

'wikEdFindNext title': 'Find next match (shift-click: get selection)',

'wikEdJumpPrev alt': 'Selected prev',

'wikEdJumpPrev title': 'Find the selected text backwards',

'wikEdJumpNext alt': 'Selected next',

'wikEdJumpNext title': 'Find the selected text forwards',

// find and replace buttons, bottom row

'wikEdReplaceAll alt': 'Replace all',

'wikEdReplaceAll title': 'Replace all matches in whole text or selection',

'wikEdReplacePrev alt': 'Replace prev',

'wikEdReplacePrev title': 'Replace previous match',

'wikEdReplaceSelect title': 'Select a previous replacement',

'wikEdReplaceNext alt': 'Replace next (shift-click: get selection)',

'wikEdReplaceNext title': 'Replace next match',

'wikEdCaseSensitive alt': 'Case sensitive',

'wikEdCaseSensitive title': 'Search is case sensitive',

'wikEdRegExp alt': 'RegExp',

'wikEdRegExp title': 'Search field is a regular expression',

'wikEdFindAhead alt': 'Find ahead',

'wikEdFindAhead title': 'Find ahead as you type (case-insensitive non-regexp search)',

// fix buttons, top row

'wikEdFixBasic alt': 'Fix basic',

'wikEdFixBasic title': 'Fix blanks and empty lines, also done by other fixing functions',

'wikEdFixHtml alt': 'Fix html',

'wikEdFixHtml title': 'Fix html to wikicode',

'wikEdFixCaps alt': 'Fix caps',

'wikEdFixCaps title': 'Fix caps in headers and lists',

'wikEdFixUnicode alt': 'Fix Unicode',

'wikEdFixUnicode title': 'Fix Unicode character representations',

'wikEdFixAll alt': 'Fix all',

'wikEdFixAll title': 'Fix basic, html, capitalization, and Unicode',

'wikEdFixRedirect alt': 'Fix redirects',

'wikEdFixRedirect title': 'Fix redirects',

// fix buttons, bottom row

'wikEdFixDashes alt': 'Fix dashes',

'wikEdFixDashes title': 'Fix dashes',

'wikEdFixPunct alt': 'Fix punctuation',

'wikEdFixPunct title': 'Fix spaces before punctuation',

'wikEdFixMath alt': 'Fix math',

'wikEdFixMath title': 'Fix math',

'wikEdFixChem alt': 'Fix chem',

'wikEdFixChem title': 'Fix chemical formulas',

'wikEdFixUnits alt': 'Fix units',

'wikEdFixUnits title': 'Fix units',

'wikEdFixRegExTypo alt': 'Fix typos',

'wikEdFixRegExTypo title': 'Fix typos using the AutoWikiBrowser RegExTypoFixer rules',

// wikEd control buttons, top row

'wikEdRefHide alt': '[REF, TEMPL]',

'wikEdRefHide title': 'Simple view: hide refs, templates, and table code',

'wikEdRefButtonTooltip': 'Click to display hidden reference',

'wikEdTemplButtonTooltip': 'Click to display hidden template',

'wikEdCharEntityButtonTooltip': 'Click to display hidden character entity',

'wikEdTableButtonTooltip': 'Click to display hidden table code',

'wikEdRefButtonShowTooltip': 'Click to hide reference',

'wikEdTemplButtonShowTooltip': 'Click to hide template',

'wikEdCharEntityButtonShowTooltip': 'Click to hide character entity',

'wikEdTableButtonShowTooltip': 'Click to hide table code',

'wikEdTextZoom alt': 'Text zoom',

'wikEdTextZoom title': 'Text zoom cycling (shift-click: reverse)',

'wikEdClearHistory alt': 'Clear history',

'wikEdClearHistory title': 'Clear the find, replace, and summary history',

'wikEdScrollToPreview alt': 'Scroll to preview',

'wikEdScrollToPreview title': 'Scroll to preview field',

'wikEdScrollToEdit alt': 'Scroll to edit',

'wikEdScrollToEdit title': 'Scroll to edit field',

// wikEd control buttons, bottom row

'wikEdUseWikEd alt': 'Use wikEd',

'wikEdUseWikEd title': 'Use wikEd instead of classic text area',

'wikEdHighlightSyntax alt': 'Syntax',

'wikEdHighlightSyntax title': 'Syntax highlighting',

'wikEdSource alt': 'Source',

'wikEdCloseToolbar title': 'Close the standard non-wikEd toolbar',

'wikEdCloseToolbar alt': 'Close toolbar',

'wikEdSource title': 'Show the source code for testing',

'wikEdUsing alt': 'Using',

'wikEdUsing title': 'Automatically add \'\'…using wikEd\'\' to summaries',

'wikEdFullScreen alt': 'Fullscreen',

'wikEdFullScreen title': 'Fullscreen mode',

'wikEdTableMode alt': 'Table as tables',

'wikEdTableMode title': 'Edit tables as tables',

// summary buttons

'wikEdClearSummary alt': 'Clear summary',

'wikEdClearSummary title': 'Clear the summary field',

'wikEdSummarySelect title': 'Select a previous summary',

'wikEdPresetSummary': [

'/* */ ', 'copyedit', 'reply', 'article created', 'intro rewrite',

'linkfix', 'fixing typos', 'removing linkspam', 'reverting test',

'reverting vandalism', 'formatting source text', '{wikEdUsing}'

],

'wikEdSummaryUsing': '…using wikEd',

// toolbar

'wikEdCodeEditorButtonDisabled': ' (disabled by wikEd)',

// button title acceskey

'alt-shift': 'alt-shift-',

// submit buttons

'wikEdLocalPreviewImg alt': 'Preview below',

'wikEdLocalPreview title': 'Show preview below',

'wikEdLocalDiffImg alt': 'Changes below',

'wikEdLocalDiff title': 'Show current changes below',

'wikEdHelpPageLink': ' | wikEd help', // use full link without {wikEdHomeBaseUrl} if the page is not on the English Wikipedia

// preview and changes buttons, top

'wikEdClose alt': 'Close',

'wikEdClose title': 'Close preview box',

'wikEdClose2 alt': 'Close',

'wikEdClose2 title': 'Close preview box',

'wikEdScrollToPreview2 alt': 'Scroll to preview',

'wikEdScrollToPreview2 title': 'Scroll to preview field',

'wikEdScrollToEdit2 alt': 'Scroll to edit',

'wikEdScrollToEdit2 title': 'Scroll to edit field',

// preview and changes buttons, bottom

'wikEdScrollToPreview3 alt': 'Scroll to preview',

'wikEdScrollToPreview3 title': 'Scroll to preview field',

'wikEdScrollToEdit3 alt': 'Scroll to edit',

'wikEdScrollToEdit3 title': 'Scroll to edit field',

// preview field

'wikEdPreviewLoading': '...',

'diffNotLoaded': 'Error: Local diff script not installed.',

// formatting functions

'image filename': 'filename',

'image width': 'width',

'table caption': 'caption',

'table heading': 'heading',

'table cell': 'cell',

'redirect article link': 'article link',

// fixing functions

'External links': 'External links',

'See also': 'See also',

'References': 'References',

// language specific wiki code

'wikicode Image': 'Image',

'wikicode File': 'File',

'wikicode Media': 'Media',

'wikicode Category': 'Category',

'wikicode Template': 'Template',

'wikEdReferencesSection': '\n== References ==\n\n\n',

'talk page': 'talk',

'history page': 'history',

'talk namespace': 'Talk',

'talk namespace suffix': '$1_talk', // '$1_talk', '_talk', or 'talk_'

// hiding buttons, type

'hideRef': 'REF',

'hideTempl': 'TEMPL',

'hideTable': '',

// hiding buttons, details

'hideTableStart': 'Table',

'hideTableEnd': 'Table end',

'hideTableCaption': 'Caption',

'hideTableRow': 'Row',

'hideTableHeader': 'Header',

'hideTableCell': 'Cell',

// shortened button texts

'shortenedPreview': 'Preview',

'shortenedChanges': 'Changes',

// link popup

'followLink': '(ctrl-click)',

'followLinkMac': '(cmd-click)',

'redirect': ', redirect to:',

'redlink': ' (page does not exist)',

// auto updating

'wikEdGreasemonkeyAutoUpdate': 'wikEd Update:\n\nA new version of the Greasemonkey script "wikEd" is available.\n\n\nIt will be installed from:\n\n{updateURL}',

'wikEdGreasemonkeyAutoUpdateBugfix': 'Important wikEd Bugfix:\n\nA bugfix for the Greasemonkey script "wikEd" is available.\n\n\nIt will be installed from:\n\n{updateURL}',

// highlighting popups

'hyphenDash': 'Standard hyphen',

'figureDash': 'Figure dash',

'enDash': 'En dash',

'emDash': 'Em dash',

'barDash': 'Horizontal bar',

'minusDash': 'Minus sign',

'softHyphen': 'Soft hyphen',

'tab': 'Tab',

'enSpace': 'En space',

'emSpace': 'Em space',

'thinSpace': 'Thin space',

'ideographicSpace': 'Ideographic space',

// highlighting

'wikEdSignature3': 'Sign with username only',

'wikEdSignature4': 'Sign with user name and date',

'wikEdSignature5': 'Sign with date only',

// highlighting errors

'wikEdErrorHtmlUnknown': 'Unsupported HTML tag',

'wikEdErrorBoldItalic': 'Invalid bold / italic',

'wikEdErrorWrongClose': 'Close tag does not match',

'wikEdErrorNoOpen': 'Close tag has no match',

'wikEdErrorNoHandler': 'No handler',

'wikEdErrorNoClose': 'Open tag has no match',

'wikEdErrorNewline': 'Open tag closed by new line',

'wikEdErrorTemplHeading': 'Headings in templates are ignored',

'wikEdErrorTemplParam': 'Template/parameter tags do not match',

'wikEdErrorTemplParamAmbig': 'Template/parameter tags are ambiguous',

'wikEdErrorCodeInLinkName': 'Wikicode in link name',

'wikEdErrorCodeInTemplName': 'Wikicode in template name',

'wikEdErrorCodeInParamName': 'Wikicode in template parameter name',

// highlighting image preview

'wikEdFilePreview': 'Image preview',

// location search string functions

'iconPage': 'All icons and images used by wikEd. Save page as web page, complete to download all files into one folder.

',

// duplicated message

'clonedWarningsNote': 'Duplicated edit warnings (wikEd):'

}, wikEd.config.showMissingTranslations);

};

// define built-in user interface texts

wikEd.InitText();

// use local copies of images for testing (set to true in local copy of edit page), also defined in wikEdDiff.js

if (wikEd.config.useLocalImages === undefined) { wikEd.config.useLocalImages = false; }

// path to local wikEd images for testing, also defined in wikEdDiff.js

if (wikEd.config.imagePathLocal === undefined) { wikEd.config.imagePathLocal = 'file:///D:/wikEd/images/'; }

// path to wikEd images, also defined in wikEdDiff.js

if (wikEd.config.imagePath === undefined) { wikEd.config.imagePath = '//upload.wikimedia.org/wikipedia/commons/'; }

// wikEd image filenames, also defined in wikEdDiff.js

if (wikEd.config.image === undefined) { wikEd.config.image = {}; }

// wikEd.InitImages: define built-in image URLs

wikEd.InitImages = function () {

wikEd.InitImage(wikEd.config.image, {

'barDash': '5/52/WikEd_bar_dash.png',

'bold': '5/59/WikEd_bold.png',

'browser': '0/07/WikEd_disabled.png',

'bulletList': '6/62/WikEd_bullet_list.png',

'case': 'a/aa/WikEd_case.png',

'caseSensitive': '0/0d/WikEd_case_sensitive.png',

'clearHistory': 'c/c8/WikEd_clear_history.png',

'clearSummary': '2/2c/WikEd_clear_summary.png',

'close': '9/97/WikEd_close.png',

'closePasted': 'b/bc/WikEd_close_pasted.png',

'closeToolbar': '1/1d/WikEd_close_toolbar.png',

'ctrl': '1/10/WikEd_ctrl.png',

'definitionList': 'f/f5/WikEd_definition_list.png',

'diff': 'd/db/WikEd_diff.png',

'disabled': '0/07/WikEd_disabled.png',

'dummy': 'c/c5/WikEd_dummy.png',

'emDash': '5/58/WikEd_em_dash.png',

'emSpace': '3/3a/WikEd_em_space.png',

'enDash': 'f/fc/WikEd_en_dash.png',

'enSpace': '0/04/WikEd_en_space.png',

'error': '3/3e/WikEd_error.png',

'figureDash': '2/25/WikEd_figure_dash.png',

'findAhead': '3/34/WikEd_find_ahead.png',

'findAll': '7/75/WikEd_find_all.png',

'findNext': 'a/ad/WikEd_find_next.png',

'findPrev': 'f/f5/WikEd_find_prev.png',

'fixAll': '8/86/WikEd_fix_all.png',

'fixBasic': '3/30/WikEd_fix_basic.png',

'fixCaps': '0/00/WikEd_fix_caps.png',

'fixUnicode': 'd/d4/WikEd_fix_unicode.png',

'fixRedirect': 'f/f8/WikEd_fix_redirect.png',

'fixChem': 'e/e7/WikEd_fix_chem.png',

'fixDash': 'e/e5/WikEd_fix_dash.png',

'fixHtml': '0/05/WikEd_fix_html.png',

'fixMath': '3/3f/WikEd_fix_math.png',

'fixPunct': 'd/db/WikEd_fix_punct.png',

'fixRegExTypo': '9/94/WikEd_fix_reg-ex-typo.png',

'fixUnits': '6/69/WikEd_fix_units.png',

'textZoom': '7/71/WikEd_font_size.png',

'fullScreen': 'd/d3/WikEd_fullscreen.png',

'getFind': '9/96/WikEd_get_selection.png',

'grip': 'a/ad/WikEd_grip.png',

'gripHidden': 'a/a8/WikEd_grip_hidden.png',

'heading': '0/07/WikEd_heading.png',

'highlightSyntax': '6/67/WikEd_syntax.png',

'ideographicSpace': 'c/c6/WikEd_ideographic_space.png',

'image': '3/37/WikEd_image.png',

'incompatible': '3/3e/WikEd_error.png',

'indentList': '7/7a/WikEd_indent_list.png',

'italic': 'd/d4/WikEd_italic.png',

'jumpNext': '5/54/WikEd_jump_next.png',

'logo': '6/67/WikEd_logo.png',

'minusDash': 'b/ba/WikEd_minus_dash.png',

'noFile': '8/88/WikEd_no_file.png',

'nowiki': '5/5a/WikEd_nowiki.png',

'numberList': '3/3b/WikEd_number_list.png',

'jumpPrev': 'c/c7/WikEd_jump_prev.png',

'preview': '3/31/WikEd_preview.png',

'redirect': 'f/fa/WikEd_redirect.png',

'redo': 'd/d7/WikEd_redo.png',

'ref': 'b/ba/WikEd_ref.png',

'refHide': '0/0b/WikEd_ref_hide.png',

'references': '6/66/WikEd_references.png',

'sign': 'd/d5/WikEd_sign.png',

'redoAll': '2/2d/WikEd_redo_all.png',

'resizeGrip': 'e/e1/WikEd_resize_grip.png',

'regExp': '6/6a/WikEd_regexp.png',

'replaceAll': '2/2a/WikEd_replace_all.png',

'replaceNext': 'b/b0/WikEd_replace_next.png',

'replacePrev': 'a/a1/WikEd_replace_prev.png',

'scrollToEdit': '1/13/WikEd_align_top.png',

'scrollToPreview': '3/37/WikEd_align_preview.png',

'scrollToEditDown': 'a/a8/WikEd_align_down.png',

'scrollToPreviewDown': '5/58/WikEd_align_preview_down.png',

'softHyphen': 'c/c7/WikEd_soft_hyphen.png',

'sort': '7/7c/WikEd_sort.png',

'source': '0/02/WikEd_source.png',

'strikethrough': '0/06/WikEd_strikethrough.png',

'subscript': '9/9e/WikEd_subscript.png',

'superscript': 'b/bf/WikEd_superscript.png',

'tab': 'e/e7/WikEd_tab.png',

'table': 'b/bd/WikEd_table.png',

'tableMode': 'e/ee/WikEd_table_edit.png',

'testVersion': '3/3e/WikEd_error.png',

'textify': 'c/cd/WikEd_textify.png',

'thinSpace': '5/56/WikEd_thin_space.png',

'underline': '2/21/WikEd_underline.png',

'undo': 'e/e6/WikEd_undo.png',

'undoAll': '0/08/WikEd_undo_all.png',

'unknown': '8/8a/WikEd_unknown.png',

'useWikEd': '6/67/WikEd_logo.png',

'using': 'e/e0/WikEd_using.png',

'webLink': '1/16/WikEd_weblink.png',

'wikify': '9/9f/WikEd_wikify.png',

'wikiLink': '2/21/WikEd_wikilink.png'

});

};

// edit-frame css rules

if (wikEd.config.frameCSS === undefined) { wikEd.config.frameCSS = {}; }

// wikEd.InitFrameCSS: define built-in edit frame css

wikEd.InitFrameCSS = function () {

wikEd.InitObject(wikEd.config.frameCSS, {

// frame

'.wikEdFrameHtml': 'height: 100%; width: 100%; padding: 0; margin: 0; background: transparent; background-image: url({wikEdImage:resizeGrip}); background-attachment: fixed; background-position: right bottom; background-repeat: no-repeat; line-height: normal;',

'.wikEdFrameBodyPlain': 'height: auto; min-height: 100%; width: auto; background: transparent; margin: 0; padding: 0; padding-left: 0.25em; overflow: auto; font-family: monospace;',

'.wikEdFrameBodySyntax': 'height: auto; min-height: 100%; width: auto; background: transparent; margin: 0; padding: 0; padding-left: 0.25em; overflow: auto; font-family: monospace;',

'.wikEdFrameBodyNewbie': 'height: auto; min-height: 100%; width: auto; background: transparent; margin: 0; padding: 0; padding-left: 0.25em; overflow: auto; font-family: monospace;',

// reselection / scroll to selection

'.wikEdScrollLineHeight': 'position: absolute;',

// syntax highlighting

'.wikEdError': 'background-image: url({wikEdImage:unknown}); color: black; font-weight: normal; font-style: normal; text-decoration: none;',

'.wikEdHighlightError': 'color: black; background: #faa;',

'.wikEdHtml': 'background: #e8e8e8;',

'.wikEdHtmlTag': 'color: #777;',

'.wikEdHtmlTagButtons': 'color: #777;',

'.wikEdHtmlUnknown': 'background-image: url({wikEdImage:unknown}); color: black; font-weight: normal; font-style: normal;',

'.wikEdParsingNote': 'border: 1px outset #fcc; padding: 0 0.5em 0 0.5em; margin: 0 0.25em 0 0.25em; color: black; background: #fcc; font-weight: normal; font-size: smaller; font-style: normal; text-decoration: none; font-family: sans-serif;',

'.wikEdSubscript': 'position: relative; top: 0.3em;',

'.wikEdSuperscript': 'position: relative; top: -0.3em;',

'.wikEdBold': 'font-weight: bold;',

'.wikEdItalic': 'font-style: italic;',

'.wikEdComment': 'background: #fff0d0; color: black; font-weight: normal; font-style: normal; text-decoration: none;',

'.wikEdKeep': '',

'.wikEdDel': 'text-decoration: line-through;',

'.wikEdIns': 'text-decoration: underline;',

'.wikEdPre': 'background: #f8e8e0;',

'.wikEdMath': 'background: #e8f0ff;',

'.wikEdScore': 'background: #fff8e0;',

'.wikEdNowiki': 'background: #f8e8e8;',

// horizontal rule

'.wikEdHr': 'background: #666; color: #ffffff;',

// wiki code

'.wikEdWiki': 'color: #777;',

'.wikEdRedir': 'color: #c00; font-weight: bold;',

'.wikEdSignature': 'color: #f00; font-weight: bold;',

'.wikEdMagic': 'color: #666; font-weight: bold; background: #e8e8e8;',

'.wikEdParserFunct': 'color: #f00;',

// headings

'.wikEdFrameBodySyntax .wikEdHeading': 'color: #000; font-weight: bold;',

'.wikEdFrameBodySyntax .wikEdHeadingWP': 'color: #000; font-weight: bold; background: #e8e8e8;',

'.wikEdFrameBodyNewbie .wikEdHeading': 'color: #000; font-weight: bold; color: #000; background: #eee; padding: 0 0.25em; border: 1px solid #ddd; font-size: larger; line-height: 1.5;',

'.wikEdFrameBodyNewbie .wikEdHeadingWP': 'color: #000; font-weight: bold; color: #000; background: #ddd; padding: 0 0.25em; border: 1px solid #ccc; font-size: larger; line-height: 1.5;',

// tables

'.wikEdTableBlock': '',

'.wikEdTableCode': 'color: #888; background: #ccc;',

'.wikEdTableTag': 'background: #ccc;',

'.wikEdTableCaption': 'color: #000; background: #fff;',

'.wikEdTableRow': 'color: #000; background: #ccc;',

'.wikEdTableHeader': 'color: #000; background: #e8e8e8;',

'.wikEdTableCell': 'color: #000; background: #f0f0f0;',

'.wikEdFrameBodyNewbie .wikEdTableCode': 'color: #888; background: transparent;',

'.wikEdFrameBodyNewbie .wikEdTableTag, .wikEdFrameBodyNewbie .wikEdTableTagBR': 'background: #d8d8d8;',

'.wikEdFrameBodyNewbie .wikEdTableCaption, .wikEdFrameBodyNewbie .wikEdTableCaptionBR': 'color: #000; background: #fff;',

'.wikEdFrameBodyNewbie .wikEdTableRow, .wikEdFrameBodyNewbie .wikEdTableRowBR': 'color: #000; background: #d8d8d8;',

'.wikEdFrameBodyNewbie .wikEdTableHeader, .wikEdFrameBodyNewbie .wikEdTableHeaderBR': 'color: #000; background: #f2f2f2;',

'.wikEdFrameBodyNewbie .wikEdTableCell, .wikEdFrameBodyNewbie .wikEdTableCellBR': 'color: #000; background: #fbfbfb;',

'br.wikEdTableBR': 'display: none;',

'.wikEdTableTagAttrib .wikEdTableCode, .wikEdTableCaptionAttrib .wikEdTableCode, .wikEdTableRowAttrib .wikEdTableCode, .wikEdTableHeaderAttrib .wikEdTableCode, .wikEdTableCellAttrib .wikEdTableCode':

'background: transparent;',

'.wikEdTableTagAttrib, .wikEdTableRowAttrib': 'color: #666;',

'.wikEdTableCaptionAttrib, .wikEdTableHeaderAttrib, .wikEdTableCellAttrib': 'color: #888;',

'table.wikEdTableMode': 'border: 1px solid #aaa; background: #d8d8d8; color: #000; border-collapse: separate; border-spacing: 0.25em 2px; margin: 0.5em 0;',

'td.wikEdTableCaption, td.wikEdTableHeader, td.wikEdTableCell, td.wikEdTableCaptionBR, td.wikEdTableHeaderBR, td.wikEdTableCellBR': 'border: 1px solid #aaa;',

'td.wikEdTableTag, td.wikEdTableRow, td.wikEdTableTagBR, td.wikEdTableRowBR': 'border: none; border-spacing: 0;',

// list

'.wikEdList': 'color: #000; background: #e8e8e8;',

'.wikEdListTag': 'font-weight: bold; font-family: monospace; vertical-align: text-bottom;',

// space-pre

'.wikEdSpace': 'color: #000; background: #e8e8e8;',

'.wikEdSpaceTag': 'background: #e8e8e8;',

// links

'.wikEdLinkTag': 'color: #777;',

// wiki links

'.wikEdLink': 'color: #00a;',

'.wikEdLinkCrossNs': 'background: #ddd; color: #00a;',

'.wikEdLinkInter': 'background: #ddd;',

'.wikEdLinkNs': 'background: #ddd;',

'.wikEdLinkName': 'font-weight: bold;',

'.wikEdLinkTarget': '',

'.wikEdLinkText': 'font-weight: bold;',

'.wikEdPMID': 'color: #00e;',

'.wikEdISBN': 'color: #00e;',

'.wikEdLinkInter span': 'font-weight: normal;',

'span.wikEdLinkText:hover': 'text-decoration: underline;',

'span.wikEdLinkName:hover': 'text-decoration: underline;',

'span.wikEdPMID:hover': 'text-decoration: underline;',

'span.wikEdISBN:hover': 'text-decoration: underline;',

// external links

'.wikEdURL': '',

'.wikEdURLName': 'color: #00e; font-weight: bold;',

'.wikEdURLTarget': 'color: #00e;',

'.wikEdURLText': 'color: #00e; font-weight: bold;',

'span.wikEdURLName:hover': 'text-decoration: underline;',

'span.wikEdURLText:hover': 'text-decoration: underline;',

// files

'.wikEdFile': 'background: rgb(213, 255, 176); background: rgba(199, 255, 149, 0.75); color: #00e;',

'.wikEdFrameBodyNewbie .wikEdFile':

'background: rgb(213, 255, 176); padding: 0.25em; margin-right: 0.25em; display: inline-block; border: 1px solid #082; margin: 1px;',

'.wikEdFileTag': 'color: #444;',

'.wikEdFileName': '',

'.wikEdFileParam': 'color: #666;',

'.wikEdFileCaption': 'color: #000;',

'.wikEdFilePreview': 'border: 1px solid #c0ffa0; background: rgb(192, 192, 192) no-repeat 50% 50%; background: rgba(192, 192, 192, 0.75); position: absolute; right: 0; margin: 0.1em 0.25em; z-index: -1; border: none; padding: 1px; display: block;',

'.wikEdFrameBodyNewbie .wikEdFilePreview':

'position: static; float: right; clear: both; background: transparent; padding: 0; ',

// categories

'.wikEdCat': 'background: #ccc; color: #00e;',

'.wikEdCatName': '',

'.wikEdCat .wikEdLinkInter': 'color: #000; background: #aaa;',

'.wikEdCat .wikEdLinkNs': 'color: #000; background: #ccc;',

'.wikEdCat .wikEdLinkText': 'color: #000; font-weight: normal;',

'.wikEdCat span.wikEdLinkText:hover': 'text-decoration: none;',

// refs

'.wikEdFrameBodySyntax .wikEdRefContainer': 'display: block; position: fixed; left: -10000em;',

'.wikEdRefContainer': 'position: relative;',

'.wikEdRefContainer button': 'padding: 0.1em; position: relative;',

'.wikEdRefButton': 'border: 1px solid; border-color: #e8e8e8 #444 #444 #e8e8e8; background: #d8d4d0;',

'.wikEdRefButtonShow': 'border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0;',

'.wikEdRef, .wikEdRefShow': 'background: #e8e8e8; color: #666;',

'.wikEdReferences': 'background: #eee;',

'.wikEdReferencesTag': 'color: #444;',

'.wikEdFrameBodyNewbie .wikEdReferences':

'background: #eee; padding: 0.25em; display: inline-block; border: 1px solid black; vertical-align: middle;',

'.wikEdRefList': 'background: #eee;',

'.wikEdFrameBodyNewbie .wikEdRefList':

'background: #e8e8e8; padding: 0.25em; display: inline-block; border: 1px solid black; vertical-align: middle;',

'.wikEdRefName': 'color: #000;',

// templates

'.wikEdFrameBodySyntax .wikEdTemplContainer': 'display: block; position: fixed; left: -10000em;',

'.wikEdTemplContainer': 'position: relative;',

'.wikEdTemplContainer button': 'padding: 0.1em; position: relative;',

'.wikEdTemplButton': 'border: 1px solid; border-color: #e8e8e8 #444 #444 #e8e8e8; background: #d8d4d0;',

'.wikEdTemplButtonShow': 'border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0;',

'.wikEdTempl, .wikEdTemplShow': 'background: #e8e8e8; color: #509;',

'.wikEdTemplNs, .wikEdTemplNsShow': 'background: #ccc;',

'.wikEdTemplTag': 'color: #777;',

'.wikEdTemplName': '',

'.wikEdTemplParam': 'color: #666;',

'.wikEdTemplMod': 'color: #f00; font-weight: bold;',

'.wikEdParam': 'background: #e8e8e8;',

'.wikEdParamName': 'color: #900;',

'.wikEdParamDefault': 'color: #000;',

// missing article for links, cats, refs, and templates

'.wikEdRedlink': 'color: #c00;',

// character entities

'.wikEdFrameBodySyntax .wikEdCharEntityContainer': 'display: block; position: fixed; left: -10000em;',

'.wikEdCharEntityContainer': 'position: relative; right: -0.25em;',

'.wikEdCharEntityContainer button':

'padding: 0; color: #000; font-weight: normal; font-family: monospace; position: relative; right: 0.25em; line-height: 0.75em;',

'.wikEdCharEntityButton':

'border: 1px solid; border-color: #e8e8e8 #444 #444 #e8e8e8; background: #d8d4d0; border-color: rgba(255, 255, 255, 0.75) rgba(64, 64, 64, 0.5) rgba(64, 64, 64, 0.5) rgba(255, 255, 255, 0.75); background: rgba(192, 192, 192, 0.3);',

'.wikEdCharEntityButtonShow':

'border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0; border-color: rgba(64, 64, 64, 0.5) rgba(255, 255, 255, 0.75) rgba(255, 255, 255, 0.75) rgba(64, 64, 64, 0.5); background: rgba(192, 192, 192, 0.3);',

'.wikEdCharEntity, .wikEdCharEntityShow':

'color: #000; background: #e8e8e8;',

// tables

'.wikEdFrameBodySyntax .wikEdTableContainer': 'display: block; position: fixed; left: -10000em;',

'.wikEdTableContainer': 'position: relative;',

'.wikEdTableContainer button':

'padding: 0.1em; position: relative; vertical-align: top;',

'.wikEdTableButton': 'border: 1px solid; border-color: #e8e8e8 #444 #444 #e8e8e8; background: #d8d4d0;',

'.wikEdTableButtonShow':

'border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0;',

'.wikEdTable, .wikEdTableShow': '',

'.wikEdTableButton:before, .wikEdTableButtonShow:before':

'line-height: 0.75em; font-size: 65%; color: #000; font-family: sans-serif;',

// links in references and templates

'.wikEdFrameBodySyntax .wikEdRef .wikEdURLName, .wikEdFrameBodySyntax .wikEdTempl .wikEdURLName, .wikEdFrameBodySyntax .wikEdRef .wikEdURLTarget, .wikEdFrameBodySyntax .wikEdTempl .wikEdURLTarget, .wikEdFrameBodySyntax .wikEdRef .wikEdURLText, .wikEdFrameBodySyntax .wikEdTempl .wikEdURLText': 'color: #66f; font-weight: normal;',

'.wikEdFrameBodySyntax .wikEdRef .wikEdLinkName, .wikEdFrameBodySyntax .wikEdTempl .wikEdLinkName, .wikEdFrameBodySyntax .wikEdRef .wikEdLinkTarget, .wikEdFrameBodySyntax .wikEdTempl .wikEdLinkTarget, .wikEdFrameBodySyntax .wikEdRef .wikEdLinkText, .wikEdFrameBodySyntax .wikEdTempl .wikEdLinkText': 'color: #66f; font-weight: normal;',

// wikEdFrameBodyNewbie ref and template hiding

'.wikEdFrameBodyNewbie .wikEdRefContainer + .wikEdRef, .wikEdFrameBodyNewbie .wikEdTemplContainer + .wikEdTempl, .wikEdFrameBodyNewbie .wikEdTemplContainer + .wikEdTemplNs':

'position: fixed; left: -10000em;',

'.wikEdFrameBodyNewbie .wikEdRefContainer + .wikEdRefShow, .wikEdFrameBodyNewbie .wikEdTemplContainer + .wikEdTemplShow, .wikEdFrameBodyNewbie .wikEdTemplContainer + .wikEdTemplNsShow':

'display: block; position: relative; color: #000; background: #f8f8f8; font-weight: normal; border: 1px solid; border-color: #444 #ccc #ccc #444; padding: 0.5em 0.25em;',

'.wikEdFrameBodyNewbie .wikEdRefButton:before, .wikEdFrameBodyNewbie .wikEdTemplButton:before, .wikEdFrameBodyNewbie .wikEdTableButton:before, .wikEdFrameBodyNewbie .wikEdRefButtonShow:before, .wikEdFrameBodyNewbie .wikEdTemplButtonShow:before, .wikEdFrameBodyNewbie .wikEdTableButtonShow:before':

'line-height: 0.75em; font-size: 65%; color: #000; font-family: sans-serif;',

'.wikEdRefButton:before, .wikEdTemplButton:before, .wikEdRefButtonShow:before, .wikEdTemplButtonShow:before':

'line-height: 0.75em; font-size: 65%; color: #000; font-family: sans-serif;',

'.wikEdFrameBodyNewbie .wikEdRefButton:before, .wikEdFrameBodyNewbie .wikEdRefButtonShow:before':

'content: "{wikEdText:hideRef}"',

'.wikEdFrameBodyNewbie .wikEdTemplButton:before, .wikEdFrameBodyNewbie .wikEdTemplButtonShow:before':

'content: "{wikEdText:hideTempl}";',

// wikEdFrameBodyNewbie char entity hiding

'.wikEdFrameBodyNewbie .wikEdCharEntity':

'position: fixed; left: -10000em;',

'.wikEdFrameBodyNewbie .wikEdCharEntityShow':

'display: inline; position: relative; color: #000; background: #f8f8f8; border: 1px solid; font-weight: normal; background: rgba(192, 192, 192, 0.3); border: 1px inset;',

'.wikEdCharEntityButton:before, .wikEdCharEntityButtonShow:before':

'',

// wikEdFrameBodyNewbie table hiding

'.wikEdFrameBodyNewbie .wikEdTableContainer + .wikEdTable':

'position: fixed; left: -10000em;',

'.wikEdFrameBodyNewbie .wikEdTableContainer + .wikEdTableShow':

'display: inline-block; position: relative; color: #000; font-weight: normal; background: rgba(255, 255, 255, 0.2); border: 1px inset;',

'.wikEdFrameBodyNewbie .wikEdTableButton:before, .wikEdFrameBodyNewbie .wikEdTableButtonShow:before':

'content: "{wikEdText:hideTable}";',

// insert wikicode here

'.wikEdInsertHere': 'background: orange; font-style: italic;',

// colors

'.wikEdColorsLight': 'color: black;',

'.wikEdColorsDark': 'color: white;',

// dashes

'.wikEdFigureDash': 'background-image: url({wikEdImage:figureDash}); background-position: top right; background-repeat: no-repeat;',

'.wikEdEmDash': 'background-image: url({wikEdImage:emDash}); background-position: top left; background-repeat: no-repeat;',

'.wikEdEnDash': 'background-image: url({wikEdImage:enDash}); background-position: top left; background-repeat: no-repeat;',

'.wikEdBarDash': 'background-image: url({wikEdImage:barDash}); background-position: top left; background-repeat: no-repeat;',

'.wikEdMinusDash': 'background-image: url({wikEdImage:minusDash}); background-position: top left; background-repeat: no-repeat;',

'.wikEdSoftHyphen': 'background-image: url({wikEdImage:softHyphen}); background-position: top left; background-repeat: no-repeat;',

'.wikEdSoftHyphen:before': 'content: \'\xa0\'',

'.wikEdHyphenDash': '',

// dashes, invisibles, control chars, and strange spaces

'.wikEdTab': 'white-space: pre; background-image: url({wikEdImage:tab}); background-position: bottom right; background-repeat: no-repeat;',

'.wikEdTabPlain': 'white-space: pre;',

'.wikEdCtrl': 'white-space: pre; background-image: url({wikEdImage:ctrl}); background-position: center center; background-repeat: no-repeat; margin: 0 1px;',

'.wikEdCtrl:before': 'content: \'\xa0\'',

'.wikEdEmSpace': 'background-image: url({wikEdImage:emSpace}); background-position: bottom left; background-repeat: no-repeat; margin: 0 1px; padding: 0 3px;',

'.wikEdEnSpace': 'background-image: url({wikEdImage:enSpace}); background-position: bottom left; background-repeat: no-repeat; margin: 0 1px; padding: 0 3px;',

'.wikEdThinSpace': 'background-image: url({wikEdImage:thinSpace}); background-position: bottom left; background-repeat: no-repeat; margin: 0 1px; padding: 0 3px;',

'.wikEdIdeographicSpace': 'background-image: url({wikEdImage:ideographicSpace}); background-position: bottom left; background-repeat: no-repeat; margin: 0 1px; padding: 0 3px;'

});

};

// main window css rules

if (wikEd.config.mainCSS === undefined) { wikEd.config.mainCSS = {}; }

// wikEd.InitMainCSS: define built-in main window css

wikEd.InitMainCSS = function () {

wikEd.InitObject(wikEd.config.mainCSS, {

// logo

'.wikEdLogoList': 'list-style-type: none;',

'.wikEdLogo': 'margin-left: 0.5em;',

'.wikEdLogoFallBack': 'margin: 0.25em 0 0.25em 0.5em; float: right;'

});

};

// main window css rules for edit pages only

if (wikEd.config.mainEditCSS === undefined) { wikEd.config.mainEditCSS = {}; }

// wikEd.InitMainEditCSS: define built-in main window css for edit pages only

wikEd.InitMainEditCSS = function () {

wikEd.InitObject(wikEd.config.mainEditCSS, {

// combo input box

'.wikEdCombo': '',

// wikEd button areas

// button bar margins

'.wikEdButtonBarFormat': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarTextify': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarCustom1': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarFind': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarFix': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarCustom2': 'margin: 0 8px 3px 1px; float: left;',

'.wikEdButtonBarControl': 'margin: 0 1px 3px 0; float: right;',

'.wikEdButtonBarPreview': 'margin: 0.4em 0.75em 0 0; float: right;',

'.wikEdButtonBarPreviewFull': 'margin: -0.2em 0 0 0.6em; float: right;',

'.wikEdButtonBarPreview2': 'margin: 0.2em 0 0.4em 0; float: right;',

'.wikEdButtonBarJump': 'margin: 0 0 0 0.6em; float: right;',

'.wikEdButtonBarPasted': 'position: absolute;',

// button bar inner wrapper: border

'.wikEdButtonBarInnerWrapperVisible': '',

'.wikEdButtonBarInnerWrapperHidden': '',

// button bar grip wrapper

'.wikEdButtonBarGripWrapperVisible': 'float: left; border: 1px solid; border-color: #e4e0dc #c4c0bc #c4c0bc #e4e0dc;',

'.wikEdButtonBarGripWrapperHidden': 'float: left; border: 1px solid; border-color: #e4e0dc #c4c0bc #c4c0bc #e4e0dc;',

// button bar buttons wrapper

'.wikEdButtonBarButtonsWrapperVisible, .wikEdButtonBarButtonsWrapperHidden': 'float: left; background: #d4d0cc; border: 1px solid; border-color: #e4e0dc #c4c0bc #c4c0bc #e4e0dc; background: #d4d0cc; z-index: 4;',

// button bar grip

'.wikEdButtonBarGrip': 'background: #d4d0cc; cursor: pointer; background-repeat: no-repeat; background-position: center;',

'.wikEdButtonBarGripWrapperVisible .wikEdButtonBarGrip': 'background-image: url({wikEdImage:grip});',

'.wikEdButtonBarGripWrapperHidden .wikEdButtonBarGrip': 'background-image: url({wikEdImage:gripHidden});',

// button bar buttons

'.wikEdButtonsFormat': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsTextify': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsCustom1': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsFind': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsFix': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsCustom2': 'padding: 2px 2px 0 0px;',

'.wikEdButtonsControl': 'padding: 2px 2px 0 1px;',

'.wikEdButtonsPasted': 'padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; background: rgba(212, 208, 204, 0.6);',

'.wikEdButtonsPasted:hover': 'background-color: #e4e0dc;',

'.wikEdButtonsPasted img': 'border-color: rgba(0, 0, 0, 0) !important; background-color: rgba(0, 0, 0, 0);',

'.wikEdButtonsPasted img:hover': 'background-color: #e4e0dc;',

'.wikEdButtonsPreview': 'padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; background: #d4d0cc;',

'.wikEdButtonsPreviewFull': 'padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; background: #d4d0cc;',

'.wikEdButtonsPreview2': 'padding: 2px; border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; background: #d4d0cc;',

'.wikEdButtonsJump': 'border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; background: #d4d0cc;',

// wikEd buttons (!important for devmo skin)

'.wikEdButton': 'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: #d4d0cc; border: 1px #d4d0cc solid !important; cursor: pointer;',

'.wikEdButton:hover': 'background: #e4e0dc; border: 1px outset !important; cursor: pointer;',

'.wikEdButton:active': 'background: #e4e0dc; border: 1px inset !important; cursor: pointer;',

'.wikEdButtonSolo': 'display: block; font-size: small; text-decoration: underline; padding: 0.2em; background: #d4d0cc; border: 1px #d4d0cc solid !important; cursor: pointer;',

'.wikEdButtonSolo:hover': 'background: #e4e0dc; border: 1px outset !important; cursor: pointer;',

'.wikEdButtonChecked': 'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ccc8c3; border: 1px solid !important; border-color: black white white black !important; cursor: pointer;',

'.wikEdButtonUnchecked': 'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ddd8d3; border: 1px solid !important; border-color: white black black white !important; cursor: pointer;',

'.wikEdButtonPressed': 'vertical-align: text-top; font-size: small; text-decoration: none; margin: 1px 2px; padding: 0; background: #ccc8c3; border: 1px solid !important; border-color: black white white black !important; cursor: wait;',

'.wikEdButtonInactive': 'vertical-align: text-top; font-size: small; text-decoration: underline; margin: 1px 2px; padding: 0; background: rgba(160, 160, 160, 0.5) !important; border: 1px #b0b0b0 solid !important; cursor: not-allowed',

'.wikEdLocalPreview': 'vertical-align: top; margin: 0 0.33em 0 0.15em; padding: 0;',

'.wikEdLocalDiff': 'vertical-align: top; margin: 0 0.33em 0 0.15em; padding: 0;',

'input#wpDiff, input#wpPreview': 'margin-right: 0;', // monobook fix

'.wikEdButtonDummy': 'vertical-align: text-top; margin: 1px 2px; padding: 1px; background: #d4d0cc;',

// preview box

'.wikEdPreviewArticle': 'margin: 0.75em 0 0.2em; padding: 0.5em; border: 1px solid #c0c0c0; background: #faf8f6;',

'.wikEdPreviewDiff': 'margin: 0.75em 0 0.5em;',

'.wikEdPreviewRefs': 'margin-top: 1.5em; padding-top: 1em; border-top: 1px solid #a0a0a0;',

'.wikEdPreviewDiffError': 'padding: 0.5em; font-weight: bold; color: red; text-align: center;',

// find and replace fields

'.wikEdFindComboInput, .wikEdReplaceComboInput': 'position: relative; margin: 0 5px; top: -1px; white-space: nowrap; vertical-align: bottom; padding: 0; line-height: 20px; font-size: 13px;',

'#wikEdFindText, #wikEdReplaceText': 'padding: 0; font-family: monospace; margin: 0; position: absolute; left: 0; top: 0; z-index: 2; vertical-align: bottom; width: 170px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 18px;',

'#wikEdFindSelect, #wikEdReplaceSelect': 'font-family: monospace; margin: 0; position: relative; left: 0; top: 0; z-index: 1; vertical-align: bottom; width: 190px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 18px;',

// summary field

'.wikEdSummaryComboInput': 'position: relative; margin: 0 0 0 2px; top: 0; white-space: nowrap; padding: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; font-size: 13px;',

'.wikEdSummaryText': 'padding: 0 2px !important; margin: 0; position: absolute; left: 0; top: 0; z-index: 2; vertical-align: bottom; width: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 21px;',

'.wikEdSummarySelect': 'padding: 0; margin: 0; position: relative; left: 0; top: 0; z-index: 1; vertical-align: text-top; width: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 21px;',

// space around submit buttons

'.editButtons': '',

// frame (frame container border will be removed if textarea has none; frame must not have a border)

'.wikEdFrameOuter': 'float: left; width: auto; border: 1px solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080; position: relative;',

'.wikEdFrameInner': 'float: left; width: auto; background: white; border: 1px solid; border-color: #404040 #ffffff #ffffff #404040; line-height: 0; position: relative;',

'.wikEdFrame': 'float: left; width: 100%; border: 0;',

// summary

'.wikEdSummaryWrapper': 'margin: 0.4em 0.75em 0; line-height: 26px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;',

'.wikEdConsoleTopWrapper': 'clear: both; background: #f0f0f0; border: 1px solid #c0c0c0; position: relative; padding: 0 0 0.6em; margin: 0 0 0.5em;',

'#wpSummaryLabel': 'margin: 0;',

'.editOptions': 'padding: 0; border: none; margin: 0 0.75em; float: left',

'.wikEdClearSummaryForm': 'display: inline;',

'.wikEdClearSummary': 'vertical-align: middle; margin: 0 0 0 0.5em; padding: 1px; height: 19px; width: 18px; ',

'#wikEdClearSummaryImg': 'vertical-align: 10%; ',

// input wrapper

'.wikEdInputWrapper': 'position: relative; z-index: 100; margin-top: 0.5em; clear: both;',

'.wikEdFullscreen .wikEdInputWrapper ': 'position: fixed; margin-top: 0; top: 0; left: 0; right: 0; background: #f0f0f0;',

'body.wikEdFullscreen': 'overflow: hidden;',

'.wikEdFullscreen .portlet ': 'z-index: 0 !important;', // for monobook

// other wrappers

'.wikEdEditorWrapper': '',

'.wikEdToolbarWrapper': '',

'.wikEdButtonBarWrapper': 'line-height: 14px; float: left; width: 100%; padding: 0.2em 0;',

'.wikEdCaptchaWrapper': '',

'.wikEdDebugWrapper': 'position: relative; margin: 0 0 0.5em;',

'.wikEdDebugTextarea': 'width: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;',

'.wikEdEditWrapper': 'clear: both;',

'.wikEdEditWrapperFull': 'float: left; clear: both; width: 100%;',

'.wikEdTextareaWrapper': '',

'.wikEdFrameWrapper': '',

'.wikEdConsoleWrapper': 'clear: both; background: #f0f0f0; border: 1px solid #c0c0c0; border-top: none; padding: 0 0 0.4em; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; width: 100%;',

'.wikEdButtonsWrapper': '',

'.wikEdButtonsWrapperFull': 'float: left; clear: both; width: 100%;',

'.wikEdSummaryInputWrapper': 'display: inline; white-space: nowrap;',

'.wikEdSubmitWrapper': '',

'.wikEdSubmitButtonsWrapper': 'float: left; margin: 0.4em 0.75em 0;',

'.wikEdEditOptionsWrapper': 'float: left; margin: 0.4em 0.75em 0;',

'.wikEdEditHelp': 'white-space: nowrap;',

'.wikEdInsertWrapper': 'float: left; clear: both; margin-top: 0.25em;',

'.wikEdFullscreen .wikEdInsertWrapper p': 'display: inline; margin: 0;',

'.wikEdLocalPrevWrapper': 'float: left; width: 100%;',

// various

'.editCheckboxes': 'margin-bottom: 0;',

'.wikEdEditOptions': 'display: inline-block; white-space: nowrap; vertical-align: text-top;',

'.wikEdEditOptions label': 'vertical-align: text-bottom;',

'#editpage-copywarn': '',

'#editpage-specialchars': '',

'#wikEdClonedWarnings': '',

'#wikEdClonedWarningsNote': 'background: #fff; color: #888; font-size: 75%; display: inline;',

'.editButtons input:first-child': 'margin-left: 0; margin-right: 0.33em;',

'fieldset#templatesandbox-editform': 'margin: 0 0 0.5em 0; float: left;',

'#templatesandbox-editform legend': 'padding-top: 0;',

});

};

// buttons

if (wikEd.config.button === undefined) { wikEd.config.button = {}; }

// wikEd.InitButton: define built-in buttons

wikEd.InitButton = function () {

wikEd.InitObject(wikEd.config.button, {

// button number: [id, class, tooltip, image url, width, height, alt text, onclick handler code were obj is the button element]

// format top

1: ['wikEdUndo', 'wikEdButtonInactive', wikEd.config.text['wikEdUndo title'], wikEd.config.image['undo'], '16', '16', wikEd.config.text['wikEdUndo alt'], 'wikEd.EditButton(obj, obj.id);' ],

2: ['wikEdRedo', 'wikEdButtonInactive', wikEd.config.text['wikEdRedo title'], wikEd.config.image['redo'], '16', '16', wikEd.config.text['wikEdRedo alt'], 'wikEd.EditButton(obj, obj.id);' ],

3: ['wikEdBold', 'wikEdButton', wikEd.config.text['wikEdBold title'], wikEd.config.image['bold'], '16', '16', wikEd.config.text['wikEdBold alt'], 'wikEd.EditButton(obj, obj.id);' ],

4: ['wikEdItalic', 'wikEdButton', wikEd.config.text['wikEdItalic title'], wikEd.config.image['italic'], '16', '16', wikEd.config.text['wikEdItalic alt'], 'wikEd.EditButton(obj, obj.id);' ],

5: ['wikEdUnderline', 'wikEdButton', wikEd.config.text['wikEdUnderline title'], wikEd.config.image['underline'], '16', '16', wikEd.config.text['wikEdUnderline alt'], 'wikEd.EditButton(obj, obj.id);' ],

6: ['wikEdStrikethrough', 'wikEdButton', wikEd.config.text['wikEdStrikethrough title'], wikEd.config.image['strikethrough'], '16', '16', wikEd.config.text['wikEdStrikethrough alt'], 'wikEd.EditButton(obj, obj.id);' ],

7: ['wikEdNowiki', 'wikEdButton', wikEd.config.text['wikEdNowiki title'], wikEd.config.image['nowiki'], '16', '16', wikEd.config.text['wikEdNowiki alt'], 'wikEd.EditButton(obj, obj.id);' ],

8: ['wikEdSuperscript', 'wikEdButton', wikEd.config.text['wikEdSuperscript title'], wikEd.config.image['superscript'], '16', '16', wikEd.config.text['wikEdSuperscript alt'], 'wikEd.EditButton(obj, obj.id);' ],

9: ['wikEdSubscript', 'wikEdButton', wikEd.config.text['wikEdSubscript title'], wikEd.config.image['subscript'], '16', '16', wikEd.config.text['wikEdSubscript alt'], 'wikEd.EditButton(obj, obj.id);' ],

10: ['wikEdRef', 'wikEdButton', wikEd.config.text['wikEdRef title'], wikEd.config.image['ref'], '16', '16', wikEd.config.text['wikEdRef alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, \'wikEdRef\'); } else { wikEd.EditButton(obj, \'wikEdRefNamed\'); }' ],

12: ['wikEdCase', 'wikEdButton', wikEd.config.text['wikEdCase title'], wikEd.config.image['case'], '16', '16', wikEd.config.text['wikEdCase alt'], 'wikEd.EditButton(obj, obj.id);' ],

80: ['wikEdSort', 'wikEdButton', wikEd.config.text['wikEdSort title'], wikEd.config.image['sort'], '16', '16', wikEd.config.text['wikEdSort alt'], 'wikEd.EditButton(obj, obj.id);' ],

25: ['wikEdRedirect', 'wikEdButton', wikEd.config.text['wikEdRedirect title'], wikEd.config.image['redirect'], '16', '16', wikEd.config.text['wikEdRedirect alt'], 'wikEd.EditButton(obj, obj.id);' ],

13: ['wikEdUndoAll', 'wikEdButton', wikEd.config.text['wikEdUndoAll title'], wikEd.config.image['undoAll'], '16', '16', wikEd.config.text['wikEdUndoAll alt'], 'wikEd.EditButton(obj, obj.id);' ],

14: ['wikEdRedoAll', 'wikEdButtonInactive', wikEd.config.text['wikEdRedoAll title'], wikEd.config.image['redoAll'], '16', '16', wikEd.config.text['wikEdRedoAll alt'], 'wikEd.EditButton(obj, obj.id);' ],

// format bottom

15: ['wikEdWikiLink', 'wikEdButton', wikEd.config.text['wikEdWikiLink title'], wikEd.config.image['wikiLink'], '16', '16', wikEd.config.text['wikEdWikiLink alt'], 'wikEd.EditButton(obj, obj.id);' ],

16: ['wikEdWebLink', 'wikEdButton', wikEd.config.text['wikEdWebLink title'], wikEd.config.image['webLink'], '16', '16', wikEd.config.text['wikEdWebLink alt'], 'wikEd.EditButton(obj, obj.id);' ],

17: ['wikEdHeading', 'wikEdButton', wikEd.config.text['wikEdHeading title'], wikEd.config.image['heading'], '16', '16', wikEd.config.text['wikEdHeading alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, \'wikEdIncreaseHeading\'); } else { wikEd.EditButton(obj, \'wikEdDecreaseHeading\'); }' ],

19: ['wikEdBulletList', 'wikEdButton', wikEd.config.text['wikEdBulletList title'], wikEd.config.image['bulletList'], '16', '16', wikEd.config.text['wikEdBulletList alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, \'wikEdIncreaseBulletList\'); } else { wikEd.EditButton(obj, \'wikEdDecreaseBulletList\'); }' ],

20: ['wikEdNumberList', 'wikEdButton', wikEd.config.text['wikEdNumberList title'], wikEd.config.image['numberList'], '16', '16', wikEd.config.text['wikEdNumberList alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, \'wikEdIncreaseNumberList\'); } else { wikEd.EditButton(obj, \'wikEdDecreaseNumberList\'); }' ],

21: ['wikEdIndentList', 'wikEdButton', wikEd.config.text['wikEdIndentList title'], wikEd.config.image['indentList'], '16', '16', wikEd.config.text['wikEdIndentList alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, \'wikEdIncreaseIndentList\'); } else { wikEd.EditButton(obj, \'wikEdDecreaseIndentList\'); }' ],

22: ['wikEdDefinitionList', 'wikEdButton', wikEd.config.text['wikEdDefinitionList title'], wikEd.config.image['definitionList'], '16', '16', wikEd.config.text['wikEdDefinitionList alt'], 'wikEd.EditButton(obj, obj.id);' ],

23: ['wikEdImage', 'wikEdButton', wikEd.config.text['wikEdImage title'], wikEd.config.image['image'], '16', '16', wikEd.config.text['wikEdImage alt'], 'wikEd.EditButton(obj, obj.id);' ],

24: ['wikEdTable', 'wikEdButton', wikEd.config.text['wikEdTable title'], wikEd.config.image['table'], '16', '16', wikEd.config.text['wikEdTable alt'], 'wikEd.EditButton(obj, obj.id);' ],

11: ['wikEdReferences', 'wikEdButton', wikEd.config.text['wikEdReferences title'], wikEd.config.image['references'], '16', '16', wikEd.config.text['wikEdReferences alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, obj.id); } else { wikEd.EditButton(obj, \'wikEdReferencesSection\'); }' ],

84: ['wikEdSign', 'wikEdButton', wikEd.config.text['wikEdSign title'], wikEd.config.image['sign'], '16', '16', wikEd.config.text['wikEdSign alt'], 'if (!event.shiftKey) { wikEd.EditButton(obj, obj.id); } else { wikEd.EditButton(obj, \'wikEdSignName\'); }' ],

// wikify, textify

26: ['wikEdWikify', 'wikEdButton', wikEd.config.text['wikEdWikify title'], wikEd.config.image['wikify'], '16', '16', wikEd.config.text['wikEdWikify alt'], 'wikEd.EditButton(obj, obj.id);' ],

27: ['wikEdTextify', 'wikEdButton', wikEd.config.text['wikEdTextify title'], wikEd.config.image['textify'], '16', '16', wikEd.config.text['wikEdTextify alt'], 'if (event.shiftKey) { wikEd.EditButton(obj, obj.id, \'shift\'); } else { wikEd.EditButton(obj, obj.id); }' ],

// control top

77: ['wikEdRefHide', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRefHide title'], wikEd.config.image['refHide'], '16', '16', wikEd.config.text['wikEdRefHide alt'], 'wikEd.Button(obj, obj.id, true);' ],

29: ['wikEdTextZoom', 'wikEdButton', wikEd.config.text['wikEdTextZoom title'], wikEd.config.image['textZoom'], '16', '16', wikEd.config.text['wikEdTextZoom alt'], 'if (!event.shiftKey) { wikEd.Button(obj, \'wikEdTextZoomDown\'); } else { wikEd.Button(obj, \'wikEdTextZoomUp\'); }' ],

30: ['wikEdClearHistory', 'wikEdButton', wikEd.config.text['wikEdClearHistory title'], wikEd.config.image['clearHistory'], '16', '16', wikEd.config.text['wikEdClearHistory alt'], 'wikEd.Button(obj, obj.id);' ],

31: ['wikEdScrollToPreview', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview title'], wikEd.config.image['scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview alt'], 'wikEd.Button(obj, obj.id);' ],

32: ['wikEdScrollToEdit', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit title'], wikEd.config.image['scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit alt'], 'wikEd.Button(obj, obj.id);' ],

// control bottom

33: ['wikEdUseWikEd', 'wikEdButtonChecked', wikEd.config.text['wikEdUseWikEd title'], wikEd.config.image['useWikEd'], '16', '16', wikEd.config.text['wikEdUseWikEd alt'], 'if (!event.ctrlKey) { wikEd.Button(obj, obj.id, true); } else { wikEd.DebugInfo(event); }' ],

34: ['wikEdHighlightSyntax', 'wikEdButtonUnchecked', wikEd.config.text['wikEdHighlightSyntax title'], wikEd.config.image['highlightSyntax'], '16', '16', wikEd.config.text['wikEdHighlightSyntax alt'], 'wikEd.Button(obj, obj.id, true);' ],

35: ['wikEdSource', 'wikEdButton', wikEd.config.text['wikEdSource title'], wikEd.config.image['source'], '16', '16', wikEd.config.text['wikEdSource alt'], 'wikEd.EditButton(obj, obj.id);' ],

75: ['wikEdCloseToolbar', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCloseToolbar title'], wikEd.config.image['closeToolbar'], '16', '16', wikEd.config.text['wikEdCloseToolbar alt'], 'wikEd.Button(obj, obj.id, true);' ],

36: ['wikEdUsing', 'wikEdButtonUnchecked', wikEd.config.text['wikEdUsing title'], wikEd.config.image['using'], '16', '16', wikEd.config.text['wikEdUsing alt'], 'wikEd.Button(obj, obj.id, true);' ],

37: ['wikEdFullScreen', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFullScreen title'], wikEd.config.image['fullScreen'], '16', '16', wikEd.config.text['wikEdFullScreen alt'], 'wikEd.Button(obj, obj.id, true);' ],

79: ['wikEdTableMode', 'wikEdButtonUnchecked', wikEd.config.text['wikEdTableMode title'], wikEd.config.image['tableMode'], '16', '16', wikEd.config.text['wikEdTableMode alt'], 'wikEd.Button(obj, obj.id, true);' ],

// find top

39: ['wikEdFindAll', 'wikEdButton', wikEd.config.text['wikEdFindAll title'], wikEd.config.image['findAll'], '16', '16', wikEd.config.text['wikEdFindAll alt'], 'wikEd.EditButton(obj, obj.id);' ],

40: ['wikEdFindPrev', 'wikEdButton', wikEd.config.text['wikEdFindPrev title'], wikEd.config.image['findPrev'], '16', '16', wikEd.config.text['wikEdFindPrev alt'], 'wikEd.EditButton(obj, obj.id);' ],

41: ['wikEdFindNext', 'wikEdButton', wikEd.config.text['wikEdFindNext title'], wikEd.config.image['findNext'], '16', '16', wikEd.config.text['wikEdFindNext alt'], 'if (event.shiftKey) { wikEd.EditButton(obj, obj.id, \'shift\'); } else { wikEd.EditButton(obj, obj.id); }' ],

43: ['wikEdJumpPrev', 'wikEdButton', wikEd.config.text['wikEdJumpPrev title'], wikEd.config.image['jumpPrev'], '16', '16', wikEd.config.text['wikEdJumpPrev alt'], 'wikEd.EditButton(obj, obj.id);' ],

44: ['wikEdJumpNext', 'wikEdButton', wikEd.config.text['wikEdJumpNext title'], wikEd.config.image['jumpNext'], '16', '16', wikEd.config.text['wikEdJumpNext alt'], 'wikEd.EditButton(obj, obj.id);' ],

// find bottom

46: ['wikEdReplaceAll', 'wikEdButton', wikEd.config.text['wikEdReplaceAll title'], wikEd.config.image['replaceAll'], '16', '16', wikEd.config.text['wikEdReplaceAll alt'], 'wikEd.EditButton(obj, obj.id);' ],

47: ['wikEdReplacePrev', 'wikEdButton', wikEd.config.text['wikEdReplacePrev title'], wikEd.config.image['replacePrev'], '16', '16', wikEd.config.text['wikEdReplacePrev alt'], 'wikEd.EditButton(obj, obj.id);' ],

48: ['wikEdReplaceNext', 'wikEdButton', wikEd.config.text['wikEdReplaceNext title'], wikEd.config.image['replaceNext'], '16', '16', wikEd.config.text['wikEdReplaceNext alt'], 'if (event.shiftKey) { wikEd.EditButton(obj, obj.id, \'shift\'); } else { wikEd.EditButton(obj, obj.id); }' ],

49: ['wikEdCaseSensitive', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCaseSensitive title'], wikEd.config.image['caseSensitive'], '16', '16', wikEd.config.text['wikEdCaseSensitive alt'], 'wikEd.Button(obj, obj.id, true);' ],

50: ['wikEdRegExp', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRegExp title'], wikEd.config.image['regExp'], '16', '16', wikEd.config.text['wikEdRegExp alt'], 'wikEd.Button(obj, obj.id, true);' ],

51: ['wikEdFindAhead', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFindAhead title'], wikEd.config.image['findAhead'], '16', '16', wikEd.config.text['wikEdFindAhead alt'], 'wikEd.Button(obj, obj.id, true);' ],

// fix top

52: ['wikEdFixBasic', 'wikEdButton', wikEd.config.text['wikEdFixBasic title'], wikEd.config.image['fixBasic'], '16', '16', wikEd.config.text['wikEdFixBasic alt'], 'wikEd.EditButton(obj, obj.id);' ],

53: ['wikEdFixHtml', 'wikEdButton', wikEd.config.text['wikEdFixHtml title'], wikEd.config.image['fixHtml'], '16', '16', wikEd.config.text['wikEdFixHtml alt'], 'wikEd.EditButton(obj, obj.id);' ],

54: ['wikEdFixCaps', 'wikEdButton', wikEd.config.text['wikEdFixCaps title'], wikEd.config.image['fixCaps'], '16', '16', wikEd.config.text['wikEdFixCaps alt'], 'wikEd.EditButton(obj, obj.id);' ],

55: ['wikEdFixUnicode', 'wikEdButton', wikEd.config.text['wikEdFixUnicode title'], wikEd.config.image['fixUnicode'], '16', '16', wikEd.config.text['wikEdFixUnicode alt'], 'wikEd.EditButton(obj, obj.id);' ],

81: ['wikEdFixRedirect', 'wikEdButton', wikEd.config.text['wikEdFixRedirect title'], wikEd.config.image['fixRedirect'], '16', '16', wikEd.config.text['wikEdFixRedirect alt'], 'wikEd.EditButton(obj, obj.id);' ],

56: ['wikEdFixAll', 'wikEdButton', wikEd.config.text['wikEdFixAll title'], wikEd.config.image['fixAll'], '16', '16', wikEd.config.text['wikEdFixAll alt'], 'wikEd.EditButton(obj, obj.id);' ],

57: ['wikEdFixRegExTypo', 'wikEdButton', wikEd.config.text['wikEdFixRegExTypo title'], wikEd.config.image['fixRegExTypo'], '16', '16', wikEd.config.text['wikEdFixRegExTypo alt'], 'wikEd.EditButton(obj, obj.id);' ],

// fix bottom

58: ['wikEdFixDashes', 'wikEdButton', wikEd.config.text['wikEdFixDashes title'], wikEd.config.image['fixDash'], '16', '16', wikEd.config.text['wikEdFixDashes alt'], 'wikEd.EditButton(obj, obj.id);' ],

59: ['wikEdFixPunct', 'wikEdButton', wikEd.config.text['wikEdFixPunct title'], wikEd.config.image['fixPunct'], '16', '16', wikEd.config.text['wikEdFixPunct alt'], 'wikEd.EditButton(obj, obj.id);' ],

60: ['wikEdFixMath', 'wikEdButton', wikEd.config.text['wikEdFixMath title'], wikEd.config.image['fixMath'], '16', '16', wikEd.config.text['wikEdFixMath alt'], 'wikEd.EditButton(obj, obj.id);' ],

61: ['wikEdFixChem', 'wikEdButton', wikEd.config.text['wikEdFixChem title'], wikEd.config.image['fixChem'], '16', '16', wikEd.config.text['wikEdFixChem alt'], 'wikEd.EditButton(obj, obj.id);' ],

62: ['wikEdFixUnits', 'wikEdButton', wikEd.config.text['wikEdFixUnits title'], wikEd.config.image['fixUnits'], '16', '16', wikEd.config.text['wikEdFixUnits alt'], 'wikEd.EditButton(obj, obj.id);' ],

// preview top

65: ['wikEdClose', 'wikEdButton', wikEd.config.text['wikEdClose title'], wikEd.config.image['close'], '16', '16', wikEd.config.text['wikEdClose alt'], 'wikEd.Button(obj, obj.id);' ],

66: ['wikEdScrollToPreview2', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview2 title'], wikEd.config.image['scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview2 alt'], 'wikEd.Button(obj, obj.id);' ],

67: ['wikEdScrollToEdit2', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit2 title'], wikEd.config.image['scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit2 alt'], 'wikEd.Button(obj, obj.id);' ],

// preview bottom

70: ['wikEdClose2', 'wikEdButton', wikEd.config.text['wikEdClose2 title'], wikEd.config.image['close'], '16', '16', wikEd.config.text['wikEdClose2 alt'], 'wikEd.Button(obj, obj.id);' ],

71: ['wikEdScrollToPreview3', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview3 title'], wikEd.config.image['scrollToPreview'], '16', '16', wikEd.config.text['wikEdScrollToPreview3 alt'], 'wikEd.Button(obj, obj.id);' ],

72: ['wikEdScrollToEdit3', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit3 title'], wikEd.config.image['scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit3 alt'], 'wikEd.Button(obj, obj.id);' ],

// jump

74: ['wikEdScrollToEdit4', 'wikEdButtonSolo', wikEd.config.text['wikEdScrollToEdit4 title'], wikEd.config.image['scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit4 alt'], 'wikEd.Button(obj, obj.id);' ],

// dummy (empty placeholder)

76: ['wikEdDummy', 'wikEdButtonDummy', , wikEd.config.image['dummy'], '16', '16', , '' ],

// wikEd.InitButton: define built-in buttons (id, class, popup title, image src, width, height, alt text, click handler code were obj is the button element)

82: ['wikEdLocalPreview', 'wikEdLocalPreview', wikEd.config.text['wikEdLocalPreview title'], wikEd.config.image['preview'], '16', '16', wikEd.config.text['wikEdLocalPreviewImg alt'], 'wikEd.Button(obj, obj.id);' ],

83: ['wikEdLocalDiff', 'wikEdLocalDiff', wikEd.config.text['wikEdLocalDiff title'], wikEd.config.image['diff'], '16', '16', wikEd.config.text['wikEdLocalDiffImg alt'], 'wikEd.Button(obj, obj.id);' ],

// pasted

85: ['wikEdPastedTextify', 'wikEdButtonInactive', wikEd.config.text['wikEdPastedTextify title'], wikEd.config.image['textify'], '16', '16', wikEd.config.text['wikEdPastedTextify alt'], 'wikEd.EditButton(obj, obj.id);' ],

86: ['wikEdPastedWikify', 'wikEdButtonInactive', wikEd.config.text['wikEdPastedWikify title'], wikEd.config.image['wikify'], '16', '16', wikEd.config.text['wikEdPastedWikify alt'], 'wikEd.EditButton(obj, obj.id);' ],

87: ['wikEdPastedClose', 'wikEdButton', wikEd.config.text['wikEdPastedClose title'], wikEd.config.image['closePasted'], '16', '16', wikEd.config.text['wikEdPastedClose alt'], 'wikEd.PastedClose();' ]

});

};

// button access keys

if (wikEd.config.buttonKey === undefined) { wikEd.config.buttonKey = {}; }

// wikEd.InitButtonKey: define accesskeys for edit buttons

wikEd.InitButtonKey = function () {

wikEd.InitObject(wikEd.config.buttonKey, {

// wikEd button number: [key string, JS key code]

26: ['b', 66], // wikify

27: ['o', 79], // textify

67: ['g', 71], // scrolltoedit2

72: ['g', 71], // scrolltoedit3

74: ['g', 71], // scrolltoedit4

32: ['g', 71] // scrolltoedit, overwrites previous wikEd buttons for same key

});

};

// button bars (id, class, button numbers)

if (wikEd.config.buttonBar === undefined) { wikEd.config.buttonBar = {}; }

// wikEd.InitButtonBar: define built-in button bars

wikEd.InitButtonBar = function () {

wikEd.InitObject(wikEd.config.buttonBar, {

// button name: [id outer, class outer, id inner, class inner, height, grip title, button numbers, bar title

'format': ['wikEdButtonBarFormat', 'wikEdButtonBarFormat', 'wikEdButtonsFormat', 'wikEdButtonsFormat', 44, wikEd.config.text['wikEdGripFormat title'], [1,2,3,4,5,6,7,8,9,10,12,13,14,'br',15,16,17,19,20,21,22,23,24,11,80,25,84], wikEd.config.text['wikEdBarFormat title'] ],

'textify': ['wikEdButtonBarTextify', 'wikEdButtonBarTextify', 'wikEdButtonsTextify', 'wikEdButtonsTextify', 44, wikEd.config.text['wikEdGripTextify title'], [26,'br',27], wikEd.config.text['wikEdBarTextify title'] ],

'custom1': ['wikEdButtonBarCustom1', 'wikEdButtonBarCustom1', 'wikEdButtonsCustom1', 'wikEdButtonsCustom1', 44, wikEd.config.text['wikEdGripCustom1 title'], [ ], wikEd.config.text['wikEdBarCustom1 title'] ],

'find': ['wikEdButtonBarFind', 'wikEdButtonBarFind', 'wikEdButtonsFind', 'wikEdButtonsFind', 44, wikEd.config.text['wikEdGripFind title'], [39,40,'find',41,76,43,44,'br',46,47,'replace',48,49,50,51], wikEd.config.text['wikEdBarFind title'] ],

'fix': ['wikEdButtonBarFix', 'wikEdButtonBarFix', 'wikEdButtonsFix', 'wikEdButtonsFix', 44, wikEd.config.text['wikEdGripFix title'], [52,53,54,55,56,81,'br',58,59,60,61,62,57], wikEd.config.text['wikEdBarFix title'] ],

'custom2': ['wikEdButtonBarCustom2', 'wikEdButtonBarCustom2', 'wikEdButtonsCustom2', 'wikEdButtonsCustom2', 44, wikEd.config.text['wikEdGripCustom2 title'], [ ], wikEd.config.text['wikEdBarCustom2 title'] ],

'control': ['wikEdButtonBarControl', 'wikEdButtonBarControl', 'wikEdButtonsControl', 'wikEdButtonsControl', 44, wikEd.config.text['wikEdGripControl title'], [77,29,30,35,31,32,'br',33,34,79,75,36,37], wikEd.config.text['wikEdBarControl title'] ],

'preview': ['wikEdButtonBarPreview', 'wikEdButtonBarPreview', 'wikEdButtonsPreview', 'wikEdButtonsPreview', 0, null, [66,67,65], wikEd.config.text['wikEdBarPreview title'] ],

'preview2': ['wikEdButtonBarPreview2', 'wikEdButtonBarPreview2', 'wikEdButtonsPreview2', 'wikEdButtonsPreview2', 0, null, [71,72,70], wikEd.config.text['wikEdBarPreview2 title'] ],

'jump': ['wikEdButtonBarJump', 'wikEdButtonBarJump', 'wikEdButtonsJump', 'wikEdButtonsJump', 0, null, [74], wikEd.config.text['wikEdBarJump title'] ],

'pasted': ['wikEdButtonBarPasted', 'wikEdButtonBarPasted', 'wikEdButtonsPasted', 'wikEdButtonsPasted', 0, null, [85,86,87], wikEd.config.text['wikEdBarPasted title'] ]

});

};

// history length for find, replace, and summary fields

if (wikEd.config.historyLength === undefined) { wikEd.config.historyLength = {}; }

wikEd.InitHistoryLength = function () {

wikEd.InitObject(wikEd.config.historyLength, {

'find': 10,

'replace': 10,

'summary': 10

});

};

// presets for combo input fields dropdown options, {wikEdUsing} appends a link to this script

if (wikEd.config.comboPresetOptions === undefined) { wikEd.config.comboPresetOptions = {}; }

if (wikEd.config.comboPresetOptions.summary === undefined) { wikEd.config.comboPresetOptions.summary = wikEd.config.text.wikEdPresetSummary; }

// text for summary link to this script

if (wikEd.config.summaryUsing === undefined) { wikEd.config.summaryUsing = wikEd.config.text.wikEdSummaryUsing; }

// expiration time span for permanent cookies in seconds, also defined in wikEdDiff.js

if (wikEd.config.cookieExpireSec === undefined) { wikEd.config.cookieExpireSec = 1 * 30 * 24 * 60 * 60; }

// disable wikEd preset

if (wikEd.config.disabledPreset === undefined) { wikEd.config.disabledPreset = false; }

// find ahead as you type checkbox preset

if (wikEd.config.findAheadSelected === undefined) { wikEd.config.findAheadSelected = true; }

// highlight syntax preset

if (wikEd.config.highlightSyntaxPreset === undefined) { wikEd.config.highlightSyntaxPreset = true; }

// enable wikEd preset

if (wikEd.config.useWikEdPreset === undefined) { wikEd.config.useWikEdPreset = true; }

// add '...using wikEd' to summary preset

if (wikEd.config.usingPreset === undefined) { wikEd.config.usingPreset = false; }

// scroll to edit field on non-preview pages

if (wikEd.config.scrollToEdit === undefined) { wikEd.config.scrollToEdit = true; }

// focus the edit field on non-preview pages

if (wikEd.config.focusEdit === undefined) { wikEd.config.focusEdit = true; }

// fullscreen mode preset

if (wikEd.config.fullScreenModePreset === undefined) { wikEd.config.fullScreenModePreset = false; }

// show MediaWiki toolbar preset

if (wikEd.config.closeToolbarPreset === undefined) { wikEd.config.closeToolbarPreset = false; }

// hide ref tags preset

if (wikEd.config.refHidePreset === undefined) { wikEd.config.refHidePreset = false; }

// text size adjustment for edit window (percentage)

if (wikEd.config.textSizeAdjust === undefined) { wikEd.config.textSizeAdjust = 100; }

// remove invisible syntax highlighting comments after closing tag

if (wikEd.config.removeHighlightComments === undefined) { wikEd.config.removeHighlightComments = true; }

// show the text-to-source button for testing purposes

if (wikEd.config.showSourceButton === undefined) { wikEd.config.showSourceButton = false; }

// show the using-wikEd button

if (wikEd.config.showUsingButton === undefined) { wikEd.config.showUsingButton = false; }

// the wikEd help page link to be displayed after the editing help link, an empty string disables the link

if (wikEd.config.helpPageLink === undefined) { wikEd.config.helpPageLink = wikEd.config.text.wikEdHelpPageLink; }

// enable external diff script

if (wikEd.config.loadDiffScript === undefined) { wikEd.config.loadDiffScript = true; }

// enable external wikEdDiff script

if (wikEd.config.loadDiff === undefined) { wikEd.config.loadDiff = true; }

// RegExTypoFix rules page, the address must have the exact same domain name as the used wiki

if (wikEd.config.regExTypoFixURL === undefined) { wikEd.config.regExTypoFixURL = wikEd.config.homeBaseUrl + 'w/index.php?title=Wikipedia:AutoWikiBrowser/Typos&action=raw'; }

// enable RegExTypoFix button (https://en.wikipedia.org/wiki/User:Mboverload/RegExTypoFix)

if (wikEd.config.regExTypoFix === undefined) { wikEd.config.regExTypoFix = false; }

// enable highlighting as links

if (wikEd.config.followHighlightedLinks === undefined) { wikEd.config.followHighlightedLinks = false; }

// skip the browser detection to run wikEd under IE and Opera

if (wikEd.config.skipBrowserTest === undefined) { wikEd.config.skipBrowserTest = false; }

// skip the script test that disables wikEd if certain scripts are present

if (wikEd.config.skipScriptTest === undefined) { wikEd.config.skipScriptTest = false; }

// skip the add-on test that disables wikEd if certain add-ons are present

if (wikEd.config.skipAddonTest === undefined) { wikEd.config.skipAddonTest = false; }

// skip the read-only detection

if (wikEd.config.skipReadOnlyTest === undefined) { wikEd.config.skipReadOnlyTest = false; }

// disable wikEd if incompatible scripts are active

if (wikEd.config.incompatibleScripts === undefined) { wikEd.config.incompatibleScripts = {}; }

// wikEd.InitIncompatibleScripts: disable wikEd if incompatible scripts are active

// 'name in error message': 'regexp', case insensitive for script file name from URL w/o .js, use '\\' for '\'

wikEd.InitIncompatibleScripts = function () {

wikEd.InitObject(wikEd.config.incompatibleScripts, {

'CKEditor': '\\bckeditor',

'FCKEditor': 'fckeditor',

'less edit clutter': 'less.?edit.?clutter', // User:Magnus_Manske/less_edit_clutter.js

'MagnusEditBox': 'MagnusEditBox' // less_edit_clutter gadget on fr

});

};

// disable beta toolbar CodeEditor button

if (wikEd.config.disableCodeEditorButton === undefined) { wikEd.config.disableCodeEditorButton = true; }

// set the button bar grip width in px

if (wikEd.config.buttonBarGripWidth === undefined) { wikEd.config.buttonBarGripWidth = 7; }

// enable server preview (Ajax)

if (wikEd.config.useAjaxPreview === undefined) { wikEd.config.useAjaxPreview = true; }

// enable auto update (Ajax)

if (wikEd.config.autoUpdate === undefined) { wikEd.config.autoUpdate = true; }

// hours between update check (monobook.js)

if (wikEd.config.autoUpdateHours === undefined) { wikEd.config.autoUpdateHours = 20; }

// hours between update check (Greasemonkey)

if (wikEd.config.autoUpdateHoursGM === undefined) { wikEd.config.autoUpdateHoursGM = 40; }

// auto update: version url (Ajax)

if (wikEd.config.autoUpdateUrl === undefined) { wikEd.config.autoUpdateUrl = wikEd.config.homeBaseUrl + 'w/index.php?title=User:Cacycle/wikEd_current_version&action=raw&maxage=0'; }

// auto update: script url for Greasemonkey update

if (wikEd.config.autoUpdateScriptUrl === undefined) { wikEd.config.autoUpdateScriptUrl = wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/wikEd.user.js'; }

// auto update: script url for Greasemonkey bugfix (fix script duplication after @namespace change in version 0.9.127)

if (wikEd.config.autoUpdateScriptUrlBugfix === undefined) { wikEd.config.autoUpdateScriptUrlBugfix = wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Cacycle/bugfix_wikEd.user.js'; }

// make links ctrl-clickable

if (wikEd.config.linkify === undefined) { wikEd.config.linkify = true; }

// absolute instead of relative linkify links, URL with "$1" as article name placeholder

if (wikEd.config.linkifyArticlePath === undefined) { wikEd.config.linkifyArticlePath = null; }

// hide refs and templates in newbie mode

if (wikEd.config.hideContent === undefined) { wikEd.config.hideContent = true; }

// unhide refs and templates in newbie mode by hover-shift instead of mouseover

if (wikEd.config.unhideShift === undefined) { wikEd.config.unhideShift = false; }

// wikify table parameters, replaces original table parameters with this string

if (wikEd.config.wikifyTableParameters === undefined) { wikEd.config.wikifyTableParameters = ''; }

// do not rearrange page elements

if (wikEd.config.noRearrange === undefined) { wikEd.config.noRearrange = false; }

// use French rules for fix punctuation

if (wikEd.config.fixPunctFrench === undefined) { wikEd.config.fixPunctFrench = false; }

// convert \xa (nbsp) to character entities so they do not get converted to blanks

if (wikEd.config.convertNbspToEntities === undefined) { wikEd.config.convertNbspToEntities = true; }

// wikEd.config.setupHook, executed after wikEd has been set up, usage: wikEd.config.setupHook.push(YourFunction);

if (wikEd.config.setupHook === undefined) { wikEd.config.setupHook = []; }

// wikEd.config.onHook, executed after wikEd has been re-enabled by logo click, usage: wikEd.config.onHook.push(YourFunction);

if (wikEd.config.onHook === undefined) { wikEd.config.onHook = []; }

// wikEd.config.offHook, executed after wikEd has been disabled by logo click, usage: wikEd.config.offHook.push(YourFunction);

if (wikEd.config.offHook === undefined) { wikEd.config.offHook = []; }

// wikEd.config.textareaHook, executed after classic textarea has been enabled by user, usage: wikEd.config.textareaHook.push(YourFunction);

if (wikEd.config.textareaHook === undefined) { wikEd.config.textareaHook = []; }

// wikEd.config.frameHook, executed after wikEd edit frame has been enabled by user, usage: wikEd.config.frameHook.push(YourFunction);

if (wikEd.config.frameHook === undefined) { wikEd.config.frameHook = []; }

// wikEd.config.previewHook, executed after the local preview has been added to the page, usage: wikEd.config.previewHook.push(YourFunction);

if (wikEd.config.previewHook === undefined) { wikEd.config.previewHook = []; }

// wikEd.config.diffHook, executed after the local changes diff has been added to the page, usage: wikEd.config.diffHook.push(YourFunction);

if (wikEd.config.dHook === undefined) { wikEd.config.diffHook = []; }

// custom edit form id instead of 'editform'

if (wikEd.config.customEditFormId === undefined) { wikEd.config.customEditFormId = ''; }

// custom textarea id instead of 'wpTextbox1'

if (wikEd.config.customTextAreaId === undefined) { wikEd.config.customTextAreaId = ''; }

// custom save button id instead of 'wpSave'

if (wikEd.config.customSaveButtonId === undefined) { wikEd.config.customSaveButtonId = ''; }

// display tables as editable html tables (table mode)

if (wikEd.config.tableMode === undefined) { wikEd.config.tableMode = true; }

// show table mode toggle button

if (wikEd.config.showTableModeButton === undefined) { wikEd.config.showTableModeButton = false; }

// maximal time for syntax highlighting in ms

if (wikEd.config.maxHighlightTime === undefined) { wikEd.config.maxHighlightTime = 3000; }

// first char of article names is case sensitive (e.g. Wiktionary)

if (wikEd.config.articlesCaseSensitive === undefined) { wikEd.config.articlesCaseSensitive = false; }

// force immediate update if this version string is newer

if (wikEd.config.forcedUpdate === undefined) { wikEd.config.forcedUpdate = ''; }

// display highlighting error messages in text

if (wikEd.config.highlightError === undefined) { wikEd.config.highlightError = false; }

// display preview of files in text

if (wikEd.config.filePreview === undefined) { wikEd.config.filePreview = true; }

// file preview image size in pixels

if (wikEd.config.filePreviewSize === undefined) { wikEd.config.filePreviewSize = 75; }

// move cursor/caret outside syntax highlighted element

if (wikEd.config.antiHighlightBleeding === undefined) { wikEd.config.antiHighlightBleeding = false; }

// debug window maximal length in chars

if (wikEd.config.debugMaxLength === undefined) { wikEd.config.debugMaxLength = 500000; }

// debug display of DOM nodes: maximal length of innerHTML in chars

if (wikEd.config.debugInnerHtmlLength === undefined) { wikEd.config.debugInnerHtmlLength = 150; }

// WikiMedia Commons (or other external file repository) script url for redlink detection

if (wikEd.config.externalApiUrl === undefined) { wikEd.config.externalApiUrl = '//commons.wikimedia.org/w/api.php'; }

// origin domains allowed to call externalScriptURL API for redlink detection via Ajax cross-origin request (CORS) (comma separated list)

if (wikEd.config.externalApiDomains === undefined) { wikEd.config.externalApiDomains = 'wikipedia.org,wiktionary.org,wikibooks.org,wikinews.org,wikiquote.org,wikisource.org,wikiversity.org,wikivoyage.org,wikidata.org,mediawiki.org,wikimedia.org,wikimediafoundation.org'; }

// wikibase data repository url default

if (wikEd.config.wbRepoUrl === undefined) { wikEd.config.wbRepoUrl = '//www.wikidata.org'; }

// wikibase data repository article path default

if (wikEd.config.wbRepoArticlePath === undefined) { wikEd.config.wbRepoArticlePath = '/wiki/$1'; }

// interlanguage name of default wiki on wikibase data repository default

if (wikEd.config.wbGlobalSiteId === undefined) { wikEd.config.wbGlobalSiteId = 'enwiki'; }

// copy textarea background color to wikEd edit frame

if (wikEd.config.frameBackgroundColor === undefined) { wikEd.config.frameBackgroundColor = false; }

// convert all   character entities to actual characters for textarea editing and saving (not recommended)

if (wikEd.config.nbspToChar === undefined) { wikEd.config.nbspToChar = false; }

return;

};

// user configurable variables needed during start up

// init config

if (wikEd.config === undefined) { wikEd.config = {}; }

// wikEd code home base URL, also defined in wikEdDiff.js

if (wikEd.config.homeBaseUrl === undefined) { wikEd.config.homeBaseUrl = '//en.wikipedia.org/'; }

// diff library URL, also defined in wikEdDiff.js

if (wikEd.config.diffScriptSrc === undefined) { wikEd.config.diffScriptSrc = wikEd.config.homeBaseUrl + 'w/index.php?title=User:Cacycle/diff.js&action=raw&ctype=text/javascript'; }

// wikEdDiff script URL, also defined in wikEdDiff.js

if (wikEd.config.diffSrc === undefined) { wikEd.config.diffSrc = wikEd.config.homeBaseUrl + 'w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript'; }

// wikEd-as-gadget detection, set to true if gadget script name is not MediaWiki:Gadget-wikEd.js

if (wikEd.config.gadget === undefined) { wikEd.config.gadget = null; }

// duplicate edit warnings from the top of the page to above the edit window

if (wikEd.config.doCloneWarnings === undefined) { wikEd.config.doCloneWarnings = true; }

// startup debugging

if (wikEd.config.debugStartUp === undefined) { wikEd.config.debugStartUp = ''; }

// show missing translations

if (wikEd.config.showMissingTranslations === undefined) { wikEd.config.showMissingTranslations = false; }

// content language default, also used for wikEd UI localization

if (wikEd.config.languageDefault === undefined) { wikEd.config.languageDefault = ''; }

// load external translation

if (wikEd.config.loadTranslation === undefined) { wikEd.config.loadTranslation = true; }

// translation javascript URLs

if (wikEd.config.translations === undefined) { wikEd.config.translations = {}; }

// wikEd.InitTranslations: define translation javascript URLs ('': internal default)

wikEd.InitTranslations = function () {

wikEd.InitObject(wikEd.config.translations, {

'en': '',

'af': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Arnobarnard/wikEd_international_af.js', // Afrikaans

'ar': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:ترجمان05/wikEd_international_ar.js', // Arabic

'bn': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:আফতাবুজ্জামান/wikEd_international_bn.js', // Bengali

'zh-hans': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:CAS222222221/wikEd_international_zh.js', // Chinese (simplified)

'zh-hant': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Liflon/wikEd_international_zh-hant.js', // Chinese (traditional)

'hr': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:SpeedyGonsales/wikEd_international_hr.js', // Croatian

'cs': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Sevela.p/wikEd_international_cs.js', // Czech

'nl': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Jeronevw/wikEd_international_nl.js', // Dutch

'eo': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Tlustulimu/wikEd_international_eo.js', // Esperanto

'fi': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Ejs-80/wikEd_international_fi.js', // Finnish

'fr': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Leag/wikEd-fr.js', // French

'gl': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Toliño/wikEd_international_gl.js', // Galician

'de': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:PerfektesChaos/wikEd_international_de.js', // German

'he': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:שמוליק/wikEd_international_he.js', // Hebrew

'hu': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Tsch81/wikEd-hu.js', // Hungarian

'it': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Jalo/wikEd_international_it.js', // Italian

'ja': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Hatukanezumi/wikEd_international_ja.js', // Japanese

'kk': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Arystanbek/wikEd_international_kk.js', // Kazakh

'ko': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Ilovesabbath/wikEd_international_ko.js', // Korean

'dsb': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Michalwiki/wikEd_international_dsb.js', // Lower Sorbian

'ms': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Aviator/wikEd_international_ms.js', // Malay

'min': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Iwan_Novirion/wikEd_international_min.js', // Minangkabau

'nn': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Frokor/wikEd_international_nn.js', // New Norwegian

'no': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Dvyjones/wikEd_international_no.js', // Norwegian

'fa': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Reza1615/wikEd_international_fa.js', // Persian (Farsi)

'pl': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Konradek/wikEd_international_pl.js', // Polish

'pt': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:He7d3r/Tools/wikEd_international_pt.js', // Portuguese

'ro': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Roamataa/wikEd_international_ro.js', // Romanian

'ru': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:IGW/wikEd_international_ru.js', // Russian

'scn': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Meloscn/wikEd_international_scn.js', // Sicilian

'sk': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Helix84/wikEd_international_sk.js', // Slovak

'sl': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Eleassar/wikEd_international_sl.js', // Slovenian

'es': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Doblecaña/wikEd_international_es.js', // Spanish

'sv': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Where_next_Columbus?/wikEd_international_sv.js', // Swedish

'tr': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Vito_Genovese/wikEd_international_tr.js', // Turkish

'hsb': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Michalwiki/wikEd_international_hsb.js', // Upper Sorbian

'ur': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Obaid_Raza/wikEd_international_ur.js', // Urdu

'vi': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Vinhtantran/wikEd_international_vi.js' // Vietnamese

});

};

// Mediawiki page and skin detection, logo placement

if (wikEd.config.mediaWikiSkinIds === undefined) { wikEd.config.mediaWikiSkinIds = {}; }

// wikEd.InitMediaWikiSkinIds: define Mediawiki page and skin detection, logo placement

// format: skin name: [ dom element to add logo to ('': top right), logo to this list or list contained in this parent element, rearrange page elements, [skin detection element id list], enable local preview / diff ],

wikEd.InitMediaWikiSkinIds = function () {

wikEd.InitObject(wikEd.config.mediaWikiSkinIds, {

// monobook, also detects simple and myskin

monobook: [ 'p-personal', true, true, ['column-content', 'content', 'bodyContent', 'siteSub', 'contentSub', 'column-one', 'p-cactions'] ],

// vector (see https://bugzilla.wikimedia.org/show_bug.cgi?id=19527)

vector_old: [ 'p-personal', true, true, ['content', 'bodyContent', 'contentSub', 'left-navigation', 'p-namespaces', 'p-cactions'] ],

vector_new: [ 'p-personal', true, true, ['content', 'bodyContent', 'contentSub', 'left-navigation', 'p-associated-pages', 'p-cactions'] ],

// citizendium.org

pinkwich5: [ 'p-personal', true, true, ['column-content', 'content', 'bodycontent', 'sitesub', 'contentSub', 'column-one', 'p-cactions'] ],

// other MediaWiki skins

standard: [ 'quickbar', false, true, ['content', 'topbar', 'article', 'footer', 'pagestats'] ],

nostalgia: [ 'topbar', false, true, ['content', 'specialpages', 'article', 'footer'] ],

cologneblue: [ 'quickbar', false, true, ['content', 'topbar', 'sitetitle', 'sitesub', 'article', 'footer'] ],

modern: [ 'p-personal', true, true, ['mw_header', 'mw_main', 'mw_contentwrapper'] ],

// wikia.com

monaco: [ 'userData', false, false, ['background_strip', 'siteSub', 'contentSub', 'monaco_footer'] ],

quartz: [ 'welcome', false, true, ['articleWrapper', 'bodyContent', 'siteSub', 'contentSub', 'sidebar'] ],

searchwikia: [ 'header-li-buttons', false, true, ['header', 'header-container', 'header-go-button', 'article-container', 'article', 'article-text'] ],

oasis: [ 'AccountNavigation', false, false, ['WikiaHeader', 'WikiaPage'], false ],

// custom skins developed on wiki.mozilla.org and developer.mozilla.org

cavendish: [ '', false, true, ['internal', 'container', 'header', 'contentTop', 'mBody', 'side', 'nav', 'siteSub', 'contentSub'] ],

devmo: [ 'personal', false, true, ['developer-mozilla-org', 'container', 'header', 'navigation', 'bar', 'page', 'sidebar', 'sidebarslideup', 'contentTop', 'siteSub', 'contentSub'] ],

// custom skins

gumaxdd: [ 'gumax-p-login', true, true, ['gumax-header', 'gumax-content-body'] ],

pixeled: [ 'topright', true, true, ['contentwrapper', 'catnav', 'morefoot'] ],

// custom MediaWiki identifier

mediawiki: [ '', false, false, ['mediawiki'] ]

});

};

//

// end of user configurable variables

//

//

// wikEd.InitGlobals: initialize non-configurable variables

//

wikEd.InitGlobals = function () {

// global variables

wikEd.turnedOn = false;

wikEd.disabled = true;

wikEd.debugOpen = false;

wikEd.pageNamespace = null;

wikEd.frameLoaded = false;

// edit page types

wikEd.editArticle = false;

wikEd.editUpload = false;

wikEd.editReadOnly = false;

wikEd.editSemanticForm = false;

wikEd.viewDeleted = false;

wikEd.editWatchlist = false;

wikEd.cssPage = false;

wikEd.jsPage = false;

wikEd.editSection = null;

// beta toolbar, CodeEditor, CodeMirror

wikEd.useBetaToolbar = false;

wikEd.useCodeEditor = false;

wikEd.codeEditorButtonPollCount = 0;

wikEd.useCodeMirror = false;

// history

wikEd.fieldHist = [];

wikEd.savedName = [];

wikEd.inputElement = [];

wikEd.selectElement = [];

wikEd.checkMarker = [];

wikEd.checkMarker[true] = '♦';

wikEd.checkMarker[false] = '◊';

// undo all, redo all

wikEd.origVersion = '';

wikEd.lastVersion = null;

// global dom elements

wikEd.logo = null;

wikEd.logoList = null;

wikEd.debug = null;

wikEd.wikiEditor = null;

wikEd.wikiEditorFrame = null;

wikEd.wikiEditorTop = null;

wikEd.wikiEditorLeft = null;

wikEd.wikiEditorBar = null;

wikEd.wikiEditorBottom = null;

wikEd.wikiEditorText = null;

wikEd.textareaContainer = null;

wikEd.toolbar = null;

wikEd.frameInner = null;

wikEd.frameOuter = null;

wikEd.frame = null;

wikEd.frameDocument = null;

wikEd.frameBody = null;

wikEd.frameHtml = null;

wikEd.frameWindow = null;

wikEd.inputWrapper = null;

wikEd.editorWrapper = null;

wikEd.toolbarWrapper = null;

wikEd.buttonBarWrapper = null;

wikEd.captchaWrapper = null;

wikEd.debugWrapper = null;

wikEd.editWrapper = null;

wikEd.textareaWrapper = null;

wikEd.frameWrapper = null;

wikEd.consoleWrapper = null;

wikEd.buttonsWrapper = null;

wikEd.summaryWrapper = null;

wikEd.consoleTopWrapper = null;

wikEd.summaryInputWrapper = null;

wikEd.editOptionsWrapper = null;

wikEd.submitWrapper = null;

wikEd.submitButtonsWrapper = null;

wikEd.localPrevWrapper = null;

wikEd.wikiPreview = null;

wikEd.catLinks = null;

wikEd.insertWrapper = null;

wikEd.textBoxTable = null;

// edit form fields

wikEd.editForm = null;

wikEd.starttime = null;

wikEd.edittime = null;

wikEd.editToken = null;

wikEd.autoSummary = null;

wikEd.textarea = null;

wikEd.buttonsWrapperWidth = {};

wikEd.buttonBarFormat = null;

wikEd.buttonBarTextify = null;

wikEd.buttonBarCustom1 = null;

wikEd.buttonBarFind = null;

wikEd.buttonBarFix = null;

wikEd.buttonBarCustom2 = null;

wikEd.buttonBarControl = null;

wikEd.buttonBarPreview = null;

wikEd.buttonBarPreview2 = null;

wikEd.buttonBarJump = null;

wikEd.buttonBarPasted = null;

wikEd.previewArticle = null;

wikEd.previewDiff = null;

wikEd.clearSummary = null;

wikEd.clearSummaryImg = null;

wikEd.caseSensitive = null;

wikEd.regExp = null;

wikEd.findAhead = null;

wikEd.fixRegExTypo = null;

wikEd.findText = null;

wikEd.replaceText = null;

wikEd.summaryText = null;

wikEd.summarySelect = null;

wikEd.summaryTextWidth = null;

wikEd.editHelp = null;

wikEd.saveButton = null;

wikEd.previewButton = null;

wikEd.lDiffButton = null;

wikEd.diffPreviewButton = null;

wikEd.summaryLabel = null;

wikEd.highlightNamedHideButtonsStylesheet = null;

// frame resizing

wikEd.resizeGripWidth = 16;

wikEd.resizeGripHeight = 16;

wikEd.resizeFramePageYStart = 0;

wikEd.resizeFramePageXStart = 0;

wikEd.resizeFrameOffsetHeight = 0;

wikEd.resizeFrameOffsetWidth = 0;

wikEd.resizeFrameMouseOverGrip = false;

wikEd.resizeFrameActive = false;

wikEd.frameHeight = '';

wikEd.frameWidth = '';

wikEd.textareaHeight = '';

wikEd.textareaWidth = '';

// various

wikEd.insertCounter = 0;

wikEd.editButtonHandler = {};

wikEd.textareaBorderHeight = 0;

wikEd.frameBorderHeight = 0;

wikEd.frameBorderWidth = 0;

wikEd.textareaOffsetHeightInitial = 0;

wikEd.clearSummaryWidth = null;

// fullscreen button state and actual fullscreen state

wikEd.fullScreenMode = false;

wikEd.fullscreen = false;

wikEd.addNewSection = null;

wikEd.browserNotSupported = false;

wikEd.frameScrollTop = null;

wikEd.textareaUpdated = true;

wikEd.previewIsAjax = null;

wikEd.buttonKeyCode = [];

wikEd.direction = null;

wikEd.textSize = 0;

wikEd.textSizeInit = 0;

wikEd.previewPage = false;

wikEd.clonedWarnings = false;

wikEd.syntaxHighlightTagCSS = [];

wikEd.loader = false;

wikEd.wikibase = {};

wikEd.keepSelRange = null;

// override site javascript functions

wikEd.InsertTagsOriginal = null;

wikEd.insertAtCursorOriginal = null;

// wikEd settings

wikEd.refHide = false;

wikEd.using = false;

wikEd.closeToolbar = false;

wikEd.highlightSyntax = false;

wikEd.noSpellcheck = false;

wikEd.diff = false;

wikEd.tableMode = false;

wikEd.cleanNodes = false;

wikEd.readOnly = false;

// unicode fixing and char highlighting

wikEd.supportedChars = null;

wikEd.reservedChars = null;

wikEd.specialChars = null;

wikEd.problemChars = null;

wikEd.charEntitiesByName = {};

wikEd.controlCharHighlighting = null;

wikEd.controlCharHighlightingStr = '';

wikEd.charHighlighting = null;

wikEd.charHighlightingStr = '';

wikEd.letters = '';

// linkification and hiding

wikEd.wikiLinks = {};

wikEd.referenceArray = [];

wikEd.templateArray = [];

wikEd.charEntityArray = [];

wikEd.tableArray = [];

wikEd.scheduledUnhide = null;

// RegExtypoFix rules

wikEd.typoRulesFind = [];

wikEd.typoRulesReplace = [];

// store link infos (normalizations, redirects, redlinks)

wikEd.linkInfo = {};

wikEd.externalLinkInfo = {};

// article preview: named reference definitions

wikEd.namedRefs = {};

// file preview

wikEd.filePreviewCache = {};

wikEd.filePreviewRequest = '';

wikEd.filePreviewNo = 0;

wikEd.filePreviewIds = [];

// debugging time measurement, usage: wikEd.debugTimer.push([1234, new Date]); wikEd.DebugTimer();

wikEd.debugTimer = [];

// syntax highlighting

wikEd.parseObj = {};

// MediaWiki file paths for use in regexps

wikEd.server = '';

wikEd.articlePath = '';

wikEd.script = '';

wikEd.scriptPath = '';

wikEd.scriptName = '';

wikEd.scriptURL = '';

wikEd.useExternalApi = false;

// pasting object

wikEd.paste = null;

// magic words and parser functions, see https://www.mediawiki.org/wiki/Help:Magic_words

// __MAGICWORDS__

wikEd.magicWords = 'NOTOC|FORCETOC|TOC|NOEDITSECTION|NEWSECTIONLINK|NOGALLERY|HIDDENCAT|NOCONTENTCONVERT|NOCC|NOTITLECONVERT|NOTC|END|START|NOINDEX|INDEX|STATICREDIRECT';

// template, parser function, and parser variable modifiers {{modifier:...}}

// see https://meta.wikimedia.org/wiki/Help:Magic_words#Template_modifiers

wikEd.templModifier = 'int|msg|msgnw|raw|subst';

// parser variables {{variable}}

wikEd.parserVariables = 'CURRENTYEAR|CURRENTMONTH|CURRENTMONTHNAME|CURRENTMONTHNAMEGEN|CURRENTMONTHABBREV|CURRENTDAY|CURRENTDAY2|CURRENTDOW|CURRENTDAYNAME|CURRENTTIME|CURRENTHOUR|CURRENTWEEK|CURRENTTIMESTAMP|LOCALYEAR|LOCALMONTH|LOCALMONTHNAME|LOCALMONTHNAMEGEN|LOCALMONTHABBREV|LOCALDAY|LOCALDAY2|LOCALDOW|LOCALDAYNAME|LOCALTIME|LOCALHOUR|LOCALWEEK|LOCALTIMESTAMP|SITENAME|CURRENTVERSION|CONTENTLANGUAGE|REVISIONID|REVISIONDAY|REVISIONDAY2|REVISIONMONTH|REVISIONYEAR|REVISIONTIMESTAMP|SERVER|SERVERNAME|SCRIPTPATH|FULLPAGENAME|PAGENAME|BASEPAGENAME|SUBPAGENAME|SUBJECTPAGENAME|TALKPAGENAME|FULLPAGENAMEE|PAGENAMEE|BASEPAGENAMEE|SUBPAGENAMEE|SUBJECTPAGENAMEE|TALKPAGENAMEE|NAMESPACE|SUBJECTSPACE|ARTICLESPACE|TALKSPACE|NAMESPACEE|SUBJECTSPACEE|TALKSPACEE|DIRMARK|DIRECTIONMARK|PAGENAME|PAGENAMEE|ARTICLEPATH|NOEXTERNALLANGLINKS';

// parser variables {{variable:R}}

wikEd.parserVariablesR = 'NUMBEROFPAGES|NUMBEROFARTICLES|NUMBEROFFILES|NUMBEROFEDITS|NUMBEROFUSERS|NUMBEROFADMINS|NUMBEROFVIEWS|NUMBEROFACTIVEUSERS|PROTECTIONLEVEL';

// parser functions {{FUNCTION:parameter|R}}

wikEd.parserFunctionsR = 'NUMBERINGROUP|PAGESINNS|PAGESINNAMESPACE|PAGESINCATEGORY|PAGESINCAT|PAGESIZE|DEFAULTSORT|DISPLAYTITLE';

// parser functions {{function:param|param}}

wikEd.parserFunctions = 'localurl|localurle|fullurl|filepath|fullurle|urlencode|urldecode|anchorencode|ns|lc|lcfirst|uc|ucfirst|formatnum|padleft|padright|padright|plural|grammar|gender|int|noexternallanglinks';

// parser functions {{#function:param|param}}

wikEd.parserFunctionsHash = 'language|special|tag|tag|expr|if|ifeq|ifexist|ifexpr|switch|time|timel|rel2abs|titleparts|iferror|iferror|special|tag|categorytree|formatdate|property|invoke';

// define leaf elements for wikEd.GetInnerHTML

wikEd.leafElements = {

'IMG': true,

'HR': true,

'BR': true,

'INPUT': true

};

return;

};

// variables needed during startup, might be called multiple times

// hash of loaded scripts, also defined in wikEdDiff.js

if (wikEd.externalScripts === undefined) { wikEd.externalScripts = null; }

if (wikEd.externalScriptsString === undefined) { wikEd.externalScriptsString = ''; }

if (wikEd.pageLoaded === undefined) { wikEd.pageLoaded = false; }

if (wikEd.programVersion === undefined) { wikEd.programVersion = ''; }

if (wikEd.programDate === undefined) { wikEd.programDate = ''; }

// browser and os identificationr

if (wikEd.browserName === undefined) { wikEd.browserName = ''; }

if (wikEd.browserFlavor === undefined) { wikEd.browserFlavor = ''; }

if (wikEd.browserVersion === undefined) { wikEd.browserVersion = 0; }

if (wikEd.browserVersionStr === undefined) { wikEd.browserVersionStr = ''; }

if (wikEd.msie === undefined) { wikEd.msie = false; }

if (wikEd.mozilla === undefined) { wikEd.mozilla = false; }

if (wikEd.opera === undefined) { wikEd.opera = false; }

if (wikEd.safari === undefined) { wikEd.safari = false; }

if (wikEd.webkit === undefined) { wikEd.webkit = false; }

if (wikEd.chrome === undefined) { wikEd.chrome = false; }

if (wikEd.greasemonkey === undefined) { wikEd.greasemonkey = false; }

if (wikEd.testVersion === undefined) { wikEd.testVersion = false; }

if (wikEd.platform === undefined) { wikEd.platform = null; }

if (wikEd.installationType === undefined) { wikEd.installationType = ''; }

// global variables for Greasemonkey

if (wikEd.wikiGlobals === undefined) { wikEd.wikiGlobals = {}; }

if (wikEd.text === undefined) { wikEd.text = {}; }

// skins

if (wikEd.logoContainerId === undefined) { wikEd.logoContainerId = ''; }

if (wikEd.rearrange === undefined) { wikEd.rearrange = false; }

if (wikEd.logoToList === undefined) { wikEd.logoToList = false; }

if (wikEd.enableLocalPreview === undefined) { wikEd.enableLocalPreview = false; }

if (wikEd.skin === undefined) { wikEd.skin = ''; }

// various

if (wikEd.gotGlobalsHook === undefined) { wikEd.gotGlobalsHook = []; }

if (wikEd.getGlobalsCounter === undefined) { wikEd.getGlobalsCounter = 0; }

if (wikEd.loadingTranslation === undefined) { wikEd.loadingTranslation = false; }

if (wikEd.webStorage === undefined) { wikEd.webStorage = null; }

// customization

if (wikEd.useWikEd === undefined) { wikEd.useWikEd = false; }

if (wikEd.wikEdTextAdded === undefined) { wikEd.wikEdTextAdded = false; }

if (wikEd.wikEdConfigAdded === undefined) { wikEd.wikEdConfigAdded = false; }

// global dom elements, also defined in wikEdDiff.js

if (wikEd.pageOrigin === undefined) { wikEd.pageOrigin = ''; }

if (wikEd.head === undefined) { wikEd.head = null; }

// also defined in wikEdDiff.js

if (wikEd.pageName === undefined) { wikEd.pageName = null; }

//

// wikEd.InitObject: initialize object, keep pre-defined values (code copied to wikEdDiff.js)

//

wikEd.InitObject = function (target, source, showMissing) {

if (typeof target == 'object') {

for (var key in source) {

if (typeof target[key] == 'undefined') {

target[key] = source[key];

// show missing array entries

if (showMissing === true) {

if (typeof target[key] == 'string') {

wikEd.config.debugStartUp += '\t\t\t\ + key + '\': \ + target[key].replace(/\n/g, '\\n') + '\',\n';

}

}

}

}

}

return;

};

//

// wikEd.AddToObject: add or replace properties, replace existing values (code copied to wikEdDiff.js)

//

wikEd.AddToObject = function (target, source, priority) {

if (priority === undefined) {

priority = {};

}

if (typeof target == 'object') {

for (var key in source) {

if (priority[key] !== undefined) {

target[key] = priority[key];

}

else {

target[key] = source[key];

}

}

}

return;

};

//

// wikEd.InitImage: initialize images, keep pre-defined values (code copied to wikEdDiff.js)

//

wikEd.InitImage = function (target, source) {

var server = window.location.href.replace(/^(\w+:\/\/.*?)\/.*/, '$1');

var protocol = server.replace(/^(\w+:)\/\/.*/, '$1');

for (var key in source) {

if (typeof target[key] == 'undefined') {

// remove MediaWiki path prefixes and add local path

if (wikEd.config.useLocalImages === true) {

target[key] = wikEd.config.imagePathLocal + source[key].replace(/^[0-9a-f]+\/[0-9a-f]+\/()/, '');

}

// add path

else {

target[key] = wikEd.config.imagePath + source[key];

}

// Chrome 33.0.1750.146 m bug, not displaying frame html background image without complete URL

if (/^\/\//.test(target[key]) === true) {

target[key] = protocol + target[key];

}

else if (/^\//.test(target[key]) === true) {

target[key] = server + target[key];

}

}

}

return;

};

//

// wikEd.Startup: wikEd startup code, called during page load

//

wikEd.Startup = function () {

// redirect WED shortcut to wikEd.Debug(objectName, object, popup)

window.WED = wikEd.Debug;

// extract version info from wikEd.Meta()

var meta = wikEd.Meta.toString();

var regExpMatchVersion = /@version\s+(.*?)[ \t]*\n/.exec(meta);

if ( (regExpMatchVersion !== null) && (regExpMatchVersion[1] !== null) ) {

wikEd.programVersion = regExpMatchVersion[1];

}

var regExpMatchDate = /@date\s+(.*?)[ \t]*\n/.exec(meta);

if ( (regExpMatchDate !== null) && (regExpMatchDate[1] !== null) ) {

wikEd.programDate = regExpMatchDate[1];

}

// MediaWiki pages always have their title set, filter out Greasemonkey running on created iframes

if (document.title === '') {

return;

}

// check if wikEd has already started up

if (document.getElementsByName('wikEdStartupFlag')[0] !== undefined) {

return;

}

// define current window head

wikEd.head = document.getElementsByTagName('head')[0] || null;

// set startup flag

var flag = document.createElement('meta');

flag.setAttribute('name', 'wikEdStartupFlag');

wikEd.head.appendChild(flag);

// get site of origin (window.location.href is about:blank if Firefox during page load)

var origin = wikEd.head.baseURI;

if (origin === undefined) {

origin = window.location.toString();

}

wikEd.pageOrigin = origin.replace(/^((https?|file):\/\/[^\/?#]*)?.*$/, '$1');

// check browser and version

var regExpMatchAgent = window.navigator.userAgent.match(/\b(Firefox|Netscape|SeaMonkey|IceWeasel|IceCat|Fennec|Minefield|BonEcho|GranParadiso|Shiretoko|Namoroka)\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'Mozilla';

wikEd.browserFlavor = regExpMatchAgent[1];

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

wikEd.mozilla = true;

}

// check for MSIE

else {

regExpMatchAgent = window.navigator.userAgent.match(/(MSIE)\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'MSIE';

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

wikEd.msie = true;

}

// check for Opera <= version 12 (Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14)

else {

regExpMatchAgent = window.navigator.userAgent.match(/\b(Opera)\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'Opera';

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

if (wikEd.browserVersion == 9.80) {

var versionMatch = window.navigator.userAgent.match(/(Version)\W+(\d+\.\d+)/i);

if (versionMatch !== null) {

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

}

}

wikEd.opera = true;

}

// check for Opera >= version 15 (Mozilla/5.0 (Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100)

else {

regExpMatchAgent = window.navigator.userAgent.match(/\b(OPR)\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'Opera';

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

wikEd.opera = true;

}

// check for Google Chrome (AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.30 Safari/525.13)

else {

regExpMatchAgent = window.navigator.userAgent.match(/\b(Chrome)\W+(\d+\.\d+)(\S+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'Chrome';

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

wikEd.browserVersionStr = regExpMatchAgent[ 2 ] + regExpMatchAgent[ 3 ];

wikEd.chrome = true;

}

// check for Safari

else {

regExpMatchAgent = window.navigator.userAgent.match(/\b(Safari)\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'Safari';

wikEd.browserVersion = parseFloat(regExpMatchAgent[2]);

wikEd.safari = true;

}

// check for other WebKit

else {

regExpMatchAgent = window.navigator.userAgent.match(/\b(WebKit)(GTK\+)?\W+(\d+\.\d+)/i);

if (regExpMatchAgent !== null) {

wikEd.browserName = 'WebKit';

wikEd.browserVersion = parseFloat(regExpMatchAgent[3]);

wikEd.webkit = true;

}

}

}

}

}

}

}

// check OS

var regExpMatchOS = window.navigator.platform.match(/^(win|mac|unix|linux)/i);

if (regExpMatchOS !== null) {

wikEd.platform = regExpMatchOS[1].toLowerCase();

}

// import customization (try now again after page load for user/skin.js)

if ( (wikEdConfig !== undefined) && (wikEd.wikEdConfigAdded === false) ) {

wikEd.AddToObject(wikEd.config, wikEdConfig);

wikEd.wikEdConfigAdded = true;

}

if ( (wikEdText !== undefined) && (wikEd.wikEdTextAdded === false) ) {

wikEd.AddToObject(wikEd.text, wikEdText, wikEd.config.text);

wikEd.wikEdTextAdded = true;

}

// compatibility fixes for older customizations and wikEd-compatibilizations in other scripts

window.wikEdUseWikEd = wikEd.useWikEd;

window.WikEdUpdateTextarea = wikEd.UpdateTextarea;

window.WikEdUpdateFrame = wikEd.UpdateFrame;

window.WikEdGetText = wikEd.GetText;

window.WikEdEditButton = wikEd.EditButton;

// check if this runs under Greasemonkey

if (typeof GM_info == 'object') {

wikEd.greasemonkey = true;

}

// parse global-context (MediaWiki) variables into hash (for Greasemonkey)

var globalNames = ['skin', 'wgServer', 'wgTitle', 'wgCanonicalNamespace', 'wgArticlePath', 'wgScript', 'wgScriptPath', 'wgUserName', 'wgCurRevisionId', 'wgContentLanguage', 'wgUserLanguage', 'wgPageName', 'wgNamespaceIds', 'wgFormattedNamespaces', 'wgUseAutomaticEditSummaries', 'wgVersion', 'wgPageContentModel'];

if (wikEd.greasemonkey === true) {

globalNames.push('wikEdConfig', 'wikEdText');

}

// copy custom config settings and text after values have arrived

var gotGlobalsHook = [

function() {

if ( (typeof wikEd.wikiGlobals.wikEdConfig == 'object') && (wikEd.wikEdConfigAdded === false) ) {

wikEd.AddToObject(wikEd.config, wikEd.wikiGlobals.wikEdConfig);

wikEd.wikEdConfigAdded = true;

}

if ( (typeof wikEd.wikiGlobals.wikEdText == 'object') && (wikEd.wikEdTextAdded === false) ) {

wikEd.AddToObject(wikEd.text, wikEd.wikiGlobals.wikEdText, wikEd.config.text);

wikEd.wikEdTextAdded = true;

}

return;

}

];

// and load translations when done

if ( (wikEd.config.loadTranslation === true) && (wikEd.loadingTranslation === false) ) {

gotGlobalsHook.push(wikEd.LoadTranslations);

}

// set listener for GetGlobals messaging

window.addEventListener('message', wikEd.GetGlobalsReceiver, false);

// parse globals (asynchronous)

wikEd.GetGlobals(globalNames, gotGlobalsHook);

// schedule the setup routine; readyState interactive gives GM security error

if (document.readyState == 'complete') {

wikEd.Setup();

}

// with DOMContentLoaded event wikEd does not load for first (uncached) section edit

else {

window.addEventListener('load', wikEd.Setup, false);

}

return;

};

//

// wikEd.LoadTranslations: load external wikEd translation and language settings

//

wikEd.LoadTranslations = function () {

if ( (wikEd.config.loadTranslation === true) && (wikEd.loadingTranslation === false) ) {

var contentLang = wikEd.wikiGlobals.wgContentLanguage || '';

var userLang = wikEd.wikiGlobals.wgUserLanguage || '';

if ( (wikEd.config.languageDefault !== ) || (userLang !== ) || (contentLang !== '') ) {

// simplified Chinese

if (contentLang == 'zh') {

contentLang = 'zh-hans';

}

if ( (userLang == 'zh') || (userLang == 'zh-cn') || (userLang == 'zh-sg') ) {

userLang = 'zh-hans';

}

// traditional Chinese

else if ( (userLang == 'zh-hk') || (userLang == 'zh-tw') ) {

userLang = 'zh-hant';

}

wikEd.InitTranslations();

var scriptUrl = wikEd.config.translations[wikEd.config.languageDefault] || '';

if (scriptUrl === '') {

scriptUrl = wikEd.config.translations[userLang] || '';

if (scriptUrl === '') {

scriptUrl = wikEd.config.translations[contentLang] || '';

}

}

if (scriptUrl !== '') {

wikEd.AppendScript(scriptUrl, function () {

// copy custom text after values have arrived

var gotGlobalsHook = function () {

wikEd.AddToObject(wikEd.text, wikEd.wikiGlobals.wikEdText, wikEd.config.text);

return;

};

// parse globals (asynchronous)

wikEd.GetGlobals(['wikEdText'], [gotGlobalsHook]);

wikEd.loadingTranslation = true;

});

}

}

}

return;

};

//

// wikEd.Setup: basic setup routine, scheduled after DOM or page load

//

wikEd.Setup = function () {

document.removeEventListener('DOMContentLoaded', wikEd.Setup, false);

window.removeEventListener('load', wikEd.Setup, false);

// check if wikEd has already set up

if (document.getElementsByName('wikEdSetupFlag')[0] !== undefined) {

return;

}

// set setup flag

var flag = document.createElement('meta');

flag.setAttribute('name', 'wikEdSetupFlag');

wikEd.head.appendChild(flag);

// import customization (try later again after page load for user/skin.js)

if ( (typeof wikEdConfig == 'object') && (wikEd.wikEdConfigAdded === false) ) {

wikEd.AddToObject(wikEd.config, wikEdConfig);

wikEd.wikEdConfigAdded = true;

}

if ( (typeof wikEdText == 'object') && (wikEd.wikEdTextAdded === false) ) {

wikEd.AddToObject(wikEd.text, wikEdText, wikEd.config.text);

wikEd.wikEdTextAdded = true;

}

// detect already loaded external scripts

if (wikEd.externalScripts === null) {

wikEd.externalScripts = [];

var pageScripts = document.getElementsByTagName('script');

for (var i = 0; i < pageScripts.length; i ++) {

var scriptSrc = pageScripts[i].src;

var regExpMatchName = scriptSrc.match(/\btitle=([^&]*)/);

if (regExpMatchName === null) {

regExpMatchName = scriptSrc.match(/\/([^\/]*?)($|\?)/);

}

if (regExpMatchName !== null) {

var scriptName = regExpMatchName[1] || '';

if (scriptName !== '') {

// ignore other diff.js scripts

if ( (scriptName == 'diff.js') && (scriptSrc != wikEd.config.diffScriptSrc) ) {

continue;

}

// ignore resource loader

if (scriptName == 'load.php') {

continue;

}

wikEd.externalScripts[scriptName] = pageScripts[i];

wikEd.externalScriptsString += scriptName + '\n';

}

}

}

}

// detect developer version

if (wikEd.externalScripts['wikEd_dev.js'] !== undefined) {

wikEd.testVersion = true;

}

// exit if executed as Greasemonkey script if wiki user script is available

if (typeof GM_getValue == 'function') {

if (wikEd.externalScripts['wikEd.js'] !== undefined) {

wikEd.greasemonkey = false;

return;

}

else {

wikEd.greasemonkey = true;

}

}

// detect wikEd running as a gadget

if (wikEd.config.gadget === null) {

if (wikEd.externalScripts['MediaWiki:Gadget-wikEd.js'] !== undefined) {

wikEd.config.gadget = true;

}

}

// set installation type

if (wikEd.config.gadget === true) {

wikEd.installationType += ' G';

}

else if (wikEd.greasemonkey === true) {

wikEd.installationType += ' GM';

}

// detect MediaWiki page and its skin

wikEd.InitMediaWikiSkinIds();

for (var skin in wikEd.config.mediaWikiSkinIds) {

if (Object.prototype.hasOwnProperty.call(wikEd.config.mediaWikiSkinIds, skin) === true) {

var logoContainerId = wikEd.config.mediaWikiSkinIds[skin][0];

var logoToList = wikEd.config.mediaWikiSkinIds[skin][1];

var rearrange = wikEd.config.mediaWikiSkinIds[skin][2];

var skinIds = wikEd.config.mediaWikiSkinIds[skin][3];

var enableLocalPreview = wikEd.config.mediaWikiSkinIds[skin][4];

for (var i = 0; i < skinIds.length; i ++) {

if (document.getElementById(skinIds[i]) === null) {

break;

}

}

if (i == skinIds.length) {

wikEd.logoContainerId = logoContainerId;

wikEd.skin = skin;

wikEd.rearrange = rearrange;

wikEd.logoToList = logoToList;

wikEd.enableLocalPreview = enableLocalPreview;

break;

}

}

}

// not a MediaWiki page

if (wikEd.skin === '') {

return;

}

// initialize user configurable variables

wikEd.InitGlobalConfigs();

// import custom text and translations

wikEd.AddToObject(wikEd.config.text, wikEd.text);

// do not rearrange page elements

if (wikEd.config.noRearrange !== false) {

wikEd.rearrange = false;

}

// initialize non-configurable variables

wikEd.InitGlobals();

// check for updates

wikEd.AutoUpdate();

// initialize images (needed here for logo)

wikEd.InitImages();

// load css for edit and non-edit pages

wikEd.InitMainCSS();

// add stylesheet definitions

wikEd.ApplyCSS(document, wikEd.config.mainCSS);

// add image path to image filename

if (wikEd.logo === null) {

// create logo

wikEd.logo = document.createElement('img');

wikEd.logo.id = 'wikEdLogoImg';

// insert logo into page

var logoContainer;

if (wikEd.logoContainerId !== '') {

logoContainer = document.getElementById(wikEd.logoContainerId);

}

if (logoContainer !== null) {

// logo as last element of specified list (e.g. monobook, simple, myskin, gumax)

if (wikEd.logoToList === true) {

wikEd.logoList = document.createElement('li');

wikEd.logoList.id = 'wikEdLogoList';

wikEd.logoList.className = 'wikEdLogoList';

wikEd.logoList.appendChild(wikEd.logo);

var list;

if (logoContainer.tagName == 'UL') {

list = logoContainer;

}

else {

list = logoContainer.getElementsByTagName('ul')[0];

}

if (list !== undefined) {

list.appendChild(wikEd.logoList);

wikEd.logo.className = 'wikEdLogo';

}

}

// logo as last child of specified element

else {

logoContainer.appendChild(wikEd.logo);

wikEd.logo.className = 'wikEdLogo';

}

}

// logo as first page element, fallback for undetected skin

if (wikEd.logo.className === '') {

document.body.insertBefore(wikEd.logo, document.body.firstChild);

wikEd.logo.className = 'wikEdLogoFallBack';

}

// add event listeners to logo

wikEd.logo.addEventListener('click', wikEd.MainSwitch, true);

wikEd.logo.addEventListener('click', wikEd.DebugInfo, true);

}

// page loaded flag for dynamically loaded scripts

wikEd.pageLoaded = true;

// load the external wikEd diff library script if not already done

if ( (wikEd.config.loadDiffScript === true) && (wikEd.externalScripts['diff.js'] === undefined) ) {

if (WikEdDiff === undefined) {

var sep = '&';

if (wikEd.config.diffScriptSrc.indexOf('?') == -1) {

sep = '?';

}

wikEd.externalScripts['diff.js'] = wikEd.AppendScript(wikEd.config.diffScriptSrc + sep + wikEd.programVersion);

}

}

// load the external wikEdDiff script if not already done

if ( (wikEd.config.loadDiff === true) && (wikEd.externalScripts['wikEdDiff.js'] === undefined) ) {

if (wikEd.Diff === undefined) {

var sep = '&';

if (wikEd.config.diffSrc.indexOf('?') == -1) {

sep = '?';

}

wikEd.externalScripts['wikEdDiff.js'] = wikEd.AppendScript(wikEd.config.diffSrc + sep + wikEd.programVersion);

}

}

// init syntax highlighting regExp object

wikEd.HighlightSyntaxInit();

// check if disabled

wikEd.disabled = wikEd.GetSavedSetting('wikEdDisabled', wikEd.config.disabledPreset);

if (wikEd.disabled === true) {

wikEd.useWikEd = false;

window.wikEdUseWikEd = wikEd.useWikEd;

wikEd.SetLogo();

return;

}

// location search string function: put all used images and icons on an empty page

if (/(\?|&)wikEd=iconPage\b/i.test(window.location.search) === true) {

var str = wikEd.config.text.iconPage;

for (var imageKey in wikEd.config.image) {

if (Object.prototype.hasOwnProperty.call(wikEd.config.image, imageKey) === true) {

var imageAddress = wikEd.config.image[imageKey];

if (typeof imageAddress == 'string') {

str += ' ';

}

}

}

document.body.innerHTML = str;

return;

}

// continue setup

wikEd.TurnOn(true);

return;

};

//

// wikEd.TurnOn: continue setup, can be called repeatedly

//

wikEd.TurnOn = function (scrollToEditFocus) {

// check if setup was already run

if (wikEd.turnedOn === true) {

return;

}

// set error logo

wikEd.SetLogo('error');

// check for active code editor and .js or .css page

wikEd.CodeEditorCheck();

// no id, no wikEd

if (window.navigator.appName === null) {

wikEd.browserNotSupported = true;

}

// check browser versions

switch (wikEd.browserName) {

// check Mozilla version

case 'Mozilla':

if (

(wikEd.browserFlavor == 'Firefox') && (wikEd.browserVersion < 1.5) ||

(wikEd.browserFlavor == 'Netscape') && (wikEd.browserVersion < 8.0) ||

(wikEd.browserFlavor == 'SeaMonkey') && (wikEd.browserVersion < 1.0)

) {

wikEd.browserNotSupported = true;

}

break;

// check MSIE version

case 'MSIE':

wikEd.browserNotSupported = true;

break;

// check Opera version

case 'Opera':

if (wikEd.browserVersion < 15) {

// too buggy (inserthtml, parentNode...)

wikEd.browserNotSupported = true;

}

break;

// check Google Chrome version

case 'Chrome':

if (wikEd.browserVersion < 0.2) {

wikEd.browserNotSupported = true;

}

// Chrome bug https://code.google.com/p/chromium/issues/detail?id=528382, version 45.0.2454.85 - 45.0.2454.93

else if (wikEd.browserVersion == 45) {

var regExpMatch = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec( wikEd.browserVersionStr );

if ( ( regExpMatch !== null ) && ( regExpMatch[ 3 ] == 2454 ) && ( regExpMatch[ 4 ] >= 85 ) && ( regExpMatch[ 4 ] < 93 ) ) {

wikEd.browserNotSupported = true;

}

}

break;

// check Safari version

case 'Safari':

if (wikEd.browserVersion < 500) {

wikEd.browserNotSupported = true;

}

break;

}

// browser or version not supported, set error message and exit

if ( (wikEd.browserNotSupported === true) && (wikEd.config.skipBrowserTest === false) ) {

wikEd.disabled = true;

wikEd.SetLogo('browser');

return;

}

// get form elements

var array;

array = document.getElementsByName('wpEdittime');

if (array[0] !== undefined) {

wikEd.edittime = array[0].value;

}

array = document.getElementsByName('wpStarttime');

if (array[0] !== undefined) {

wikEd.starttime = array[0].value;

}

array = document.getElementsByName('wpAutoSummary');

if (array[0] !== undefined) {

wikEd.autoSummary = array[0].value;

}

array = document.getElementsByName('wpEditToken');

if (array[0] !== undefined) {

wikEd.editToken = array[0].value;

}

// page type detection

// detect custom edit page

if (wikEd.config.customEditFormId !== '') {

wikEd.editForm = document.getElementById(wikEd.config.customEditFormId);

}

if (wikEd.config.customTextAreaId !== '') {

wikEd.textarea = document.getElementById(wikEd.config.customTextAreaId);

}

if (wikEd.config.customSaveButtonId !== '') {

wikEd.saveButton = document.getElementById(wikEd.customwikEdSaveButtonId);

}

// detect standard edit page

if (wikEd.textarea === null) {

// HotCat injects this textarea into non-edit pages

var textarea = document.getElementsByName('wpTextbox1')[0];

if ( (textarea !== undefined) && (textarea.type != 'hidden') ) {

wikEd.textarea = textarea;

}

}

if (wikEd.editForm === null) {

wikEd.editForm = document.getElementById('editform');

}

if (wikEd.saveButton === null) {

wikEd.saveButton = document.getElementById('wpSave');

}

wikEd.diffPreviewButton = document.getElementById('wpDiff');

wikEd.previewButton = document.getElementById('wpPreview');

wikEd.editArticle = true;

// detect read-only edit page

if ( (wikEd.textarea !== null) && (wikEd.editForm === null) && (wikEd.saveButton === null) ) {

wikEd.editReadOnly = true;

wikEd.editArticle = false;

wikEd.readOnly = true;

}

// detect semantic forms extension

else if (wikEd.textarea === null) {

wikEd.editForm = document.getElementById('sfForm');

wikEd.textarea = document.getElementById('sf_free_text');

if ( (wikEd.editForm !== null) && (wikEd.textarea !== null) ) {

wikEd.editArticle = false;

wikEd.editSemanticForm = true;

}

// detect edit raw watchlist page

else {

wikEd.textarea = document.getElementById('mw-input-wpTitles');

// old version

if (wikEd.textarea === null) {

wikEd.textarea = document.getElementById('titles');

}

if (wikEd.textarea !== null) {

wikEd.editArticle = false;

wikEd.editWatchlist = true;

// get watchlist edit form

var node = wikEd.textarea;

while (node !== null) {

node = node.parentNode;

if (node.tagName == 'FORM') {

break;

}

}

wikEd.editForm = node;

// get watchlist submit button

var saveButton = document.getElementsByClassName('mw-htmlform-submit')[0];

if ( (saveButton === undefined) && (wikEd.editForm !== null) ) {

wikEd.saveButton = saveButton;

var submits = wikEd.editForm.getElementsByTagName('input');

for (var i = 0; i < submits.length; i ++) {

if (submits[i].type == 'submit') {

wikEd.saveButton = submits[i];

break;

}

}

}

}

}

// detect upload page

if ( (wikEd.textarea === null) || (wikEd.editForm === null) || (wikEd.saveButton === null) ) {

var textarea = document.getElementsByName('wpUploadDescription')[0];

var editForm = document.getElementById('mw-upload-form');

var saveButton = document.getElementsByName('wpUpload')[0];

if ( (textarea !== undefined) && (editForm !== null) && (saveButton !== undefined) ) {

wikEd.textarea = textarea;

wikEd.editForm = editForm;

wikEd.saveButton = saveButton;

wikEd.editArticle = false;

wikEd.editUpload = true;

wikEd.rearrange = false;

}

}

// detect view and restore deleted pages (no id on textarea)

if ( (wikEd.textarea === null) || (wikEd.editForm === null) || (wikEd.saveButton === null) ) {

var forms = document.getElementsByTagName('form');

var i = 0;

var form;

while ( (form = forms[i ++]) !== undefined) {

if (/\btitle=Special:Undelete\b/i.test(form.action) === true) {

var textareas = document.getElementsByTagName('textarea');

var j = 0;

var textarea;

while ( (textarea = textareas[j ++]) !== undefined) {

if (textarea.readOnly === true) {

wikEd.textarea = textarea;

wikEd.previewButton = document.getElementsByName('preview')[0] || null;

wikEd.editArticle = false;

wikEd.viewDeleted = true;

wikEd.rearrange = true;

break;

}

}

}

break;

}

}

}

// set page detection error indicator

if (wikEd.textarea === null) {

wikEd.SetLogo();

return;

}

// do not turn on when code editor is active

if ( ( wikEd.useCodeEditor === true) || ( wikEd.useCodeMirror === true ) ) {

wikEd.disabled = true;

wikEd.SetLogo('incompatible', 'Code Editor');

return;

}

// check if the textarea is read-only

if (wikEd.config.skipReadOnlyTest === false) {

if ( (wikEd.textarea.getAttribute('readonly') !== null) || (wikEd.saveButton === null) ) {

wikEd.readOnly = true;

}

}

// check for section edits

var section = document.getElementsByName('wpSection');

if (

section !== null &&

section.length > 0 &&

/^\d+$/.test(section[0].value) === true

) {

wikEd.editSection = section[0].value;

}

// get missing wg variables from footer link (code copied to wikEdDiff.js)

if (wikEd.wikiGlobals.wgArticlePath === undefined) {

var printfooter = document.body.getElementsByClassName('printfooter')[0];

if (printfooter !== undefined) {

var articleLink = printfooter.getElementsByTagName('a')[0];

if (articleLink !== undefined) {

var regExpMatch = /^(https?:\/\/[^\/]*)(\/([^\/]*\/)*)([^\/]*)$/.exec(articleLink.href);

if (regExpMatch !== null) {

wikEd.wikiGlobals.wgServer = regExpMatch[1];

wikEd.wikiGlobals.wgArticlePath = regExpMatch[1] + regExpMatch[2] + '$1';

wikEd.wikiGlobals.wgPageName = regExpMatch[4] || '';

wikEd.wikiGlobals.wgTitle = decodeURIComponent( regExpMatch[4].replace(/_/g, ' ') );

}

}

}

}

// get missing wg variables from form action url

if (wikEd.wikiGlobals.wgScript === undefined) {

var form = wikEd.editForm;

if ( form !== null && form.action.indexOf( '/Special:EditWatchlist' ) !== -1 ) {

form = document.getElementById( 'searchform' );

}

if ( form !== null && form.action.indexOf( '/index.php' ) !== -1 ) {

wikEd.wikiGlobals.wgScript = form.action.replace(/^https?:\/\/[^\/]*|\?.*$/g, '');

wikEd.wikiGlobals.wgScriptPath = wikEd.wikiGlobals.wgScript.replace(/\/index\.php/, '');

}

}

// get current page name

wikEd.pageName = wikEd.wikiGlobals.wgPageName;

// get current namespace

if (wikEd.pageName !== null) {

var colonPos = wikEd.pageName.indexOf(':');

if (colonPos == -1) {

wikEd.pageNamespace = '';

}

else {

wikEd.pageNamespace = wikEd.pageName.substr(0, colonPos);

}

}

// get MediaWiki file paths

wikEd.GetPaths();

// check if we can call external API for redlink detection

var regExpDomains = new RegExp('//(.*?\\.)?(' + wikEd.config.externalApiDomains.replace(/\s*,\s*/g, '|').replace(/\./g, '\\.') + '$)', 'g');

wikEd.useExternalApi = regExpDomains.test(window.location.origin);

// get page elements

wikEd.catLinks = document.getElementById('catlinks');

// check if mw.loader is available

if ( (window.mw !== undefined) && (window.mw.loader !== undefined) && (window.mw.config !== undefined) ) {

wikEd.loader = true;

}

// get wikibase defaults for linkification

wikEd.wikibase.currentSite = {};

wikEd.wikibase.currentSite.globalSiteId = wikEd.config.wbGlobalSiteId;

wikEd.wikibase.repoUrl = wikEd.config.wbRepoUrl;

wikEd.wikibase.repoArticlePath = wikEd.config.wbRepoArticlePath;

// get wikibase infos

if (wikEd.loader === true) {

// prevent error if module is not installed

try {

window.mw.loader.using('wikibase.client.currentSite', function () {

wikEd.wikibase.currentSite = window.mw.config.get('wbCurrentSite');

});

}

catch (exception) {

}

try {

window.mw.loader.using('wikibase.repoAccess', function () {

wikEd.wikibase.repoUrl = window.mw.config.get('wbRepoUrl');

wikEd.wikibase.repoArticlePath = window.mw.config.get('wbRepoArticlePath');

});

}

catch (exception) {

}

}

// initialize frame css, main css, buttons, and button bars

wikEd.InitFrameCSS();

wikEd.InitMainEditCSS();

wikEd.InitButton();

wikEd.InitButtonKey();

wikEd.InitButtonBar();

wikEd.InitHistoryLength();

wikEd.InitIncompatibleScripts();

// check for incompatible scripts

var incompatible = '';

if (wikEd.config.skipScriptTest === false) {

for (var key in wikEd.config.incompatibleScripts) {

if (Object.prototype.hasOwnProperty.call(wikEd.config.incompatibleScripts, key) === true) {

var regExp = new RegExp(wikEd.config.incompatibleScripts[key].replace(/\.js$/g, ''), 'gim');

if (regExp.test(wikEd.externalScriptsString) === true) {

if (incompatible !== '') {

incompatible += ', ';

}

incompatible += key;

}

}

}

}

// detect incompatible add-ons

if (wikEd.config.skipAddonTest === false) {

// Ginger add-on breaks undo history, corrupts text ()

if (document.body.getAttribute('ginger_software_stylesheet') !== null) {

if (incompatible !== '') {

incompatible += ', ';

}

incompatible += 'Ginger';

}

}

// incompatible script or add-on error

if (incompatible !== '') {

wikEd.disabled = true;

wikEd.SetLogo('incompatible', incompatible);

return;

}

// define Unicode characters for fixing function

wikEd.InitUnicode();

// detect if we add a new section (+ tab)

if (/(\?|&)section=new\b/.test(window.location.search) === true) {

wikEd.addNewSection = true;

}

else {

var section = document.getElementsByName('wpSection');

if ( (section[0] !== undefined) && (section[0].value == 'new') ) {

wikEd.addNewSection = true;

}

}

// get initial textarea dimensions

wikEd.textareaBorderHeight = parseInt(wikEd.GetStyle(wikEd.textarea, 'borderTopWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.textarea, 'borderBottomWidth'), 10);

if (wikEd.GetStyle(wikEd.textarea, 'display') != 'none') {

wikEd.textareaOffsetHeightInitial = wikEd.textarea.offsetHeight;

}

else {

wikEd.textareaOffsetHeightInitial = wikEd.textarea.parentNode.clientHeight;

}

wikEd.textareaOffsetHeightInitial = wikEd.textarea.offsetHeight;

wikEd.textareaHeight = (wikEd.textarea.offsetHeight - wikEd.textareaBorderHeight) + 'px';

wikEd.textareaWidth = '100%';

// setup the undo buffers and save the original text for local changes view

wikEd.origVersion = wikEd.textarea.value;

// add stylesheet definitions

wikEd.ApplyCSS(document, wikEd.config.mainEditCSS);

// get button settings from saved settings

wikEd.using = wikEd.GetSavedSetting('wikEdSummaryUsing', wikEd.config.usingPreset);

wikEd.useWikEd = ! wikEd.GetSavedSetting('wikEdUseClassic', ! wikEd.config.useWikEdPreset);

wikEd.highlightSyntax = ! wikEd.GetSavedSetting('wikEdSyntaxOff', ! wikEd.config.highlightSyntaxPreset);

wikEd.fullScreenMode = wikEd.GetSavedSetting('wikEdFullscreen', wikEd.config.fullScreenModePreset);

wikEd.closeToolbar = wikEd.GetSavedSetting('wikEdCloseToolbar', wikEd.config.closeToolbarPreset);

wikEd.refHide = wikEd.GetSavedSetting('wikEdRefHide', wikEd.config.refHidePreset);

window.wikEdUseWikEd = wikEd.useWikEd;

if (wikEd.config.tableMode === true) {

wikEd.tableMode = wikEd.refHide;

}

else {

wikEd.tableMode = false;

}

// detect preview page

if (/(\?|&)action=submit\b/.test(window.location.search) === true) {

wikEd.previewPage = true;

}

// disable wikEd for Lupin's autoedit scripts

if (/(\?|&)autoedit=/.test(window.location.search) === true) {

wikEd.useWikEd = false;

window.wikEdUseWikEd = wikEd.useWikEd;

}

// disable wikEd for .js and .css pages

if ( (wikEd.jsPage === true) || (wikEd.cssPage === true) ) {

wikEd.noSpellcheck = true;

if (wikEd.origVersion.length > 20000) {

wikEd.useWikEd = false;

window.wikEdUseWikEd = wikEd.useWikEd;

}

else {

wikEd.highlightSyntax = false;

}

}

// disable highlighting for module namespace (Scribunto/Lua templates)

if (wikEd.wikiGlobals.wgCanonicalNamespace == 'Module') {

wikEd.noSpellcheck = true;

wikEd.highlightSyntax = false;

}

// no spellcheck for watchlist editing

if (wikEd.editWatchlist === true) {

wikEd.noSpellcheck = true;

}

// disable spellchecker for textarea

if (wikEd.noSpellcheck === true) {

wikEd.textarea.setAttribute('spellcheck', false);

}

// preset frame related styles to avoid browser crashes

var styleFrameWrapperPosition;

var styleFrameWrapperVisibility;

var styleTextareaWrapperPosition;

var styleTextareaWrapperVisibility;

if (wikEd.useWikEd === true) {

styleFrameWrapperPosition = 'static';

styleFrameWrapperVisibility = 'visible';

styleTextareaWrapperPosition = 'absolute';

styleTextareaWrapperVisibility = 'hidden';

}

else {

styleFrameWrapperPosition = 'absolute';

styleFrameWrapperVisibility = 'hidden';

styleTextareaWrapperPosition = 'static';

styleTextareaWrapperVisibility = 'visible';

}

// find proper insertion point of input wrapper

// inside the wikiEditor interface

var wikiEditor = document.body.getElementsByClassName('wikiEditor-ui')[0];

if (wikiEditor !== undefined) {

wikEd.wikiEditor = wikiEditor;

wikEd.wikiEditorFrame = wikEd.wikiEditor.getElementsByTagName('IFRAME')[0] || null;

wikEd.wikiEditorTop = document.body.getElementsByClassName('wikiEditor-ui-top')[0] || null;

wikEd.wikiEditorLeft = document.body.getElementsByClassName('wikiEditor-ui-left')[0] || null;

wikEd.wikiEditorBar = document.body.getElementsByClassName('wikiEditor-ui-toolbar')[0] || null;

wikEd.wikiEditorBottom = document.body.getElementsByClassName('wikiEditor-ui-bottom')[0] || null;

wikEd.wikiEditorText = document.body.getElementsByClassName('wikiEditor-ui-text')[0] || null;

wikEd.textareaContainer = wikEd.wikiEditor;

if (wikEd.wikiEditorBar === null) {

wikEd.SetLogo('incompatible', 'WikiEditor (delayed)');

return;

}

}

// before original textarea container (multiple nested containers for semantic forms)

else {

var node = wikEd.textarea;

var parent = node.parentNode;

while (wikEd.GetFirstChildNode(parent) == wikEd.GetLastChildNode(parent) ) {

if (/^(SPAN|DIV|P)$/.test(parent.nodeName) === false) {

break;

}

node = parent;

parent = node.parentNode;

}

wikEd.textareaContainer = node;

}

// create input wrapper, contains the whole wikEd and wikiEditor user interface, is the fullscreen container

wikEd.inputWrapper = document.createElement('div');

wikEd.inputWrapper.id = 'wikEdInputWrapper';

wikEd.inputWrapper.className = 'wikEdInputWrapper';

if (wikEd.wikiEditor !== null) {

wikEd.inputWrapper = wikEd.wikiEditor.parentNode.insertBefore(wikEd.inputWrapper, wikEd.wikiEditor);

wikEd.inputWrapper.appendChild(wikEd.wikiEditor);

}

else {

wikEd.textareaContainer.parentNode.insertBefore(wikEd.inputWrapper, wikEd.textareaContainer);

}

// create editor wrapper, contains captcha, toolbar, debug, buttons bar, textarea, toc, but not the summary

wikEd.editorWrapper = document.createElement('div');

wikEd.editorWrapper.id = 'wikEdEditorWrapper';

wikEd.editorWrapper.className = 'wikEdEditorWrapper';

if (wikEd.wikiEditor !== null) {

wikEd.wikiEditor.parentNode.insertBefore(wikEd.editorWrapper, wikEd.wikiEditor);

wikEd.editorWrapper.appendChild(wikEd.wikiEditor);

}

else {

wikEd.inputWrapper.appendChild(wikEd.editorWrapper);

}

// create buttons wrapper for toolbar, wikiEditor, and wikEd button bars

wikEd.buttonsWrapper = document.createElement('div');

wikEd.buttonsWrapper.id = 'wikEdButtonsWrapper';

wikEd.buttonsWrapper.className = 'wikEdButtonsWrapper';

if (wikEd.wikiEditor !== null) {

wikEd.wikiEditorBar.parentNode.insertBefore(wikEd.buttonsWrapper, wikEd.wikiEditorBar);

wikEd.buttonsWrapper.appendChild(wikEd.wikiEditorBar);

}

else {

wikEd.editorWrapper.appendChild(wikEd.buttonsWrapper);

}

// create toolbar wrapper

wikEd.toolbarWrapper = document.createElement('div');

wikEd.toolbarWrapper.id = 'wikEdToolbarWrapper';

wikEd.toolbarWrapper.className = 'wikEdToolbarWrapper';

wikEd.buttonsWrapper.appendChild(wikEd.toolbarWrapper);

// fill toolbar wrapper

wikEd.toolbar = document.getElementById('toolbar');

if (wikEd.toolbar !== null) {

wikEd.toolbarWrapper.appendChild(wikEd.toolbar);

}

if (wikEd.wikiEditorBar !== null) {

wikEd.toolbarWrapper.appendChild(wikEd.wikiEditorBar);

}

wikEd.buttonsWrapper.appendChild(wikEd.toolbarWrapper);

// create debug textarea wrapper

wikEd.debugWrapper = document.createElement('div');

wikEd.debugWrapper.id = 'wikEdDebugWrapper';

wikEd.debugWrapper.className = 'wikEdDebugWrapper';

wikEd.debugWrapper.style.display = 'none';

wikEd.editorWrapper.insertBefore(wikEd.debugWrapper, wikEd.editorWrapper.firstChild);

// create captcha wrapper

if ( (wikEd.rearrange === true) && (wikEd.readOnly === false) ) {

wikEd.captchaWrapper = document.createElement('div');

wikEd.captchaWrapper.id = 'wikEdCaptchaWrapper';

wikEd.captchaWrapper.className = 'wikEdCaptchaWrapper';

wikEd.editorWrapper.insertBefore(wikEd.captchaWrapper, wikEd.editorWrapper.firstChild);

}

// create editor wrapper, contains toolbar, textarea, toc, but not the summary

wikEd.editWrapper = document.createElement('div');

wikEd.editWrapper.id = 'wikEdEditWrapper';

wikEd.editWrapper.className = 'wikEdEditWrapper';

if (wikEd.wikiEditor !== null) {

wikEd.textarea.parentNode.appendChild(wikEd.editWrapper);

}

else {

wikEd.inputWrapper.appendChild(wikEd.editWrapper);

}

// create textarea wrapper

wikEd.textareaWrapper = document.createElement('div');

wikEd.textareaWrapper.id = 'wikEdTextareaWrapper';

wikEd.textareaWrapper.className = 'wikEdTextareaWrapper';

wikEd.textareaWrapper.style.position = styleTextareaWrapperPosition;

wikEd.textareaWrapper.style.visibility = styleTextareaWrapperVisibility;

wikEd.editWrapper.appendChild(wikEd.textareaWrapper);

// create frame wrapper

wikEd.frameWrapper = document.createElement('div');

wikEd.frameWrapper.id = 'wikEdFrameWrapper';

wikEd.frameWrapper.className = 'wikEdFrameWrapper';

wikEd.frameWrapper.style.position = styleFrameWrapperPosition;

wikEd.frameWrapper.style.visibility = styleFrameWrapperVisibility;

wikEd.textareaWrapper.parentNode.appendChild(wikEd.frameWrapper);

// create console wrapper for buttons, summary, and submit

if (wikEd.rearrange === true) {

wikEd.consoleWrapper = document.createElement('div');

wikEd.consoleWrapper.id = 'wikEdConsoleWrapper';

wikEd.consoleWrapper.className = 'wikEdConsoleWrapper';

wikEd.inputWrapper.appendChild(wikEd.consoleWrapper);

}

// create button bar wrapper

wikEd.buttonBarWrapper = document.createElement('div');

wikEd.buttonBarWrapper.id = 'wikEdButtonBarWrapper';

wikEd.buttonBarWrapper.className = 'wikEdButtonBarWrapper';

wikEd.buttonsWrapper.appendChild(wikEd.buttonBarWrapper);

// create summary wrapper for summary, minor edit, and watch this page

if (wikEd.rearrange === true) {

wikEd.summaryWrapper = document.createElement('div');

wikEd.summaryWrapper.id = 'wikEdSummaryWrapper';

wikEd.summaryWrapper.className = 'wikEdSummaryWrapper';

// add summary above the edit field if we add a new section (+ tab)

if (wikEd.addNewSection === true) {

wikEd.consoleTopWrapper = document.createElement('div');

wikEd.consoleTopWrapper.id = 'wikEdConsoleTopWrapper';

wikEd.consoleTopWrapper.className = 'wikEdConsoleTopWrapper';

wikEd.consoleTopWrapper.appendChild(wikEd.summaryWrapper);

wikEd.inputWrapper.insertBefore(wikEd.consoleTopWrapper, wikEd.inputWrapper.firstChild);

}

else {

wikEd.consoleWrapper.appendChild(wikEd.summaryWrapper);

}

// create summary input wrapper

wikEd.summaryInputWrapper = document.createElement('div');

wikEd.summaryInputWrapper.id = 'wikEdSummaryInputWrapper';

wikEd.summaryInputWrapper.className = 'wikEdSummaryInputWrapper';

wikEd.summaryWrapper.appendChild(wikEd.summaryInputWrapper);

// create minor edit and watch page wrapper

wikEd.editOptionsWrapper = document.createElement('div');

wikEd.editOptionsWrapper.id = 'wikEdEditOptionsWrapper';

wikEd.editOptionsWrapper.className = 'wikEdEditOptionsWrapper';

// create submit wrapper for submit elements

wikEd.submitWrapper = document.createElement('div');

wikEd.submitWrapper.id = 'wikEdSubmitWrapper';

wikEd.submitWrapper.className = 'wikEdSubmitWrapper';

wikEd.consoleWrapper.appendChild(wikEd.submitWrapper);

// create submit buttons wrapper for submit buttons and help links

wikEd.submitButtonsWrapper = document.createElement('div');

wikEd.submitButtonsWrapper.id = 'wikEdSubmitButtonsWrapper';

wikEd.submitButtonsWrapper.className = 'wikEdSubmitButtonsWrapper';

}

// create preview wrapper for preview and diff box

if (wikEd.enableLocalPreview !== false) {

wikEd.localPrevWrapper = document.createElement('div');

wikEd.localPrevWrapper.id = 'wikEdLocalPrevWrapper';

wikEd.localPrevWrapper.className = 'wikEdLocalPrevWrapper';

wikEd.localPrevWrapper.style.display = 'none';

if (wikEd.rearrange === true) {

wikEd.inputWrapper.appendChild(wikEd.localPrevWrapper);

}

else if (wikEd.saveButton !== null) {

wikEd.saveButton.parentNode.appendChild(wikEd.localPrevWrapper);

}

else if (wikEd.previewButton !== null) {

wikEd.previewButton.parentNode.appendChild(wikEd.localPrevWrapper);

}

else if (wikEd.diffPreviewButton !== null) {

wikEd.diffPreviewButton.parentNode.appendChild(wikEd.localPrevWrapper);

}

}

// create insert wrapper for insert special chars links

if (wikEd.rearrange === true) {

wikEd.insertWrapper = document.createElement('div');

wikEd.insertWrapper.id = 'wikEdInsertWrapper';

wikEd.insertWrapper.className = 'wikEdInsertWrapper';

wikEd.inputWrapper.appendChild(wikEd.insertWrapper);

}

// fill the wrappers

// create debug textarea and add to debug wrapper

wikEd.debug = document.createElement('textarea');

wikEd.debug.id = 'wikEdDebugTextarea';

wikEd.debug.className = 'wikEdDebugTextarea';

wikEd.debug.rows = 20;

wikEd.debug.setAttribute('spellcheck', false);

wikEd.debugWrapper.appendChild(wikEd.debug);

// display startup error messages

if (wikEd.config.debugStartUp !== '') {

wikEd.Debug(wikEd.config.debugStartUp);

}

// wikEdDiff enhanced ajax diff

if (typeof wikEd.diffTable == 'object') {

if ( (wikEd.diffTable !== null) && (wikEd.diff === true) ) {

if (wikEd.Diff !== undefined) {

wikEd.Diff();

}

}

}

// hide toolbar wrapper

if (wikEd.closeToolbar === true) {

wikEd.toolbarWrapper.style.display = 'none';

}

else {

wikEd.toolbarWrapper.style.display = 'block';

}

// call wikibits:mwSetupToolbar() now because it would terminate with an error after setting textarea to display: none

if (wikEd.toolbar !== null) {

if (wikEd.toolbar.getElementsByTagName('IMG').length === 0) {

if (window.mwSetupToolbar !== undefined) {

window.mwSetupToolbar();

window.removeEventListener('load', window.mwSetupToolbar, false);

}

}

}

// dropdowns from toolbar should go over wikEd toolbar

if (wikEd.wikiEditorBar !== null) {

wikEd.wikiEditorBar.style.zIndex = '5';

}

// move editpage-copywarn out of summary wrapper

// needs to be done before appending editOptions to summary wrapper otherwise a linebreak stays (Mozilla bug)

if (wikEd.rearrange === true) {

var copywarn = document.getElementById('editpage-copywarn');

if (copywarn !== null) {

wikEd.inputWrapper.parentNode.insertBefore(copywarn, wikEd.inputWrapper.nextSibling);

copywarn.style.clear = 'both';

}

}

// add a link to the wikEd help page

var editHelp = document.getElementsByClassName('editHelp')[0];

if (editHelp !== undefined) {

if (typeof wikEd.config.helpPageLink == 'string') {

wikEd.editHelp = document.createElement('span');

wikEd.editHelp.id = 'wikEdEditHelp';

wikEd.editHelp.className = 'wikEdEditHelp';

wikEd.editHelp.innerHTML = wikEd.config.helpPageLink.replace(/\{wikEdHomeBaseUrl\}/g, wikEd.config.homeBaseUrl);

editHelp.parentNode.insertBefore(wikEd.editHelp, editHelp.nextSibling);

}

}

// add submit buttons to submit wrapper, leaving only checkboxes in editOptions

if (wikEd.rearrange === true) {

var editButtons = document.getElementsByClassName('editButtons')[0];

if (editButtons === undefined) {

if (wikEd.saveButton !== null) {

// edit watchlist, semantic forms

if (wikEd.editWatchlist === true) {

editButtons = wikEd.saveButton;

}

// semantic forms

else {

editButtons = wikEd.saveButton.parentNode;

}

}

else if (wikEd.previewButton !== null) {

// edit watchlist

if (wikEd.editWatchlist === true) {

editButtons = wikEd.previewButton;

}

else {

editButtons = wikEd.previewButton.parentNode;

}

}

else if (wikEd.diffPreviewButton !== null) {

editButtons = wikEd.diffPreviewButton.parentNode;

}

}

if ( (editButtons !== undefined) && (editButtons !== null) ) {

wikEd.submitButtonsWrapper.appendChild(editButtons);

}

}

// get edit checkboxes

var editCheckboxes;

if (wikEd.editForm !== null) {

editCheckboxes = wikEd.editForm.getElementsByClassName('editCheckboxes')[0];

}

// non-standard page (old, semantic forms...)

if (editCheckboxes === undefined) {

var checkbox = document.getElementById('wpMinoredit');

if (checkbox === null) {

checkbox = document.getElementById('wpWatchthis');

}

var summary = document.getElementsByName('wpSummary')[0];

if ( (summary !== undefined) && (checkbox !== null) ) {

// get checkbox container, e.g. semantic forms

if ( (summary.nextSibling == checkbox.parentNode) || (summary.parentNode.nextSibling == checkbox.parentNode) ) {

editCheckboxes = checkbox.parentNode;

editCheckboxes.className = 'wikEdEditCheckboxes';

}

// old MediaWiki versions: create edit options container

else {

editCheckboxes = document.createElement('div');

editCheckboxes.id = 'wikEdEditCheckboxes';

editCheckboxes.className = 'wikEdEditCheckboxes';

if (summary.nextSibling == checkbox) {

var node = checkbox;

while (node !== null) {

var nextNode = node.nextSibling;

editCheckboxes.appendChild(node);

node = nextNode;

}

}

}

}

}

// add summary elements to summary input wrapper

if (wikEd.rearrange === true) {

wikEd.summaryLabel = document.getElementById('wpSummaryLabel');

if (wikEd.summaryLabel !== null) {

wikEd.summaryInputWrapper.appendChild(wikEd.summaryLabel);

}

wikEd.summaryText = document.getElementsByName('wpSummary')[0] || null;

if (wikEd.summaryText !== null) {

wikEd.summaryInputWrapper.appendChild(wikEd.summaryText);

}

}

// add submit buttons, edit options, and edit help to submit wrapper

if (wikEd.submitWrapper !== null) {

if (wikEd.submitButtonsWrapper !== null) {

wikEd.submitWrapper.appendChild(wikEd.submitButtonsWrapper);

}

if (wikEd.editOptionsWrapper !== null) {

wikEd.submitWrapper.appendChild(wikEd.editOptionsWrapper);

if (editCheckboxes !== undefined) {

wikEd.editOptionsWrapper.appendChild(editCheckboxes);

// remove linebreak before minor edit checkbox

var node = editCheckboxes.firstChild;

while (node !== null) {

if (node.tagName !== null) {

if (node.tagName == 'BR') {

node.parentNode.removeChild(node);

break;

}

}

node = node.nextSibling;

}

}

}

}

// add empty editOptions to wikEdConsoleWrapper

if (wikEd.consoleWrapper !== null) {

var editOptions = document.getElementsByClassName('editOptions')[0];

if (editOptions !== undefined) {

wikEd.consoleWrapper.appendChild(editOptions);

}

}

// add textBoxTable or textarea to textarea wrapper

wikEd.textBoxTable = document.getElementById('textBoxTable');

if (wikEd.textBoxTable !== null) {

wikEd.textareaWrapper.appendChild(wikEd.textBoxTable);

}

else {

wikEd.textareaWrapper.appendChild(wikEd.textarea);

}

// fill captcha wrapper with elements between form and textarea (table)

if (wikEd.captchaWrapper !== null) {

if ( (wikEd.editUpload === false) && (wikEd.editWatchlist === false) ) {

var node = wikEd.editForm.firstChild;

while (node !== null) {

if ( (node == wikEd.inputWrapper) || (node == wikEd.wikiEditor) || (node == wikEd.captchaWrapper) ) {

break;

}

var nextNode = node.nextSibling;

if (node.tagName != 'INPUT') {

wikEd.captchaWrapper.appendChild(node);

}

node = nextNode;

}

}

}

// create editing frame wrapper

wikEd.frameOuter = document.createElement('div');

wikEd.frameOuter.id = 'wikEdFrameOuter';

wikEd.frameOuter.className = 'wikEdFrameOuter';

wikEd.frameWrapper.appendChild(wikEd.frameOuter);

wikEd.frameInner = document.createElement('div');

wikEd.frameInner.id = 'wikEdFrameInner';

wikEd.frameInner.className = 'wikEdFrameInner';

wikEd.frameOuter.appendChild(wikEd.frameInner);

// remove frame border if textarea has none

if (wikEd.textareaBorderHeight === 0) {

wikEd.frameInner.style.borderWidth = '0';

wikEd.frameOuter.style.borderWidth = '0';

}

// create editing frame and initialize after iframe loading

wikEd.frame = document.createElement('iframe');

wikEd.frame.addEventListener('load', wikEd.FrameLoadHandler, false);

wikEd.frame.id = 'wikEdFrame';

wikEd.frame.className = 'wikEdFrame';

wikEd.frameInner.appendChild(wikEd.frame);

// set frame height and width, border divs shrink around

wikEd.frameBorderHeight = parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderTopWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderBottomWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderTopWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderBottomWidth'), 10);

wikEd.frameHeight = (wikEd.textareaOffsetHeightInitial - wikEd.frameBorderHeight) + 'px';

wikEd.frame.style.height = wikEd.frameHeight;

wikEd.frameBorderWidth = parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderLeftWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderRightWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderLeftWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderRightWidth'), 10);

wikEd.frameWidth = (wikEd.editorWrapper.clientWidth - wikEd.frameBorderWidth) + 'px';

wikEd.frame.style.width = wikEd.frameWidth;

// generate button bars and add them to the buttons wrapper

// form wrapper added against summary input submit defaulting to this button

if (wikEd.readOnly === false) {

wikEd.buttonBarFormat = wikEd.MakeButtonBar(wikEd.config.buttonBar.format);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarFormat);

wikEd.buttonBarTextify = wikEd.MakeButtonBar(wikEd.config.buttonBar.textify);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarTextify);

}

wikEd.buttonBarControl = wikEd.MakeButtonBar(wikEd.config.buttonBar.control);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarControl);

if (wikEd.config.buttonBar.custom1[6].length > 0) {

wikEd.buttonBarCustom1 = wikEd.MakeButtonBar(wikEd.config.buttonBar.custom1);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarCustom1);

}

wikEd.buttonBarFind = wikEd.MakeButtonBar(wikEd.config.buttonBar.find);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarFind);

// inactivate replace buttons for read-only pages

if (wikEd.readOnly === true) {

document.getElementById('wikEdReplaceAll').className = 'wikEdButtonInactive';

document.getElementById('wikEdReplacePrev').className = 'wikEdButtonInactive';

document.getElementById('wikEdReplaceNext').className = 'wikEdButtonInactive';

}

if (wikEd.readOnly === false) {

wikEd.buttonBarFix = wikEd.MakeButtonBar(wikEd.config.buttonBar.fix);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarFix);

}

if (wikEd.config.buttonBar.custom2[6].length > 0) {

wikEd.buttonBarCustom2 = wikEd.MakeButtonBar(wikEd.config.buttonBar.custom2);

wikEd.buttonBarWrapper.appendChild(wikEd.buttonBarCustom2);

}

var br = document.createElement('br');

br.style.clear = 'both';

wikEd.buttonsWrapper.appendChild(br);

wikEd.caseSensitive = document.getElementById('wikEdCaseSensitive');

wikEd.regExp = document.getElementById('wikEdRegExp');

wikEd.findAhead = document.getElementById('wikEdFindAhead');

wikEd.findText = document.getElementById('wikEdFindText');

wikEd.replaceText = document.getElementById('wikEdReplaceText');

// add preview box top bar to submit wrapper

wikEd.buttonBarPreview = wikEd.MakeButtonBar(wikEd.config.buttonBar.preview);

if ( (wikEd.rearrange === true) && (wikEd.submitWrapper !== null) ) {

if ( (wikEd.fullScreenMode === true) && (wikEd.editArticle === true) && (wikEd.useWikEd === true) ) {

wikEd.buttonBarPreview.style.display = 'none';

}

wikEd.submitWrapper.appendChild(wikEd.buttonBarPreview);

}

// add pasted button bar to frame wrapper

wikEd.buttonBarPasted = wikEd.MakeButtonBar(wikEd.config.buttonBar.pasted);

wikEd.buttonBarPasted.style.visibility = 'hidden';

wikEd.frameInner.insertBefore(wikEd.buttonBarPasted, wikEd.frameInner.firstChild);

// add article and diff preview containers and their bottom bar to preview wrapper

if (wikEd.localPrevWrapper !== null) {

// article preview

wikEd.previewArticle = document.createElement('div');

wikEd.previewArticle.id = 'wikEdPreviewArticle';

wikEd.previewArticle.className = 'wikEdPreviewArticle';

wikEd.previewArticle.display = 'none';

wikEd.localPrevWrapper.appendChild(wikEd.previewArticle);

// diff preview

wikEd.previewDiff = document.createElement('div');

wikEd.previewDiff.id = 'wikEdPreviewDiff';

wikEd.previewDiff.className = 'wikEdPreviewDiff';

wikEd.previewDiff.display = 'none';

wikEd.localPrevWrapper.appendChild(wikEd.previewDiff);

// add preview container bottom bar to preview wrapper

wikEd.buttonBarPreview2 = wikEd.MakeButtonBar(wikEd.config.buttonBar.preview2);

wikEd.localPrevWrapper.appendChild(wikEd.buttonBarPreview2);

}

// add jump box to standard preview

wikEd.wikiPreview = document.getElementById('wikiPreview');

if (wikEd.wikiPreview !== null) {

if (wikEd.wikiPreview.firstChild !== null) {

wikEd.buttonBarJump = wikEd.MakeButtonBar(wikEd.config.buttonBar.jump);

wikEd.wikiPreview.insertBefore(wikEd.buttonBarJump, wikEd.wikiPreview.firstChild);

}

}

// add insert special chars to insert wrapper

if (wikEd.insertWrapper !== null) {

var insert = document.getElementById('mw-edittools-charinsert');

if (insert === null) {

insert = document.getElementById('editpage-specialchars');

}

if (insert !== null) {

wikEd.insertWrapper.appendChild(insert);

}

}

// wrappers filled

// add local preview button next to submit button

if (wikEd.enableLocalPreview !== false) {

var previewSpan = document.createElement('span');

previewSpan.innerHTML = wikEd.MakeButtonCode(82, 'button');

if (wikEd.previewButton !== null) {

wikEd.previewButton.parentNode.insertBefore(previewSpan, wikEd.previewButton.nextSibling);

}

else if (wikEd.saveButton !== null) {

wikEd.saveButton.parentNode.insertBefore(previewSpan, wikEd.saveButton.nextSibling);

}

else {

wikEd.submitWrapper.insertBefore(previewSpan, wikEd.submitWrapper.firstChild);

}

// add local diff button next to submit button

if ( ( (wikEd.diffPreviewButton !== null) || (wikEd.editWatchlist === true) ) && (wikEd.readOnly === false) ) {

var diffSpan = document.createElement('span');

diffSpan.innerHTML = wikEd.MakeButtonCode(83, 'button');

if (wikEd.diffPreviewButton !== null) {

wikEd.diffPreviewButton.parentNode.insertBefore(diffSpan, wikEd.diffPreviewButton.nextSibling);

}

else if (previewSpan !== null) {

previewSpan.parentNode.insertBefore(diffSpan, previewSpan.nextSibling);

}

else if (wikEd.previewButton !== null) {

wikEd.previewButton.parentNode.insertBefore(diffSpan, wikEd.previewButton.nextSibling);

}

}

}

// correct tab order between check boxes and submits

wikEd.frame.tabIndex = wikEd.textarea.tabIndex;

// initialize image buttons

wikEd.Button(document.getElementById('wikEdRefHide'), 'wikEdRefHide', null, wikEd.refHide);

wikEd.Button(document.getElementById('wikEdHighlightSyntax'), 'wikEdHighlightSyntax', null, wikEd.highlightSyntax);

wikEd.Button(document.getElementById('wikEdUseWikEd'), 'wikEdUseWikEd', null, wikEd.useWikEd);

wikEd.Button(document.getElementById('wikEdCloseToolbar'), 'wikEdCloseToolbar', null, wikEd.closeToolbar);

wikEd.Button(document.getElementById('wikEdFullScreen'), 'wikEdFullScreen', null, wikEd.fullScreenMode);

wikEd.Button(document.getElementById('wikEdUsing'), 'wikEdUsing', null, wikEd.using);

wikEd.Button(document.getElementById('wikEdCaseSensitive'), 'wikEdCaseSensitive', null, false);

wikEd.Button(document.getElementById('wikEdRegExp'), 'wikEdRegExp', null, false);

wikEd.Button(document.getElementById('wikEdFindAhead'), 'wikEdFindAhead', null, wikEd.config.findAheadSelected);

wikEd.Button(document.getElementById('wikEdClose'), 'wikEdClose', null, false, 'wikEdButton');

wikEd.Button(document.getElementById('wikEdClose2'), 'wikEdClose2', null, false, 'wikEdButton');

wikEd.Button(document.getElementById('wikEdTableMode'), 'wikEdTableMode', null, wikEd.tableMode);

// grey out fullscreen button

if ( (wikEd.editArticle === false) || (wikEd.useWikEd === false) ) {

document.getElementById('wikEdFullScreen').className = 'wikEdButtonInactive';

}

// grey out close toolbar button

if (wikEd.rearrange === false) {

document.getElementById('wikEdCloseToolbar').className = 'wikEdButtonInactive';

}

// hide typo fix button until typo fix rules are loaded and parsed

wikEd.fixRegExTypo = document.getElementById('wikEdFixRegExTypo');

if (wikEd.fixRegExTypo !== null) {

wikEd.fixRegExTypo.style.display = 'none';

}

// add a clear summary button left to the summary input field

if (wikEd.summaryText !== null) {

var clearSummaryForm = document.createElement('form');

clearSummaryForm.id = 'wikEdClearSummaryForm';

clearSummaryForm.className = 'wikEdClearSummaryForm';

wikEd.summaryText.parentNode.insertBefore(clearSummaryForm, wikEd.summaryText);

wikEd.clearSummary = document.createElement('button');

wikEd.clearSummary.id = 'wikEdClearSummary';

wikEd.clearSummary.className = 'wikEdClearSummary';

wikEd.clearSummary.alt = wikEd.config.text['wikEdClearSummary alt'];

wikEd.clearSummary.title = wikEd.config.text['wikEdClearSummary title'];

clearSummaryForm.appendChild(wikEd.clearSummary);

wikEd.clearSummaryImg = document.createElement('img');

wikEd.clearSummaryImg.id = 'wikEdClearSummaryImg';

wikEd.clearSummaryImg.src = wikEd.config.image['clearSummary'];

wikEd.clearSummaryImg.alt = 'Clear summary';

wikEd.clearSummary.appendChild(wikEd.clearSummaryImg);

// remember button width, might be without image

wikEd.clearSummaryWidth = wikEd.clearSummary.offsetWidth;

// make the summary a combo box

var summaryComboInput = document.createElement('span');

summaryComboInput.id = 'wikEdSummaryComboInput';

summaryComboInput.className = 'wikEdSummaryComboInput';

summaryComboInput = wikEd.summaryText.parentNode.insertBefore(summaryComboInput, wikEd.summaryText);

wikEd.summaryText = wikEd.summaryText.parentNode.removeChild(wikEd.summaryText);

wikEd.summaryText.className = 'wikEdSummaryText';

wikEd.summaryTextWidth = wikEd.summaryWrapper.offsetWidth - wikEd.summaryInputWrapper.offsetWidth;

if (wikEd.summaryTextWidth < 150) {

wikEd.summaryTextWidth = 150;

}

wikEd.summaryText.style.width = wikEd.summaryTextWidth + 'px';

wikEd.summarySelect = document.createElement('select');

wikEd.summarySelect.id = 'wikEdSummarySelect';

wikEd.summarySelect.className = 'wikEdSummarySelect';

summaryComboInput.appendChild(wikEd.summaryText);

summaryComboInput.appendChild(wikEd.summarySelect);

// repair summary combo css (e.g. Wikisource MediaWiki:Common.css/Tweaks.css)

wikEd.summaryText.style.setProperty('position', 'absolute', 'important');

}

// shorten submit button texts

if (wikEd.previewButton !== null) {

wikEd.previewButton.value = wikEd.config.text.shortenedPreview;

}

if (wikEd.diffPreviewButton !== null) {

wikEd.diffPreviewButton.value = wikEd.config.text.shortenedChanges;

}

// set up combo input boxes with history

wikEd.fieldHist ['find'] = [];

wikEd.savedName.find = 'wikEdFindHistory';

wikEd.inputElement.find = new Object(wikEd.findText);

wikEd.selectElement.find = new Object(document.getElementById('wikEdFindSelect'));

wikEd.selectElement.find.title = wikEd.config.text['wikEdFindSelect title'];

wikEd.fieldHist ['replace'] = [];

wikEd.savedName.replace = 'wikEdReplaceHistory';

wikEd.inputElement.replace = new Object(wikEd.replaceText);

wikEd.selectElement.replace = new Object(document.getElementById('wikEdReplaceSelect'));

wikEd.selectElement.replace.title = wikEd.config.text['wikEdReplaceSelect title'];

if (wikEd.summaryInputWrapper !== null) {

wikEd.fieldHist ['summary'] = [];

wikEd.savedName.summary = 'wikEdSummaryHistory';

wikEd.inputElement.summary = new Object(wikEd.summaryText);

wikEd.selectElement.summary = new Object(document.getElementById('wikEdSummarySelect'));

wikEd.selectElement.summary.title = wikEd.config.text['wikEdSummarySelect title'];

}

// adjust the select field widths to that of the text input fields

wikEd.ResizeComboInput('find');

wikEd.ResizeComboInput('replace');

if (wikEd.summaryText !== null) {

wikEd.ResizeComboInput('summary');

}

// hide the button bars per saved setting

if (wikEd.buttonBarFormat !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarFormat);

}

if (wikEd.buttonBarTextify !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarTextify);

}

if (wikEd.buttonBarControl !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarControl);

}

if (wikEd.buttonBarCustom1 !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarCustom1);

}

if (wikEd.buttonBarFind !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarFind);

}

if (wikEd.buttonBarFix !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarFix);

}

if (wikEd.buttonBarCustom2 !== null) {

wikEd.ButtonBarInit(wikEd.buttonBarCustom2);

}

// copy page warnings above edit window

if ( (wikEd.config.doCloneWarnings === true) && (wikEd.editForm !== null) ) {

if ( (wikEd.clonedWarnings === false) && (wikEd.previewPage === false) && (/(.*\n){2}/.test(wikEd.origVersion) ) === true) {

var divs = document.getElementsByTagName('div');

var divWarnings = [];

var editnoticeArea = false;

for (var i = 0; i < divs.length; i ++) {

var div = divs[i];

if (/editnotice/.test(div.id) === true) {

if (editnoticeArea === false) {

divWarnings.push(div);

editnoticeArea = true;

}

}

else if (/mw-.*?warning/.test(div.className) === true) {

divWarnings.push(div);

}

}

// create clone wrapper

if (divWarnings.length > 0) {

var cloneWrapper = document.createElement('div');

cloneWrapper.id = 'wikEdClonedWarnings';

var cloneNote = document.createElement('div');

cloneNote.id = 'wikEdClonedWarningsNote';

cloneNote.innerHTML = wikEd.config.text['clonedWarningsNote'];

cloneWrapper.appendChild(cloneNote);

for (var i = 0; i < divWarnings.length; i ++) {

var clone = divWarnings[i].cloneNode(true);

// ignore redlink-only edit warnings

var html = clone.innerHTML;

html = html.replace(/].*?\bclass="new"[^>]*>(.|\n)*?<\/a>/g, '');

html = html.replace(/<(.|\n)*?>/g, '');

html = html.replace(/\s*/g, '');

if (html === '') {

continue;

}

cloneWrapper.appendChild(clone);

wikEd.clonedWarnings = true;

}

if (wikEd.clonedWarnings === true) {

wikEd.inputWrapper.parentNode.insertBefore(cloneWrapper, wikEd.inputWrapper);

}

}

}

}

// init and resize frame after buttons and summary are in place, wait until iframe has been loaded

if (wikEd.frameLoaded === false) {

wikEd.frame.addEventListener('load', wikEd.InitializeFrame, false);

}

else {

wikEd.InitializeFrame();

}

// scroll to edit window and focus if not preview page or Semantic Form

if ( (scrollToEditFocus === true) && (wikEd.previewPage === false) && (wikEd.editSemanticForm === false) ) {

// focus the input field

if ( (wikEd.config.focusEdit === true) && (wikEd.useWikEd === false) ) {

wikEd.textarea.setSelectionRange(0, 0);

wikEd.textarea.focus();

}

// scroll

if ( (wikEd.fullScreenMode === false) && (wikEd.config.scrollToEdit === true) ) {

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper) - 2);

}

}

// register edit button click events

for (var buttonId in wikEd.editButtonHandler) {

if (Object.prototype.hasOwnProperty.call(wikEd.editButtonHandler, buttonId) === true) {

var buttonObj = document.getElementById(buttonId);

if (buttonObj !== null) {

buttonObj.addEventListener('click', wikEd.EditButtonHandler, true);

}

}

}

// register summary shrinking event after loading the 'Clear summary' image handler

if (wikEd.clearSummaryImg !== null) {

wikEd.clearSummaryImg.addEventListener('load', wikEd.ShrinkSummaryHandler, true);

}

// register summary resize event for window resizing

window.addEventListener('resize', wikEd.ResizeWindowHandler, true);

// register document events

document.addEventListener('keydown', wikEd.KeyHandler, true);

// dblclick on wrapper events

wikEd.debugWrapper.addEventListener('dblclick', wikEd.DebugHandler, true);

wikEd.localPrevWrapper.addEventListener('dblclick', wikEd.PrevWrapperHandler, true);

// register find ahead events

wikEd.findText.addEventListener('keyup', wikEd.FindAhead, true);

// register submit button events

if (wikEd.saveButton !== null) {

wikEd.saveButton.addEventListener('click', wikEd.SaveButtonHandler, true);

}

if (wikEd.previewButton !== null) {

wikEd.previewButton.addEventListener('click', wikEd.PreviewButtonHandler, true);

}

if (wikEd.diffPreviewButton !== null) {

wikEd.diffPreviewButton.addEventListener('click', wikEd.DiffPreviewButtonHandler, true);

}

// set button bar grip area events

if (wikEd.buttonBarFormat !== null) {

wikEd.buttonBarFormat.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

if (wikEd.buttonBarTextify !== null) {

wikEd.buttonBarTextify.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

if (wikEd.buttonBarControl !== null) {

wikEd.buttonBarControl.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

if (wikEd.buttonBarCustom1 !== null) {

if (wikEd.buttonBarCustom1.firstChild.firstChild !== null) {

wikEd.buttonBarCustom1.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

}

if (wikEd.buttonBarFind !== null) {

wikEd.buttonBarFind.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

if (wikEd.buttonBarFix !== null) {

wikEd.buttonBarFix.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

if (wikEd.buttonBarCustom2 !== null) {

if (wikEd.buttonBarCustom2.firstChild.firstChild !== null) {

wikEd.buttonBarCustom2.firstChild.firstChild.addEventListener('click', wikEd.ButtonBarGripHandler, false);

}

}

// register combo box events

if (wikEd.summarySelect !== null) {

wikEd.summarySelect.addEventListener('change', function () { wikEd.ChangeComboInput('summary'); }, false);

wikEd.summarySelect.addEventListener('focus', function () { wikEd.SetComboOptions('summary'); }, false);

}

if (wikEd.selectElement.find !== null) {

wikEd.selectElement.find.addEventListener('change', function () { wikEd.ChangeComboInput('find'); }, false);

wikEd.selectElement.find.addEventListener('focus', function () { wikEd.SetComboOptions('find'); }, false);

}

if (wikEd.selectElement.replace !== null) {

wikEd.selectElement.replace.addEventListener('change', function () { wikEd.ChangeComboInput('replace'); }, false);

wikEd.selectElement.replace.addEventListener('focus', function () { wikEd.SetComboOptions('replace'); }, false);

}

// register the clear summary click handler

if (wikEd.clearSummary !== null) {

wikEd.clearSummary.addEventListener('click', wikEd.ClearSummaryHandler, false);

}

// register double click handler on wiki preview area

if (wikEd.wikiPreview !== null) {

wikEd.wikiPreview.addEventListener('dblclick', wikEd.WikiPreviewHandler, false);

}

// register special char insert select handler for fullscreen resizing

if (wikEd.insertWrapper !== null) {

var select = wikEd.insertWrapper.getElementsByTagName('select')[0];

if (select !== undefined) {

select.addEventListener('change', wikEd.InsertChangeHandler, true);

}

}

// select the text on focus for find and replace fields, tab/shift-tab between find and replace fields

if (wikEd.findText !== null) {

wikEd.findText.addEventListener('focus', wikEd.FindReplaceHandler, true);

wikEd.findText.addEventListener('keydown', wikEd.FindReplaceHandler, true);

}

if (wikEd.replaceText !== null) {

wikEd.replaceText.addEventListener('focus', wikEd.FindReplaceHandler, true);

wikEd.replaceText.addEventListener('keydown', wikEd.FindReplaceHandler, true);

}

// check if dynamically inserted addon tags have to be removed: Web of Trust (WOT)

if (document.getElementById('wot-logo') !== null) {

wikEd.cleanNodes = true;

}

// override insertTags function used by standard button toolbar and editpage special chars with wikEd replacement

// window.mw.toolbar.insertTags

if ( (window.mw !== undefined) && (window.mw.toolbar !== undefined) && (typeof window.mw.toolbar.insertTags === 'function') ) {

if (wikEd.InsertTagsOriginal === null) {

wikEd.InsertTagsOriginal = window.mw.toolbar.insertTags;

}

window.mw.toolbar.insertTags = wikEd.InsertTags;

}

// deprecated insertTags function in wikibits.js

else if (typeof window.insertTags == 'function') {

if (wikEd.InsertTagsOriginal === null) {

wikEd.InsertTagsOriginal = window.insertTags;

}

window.insertTags = wikEd.InsertTags;

}

if (typeof jQuery == 'function') {

// hook wikEd into the enhanced new edit toolbar, not Greasemonkey compatible

jQuery('#wpTextbox1').bind('encapsulateSelection', function (e, before, inside, after) {

if (wikEd.useWikEd === true) {

wikEd.InsertTags(before, after, inside);

}

});

// allow other code to cause us to update the textarea via textSelection( 'getContents' )

try {

$( '#wpTextbox1' ).textSelection(

'register',

{

getContents: function () {

if ( wikEd && wikEd.useWikEd ) {

wikEd.UpdateTextarea();

}

return $( this ).val();

}

}

);

} catch ( e ) {

// catch `Error: Another textSelection API was already registered`

// When something else is registered should it unregister the existing one?

// Or should it detect this earlier and not run at all?

}

}

// update textarea before using UI LivePreview function, not Greasemonkey compatible

if ( (typeof jQuery == 'function') && (typeof window.mw == 'object') ) {

jQuery(window.mw).bind('LivePreviewPrepare', function (event) {

if (wikEd.useWikEd === true) {

wikEd.UpdateTextarea();

}

});

}

// override insertAtCursor function in wikia.com MediaWiki:Functions.js, not Greasemonkey compatible

if (typeof window.insertAtCursor == 'function') {

if (wikEd.InsertAtCursorOriginal === null) {

wikEd.InsertAtCursorOriginal = window.insertAtCursor;

}

window.insertAtCursor = wikEd.InsertAtCursor;

}

// reset error indicator

wikEd.SetLogo();

wikEd.turnedOn = true;

// get frame resize grip image dimensions

var resizeGripImage = document.createElement('img');

resizeGripImage.id = 'wikEdResizeGrip';

resizeGripImage.addEventListener('load', wikEd.ResizeGripLoadHandler, true);

resizeGripImage.src = wikEd.config.image['resizeGrip'];

// remove accesskeys that are defined in wikEd from page elements

wikEd.DeleteAccesskeys();

// disable CodeEditor button when wikEd is active

wikEd.DisableCodeEditorButton();

// run scheduled custom functions

wikEd.ExecuteHook(wikEd.config.setupHook);

// load and parse RegExTypoFix rules if the button is enabled

wikEd.LoadTypoFixRules();

// done with setup and turn-on

return;

};

//

// wikEd.GetPaths: get MediaWiki file paths from wikiGlobals if possible

//

wikEd.GetPaths = function () {

// init MediaWiki file paths for use in regexps

if (wikEd.wikiGlobals.wgServer !== undefined) {

wikEd.server = wikEd.wikiGlobals.wgServer;

}

if (wikEd.wikiGlobals.wgArticlePath !== undefined) {

wikEd.articlePath = wikEd.wikiGlobals.wgArticlePath;

}

if (wikEd.wikiGlobals.wgScriptPath !== undefined) {

wikEd.scriptPath = wikEd.wikiGlobals.wgScriptPath;

}

if (wikEd.wikiGlobals.wgScript !== undefined) {

wikEd.script = wikEd.wikiGlobals.wgScript;

}

wikEd.articlePath = wikEd.articlePath.replace(wikEd.server, '');

wikEd.scriptPath = wikEd.scriptPath.replace(wikEd.server, '');

wikEd.articlePath = wikEd.articlePath.replace(/\$1$/, '');

wikEd.scriptPath = wikEd.scriptPath.replace(/\/?$/, '/');

wikEd.scriptName = wikEd.script.replace(wikEd.scriptPath, '');

wikEd.scriptURL = wikEd.server + wikEd.scriptPath;

// prepare for use in regexps

wikEd.server = wikEd.server.replace(/(\W)/g, '\\$1');

wikEd.articlePath = wikEd.articlePath.replace(/(\W)/g, '\\$1');

wikEd.script = wikEd.script.replace(/(\W)/g, '\\$1');

wikEd.scriptPath = wikEd.scriptPath.replace(/(\W)/g, '\\$1');

wikEd.scriptName = wikEd.scriptName.replace(/(\W)/g, '\\$1');

return;

};

//

// wikEd.FrameLoadHandler: load handler for iframe

// Chrome fires iframe load event immediately after element creation, Firefox fires much later and then deletes already added content

wikEd.FrameLoadHandler = function (event) {

// remove event listener

wikEd.frame.removeEventListener('load', wikEd.FrameLoadHandler, false);

// set frame loaded flag

wikEd.frameLoaded = true;

return;

};

//

// wikEd.InitializeFrame: initialize editing iframe after loading

//

wikEd.InitializeFrame = function () {

// remove event listener

wikEd.frame.removeEventListener('load', wikEd.InitializeFrame, false);

// get object shortcuts

wikEd.frameWindow = wikEd.frame.contentWindow;

wikEd.frameDocument = wikEd.frameWindow.document;

wikEd.frameHtml = wikEd.frameDocument.documentElement;

wikEd.frameBody = wikEd.frameDocument.body;

if (!wikEd.frameBody) {

return;

}

// set frame body properties

if (wikEd.highlightSyntax === true) {

if (wikEd.refHide === true) {

wikEd.frameBody.className = 'wikEdFrameBodyNewbie';

}

else {

wikEd.frameBody.className = 'wikEdFrameBodySyntax';

}

}

else {

wikEd.frameBody.className = 'wikEdFrameBodyPlain';

}

wikEd.frameBody.contentEditable = 'true';

if (wikEd.noSpellcheck === true) {

wikEd.frameBody.spellcheck = 'false';

}

// disable table resizing controls in Firefox

try {

wikEd.frameDocument.execCommand('enableObjectResizing', false, 'false');

wikEd.frameDocument.execCommand('enableInlineTableEditing', false, 'false');

}

catch (exception) {

}

// display iframe, hide textarea, set fullscreen

wikEd.SetEditArea(wikEd.useWikEd, true);

// add frame stylesheets

wikEd.frameHtml.className = 'wikEdFrameHtml';

wikEd.direction = wikEd.GetStyle(document.body, 'direction');

wikEd.frameBody.style.direction = wikEd.direction;

wikEd.ApplyCSS(wikEd.frameDocument, wikEd.config.frameCSS);

wikEd.HighlightNamedHideButtonsStylesheet = new wikEd.StyleSheet(wikEd.frameDocument);

// copy textarea background style

wikEd.textareaBackgroundColor = wikEd.GetStyle(wikEd.textarea, 'backgroundColor');

if (wikEd.config.frameBackgroundColor === true) {

wikEd.frameInner.style.setProperty('background-color', wikEd.textareaBackgroundColor);

}

// adjust font size (px)

wikEd.textSizeInit = parseFloat(wikEd.GetStyle(wikEd.textarea, 'fontSize')) * wikEd.config.textSizeAdjust / 100;

wikEd.textSize = wikEd.textSizeInit;

wikEd.frameBody.style.fontSize = wikEd.textSize + 'px';

// copy textarea content into iframe and focus

if (wikEd.useWikEd === true) {

wikEd.ScanPreviewRedlinks();

wikEd.UpdateFrame();

if ( (wikEd.config.focusEdit === true) && (wikEd.previewPage === false) && (wikEd.editSemanticForm === false) ) {

wikEd.frameBody.focus();

}

}

// make read only

if (wikEd.readOnly === true) {

wikEd.frameBody.contentEditable = 'false';

}

// register frame events

wikEd.frameDocument.addEventListener('keydown', wikEd.KeyFrameHandler, true);

wikEd.frameDocument.addEventListener('keyup', wikEd.KeyFrameHandler, true);

wikEd.frameDocument.addEventListener('keypress', wikEd.KeyFrameHandler, true);

wikEd.frameDocument.addEventListener('click', wikEd.KeyFrameHandler, true);

wikEd.frameDocument.addEventListener('keydown', wikEd.KeyHandler, true);

wikEd.frameDocument.addEventListener('mousemove', wikEd.ResizeGripHandler, true);

wikEd.frameDocument.addEventListener('dblclick', wikEd.ResizeFrameResetHandler, true);

// register paste events

wikEd.frameDocument.addEventListener('paste', wikEd.PasteFrameHandler, true);

wikEd.frameDocument.addEventListener('drop', wikEd.PasteFrameHandler, true);

wikEd.frameDocument.addEventListener('paste', wikEd.KeyFrameHandler, true);

// fullscreen mode

if (wikEd.fullScreenMode === true) {

wikEd.FullScreen(true, true);

}

// needed for upload and edit raw watchlist

else {

wikEd.ResizeWindowHandler();

}

// unload (leaving page) events

window.addEventListener('pagehide', wikEd.UnloadHandler, false);

return;

};

//

// wikEd.CodeEditorCheck: check for active code editor and .js or .css page

//

wikEd.CodeEditorCheck = function () {

wikEd.jsPage = false;

wikEd.cssPage = false;

wikEd.useCodeEditor = false;

// check if .js or .css page

if ( (wikEd.wikiGlobals.wgCanonicalNamespace == 'MediaWiki') || ( (wikEd.wikiGlobals.wgCanonicalNamespace == 'User') && (wikEd.wikiGlobals.wgTitle.indexOf('/') >= 0) ) ) {

if (/\.js$/.test(wikEd.wikiGlobals.wgTitle) === true) {

wikEd.jsPage = true;

}

else if (/\.css$/.test(wikEd.wikiGlobals.wgTitle) === true) {

wikEd.cssPage = true;

}

}

// check for code editor cookies

if ( ( wikEd.jsPage === true ) || ( wikEd.cssPage === true ) ) {

if ( wikEd.wikiGlobals.wgPageContentModel === undefined ) {

if ( wikEd.GetCookie( 'wikiEditor-0-codeEditor-enabled' ) == 1 ) {

wikEd.useCodeEditor = true;

}

}

else if ( wikEd.wikiGlobals.wgPageContentModel != 'wikitext' ) {

if ( wikEd.GetCookie( 'wikiEditor-0-codeEditor-enabled' ) == 1 ) {

wikEd.useCodeEditor = true;

}

}

}

// this can't work 100 %, because async...

// not a problem for gadget, as it ensures this dependency is loaded

if (

( window.mw !== undefined ) &&

( window.mw.loader !== undefined ) &&

( window.mw.loader.using !== undefined )

) {

window.mw.loader.using( 'user.options' ).then(

function() {

if (

( ( wikEd.jsPage === true ) || ( wikEd.cssPage === true) ) &&

(window.mw.user.options.get( 'usebetatoolbar' ) == 1 )

) {

wikEd.useBetaToolbar = true;

if ( window.mw.user.options.get('usecodeeditor') == 1 ) {

wikEd.useCodeEditor = true;

}

}

// CodeMirror extension for syntax highlighting

if ( window.mw.user.options.get('codemirror-syntax-highlight') == 1 ) {

wikEd.useCodeMirror = true;

}

}

);

}

return;

};

//

// wikEd.DisableCodeEditorButton: disable CodeEditor button when wikEd is active

//

wikEd.DisableCodeEditorButton = function () {

if ( (wikEd.config.disableCodeEditorButton === true) && ( (wikEd.useBetaToolbar === true) || (wikEd.wikiEditorBar !== null) ) ) {

var buttons = document.body.getElementsByClassName('tool-button');

var disabled = false;

for (var i = 0; i < buttons.length; i ++) {

var rel = buttons[i].getAttribute('rel');

var title = buttons[i].getAttribute('title');

if (rel == 'codeEditor') {

var buttonClone = buttons[i].cloneNode(true);

buttonClone.setAttribute('rel', rel + '_disabled_by_wikEd');

buttonClone.setAttribute('title', title + wikEd.config.text['wikEdCodeEditorButtonDisabled']);

buttons[i].style.display = 'none';

buttons[i].parentNode.insertBefore(buttonClone, buttons[i]);

disabled = true;

break;

}

}

// poll between 0.1 and 12 s

if ( (disabled === false) && (wikEd.codeEditorButtonPollCount < 15) ) {

var delay = 100 + wikEd.codeEditorButtonPollCount * 100;

wikEd.codeEditorButtonPollCount ++;

window.setTimeout(wikEd.DisableCodeEditorButton, delay);

}

}

return;

};

//

// wikEd.DeleteAccesskeys: remove accesskeys that are defined in wikEd from page elements

//

wikEd.DeleteAccesskeys = function () {

var accesskeyTags = ['textarea', 'input', 'a'];

for (var i = 0; i < accesskeyTags.length; i ++) {

var accesskeyElements = document.getElementsByTagName(accesskeyTags[i]);

for (var j = 0; j < accesskeyElements.length; j ++) {

var attribute = accesskeyElements[j].getAttribute('accesskey');

if (attribute !== null) {

if (wikEd.buttonKeyCode[ attribute.toUpperCase().charCodeAt(0) ] !== undefined) {

accesskeyElements[j].setAttribute('accesskey', null);

}

}

}

}

return;

};

//

// wikEd.AutoUpdate: check for the latest version and force-reload to update

//

wikEd.AutoUpdate = function () {

// check only on non-interaction pages

if (/(\?|&)action=/.test(window.location.search) === true) {

return;

}

// check if autoupdate is enabled

if (wikEd.config.autoUpdate !== true) {

return;

}

// install bugfix (fix script duplication after @namespace change in version 0.9.127)

if (wikEd.greasemonkey === true) {

var currentVersion = wikEd.VersionToNumber(wikEd.programVersion);

if (currentVersion < 9127000) {

var updatePopup = wikEd.config.text.wikEdGreasemonkeyAutoUpdateBugfix;

var updateURL = wikEd.config.autoUpdateScriptUrlBugfix;

var protocol = document.location.href.replace(/\/\/.*/, '');

updateURL = updateURL.replace(/^(?=\/\/)/, protocol);

updatePopup = updatePopup.replace(/\{updateURL\}/g, updateURL);

window.alert(updatePopup);

window.location.href = updateURL;

}

}

// check for forced update check

var forcedUpdate = false;

if (wikEd.config.forcedUpdate !== '') {

// get version numbers from strings

var currentVersion = wikEd.VersionToNumber(wikEd.programVersion);

var forcedVersion = wikEd.VersionToNumber(wikEd.config.forcedUpdate);

// schedule forced update check

if ( (currentVersion !== ) && (forcedVersion !== ) ) {

if (forcedVersion > currentVersion) {

forcedUpdate = true;

}

}

}

// check for regular update

var regularUpdate = false;

var currentDate = new Date();

if (forcedUpdate === false) {

// get date of last update check

var lastCheckStr = wikEd.GetPersistent('wikEdAutoUpdate');

var lastCheckDate = new Date(lastCheckStr);

// fix missing or corrupt saved setting

if (isNaN(lastCheckDate.valueOf()) === true) {

wikEd.SetPersistent('wikEdAutoUpdate', 'January 1, 1970', 0, '/');

return;

}

// get the hours since last update check

var diffHours = (currentDate - lastCheckDate) / 1000 / 60 / 60;

if (wikEd.greasemonkey === true) {

if (diffHours > wikEd.config.autoUpdateHoursGM) {

regularUpdate = true;

}

}

else if (diffHours > wikEd.config.autoUpdateHours) {

regularUpdate = true;

}

}

// perform AJAX request to get latest version number

if ( (forcedUpdate === true) || (regularUpdate === true) ) {

// save current update check date

wikEd.SetPersistent('wikEdAutoUpdate', currentDate.toUTCString(), 0, '/');

// make the ajax request

wikEd.AjaxRequest('GET', wikEd.config.autoUpdateUrl, null, 'text/plain', function (ajax) {

// get response

var html = ajax.responseText;

// get version numbers from strings

var currentVersion = wikEd.VersionToNumber(wikEd.programVersion);

var newVersion = wikEd.VersionToNumber(html);

// check if downloaded version is newer and perform update

if ( (currentVersion !== ) && (newVersion !== ) ) {

if (newVersion > currentVersion) {

wikEd.DoUpdate();

}

}

});

}

return;

};

//

// wikEd.VersionToNumber: parse version string (1.22.333a) into number 122333097

//

wikEd.VersionToNumber = function (versionStr) {

var regExpMatchVer = versionStr.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);

if (regExpMatchVer === null) {

return '';

}

var versionNumber = Number(regExpMatchVer[1]) * 100000000 + Number(regExpMatchVer[2]) * 1000000 + Number(regExpMatchVer[3]) * 1000 + (regExpMatchVer[4] + '0').charCodeAt(0);

return versionNumber;

};

//

// wikEd.DoUpdate: actually perform update

//

wikEd.DoUpdate = function () {

// update Greasemonkey script by navigating to the script code page

if (wikEd.greasemonkey === true) {

var updatePopup = wikEd.config.text.wikEdGreasemonkeyAutoUpdate;

updatePopup = updatePopup.replace(/\{updateURL\}/g, wikEd.config.autoUpdateUrl);

window.alert(updatePopup);

window.location.href = wikEd.config.autoUpdateScriptUrl;

}

// update wikEd by reloading the page with cache bypassing (equivalent to Shift-Reload or Shift-F5)

else {

window.location.reload(true);

}

return;

};

//

// wikEd.LoadTypoFixRules: load and parse RegExTypoFix rules if the button is enabled

//

wikEd.LoadTypoFixRules = function () {

// load RegExTypoFix rules per Ajax if enabled

if ( (wikEd.config.regExTypoFix === false) || (wikEd.readOnly === true) || (wikEd.typoRulesFind.length > 0) ) {

return;

}

// make the ajax request

var sep = '&';

if (wikEd.config.regExTypoFixURL.indexOf('?') == -1) {

sep = '?';

}

wikEd.AjaxRequest('GET', wikEd.config.regExTypoFixURL + sep + wikEd.programVersion, null, 'text/plain', function (ajax) {

// get response

var rulesTxt = ajax.responseText;

// parse regexp rules

var regExp = /<(?:Typo)?\s+(?:word="(.*?)"\s+)?find="(.*?)"\s+replace="(.*?)"\s*\/?>/g;

var regExpMatch;

while ( (regExpMatch = regExp.exec(rulesTxt)) !== null) {

// check if this is a valid regexp

var regExpFind;

try {

regExpFind = new RegExp(regExpMatch[2], 'gm');

}

catch (exception) {

var msg = 'Invalid RegExTypoFix rule:\nfind=' + regExpMatch[2] + '\nreplace=' + regExpMatch[3];

wikEd.ConsoleLog(msg);

continue;

}

// save regexp and replace

wikEd.typoRulesFind.push(regExpFind);

wikEd.typoRulesReplace.push(regExpMatch[3]);

}

// display typo fix button

if (wikEd.typoRulesFind.length > 0) {

if (wikEd.fixRegExTypo !== null) {

wikEd.fixRegExTypo.style.display = 'inline';

}

}

return;

});

return;

};

//

// wikEd.EditButtonHandler: handler for clicks on edit buttons

//

wikEd.EditButtonHandler = function (event) {

// execute the button click handler code, obj required in eval context

var obj = event.currentTarget;

eval(wikEd.editButtonHandler[obj.id]);

return;

};

//

// wikEd.ShrinkSummaryHandler: shrink the summary after loading the 'Clear summary' image

//

wikEd.ShrinkSummaryHandler = function (event) {

var diffWidth = wikEd.clearSummary.offsetWidth - wikEd.clearSummaryWidth;

wikEd.inputElement.summary.style.width = (wikEd.inputElement.summary.offsetWidth - diffWidth) + 'px';

wikEd.selectElement.summary.style.width = (wikEd.selectElement.summary.offsetWidth - diffWidth) + 'px';

wikEd.clearSummaryWidth = wikEd.clearSummary.offsetWidth;

return;

};

//

// wikEd.InsertChangeHandler: resize fullscreen after changing insert special char selection

//

wikEd.InsertChangeHandler = function (event) {

if (wikEd.fullscreen === true) {

wikEd.ResizeWindowHandler();

}

};

//

// wikEd.ResizeWindowHandler: adjust fullscreen frame and summary width after resizing the window

// browser's dynamic table resizing interferes if wikEd is inserted in table (Special:Upload)

wikEd.ResizeWindowHandler = function (event) {

// fullscreen resizing

if (wikEd.fullscreen === true) {

var captchaHeight = wikEd.captchaWrapper.offsetHeight;

var debugHeight = wikEd.debugWrapper.offsetHeight;

var buttonsHeight = wikEd.buttonsWrapper.offsetHeight;

var consoleTopHeight = 0;

if (wikEd.consoleTopWrapper !== null) {

consoleTopHeight = wikEd.consoleTopWrapper.offsetHeight;

}

var consoleHeight = wikEd.consoleWrapper.offsetHeight;

var insertHeight = 0;

if (wikEd.insertWrapper !== null) {

insertHeight = wikEd.insertWrapper.offsetHeight;

}

var windowHeight = window.innerHeight;

var frameHeight = windowHeight - captchaHeight - debugHeight - buttonsHeight - consoleTopHeight - consoleHeight - insertHeight - wikEd.frameBorderHeight;

if (frameHeight < 100) {

frameHeight = 100;

}

wikEd.frame.style.height = frameHeight + 'px';

wikEd.frame.style.width = (wikEd.frameWrapper.clientWidth - wikEd.frameBorderWidth) + 'px';

}

// adjust frame size

else {

wikEd.frameWidth = (wikEd.frameWrapper.clientWidth - wikEd.frameBorderWidth) + 'px';

wikEd.frame.style.height = wikEd.frameHeight;

wikEd.frame.style.width = wikEd.frameWidth;

}

wikEd.ResizeSummary();

return;

};

//

// wikEd.WikiPreviewHandler: event handler for wiki preview: scroll to edit field on double click

//

wikEd.WikiPreviewHandler = function (event) {

// filter out selecting double clicks on text

var sel = window.getSelection();

// explicitOriginalTarget (Firefox)

var textTarget = event.explicitOriginalTarget;

if (textTarget !== undefined) {

if (textTarget.nodeName == '#text') {

return;

}

}

// ignore for non-blank selection

else if ( (sel !== null) && (/^\s*$/.test(sel.toString()) === false) ) {

return;

}

sel.collapseToEnd();

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper));

return;

};

//

// wikEd.UnloadHandler: save editing frame to cached textarea

//

wikEd.UnloadHandler = function (event) {

// update textarea if not already done in submit handlers

if (wikEd.useWikEd === true) {

if (wikEd.textareaUpdated === false) {

wikEd.UpdateTextarea();

}

}

return;

};

//

// wikEd.SaveButtonHandler: 'Save page' onsubmit click handler for submit button

//

wikEd.SaveButtonHandler = function (event) {

wikEd.saveButton.removeEventListener('click', wikEd.SaveButtonHandler, true);

// update textarea

if (wikEd.useWikEd === true) {

wikEd.UpdateTextarea();

wikEd.textareaUpdated = true;

}

// check for interfering scripts or gadgets: mwEmbed for file uploads

if ( (wikEd.editUpload === true) && (window.MW_EMBED_VERSION !== undefined) ) {

wikEd.saveButton.addEventListener('click', wikEd.SaveButtonHandler, true);

return;

}

// add "using wikEd" to summary, not for adding a new section (+ tab)

if (wikEd.summaryText !== null) {

var text = wikEd.summaryText.value;

text = text.replace(/^[, ]+/, '');

text = text.replace(/[, ]+$/, '');

wikEd.AddToHistory('summary');

if ( (wikEd.using === true) && (text !== '') ) {

if (text.lastIndexOf(wikEd.config.summaryUsing) < 0) {

if (wikEd.addNewSection !== true) {

text += ' ' + wikEd.config.summaryUsing;

}

}

}

wikEd.summaryText.value = text;

}

// submit

wikEd.saveButton.click();

// reinstate handler in case the browser back button will be used

wikEd.saveButton.addEventListener('click', wikEd.SaveButtonHandler, true);

return;

};

//

// wikEd.PreviewButtonHandler: 'Show preview' click handler

//

wikEd.PreviewButtonHandler = function (event) {

if (wikEd.useWikEd === true) {

wikEd.UpdateTextarea();

wikEd.textareaUpdated = true;

}

return;

};

//

// wikEd.DiffPreviewButtonHandler: 'Show changes' click handler

//

wikEd.DiffPreviewButtonHandler = function (event) {

// interrupt fullscreen mode

if (wikEd.fullscreen === true) {

wikEd.FullScreen(false);

}

if (wikEd.useWikEd === true) {

wikEd.UpdateTextarea();

wikEd.textareaUpdated = true;

}

return;

};

//

// wikEd.LinkifyHandler: open innermost highlighted link in new window/tab on ctrl/meta-click

//

wikEd.LinkifyHandler = function (event) {

if ( (event.shiftKey === false) && ( (event.ctrlKey === true) || (event.metaKey === true) ) && (event.altKey === false) ) {

var node = event.target;

while (node !== null) {

var id = node.id;

if ( (id !== null) && (id.indexOf('wikEdWikiLink') === 0) ) {

if (Object.prototype.hasOwnProperty.call(wikEd.wikiLinks, id) === true) {

var linkUrl = wikEd.wikiLinks[id].url;

event.stopPropagation();

window.open(linkUrl);

window.focus();

break;

}

}

node = node.parentNode;

}

}

return;

};

//

// wikEd.ButtonBarGripHandler: click, mouseover handler, see also wikEd.ButtonBarInit()

//

wikEd.ButtonBarGripHandler = function (event) {

event.stopPropagation();

var grip = event.target;

var gripWrapper = grip.parentNode;

var buttonsWrapper = gripWrapper.nextSibling;

var barInnerWrapper = gripWrapper.parentNode;

var bar = barInnerWrapper.parentNode;

if (event.type == 'click') {

buttonsWrapper.style.position = 'static';

// hide the buttons bar

if (buttonsWrapper.className != 'wikEdButtonBarButtonsWrapperHidden') {

buttonsWrapper.className = 'wikEdButtonBarButtonsWrapperHidden';

barInnerWrapper.className = 'wikEdButtonBarInnerWrapperHidden';

gripWrapper.className = 'wikEdButtonBarGripWrapperHidden';

wikEd.buttonsWrapperWidth[bar.id] = buttonsWrapper.offsetWidth;

buttonsWrapper.style.display = 'none';

grip.addEventListener('mouseover', wikEd.ButtonBarGripHandler, false);

wikEd.SetPersistent(bar.id + 'Hidden', '1', 0, '/');

}

// unhide the buttons bar

else {

buttonsWrapper.className = 'wikEdButtonBarButtonsWrapperVisible';

barInnerWrapper.className = 'wikEdButtonBarInnerWrapperVisible';

gripWrapper.className = 'wikEdButtonBarGripWrapperVisible';

buttonsWrapper.style.display = 'block';

grip.removeEventListener('mouseover', wikEd.ButtonBarGripHandler, false);

wikEd.SetPersistent(bar.id + 'Hidden', '0', 0, '/');

}

}

// show the buttons bar on mouseover

else if (event.type == 'mouseover') {

if (buttonsWrapper.className == 'wikEdButtonBarButtonsWrapperHidden') {

bar.addEventListener('mouseout', wikEd.ButtonBarHandler, false);

// browsers sometimes give offsetTop/offsetLeft - 1, + 0.5 seems to help

// show buttons to the right

if (bar.offsetParent.clientWidth > grip.offsetLeft + grip.offsetWidth + wikEd.buttonsWrapperWidth[bar.id] + 0.5) {

buttonsWrapper.style.left = (grip.offsetLeft + grip.offsetWidth + 0.5) + 'px';

}

// show buttons to the left

else {

buttonsWrapper.style.left = (gripWrapper.offsetLeft - wikEd.buttonsWrapperWidth[bar.id] + 0.5) + 'px';

}

buttonsWrapper.style.top = (gripWrapper.offsetTop + 0.5) + 'px';

buttonsWrapper.style.position = 'absolute';

buttonsWrapper.style.display = 'block';

}

}

return;

};

//

// wikEd.ButtonBarHandler: mouseout handler

//

wikEd.ButtonBarHandler = function (event) {

event.stopPropagation();

var bar = event.currentTarget;

var barInnerWrapper = bar.firstChild;

var gripWrapper = barInnerWrapper.firstChild;

var grip = gripWrapper.firstChild;

var buttonsWrapper = gripWrapper.nextSibling;

var buttons = buttonsWrapper.firstChild;

// hide the buttons

if (event.type == 'mouseout') {

if (buttonsWrapper.className == 'wikEdButtonBarButtonsWrapperHidden') {

// filter the events for mouseouts actually leaving the bar

if (

(

( (event.target == grip) || (event.target == gripWrapper) ) &&

(event.relatedTarget != gripWrapper) && (event.relatedTarget != buttonsWrapper) && (event.relatedTarget != buttons) && (event.relatedTarget.parentNode != buttons)

) ||

(

( (event.target.parentNode.parentNode == buttons) || (event.target.parentNode == buttons) || (event.target == buttons) || (event.target == buttonsWrapper) ) &&

(event.relatedTarget.parentNode.parentNode != buttons) && (event.relatedTarget.parentNode != buttons) && (event.relatedTarget != buttons) && (event.relatedTarget != buttonsWrapper) && (event.relatedTarget != gripWrapper) && (event.relatedTarget != grip)

)

) {

bar.removeEventListener('mouseout', wikEd.ButtonBarHandler, false);

buttonsWrapper.style.display = 'none';

buttonsWrapper.style.position = 'static';

}

}

}

return;

};

//

// clear the summary click handler

//

wikEd.ClearSummaryHandler = function (event) {

event.preventDefault();

// clear the summary if it is only a paragraph name

if ( /^\/\* .*? \*\/ *$/.test(wikEd.summaryText.value) === true) {

wikEd.summaryText.value = '';

}

// clear the summary but leave paragraph names

else {

wikEd.summaryText.value = wikEd.summaryText.value.replace(/^((\/\* .*? \*\/ *)?).*()/,

function(p, p1, p2, p3) {

if (p1.length > 0) {

p1 = p1 + ' ';

}

return p1;

}

);

}

wikEd.summaryText.focus();

return;

};

//

// wikEd.FindReplaceHandler: find and replace: tab and shift-tab between fields, select on focus

//

wikEd.FindReplaceHandler = function (event) {

// tab / shift-tab between fields

if (event.type == 'keydown') {

if (event.keyCode == 9) {

if (event.target == wikEd.findText) {

event.preventDefault();

wikEd.replaceText.removeEventListener('focus', wikEd.FindReplaceHandler, true);

wikEd.replaceText.focus();

wikEd.replaceText.addEventListener('focus', wikEd.FindReplaceHandler, true);

}

else if (event.target == wikEd.replaceText) {

event.preventDefault();

wikEd.findText.removeEventListener('focus', wikEd.FindReplaceHandler, true);

wikEd.findText.focus();

wikEd.findText.addEventListener('focus', wikEd.FindReplaceHandler, true);

}

}

}

// select on focus

else if (event.type == 'focus') {

event.target.setSelectionRange(0, this.textLength);

}

return;

};

//

// wikEd.KeyFrameHandler: event handler for key and mouse events in the frame

//

wikEd.KeyFrameHandler = function (event) {

if (wikEd.useWikEd === true) {

// textarea no longer up to date

if ( event.type == 'paste' ) {

wikEd.textareaUpdated = false;

}

// invalidate wikify/textify of recently pasted text and textarea status for printable char key presses

else if ( (event.type == 'keydown') || (event.type == 'keypress') ) {

switch (event.keyCode) {

// keys that do not change text

case 16: // shift

case 17: // ctrl

case 18: // alt

case 19: // pause/break

case 20: // caps lock

case 33: // page up

case 34: // page down

case 35: // end

case 36: // home

case 37: // left

case 38: // up

case 39: // right

case 40: // down

case 45: // insert

case 91: // windows left

case 91: // windows right

case 93: // select

case 112: // F1

case 113: // F2

case 114: // F3

case 115: // F4

case 116: // F5

case 117: // F6

case 118: // F7

case 119: // F8

case 120: // F9

case 121: // F10

case 122: // F11

case 123: // F12

case 144: // num lock

case 145: // scroll lock

case 182: // my computer

case 183: // my calculator

case 224: // apple

break;

// escape ends wikify/textify, all others change text

default:

// textarea no longer up to date

if (event.keyCode !== 27) { // escape

wikEd.textareaUpdated = false;

}

// invalidate wikify/textify

wikEd.PastedOff();

}

}

switch (event.type) {

// keydown event

case 'keydown':

switch (event.keyCode) {

// tab key, switch between form elements instead of adding multiple spaces

case 9:

if ( (event.shiftKey === false) && (event.ctrlKey === false) && (event.altKey === false) && (event.metaKey === false) ) {

event.preventDefault();

// focus the next form element

if (wikEd.addNewSection === true) {

document.getElementById('wpMinoredit').focus();

}

else {

wikEd.summaryText.focus();

}

// scroll to text input top

if (wikEd.fullscreen === false) {

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper));

}

}

break;

}

break;

// after cursor movements set cursor position into closest highest text node so that highlighting does not bleed out

case 'keyup':

switch (event.keyCode) {

case 17: // ctrl-v

case 46: // del

wikEd.AntiHighlightBleeding({});

break;

case 37: // left

case 38: // up

case 33: // page up

case 8: // backspace

wikEd.AntiHighlightBleeding({}, null, 'left');

break;

case 39: // right

case 40: // down

case 34: // page down

wikEd.AntiHighlightBleeding({}, null, 'right');

break;

}

break;

case 'click':

wikEd.AntiHighlightBleeding({});

// invalidate wikify/textify of recently pasted text after selecting text

if ( (wikEd.paste !== null) && (wikEd.paste.polling === false) ) {

var sel = wikEd.GetSelection();

if (sel.isCollapsed === false) {

// check if clicking into selected pasted text

var range = sel.getRangeAt(0);

if (range != wikEd.keepSelRange) {

wikEd.PastedOff();

}

}

}

// run through, no break

case 'keypress':

case 'paste':

// grey out inactive buttons

wikEd.InactiveButtons();

}

}

return;

};

//

// wikEd.PasteFrameHandler: event handler for paste and drop events in the edit frame

//

wikEd.PasteFrameHandler = function (event) {

if (wikEd.useWikEd !== true) {

event.stopPropagation();

wikEd.paste = null;

return;

}

var sel = wikEd.GetSelection();

var range = sel.getRangeAt(0);

// ignore if still processing previous event

if ( (wikEd.paste !== null) && (wikEd.paste.polling === false) ) {

return;

}

wikEd.paste = {

eventType: event.type,

atStart: false,

polling: true,

blockStart: false,

blockEnd: false,

pasteAtEndOfLine: false,

offset: null,

prevNode: null,

prevUp: null,

parent: null,

prevNodeIndex: null,

rangeStartNode: null,

rangeStartOffset: null,

rangeStartAfter: null,

last: '',

dropHtml: null,

sel: sel,

range: range

};

// get position info before event is performed

var startNode = range.startContainer;

var startOffset = range.startOffset;

var endNode = range.endContainer;

var endOffset = range.endOffset;

switch (event.type) {

// drop

case 'drop':

if (event.dataTransfer === undefined) {

return;

}

wikEd.paste.dropHtml = event.dataTransfer.getData('text/html');

break;

// paste

case 'paste':

// find first previous node up as anchor to recover start node after insertion

wikEd.PasteFindPreviousNode();

break;

}

// needed to check if pasted content has been added to frame

wikEd.paste.startNode = startNode;

wikEd.paste.startOffset = startOffset;

wikEd.paste.endNode = endNode;

wikEd.paste.endOffset = endOffset;

wikEd.paste.startNodePreviousSibling = startNode.previousSibling;

wikEd.paste.startNodeNextSibling = startNode.nextSibling;

wikEd.paste.endNodePreviousSibling = endNode.previousSibling;

wikEd.paste.endNodeNextSibling = endNode.nextSibling;

// detect and process pasted content in edit frame by polling

wikEd.paste.pollCount = 1;

window.setTimeout(wikEd.PastePoll, 1);

return;

};

//

// wikEd.PasteFindPreviousNode: find first previous node up relative to selection as an anchor to recover start node after insertion

//

wikEd.PasteFindPreviousNode = function () {

var sel = wikEd.paste.sel;

var range = sel.getRangeAt(0);

var node = range.startContainer;

var offset = range.startOffset;

var prevNode = node.previousSibling;

// correct startNode into leaf node

if ( (node.nodeName != '#text') && (offset > 0) ) {

var childs = node.childNodes;

if ( (childs.length > 0) && (offset < childs.length) ) {

node = childs.item(offset);

offset = 0;

prevNode = node.previousSibling;

}

}

// test for paste at end of line after br

if ( (node.nodeName == '#text') && (offset == node.textContent.length) ) {

if ( (node.nextSibling !== null) && (node.nextSibling.nodeName == 'BR') ) {

wikEd.paste.pasteAtEndOfLine = true;

}

}

else if (node.nodeName == 'BR') {

// not in empty line

if ( (node.previousSibling === null) || (node.previousSibling.nodeName != 'BR') ) {

wikEd.paste.pasteAtEndOfLine = true;

}

}

// correct
into previous text node

if ( (node.nodeName == 'BR') && (prevNode !== null) && (prevNode.nodeName == '#text') ) {

node = prevNode;

offset = node.textContent.length;

prevNode = node.previousSibling;

}

// ascend to first node with a previous sibling

var prevUp = 0;

while ( (node != wikEd.frameBody) && (prevNode === null) ) {

node = node.parentNode;

prevUp ++;

prevNode = node.previousSibling;

}

// save paste location reference to drop object

if ( (node == wikEd.frameBody) && (offset === 0) ) {

wikEd.paste.atStart = true;

}

else {

wikEd.paste.offset = offset;

wikEd.paste.prevNode = prevNode;

wikEd.paste.prevUp = prevUp;

// find prevNode index

wikEd.paste.parent = prevNode.parentNode;

wikEd.paste.prevNodeIndex = null;

var parentNodes = wikEd.paste.parent.childNodes;

for (var i = 0; i < parentNodes.length; i ++) {

if (prevNode === parentNodes.item(i)) {

wikEd.paste.prevNodeIndex = i;

break;

}

}

}

return;

};

//

// wikEd.PastePoll: detect and process pasted content in edit frame by polling

//

wikEd.PastePoll = function () {

if (!wikEd.paste) {

return;

}

if (wikEd.paste.pollCount > 100) {

wikEd.paste = null;

return;

}

var sel = wikEd.paste.sel;

var range = sel.getRangeAt(0);

var startNode = range.startContainer;

var startOffset = range.startOffset;

var endNode = range.endContainer;

var endOffset = range.endOffset;

// check if pasted content has already been added to frame

if (

(startNode === wikEd.paste.startNode) &&

(startOffset === wikEd.paste.startOffset) &&

(endNode === wikEd.paste.endNode) &&

(endOffset === wikEd.paste.endOffset) &&

(startNode.previousSibling === wikEd.paste.startNodePreviousSibling) &&

(startNode.nextSibling === wikEd.paste.startNodeNextSibling) &&

(endNode.previousSibling === wikEd.paste.endNodePreviousSibling) &&

(endNode.nextSibling === wikEd.paste.endNodeNextSibling)

) {

// schedule next poll, typically requires only one or two polls

wikEd.paste.pollCount ++;

window.setTimeout(wikEd.PastePoll, 1);

return;

}

wikEd.paste.polling = false;

// select dropped or pasted text; Chrome selects pasted text automatically

if (range.collapsed === true) {

switch (wikEd.paste.eventType) {

// drop

case 'drop':

if (wikEd.paste.dropHtml !== null) {

// plainTextify dropHtml

var div = document.createElement('div');

div.innerHTML = wikEd.paste.dropHtml;

var obj = {};

wikEd.GetInnerHTML(obj, div);

var plainText = obj.plain;

plainText = plainText.replace(/</g, '<');

plainText = plainText.replace(/>/g, '>');

plainText = plainText.replace(/&/g, '&');

// select using backwards built-in find

if ( (typeof wikEd.frameWindow.find == 'function') && (plainText.length > 0) ) {

// Chrome (but keeps selection in first place)

var found = wikEd.Find(obj, plainText, true, true, false, false);

// Firefox (removes \n)

if (found === false) {

var plainTextCrop = plainText.replace(/\n+/g, '');

found = wikEd.Find(obj, plainTextCrop, true, true, false, false);

if (found === true) {

// extend selection into removed \n

range = sel.getRangeAt(0);

// extend left

var regExpMatchStart = /^\n+/.exec(plainText);

if (regExpMatchStart !== null) {

var newlines = regExpMatchStart[0].length;

var node = range.startContainer;

var offset = range.startOffset;

if ( (node.nodeName == '#text') && (offset === 0) ) {

for (var i = 0; i < newlines; i ++) {

var nextNode = node.previousSibling;

if ( (nextNode === null) || (nextNode.nodeName != 'BR') ) {

break;

}

node = nextNode;

}

if (node.nodeName == 'BR') {

range.setStartBefore(node);

}

}

}

// extend right

var regExpMatchEnd = /\n+$/.exec(plainText);

if (regExpMatchEnd !== null) {

var newlines = regExpMatchEnd[0].length;

var node = range.endContainer;

var offset = range.endOffset;

if ( (node.nodeName == '#text') && (offset == node.textContent.length) ) {

for (var i = 0; i < newlines; i ++) {

var nextNode = node.nextSibling;

if ( (nextNode === null) || (nextNode.nodeName != 'BR') ) {

break;

}

node = nextNode;

}

if (node.nodeName == 'BR') {

range.setEndAfter(node);

}

}

}

}

}

}

}

break;

// paste

case 'paste':

wikEd.SelectPasted();

break;

}

}

range = sel.getRangeAt(0);

wikEd.paste.range = range.cloneRange();

wikEd.EditButton(null, 'wikEdPasting');

if (wikEd.paste === null) {

return;

}

// display floating pasted toolbar

if (range.getClientRects === undefined) {

wikEd.buttonBarPasted.style.left = '1px';

wikEd.buttonBarPasted.style.top = '1px';

}

// get cursor rectangle position

else {

var barWidth = wikEd.buttonBarPasted.offsetWidth;

var barHeight = wikEd.buttonBarPasted.offsetHeight;

// extend collapsed caret range to start, get last line coords

range.setStart(wikEd.frameBody, 0);

var rectList = range.getClientRects();

var rect = rectList[rectList.length - 1];

// vertical pos

if (rect && rect.bottom + barHeight <= parseInt(wikEd.frameHeight)) {

wikEd.buttonBarPasted.style.top = rect.bottom + 'px';

}

else {

wikEd.buttonBarPasted.style.bottom = '1px';

}

// horizontal pos

if (rect.right + barWidth <= parseInt(wikEd.frameWidth)) {

wikEd.buttonBarPasted.style.left = rect.right + 'px';

}

else {

wikEd.buttonBarPasted.style.right = '1px';

}

}

// remove selection

sel.collapseToEnd();

wikEd.PastedSwitch();

return;

};

//

// wikEd.SelectPasted: select pasted text

// does not work good for Chromium that normalizes ranges into text nodes, see https://code.google.com/p/chromium/issues/detail?id=271445

//

wikEd.SelectPasted = function () {

var sel = wikEd.paste.sel;

var range = sel.getRangeAt(0);

// insert at start

if (wikEd.paste.atStart === true) {

range.setStart(wikEd.frameBody, 0);

}

// recover start node from saved previous node

else {

var offset = wikEd.paste.offset;

// reverse navigate back down to start node, start at prevNode, then descend prevUp levels

var preStartNode = null;

var prevNode = wikEd.paste.prevNode;

// node has been replaced

if (prevNode.parentNode === null) {

prevNode = wikEd.paste.parent.childNodes.item(wikEd.paste.prevNodeIndex);

wikEd.paste.pasteAtEndOfLine = false;

}

var node = prevNode;

var up = wikEd.paste.prevUp;

if (node.nextSibling !== null) {

node = node.nextSibling;

for (var i = 0; i < up; i ++) {

var child = node.firstChild;

if (child === null) {

wikEd.paste = null;

return;

}

node = child;

}

preStartNode = node;

}

// move up to first next node when element has been inserted at top level

else {

while ( (node.nextSibling === null) && (node.nodeName != 'BODY') ) {

node = node.parentNode;

}

if (node.nodeName != 'BODY') {

preStartNode = node.nextSibling;

}

}

// set range start

if (preStartNode.nodeName == '#text') {

range.setStart(preStartNode, offset);

}

// start after prevNode

else {

range.setStartAfter(prevNode);

}

// needed for Chrome

sel.removeAllRanges();

sel.addRange(range);

// check if range starts with a block

var node = range.startContainer;

var offset = range.startOffset;

// before or after text in textnode

if (node.nodeName == '#text') {

// get first insert parent with left sibling, from inside the insert up

if (offset === 0) {

while ( (node.previousSibling === null) && (node.nodeName != 'BODY') ) {

node = node.parentNode;

}

}

// find first insert sibling to right, from ouside into insert

else if (offset == node.textContent.length) {

while ( (node.nextSibling === null) && (node.nodeName != 'BODY') ) {

node = node.parentNode;

}

if (node.nodeName != 'BODY') {

node = node.nextSibling;

}

}

}

if (wikEd.paste.pasteAtEndOfLine === true) {

node = node.nextSibling;

}

// check if block element

if ( (node !== null) && (node.nodeName != 'BODY') && (node.nodeType == node.ELEMENT_NODE) ) {

if (wikEd.frameWindow.getComputedStyle(node).getPropertyValue('display') == 'block') {

wikEd.paste.blockStart = true;

}

}

// check if range ends with a block

var node = range.endContainer;

var offset = range.endOffset;

// before or after text in textnode

if (node.nodeName == '#text') {

// get first insert parent with right sibling, from inside the insert up

if (offset == node.textContent.length) {

while ( (node.nextSibling === null) && (node.nodeName != 'BODY') ) {

node = node.parentNode;

}

}

// find first insert sibling to left, from ouside into insert

else if (offset === 0) {

while ( (node.previousSibling === null) && (node.nodeName != 'BODY') ) {

node = node.parentNode;

}

if (node.nodeName != 'BODY') {

node = node.previousSibling;

}

}

}

// check if block element

if ( (node.nodeName != 'BODY') && (node.nodeType == node.ELEMENT_NODE) ) {

if (wikEd.GetStyle(node, 'display') == 'block') {

wikEd.paste.blockEnd = true;

}

}

}

// return if no content is selected

if (range.collapsed === true) {

wikEd.paste = null;

}

return;

};

//

// wikEd.PastedSwitch: set wikify/textify indicator after pasting wikified text

//

wikEd.PastedSwitch = function () {

if ( (wikEd.paste === null) || (wikEd.paste.polling === true) ) {

wikEd.PastedOff();

}

else {

if (wikEd.paste.last == 'wikify') {

document.getElementById('wikEdPastedTextify').className = 'wikEdButton';

document.getElementById('wikEdPastedWikify').className = 'wikEdButtonInactive';

}

else if (wikEd.paste.last == 'textify') {

document.getElementById('wikEdPastedTextify').className = 'wikEdButtonInactive';

document.getElementById('wikEdPastedWikify').className = 'wikEdButton';

}

document.getElementById('wikEdPastedTextify').style.cursor = '';

document.getElementById('wikEdPastedWikify').style.cursor = '';

wikEd.buttonBarPasted.style.visibility = 'visible';

// show text selection when mouse hovers over bar

wikEd.buttonBarPasted.addEventListener('mouseenter', wikEd.ButtonBarPastedHandler, true);

}

return;

};

//

// wikEd.PastedOff: invalidate wikify/textify of recently pasted wikified text

//

wikEd.PastedOff = function () {

wikEd.buttonBarPasted.removeEventListener('mouseenter', wikEd.ButtonBarPastedHandler, false);

wikEd.buttonBarPasted.removeEventListener('mouseleave', wikEd.ButtonBarPastedHandler, false);

wikEd.paste = null;

wikEd.buttonBarPasted.style.visibility = 'hidden';

return;

};

//

// wikEd.PastedClose: handler for pastedClose button on floating paste button bar

//

wikEd.PastedClose = function () {

var sel = wikEd.GetSelection();

sel.collapseToEnd();

wikEd.PastedOff();

wikEd.frameWindow.focus();

return;

};

//

// wikEd.ButtonBarPastedHandler: show text selection when mouse hovers over floating paste button bar

//

wikEd.ButtonBarPastedHandler = function (event) {

if (event.target == wikEd.buttonBarPasted) {

// add selection

if (event.type == 'mouseenter') {

wikEd.buttonBarPasted.removeEventListener('mouseenter', wikEd.ButtonBarPastedHandler, false);

if ( (wikEd.paste !== null) && (wikEd.paste.sel !== null) && (wikEd.paste.range !== null) ) {

wikEd.paste.sel.removeAllRanges();

wikEd.paste.sel.addRange(wikEd.paste.range);

}

wikEd.buttonBarPasted.addEventListener('mouseleave', wikEd.ButtonBarPastedHandler, false);

}

// remove selection

else if (event.type == 'mouseleave') {

wikEd.buttonBarPasted.removeEventListener('mouseleave', wikEd.ButtonBarPastedHandler, false);

if ( (wikEd.paste !== null) && (wikEd.paste.sel !== null) ) {

wikEd.paste.sel.collapseToEnd();

}

wikEd.buttonBarPasted.addEventListener('mouseenter', wikEd.ButtonBarPastedHandler, false);

}

}

return;

};

//

// wikEd.AntiHighlightBleeding: set cursor position into closest highest text node so that highlighting does not bleed out

// does not work under Google Chrome that forces the cursor into the previous node

//

wikEd.AntiHighlightBleeding = function (obj, editButtonInsert, direction) {

// check if disabled

if (wikEd.config.antiHighlightBleeding !== true) {

return;

}

// get selection object

if (obj.sel === undefined) {

obj.sel = wikEd.GetSelection();

}

// only if no text is selected

var range = obj.sel.getRangeAt(0);

if ( (obj.sel.isCollapsed !== true) || (range.collapsed !== true) ) {

return;

}

// get focus node

var focusNode = obj.sel.focusNode;

var focusOffset = obj.sel.focusOffset;

if (focusNode === null) {

return;

}

// correct focusNode into leaf node

if ( (focusNode.childNodes !== null) && (focusNode.childNodes.length > 0) ) {

if (focusOffset < focusNode.childNodes.length) {

focusNode = focusNode.childNodes.item(focusOffset);

focusOffset = 0;

}

// pasting behind "
: " (list)

else {

focusNode = focusNode.childNodes.item(focusOffset - 1);

focusOffset = focusNode.childNodes.length;

}

if (focusNode.tagName != 'BR') {

range.setStart(focusNode, focusOffset);

range.setEnd(focusNode, focusOffset);

}

}

// do not further correct if focus is linebreak if key but not if edit button

if ( (focusNode.tagName == 'BR') && (editButtonInsert !== true) ) {

return;

}

// do not leave opened hide box (refs, templates, charents, and table code)

var node = focusNode;

var hidden = false;

while (node !== null) {

if (/^wikEd(Ref|Templ|CharEntity|Table)Show$/.test(node.className) === true) {

return;

}

// detect hidden node

if (

( (wikEd.refHide === true) && (/^((wikEd(Ref|Templ|CharEntity|Table))|(wikEdTableBR))$/.test(node.className) === true) ) ||

(/^(wikEdScroll(Before|After))$/.test(node.className) === true)

) {

focusNode = node;

hidden = true;

break;

}

node = node.parentNode;

}

// detect start of text

var startOfText = false;

if (focusOffset === 0) {

startOfText = true;

var node = focusNode;

while ( (node !== null) && (node != wikEd.frameBody) ) {

if (node.previousSibling !== null) {

startOfText = false;

break;

}

node = node.parentNode;

}

}

if (startOfText === true) {

range.setStartBefore(wikEd.frameBody);

range.setEndBefore(wikEd.frameBody);

return;

}

// get next text-like node to the left if we are not in the middle of a text node

var leftNode = focusNode;

var leftLevel = 0;

if ( (focusNode.nodeName != '#text') || (focusOffset === 0) || (hidden === true) ) {

var objLeft = {

'backwards': true

};

wikEd.GetNextTextNode(objLeft, focusNode, 0);

if (objLeft.foundNode !== undefined) {

leftNode = objLeft.foundNode;

leftLevel = objLeft.foundLevel;

}

}

// get next text-like node to the right if we are not in the middle of a text node

var rightNode = focusNode;

var rightLevel = 0;

if ( (focusNode.nodeName != '#text') || (focusOffset == focusNode.textContent.length) || (hidden === true) ) {

var objRight = {

'backwards': false

};

wikEd.GetNextTextNode(objRight, focusNode, 0);

if (objRight.foundNode !== undefined) {

rightNode = objRight.foundNode;

rightLevel = objRight.foundLevel;

}

}

// check if we need to correct the focus node to higher level text-like node

var correctTo = '';

if (leftNode != rightNode) {

// get out of hidden element

if (hidden === true) {

// direction

if ( (direction == 'right') && (rightNode !== null) ) {

correctTo = 'right';

}

else if ( (direction == 'left') && (leftNode !== null) ) {

correctTo = 'left';

}

// right, left

else if (rightNode !== null) {

correctTo = 'right';

}

else if (leftNode !== null) {

correctTo = 'left';

}

}

// BR

else if ( (focusNode.tagName == 'BR') && (editButtonInsert === true) ) {

correctTo = 'left';

}

// correct into heighest neighboring node

else if ( (leftNode !== null) && (leftLevel > rightLevel) && (leftNode != focusNode) ) {

correctTo = 'left';

}

else if ( (rightNode !== null) && (leftLevel < rightLevel) && (rightNode != focusNode) ) {

correctTo = 'right';

}

// same level, set focus outside tag markups: [ [[ | || <

else if ( (leftNode !== null) && (rightNode !== null) && (leftLevel == rightLevel) ) {

// get class names

var leftClass = '';

if (leftNode.nodeName == '#text') {

leftClass = leftNode.parentNode.className;

}

else {

leftClass = leftNode.className;

}

var rightClass = '';

if (rightNode.nodeName == '#text') {

rightClass = rightNode.parentNode.className;

}

else {

rightClass = rightNode.className;

}

// class names contains 'Tag'

if ( (/wikEd.*?Tag/.test(leftClass) !== true) && (/wikEd.*?Tag/.test(rightClass) === true) && (leftNode != focusNode) ) {

correctTo = 'left';

}

else if ( (/wikEd.*?Tag/.test(leftClass) === true) && (/wikEd.*?Tag/.test(rightClass) !== true) && (rightNode != focusNode) ) {

correctTo = 'right';

}

}

}

// set focus to the next left node

if (correctTo == 'left') {

var node;

// insert new text node after linebreak and focus

if (leftNode.tagName == 'BR') {

node = wikEd.frameDocument.createTextNode('');

leftNode.parentNode.insertBefore(node, leftNode.nextSibling);

range.setStart(node, 0);

range.setEnd(node, 0);

}

else {

node = leftNode;

if (node.nodeName == '#text') {

range.setStart(node, node.textContent.length);

range.setEnd(node, node.textContent.length);

}

else {

range.setStartAfter(node);

range.setEndAfter(node);

}

}

}

// set focus to the next right node

else if (correctTo == 'right') {

var node;

// insert new text node before linebreak

if (rightNode.tagName == 'BR') {

var node = wikEd.frameDocument.createTextNode('');

rightNode.parentNode.insertBefore(node, rightNode);

range.setStart(node, 0);

range.setEnd(node, 0);

}

else {

node = rightNode;

if (node.nodeName == '#text') {

range.setStart(node, 0);

range.setEnd(node, 0);

}

else {

range.setStartBefore(node);

range.setEndBefore(node);

}

}

}

return;

};

//

// wikEd.ResizeGripLoadHandler: event handler to determine grip background image size

//

wikEd.ResizeGripLoadHandler = function (event) {

wikEd.resizeGripWidth = event.currentTarget.width;

wikEd.resizeGripHeight = event.currentTarget.height;

return;

};

//

// wikEd.ResizeGripHandler: event handler for mouse over resize grip background image

//

wikEd.ResizeGripHandler = function (event) {

// Firefox bug during startup ("wikEd is not defined")

if (wikEd === undefined) {

return;

}

if (wikEd.useWikEd === true) {

if (event.type == 'mousemove') {

if ( (event.shiftKey === false) && (event.ctrlKey === false) && (event.altKey === false) && (event.metaKey === false) ) {

// move into grip

if (wikEd.resizeFrameMouseOverGrip === false) {

if (event.clientY >= wikEd.frameBody.clientHeight - wikEd.resizeGripHeight) {

if (event.clientX >= wikEd.frameBody.clientWidth - wikEd.resizeGripWidth) {

if ( (event.clientY < wikEd.frameBody.clientHeight) && (event.clientX < wikEd.frameBody.clientWidth) ) {

wikEd.resizeFrameMouseOverGrip = true;

if (wikEd.fullscreen === true) {

wikEd.frameBody.style.cursor = 'alias';

}

else {

wikEd.frameDocument.addEventListener('mousedown', wikEd.ResizeStartHandler, true);

wikEd.frameBody.style.cursor = 'move';

}

}

}

}

}

// move out of grip

else if (wikEd.resizeFrameActive === false) {

if (

(event.clientY < wikEd.frameBody.clientHeight - wikEd.resizeGripHeight) ||

(event.clientX < wikEd.frameBody.clientWidth - wikEd.resizeGripWidth)

) {

wikEd.resizeFrameMouseOverGrip = false;

wikEd.frameDocument.removeEventListener('mousedown', wikEd.ResizeStartHandler, true);

wikEd.frameBody.style.cursor = 'auto';

}

}

}

}

}

return;

};

//

// wikEd.ResizeStartHandler: event handler to start the resizing of the editing frame

//

wikEd.ResizeStartHandler = function (event) {

if (wikEd.useWikEd === true) {

if ( (event.type == 'mousedown') && (event.button === 0) ) {

if ( (event.shiftKey === false) && (event.ctrlKey === false) && (event.altKey === false) && (event.metaKey === false) ) {

if (event.clientY >= wikEd.frameBody.clientHeight - wikEd.resizeGripHeight) {

if (event.clientX >= wikEd.frameBody.clientWidth - wikEd.resizeGripWidth) {

if ( (event.clientY < wikEd.frameBody.clientHeight) && (event.clientX < wikEd.frameBody.clientWidth) ) {

event.preventDefault();

wikEd.resizeFrameActive = true;

wikEd.resizeFramePageYStart = event.pageY;

wikEd.resizeFramePageXStart = event.pageX;

wikEd.resizeFrameOffsetHeight = wikEd.frame.offsetHeight;

wikEd.resizeFrameOffsetWidth = wikEd.frame.offsetWidth;

wikEd.frameDocument.addEventListener('mouseup', wikEd.ResizeStopHandler, true);

document.addEventListener('mouseup', wikEd.ResizeStopHandler, true);

wikEd.frameDocument.addEventListener('mousemove', wikEd.ResizeDragHandlerFrame, true);

document.addEventListener('mousemove', wikEd.ResizeDragHandlerDocument, true);

}

}

}

}

}

}

return;

};

//

// wikEd.ResizeStopHandler: event handler to stop the resizing of the editing frame

//

wikEd.ResizeStopHandler = function (event) {

if (wikEd.useWikEd === true) {

if ( (event === undefined) || (event.type == 'mouseup') ) {

wikEd.frameDocument.removeEventListener('mouseup', wikEd.ResizeStopHandler, true);

document.removeEventListener('mouseup', wikEd.ResizeStopHandler, true);

wikEd.frameDocument.removeEventListener('mousemove', wikEd.ResizeDragHandlerFrame, true);

document.removeEventListener('mousemove', wikEd.ResizeDragHandlerDocument, true);

if (

(event === undefined) ||

(event.clientY < wikEd.frameBody.clientHeight - wikEd.resizeGripHeight) ||

(event.clientX < wikEd.frameBody.clientWidth - wikEd.resizeGripWidth)

) {

wikEd.resizeFrameMouseOverGrip = false;

wikEd.frameDocument.removeEventListener('mousedown', wikEd.ResizeStartHandler, true);

wikEd.frameBody.style.cursor = 'auto';

}

}

wikEd.resizeFrameActive = false;

}

return;

};

//

// wikEd.ResizeDragHandlerFrame: event handler for editing frame resizing by mouse dragging (frame event)

//

wikEd.ResizeDragHandlerFrame = function (event) {

if (event.type == 'mousemove') {

var diffY = event.pageY - wikEd.resizeFramePageYStart;

var diffX = event.pageX - wikEd.resizeFramePageXStart;

var frameHeightNew = wikEd.resizeFrameOffsetHeight + diffY;

var frameWidthNew = wikEd.resizeFrameOffsetWidth + diffX;

if (frameHeightNew >= 100) {

wikEd.frameHeight = frameHeightNew + 'px';

wikEd.frame.style.height = wikEd.frameHeight;

}

if (frameWidthNew >= 100) {

wikEd.frameWidth = frameWidthNew + 'px';

wikEd.frame.style.width = wikEd.frameWidth;

}

}

return;

};

//

// wikEd.ResizeDragHandlerDocument: event handler for editing frame resizing by mouse dragging (document event)

//

wikEd.ResizeDragHandlerDocument = function (event) {

if (event.type == 'mousemove') {

var diffY = event.pageY - wikEd.resizeFramePageYStart - wikEd.GetOffsetTop(wikEd.frame);

var diffX = event.pageX - wikEd.resizeFramePageXStart - wikEd.GetOffsetLeft(wikEd.frame);

var frameHeightNew = wikEd.resizeFrameOffsetHeight + diffY;

var frameWidthNew = wikEd.resizeFrameOffsetWidth + diffX;

if (frameHeightNew >= 100) {

wikEd.frameHeight = frameHeightNew + 'px';

wikEd.frame.style.height = wikEd.frameHeight;

}

if (frameWidthNew >= 100) {

wikEd.frameWidth = frameWidthNew + 'px';

wikEd.frame.style.width = wikEd.frameWidth;

}

}

return;

};

//

// wikEd.ResizeFrameResetHandler: event handler to reset the editing frame size

//

wikEd.ResizeFrameResetHandler = function (event) {

if (wikEd.useWikEd === true) {

if (event.type == 'dblclick') {

if ( (event.shiftKey === false) && (event.ctrlKey === false) && (event.altKey === false) && (event.metaKey === false) ) {

if (event.clientY > wikEd.frameBody.clientHeight - wikEd.resizeGripHeight) {

if (event.clientX > wikEd.frameBody.clientWidth - wikEd.resizeGripWidth) {

if ( (event.clientY < wikEd.frameBody.clientHeight) && (event.clientX < wikEd.frameBody.clientWidth) ) {

// end fullscreen mode

if (wikEd.fullscreen === true) {

wikEd.FullScreen(false, true);

}

// reset size to default

wikEd.frameHeight = (wikEd.textareaOffsetHeightInitial - wikEd.frameBorderHeight) + 'px';

wikEd.frameWidth = (wikEd.editorWrapper.clientWidth - wikEd.frameBorderWidth) + 'px';

wikEd.frame.style.height = wikEd.frameHeight;

wikEd.frame.style.width = wikEd.frameWidth;

// end resizing

wikEd.ResizeStopHandler();

}

}

}

}

}

}

return;

};

//

// wikEd.DebugHandler: event handler for debug textarea: clear (double click) or hide (shift/ctrl/alt-double click)

//

wikEd.DebugHandler = function (event) {

if ( (event.shiftKey === true) || (event.ctrlKey === true) || (event.altKey === true) || (event.metaKey === true) ) {

wikEd.debugWrapper.style.display = 'none';

wikEd.debugOpen = false;

// resize fullscreen frame

if (wikEd.fullScreenMode === true) {

wikEd.ResizeWindowHandler();

}

}

else {

wikEd.debug.value = '';

}

return;

};

//

// wikEd.PrevWrapperHandler: event handler for preview box: scroll to edit field (double click) or close (shift/ctrl/alt-double click)

//

wikEd.PrevWrapperHandler = function (event) {

// close (shift/ctrl/alt-double click)

if ( (event.shiftKey === true) || (event.ctrlKey === true) || (event.altKey === true) || (event.metaKey === true) ) {

wikEd.previewArticle.style.display = 'none';

wikEd.previewDiff.style.display = 'none';

wikEd.localPrevWrapper.style.display = 'none';

wikEd.localPrevWrapper.style.height = 'auto';

// reinstate interrupted fullscreen mode

if (wikEd.fullScreenMode === true) {

wikEd.FullScreen(true);

}

}

// scroll to edit field (double click)

else {

// filter out selecting double clicks on text

var sel = window.getSelection();

// explicitOriginalTarget (Firefox)

var textTarget = event.explicitOriginalTarget;

if (textTarget !== undefined) {

if (textTarget.nodeName == '#text') {

return;

}

}

// ignore for non-blank selection

else if ( (sel !== null) && (/^\s*$/.test(sel.toString()) === false) ) {

return;

}

sel.collapseToEnd();

// scroll to edit field

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper));

}

return;

};

//

// wikEd.SetLogo: set the logo on top of the page

//

wikEd.SetLogo = function (state, parameter) {

var src = '';

var alt = '';

var title = '';

if (state == 'error') {

src = wikEd.config.image['error'];

alt = wikEd.config.text['wikEdLogo error alt'];

title = wikEd.config.text['wikEdLogo error title'];

}

else if (state == 'browser') {

src = wikEd.config.image['browser'];

alt = wikEd.config.text['wikEdLogo browser alt'];

title = wikEd.config.text['wikEdLogo browser title'];

}

else if (state == 'incompatible') {

src = wikEd.config.image['incompatible'];

alt = wikEd.config.text['wikEdLogo incompatible alt'];

title = wikEd.config.text['wikEdLogo incompatible title'];

}

else {

if (wikEd.disabled === true) {

src = wikEd.config.image['disabled'];

alt = wikEd.config.text['wikEdLogo disabled alt'];

title = wikEd.config.text['wikEdLogo disabled title'];

}

else if (wikEd.testVersion === true) {

src = wikEd.config.image['testVersion'];

alt = wikEd.config.text['wikEdLogo testVersion alt'];

title = wikEd.config.text['wikEdLogo testVersion title'];

}

else {

src = wikEd.config.image['logo'];

alt = wikEd.config.text['wikEdLogo alt'];

title = wikEd.config.text['wikEdLogo title'];

}

}

if (parameter !== undefined) {

title = title.replace(/\{wikEdParameter\}/g, parameter);

}

title = title.replace(/\{wikEdProgramVersion\}/g, wikEd.programVersion + wikEd.installationType);

title = title.replace(/\{wikEdProgramDate\}/g, wikEd.programDate);

wikEd.logo.src = src;

wikEd.logo.alt = alt;

wikEd.logo.title = title;

return;

};

//

// wikEd.MakeButtonBar: generate button bar div element

//

wikEd.MakeButtonBar = function (bar) {

// id outer, class outer, id inner, class inner, alt, button numbers

var barId = bar[0];

var barClass = bar[1];

var buttonsId = bar[2];

var buttonsClass = bar[3];

var barHeight = bar[4];

var gripTitle = bar[5];

var buttonNumbers = bar[6];

var barTitle = bar[7];

// collect the buttons

var buttons = '';

for (var i = 0; i < buttonNumbers.length; i ++) {

var buttonNo = buttonNumbers[i];

switch (buttonNo) {

case 'br':

buttons += '
';

break;

case 'find':

buttons += '';

buttons += '';

buttons += '';

buttons += '';

break;

case 'replace':

buttons += '';

buttons += '';

buttons += '';

buttons += '';

break;

default:

var currButton = wikEd.config.button[buttonNo];

if (typeof currButton != 'object') {

window.alert('Loading error: The button "' + buttonNumbers[i] + '" is not defined.');

}

if ( (currButton[0] == 'wikEdSource') && (wikEd.config.showSourceButton !== true) && (wikEd.config.debug !== true) ) {

break;

}

else if ( (currButton[0] == 'wikEdUsing') && (wikEd.config.showUsingButton !== true) ) {

break;

}

else if ( (currButton[0] == 'wikEdTableMode') && (wikEd.config.showTableModeButton !== true) ) {

break;

}

// add button html code

buttons += wikEd.MakeButtonCode(buttonNo);

}

}

// create the button bar div

var div = document.createElement('div');

div.id = barId;

div.className = barClass;

if ( (barTitle !== undefined) && (barTitle !== '') ) {

barTitle = barTitle.replace(/\{wikEdProgramVersion\}/g, wikEd.programVersion + wikEd.installationType);

barTitle = barTitle.replace(/\{wikEdProgramDate\}/g, wikEd.programDate);

div.title = barTitle;

}

var buttonsStyle = '';

if (barHeight > 0) {

buttonsStyle = ' style="height: ' + barHeight + 'px;"';

}

// make a grip bar

var html = '';

if (gripTitle !== null) {

var gripStyle = 'width: ' + wikEd.config.buttonBarGripWidth + 'px; ';

if (barHeight > 0) {

gripStyle += 'height: ' + barHeight + 'px; ';

}

if (gripStyle.length > 0){

gripStyle = ' style="' + gripStyle + '"';

}

html += '

';

html += '

';

html += '

';

html += ' ';

html += '

';

html += '

';

html += '

';

html += '

';

html += buttons;

html += '

';

html += '

';

html += '

';

}

// make a standard no-grip bar

else {

html += '

';

html += buttons;

html += '

';

}

div.innerHTML = html;

return div;

};

//

// wikEd.MakeButtonCode: create button code and register

//

wikEd.MakeButtonCode = function (buttonNo, type) {

var currButton = wikEd.config.button[buttonNo];

// add accesskey information to button title

var accessKey = '';

if (wikEd.config.buttonKey[buttonNo] !== undefined) {

accessKey = ' [' + wikEd.config.text['alt-shift'] + wikEd.config.buttonKey[buttonNo][0] + ']';

// initialize wikEd.buttonKeyCode[keyCode] = id

wikEd.buttonKeyCode[ (wikEd.config.buttonKey[buttonNo][1]) ] = currButton[0];

}

// add button html code

var html;

if (type == 'button') {

html = '';

}

else {

html = '' + currButton[6] + '';

}

// collect click event info

wikEd.editButtonHandler[ currButton[0] ] = currButton[7];

return html;

};

//

// wikEd.ButtonBarInit: hide buttons bar, see also wikEd.ButtonBarGripHandler()

//

wikEd.ButtonBarInit = function (bar) {

if (wikEd.GetSavedSetting(bar.id + 'Hidden') === true) {

var barInnerWrapper = bar.firstChild;

var gripWrapper = barInnerWrapper.firstChild;

var grip = gripWrapper.firstChild;

var buttonsWrapper = gripWrapper.nextSibling;

barInnerWrapper.className = 'wikEdButtonBarInnerWrapperHidden';

gripWrapper.className = 'wikEdButtonBarGripWrapperHidden';

buttonsWrapper.className = 'wikEdButtonBarButtonsWrapperHidden';

wikEd.buttonsWrapperWidth[bar.id] = buttonsWrapper.offsetWidth;

buttonsWrapper.style.display = 'none';

grip.addEventListener('mouseover', wikEd.ButtonBarGripHandler, true);

}

return;

};

//

// wikEd.SetEditArea: apply css changes to switch between classic textarea and rich text frame

//

wikEd.SetEditArea = function (useFrame, notFrame) {

var scrollRatio = null;

// turn rich text frame on

if (useFrame === true) {

scrollRatio = wikEd.textarea.scrollTop / wikEd.textarea.scrollHeight;

// remember resized textarea dimensions

wikEd.textareaHeight = (wikEd.textarea.offsetHeight - wikEd.textareaBorderHeight) + 'px';

wikEd.textareaWidth = '100%';

wikEd.textareaWrapper.style.position = 'absolute';

wikEd.textareaWrapper.style.visibility = 'hidden';

wikEd.textarea.style.display = 'none';

if (notFrame !== true) {

wikEd.frameWrapper.style.position = 'static';

wikEd.frameWrapper.style.visibility = 'visible';

wikEd.frameBody.style.display = 'block';

}

// set visibility of native toolbar

if (wikEd.closeToolbar === true) {

wikEd.toolbarWrapper.style.display = 'none';

}

else {

wikEd.toolbarWrapper.style.display = 'block';

}

if (wikEd.buttonBarFormat !== null) {

wikEd.buttonBarFormat.style.display = 'block';

}

if (wikEd.buttonBarTextify !== null) {

wikEd.buttonBarTextify.style.display = 'block';

}

if (wikEd.buttonBarCustom1 !== null) {

wikEd.buttonBarCustom1.style.display = 'block';

}

if (wikEd.buttonBarFind !== null) {

wikEd.buttonBarFind.style.display = 'block';

}

if (wikEd.buttonBarFix !== null) {

wikEd.buttonBarFix.style.display = 'block';

}

if (wikEd.buttonBarCustom2 !== null) {

wikEd.buttonBarCustom2.style.display = 'block';

}

if (wikEd.buttonBarControl !== null) {

wikEd.buttonBarControl.style.display = 'block';

}

wikEd.frameBody.scrollTop = scrollRatio * wikEd.frameBody.scrollHeight;

wikEd.ResizeWindowHandler();

}

// turn classic textarea on

else {

scrollRatio = wikEd.frameBody.scrollTop / wikEd.frameBody.scrollHeight;

if (notFrame !== true) {

// get resized frame dimensions for textarea

if (wikEd.useWikEd === true) {

wikEd.textareaHeight = wikEd.frameHeight;

wikEd.textareaWidth = '100%';

}

wikEd.frameWrapper.style.position = 'absolute';

wikEd.frameWrapper.style.visibility = 'hidden';

// Mozilla or wikEd bug:
insertion before text a while after setting display to 'none', test with setTimeout('alert(wikEd.frameBody.innerHTML)', 1000);

// wikEd.frameBody.style.display = 'none';

}

wikEd.textareaWrapper.style.position = 'static';

wikEd.textareaWrapper.style.visibility = 'visible';

wikEd.textarea.style.height = wikEd.textareaHeight;

wikEd.textarea.style.width = wikEd.textareaWidth;

wikEd.textarea.style.display = 'block';

// force visibility of native toolbar

if (wikEd.toolbarWrapper !== null) {

wikEd.toolbarWrapper.style.display = 'block';

}

if (wikEd.buttonBarFormat !== null) {

wikEd.buttonBarFormat.style.display = 'none';

}

if (wikEd.buttonBarTextify !== null) {

wikEd.buttonBarTextify.style.display = 'none';

}

if (wikEd.buttonBarCustom1 !== null) {

wikEd.buttonBarCustom1.style.display = 'none';

}

if (wikEd.buttonBarFind !== null) {

wikEd.buttonBarFind.style.display = 'none';

}

if (wikEd.buttonBarFix !== null) {

wikEd.buttonBarFix.style.display = 'none';

}

if (wikEd.buttonBarCustom2 !== null) {

wikEd.buttonBarCustom2.style.display = 'none';

}

if (wikEd.buttonBarControl !== null) {

wikEd.buttonBarControl.style.display = 'block';

}

wikEd.textarea.scrollTop = scrollRatio * wikEd.textarea.scrollHeight;

}

return;

};

//

// wikEd.Button: toggle or set button checked state

// used for buttons that do not require nor change the text. Faster than wikEd.EditButton()

//

wikEd.Button = function (buttonObj, buttonId, toggleButton, setButton, classButton, doButton) {

if (buttonObj !== null) {

// check if the button is disabled

if (buttonObj.className == 'wikEdButtonInactive') {

return;

}

// set button to pressed, set cursor to hourglass

buttonObj.style.cursor = 'wait';

// init the button

if (setButton === false) {

buttonObj.setAttribute('checked', false);

if (classButton === undefined) {

buttonObj.className = 'wikEdButtonUnchecked';

}

}

else if (setButton === true) {

buttonObj.setAttribute('checked', true);

if (classButton === undefined) {

buttonObj.className = 'wikEdButtonChecked';

}

}

else if (typeof classButton == 'string') {

buttonObj.className = classButton;

}

else {

doButton = true;

}

// toggle the button

if (toggleButton === true) {

if (buttonObj.getAttribute('checked') === 'true') {

buttonObj.setAttribute('checked', false);

buttonObj.className = 'wikEdButtonUnchecked';

}

else {

buttonObj.setAttribute('checked', true);

buttonObj.className = 'wikEdButtonChecked';

}

}

}

// perform specific actions

var focusFrame = false;

if (doButton === true) {

// textarea no longer up to date

wikEd.textareaUpdated = false;

// remove active content

wikEd.RemoveElements(['script', 'object', 'applet', 'embed']);

switch (buttonId) {

// switch between syntax highlighting and plain text

case 'wikEdHighlightSyntax':

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.highlightSyntax = true;

wikEd.SetPersistent('wikEdSyntaxOff', '0', 0, '/');

if (wikEd.refHide === true) {

wikEd.frameBody.className = 'wikEdFrameBodyNewbie';

}

else {

wikEd.frameBody.className = 'wikEdFrameBodySyntax';

}

}

else {

wikEd.highlightSyntax = false;

wikEd.SetPersistent('wikEdSyntaxOff', '1', 0, '/');

wikEd.frameBody.className = 'wikEdFrameBodyPlain';

}

// do not keep whole text selected

wikEd.EditButton( null, 'wikEdUpdateAll', {'keepSel': false} );

break;

// table mode button

case 'wikEdTableMode':

if (buttonObj.getAttribute('checked') != 'true') {

wikEd.tableMode = false;

wikEd.EditButton( null, 'wikEdUpdateAll', {'keepSel': false} );

}

else {

wikEd.tableMode = true;

wikEd.EditButton( null, 'wikEdUpdateAll', {'keepSel': false} );

}

break;

// align textbox with display top

case 'wikEdScrollToPreview':

case 'wikEdScrollToPreview2':

case 'wikEdScrollToPreview3':

window.scroll(0, wikEd.GetOffsetTop(wikEd.submitWrapper));

focusFrame = true;

break;

// align edit buttons with display top

case 'wikEdScrollToEdit':

case 'wikEdScrollToEdit2':

case 'wikEdScrollToEdit3':

case 'wikEdScrollToEdit4':

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper));

focusFrame = true;

break;

// cycle through different font sizes

case 'wikEdTextZoomDown':

wikEd.textSize = wikEd.textSize / 1.2;

if (wikEd.textSize < wikEd.textSizeInit / 1.2 / 1.2) {

wikEd.textSize = wikEd.textSizeInit * 1.2 * 1.2;

}

wikEd.frameBody.style.fontSize = wikEd.textSize + 'px';

focusFrame = true;

break;

// cycle through different font sizes

case 'wikEdTextZoomUp':

wikEd.textSize = wikEd.textSize * 1.2;

if (wikEd.textSize > wikEd.textSizeInit * 1.2 * 1.2) {

wikEd.textSize = wikEd.textSizeInit / 1.2 / 1.2;

}

wikEd.frameBody.style.fontSize = wikEd.textSize + 'px';

focusFrame = true;

break;

// display local preview box

case 'wikEdLocalPreview':

wikEd.LocalPreview();

focusFrame = true;

break;

// display local diff box

case 'wikEdLocalDiff':

if (WikEdDiff === undefined) {

wikEd.previewDiff.innerHTML = '

' + wikEd.config.text.diffNotLoaded + '
';

wikEd.previewArticle.style.display = 'none';

wikEd.previewDiff.style.display = 'block';

wikEd.localPrevWrapper.style.display = 'block';

break;

}

// interrupt fullscreen mode

if (wikEd.fullscreen === true) {

wikEd.FullScreen(false);

}

// display diff, keep wrapper height to prevent scrolling

var previewHeight = wikEd.localPrevWrapper.offsetHeight;

if ( ( (wikEd.previewArticle.innerHTML !== ) || (wikEd.previewDiff.innerHTML !== ) ) && (previewHeight > 0) ) {

wikEd.localPrevWrapper.style.height = previewHeight + 'px';

}

if (wikEd.previewDiff.innerHTML === '') {

wikEd.previewDiff.innerHTML = wikEd.config.text.wikEdPreviewLoading;

}

wikEd.localPrevWrapper.style.display = 'block';

wikEd.previewArticle.style.display = 'none';

wikEd.previewDiff.style.display = 'block';

if (wikEd.useWikEd === true) {

wikEd.UpdateTextarea();

}

// add trailing newline

var currentVersion = wikEd.textarea.value;

// call external diff program

wikEd.previewDiff.innerHTML = wikEd.DiffResponse(wikEd.origVersion, currentVersion);

// scroll to button, textarea, or preview field

wikEd.ScrollToPreview();

// run scheduled custom functions

wikEd.ExecuteHook(wikEd.config.diffHook);

break;

// close the preview and diff boxes

case 'wikEdClose':

case 'wikEdClose2':

window.scroll(0, wikEd.GetOffsetTop(wikEd.inputWrapper));

wikEd.previewArticle.style.display = 'none';

wikEd.previewDiff.style.display = 'none';

wikEd.localPrevWrapper.style.display = 'none';

wikEd.localPrevWrapper.style.height = 'auto';

focusFrame = true;

break;

// switch between textarea and frame display

// switching an iframe in design mode immediately after initialization between absolute/static may crash mozilla

case 'wikEdUseWikEd':

// enble wikEd

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.useWikEd = true;

window.wikEdUseWikEd = wikEd.useWikEd;

wikEd.SetPersistent('wikEdUseClassic', '0', 0, '/');

// update frame content

wikEd.UpdateFrame();

// display rich text frame

wikEd.SetEditArea(true);

// run scheduled custom functions

wikEd.ExecuteHook(wikEd.config.frameHook);

}

// turn classic textarea on, disable wikEd

else {

wikEd.PastedOff();

// update frame content

wikEd.UpdateTextarea();

// display on textarea

wikEd.SetEditArea(false);

wikEd.useWikEd = false;

window.wikEdUseWikEd = wikEd.useWikEd;

wikEd.SetPersistent('wikEdUseClassic', '1', 0, '/');

// run scheduled custom functions

wikEd.ExecuteHook(wikEd.config.textareaHook);

}

// update fullscreen

wikEd.FullScreen(wikEd.fullScreenMode, true);

break;

// add "using wikEd" to summaries

case 'wikEdUsing':

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.using = true;

wikEd.SetPersistent('wikEdSummaryUsing', '1', 0, '/');

}

else {

wikEd.using = false;

wikEd.SetPersistent('wikEdSummaryUsing', '0', 0, '/');

}

break;

// hide ref tags

case 'wikEdRefHide':

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.refHide = true;

wikEd.SetPersistent('wikEdRefHide', '1', 0, '/');

}

else {

wikEd.refHide = false;

wikEd.SetPersistent('wikEdRefHide', '0', 0, '/');

}

if ( (wikEd.config.showTableModeButton === false) && (wikEd.config.tableMode === true) ) {

wikEd.tableMode = wikEd.refHide;

}

if (wikEd.useWikEd === true) {

if (wikEd.refHide === true) {

wikEd.frameBody.className = 'wikEdFrameBodyNewbie';

}

else {

wikEd.frameBody.className = 'wikEdFrameBodySyntax';

}

wikEd.EditButton(null, 'wikEdWikify', 'whole');

}

break;

// close the toolbar

case 'wikEdCloseToolbar':

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.closeToolbar = true;

wikEd.toolbarWrapper.style.display = 'none';

wikEd.SetPersistent('wikEdCloseToolbar', '1', 0, '/');

}

else {

wikEd.closeToolbar = false;

wikEd.toolbarWrapper.style.display = 'block';

wikEd.SetPersistent('wikEdCloseToolbar', '0', 0, '/');

}

// resize fullscreen frame

if (wikEd.fullscreen === true) {

wikEd.ResizeWindowHandler();

}

break;

// just toggle the case sensitive search button

case 'wikEdCaseSensitive':

break;

// just toggle the regexp search button

case 'wikEdRegExp':

break;

// just toggle the find-ahead-as-you-type search button

case 'wikEdFindAhead':

break;

// switch to fullscreen edit area

case 'wikEdFullScreen':

if (buttonObj.getAttribute('checked') == 'true') {

wikEd.FullScreen(true, true);

wikEd.SetPersistent('wikEdFullscreen', '1', 0, '/');

}

else {

wikEd.FullScreen(false, true);

wikEd.SetPersistent('wikEdFullscreen', '0', 0, '/');

}

break;

// clear the saved settings for find, replace, and summary history

case 'wikEdClearHistory':

wikEd.ClearHistory('find');

wikEd.ClearHistory('replace');

wikEd.ClearHistory('summary');

focusFrame = true;

break;

// for testing

case 'wikEdPlaceholder':

break;

}

}

// reset cursor to normal

if (buttonObj !== null) {

buttonObj.style.cursor = '';

// Firefox 27 bug workaround to force cursor update

buttonObj.focus();

}

// focus the frame

if ( (wikEd.useWikEd === true) && (focusFrame === true) ) {

wikEd.frameWindow.focus();

}

return;

};

//

// wikEd.EditButton: editing functions

// used for buttons that require or change the text, more time consuming than wikEd.Button()

//

wikEd.EditButton = function (buttonObj, buttonId, parameters, CustomHandler) {

// check if iframe is enabled

if (wikEd.UseWikEd === false) {

return;

}

// check if button is disabled

if (buttonObj !== null) {

if (buttonObj.className == 'wikEdButtonInactive') {

return;

}

}

// remove active and non-text content

wikEd.RemoveElements(['script', 'object', 'applet', 'embed', 'textarea']);

// select the appropriate text change targets (whole, selection, cursor, focusWord, focusLine, selectionWord, or selectionLine)

var obj = {};

obj.changed = {};

var highlightNoTimeOut = false;

// set cursor position into closest highest text node so that highlighting does not bleed out

wikEd.AntiHighlightBleeding(obj, true);

// textarea no longer up to date

wikEd.textareaUpdated = false;

// invalidate wikify/textify of recently pasted text

if ( (buttonId != 'wikEdPastedWikify') && (buttonId != 'wikEdPastedTextify') && (buttonId != 'wikEdPasting') ) {

wikEd.PastedOff();

}

// switch the button

switch (buttonId) {

// undo, redo: whole

case 'wikEdUndo':

case 'wikEdRedo':

case 'wikEdUndoAll':

case 'wikEdRedoAll':

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

break;

// basic wiki character formatting: selection / focusWord / cursor

case 'wikEdBold':

case 'wikEdItalic':

case 'wikEdUnderline':

case 'wikEdStrikethrough':

case 'wikEdNowiki':

case 'wikEdSuperscript':

case 'wikEdSubscript':

case 'wikEdWikiLink':

case 'wikEdWebLink':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'focusWord');

if (obj.focusWord.plain !== '') {

obj.changed = obj.focusWord;

}

else {

obj.changed = obj.cursor;

}

}

break;

// reference: selection / cursor

case 'wikEdRef':

case 'wikEdRefNamed':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

obj.changed = obj.cursor;

}

break;

// references and small references: selection / cursor

case 'wikEdReferences':

case 'wikEdReferencesSection':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

obj.changed = obj.cursor;

}

break;

// signature and name only signature: selection / cursor

case 'wikEdSign':

case 'wikEdSignName':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

obj.changed = obj.cursor;

}

break;

// character formatting: selection / focusWord / cursor

case 'wikEdCase':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'focusWord');

if (obj.focusWord.plain !== '') {

obj.changed = obj.focusWord;

}

else {

obj.changed = obj.cursor;

}

}

break;

// multiple line changes: selectionLine / focusLine / cursor

case 'wikEdDecreaseHeading':

case 'wikEdIncreaseHeading':

case 'wikEdIncreaseBulletList':

case 'wikEdDecreaseBulletList':

case 'wikEdIncreaseNumberList':

case 'wikEdDecreaseNumberList':

case 'wikEdIncreaseIndentList':

case 'wikEdDecreaseIndentList':

case 'wikEdDefinitionList':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

wikEd.GetText(obj, 'selectionLine');

obj.changed = obj.selectionLine;

}

else {

wikEd.GetText(obj, 'focusLine');

if (obj.focusLine.plain !== '') {

obj.changed = obj.focusLine;

}

else {

obj.changed = obj.cursor;

}

}

break;

// sort: selectionLine / focusLine

case 'wikEdSort':

wikEd.GetText(obj, 'selection, cursor, selectionLine');

if (obj.selection.plain === '') {

obj.changed = obj.selectionLine;

}

else if (/\n./.test(obj.selection.plain) === false) {

obj.changed = obj.selection;

}

else {

obj.changed = obj.selectionLine;

}

break;

// image: selectionWord (if text is selected) / cursor

case 'wikEdImage':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

wikEd.GetText(obj, 'selectionWord');

obj.changed = obj.selectionWord;

}

else {

obj.changed = obj.cursor;

}

break;

// table: selectionLine / cursor

case 'wikEdTable':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

wikEd.GetText(obj, 'selectionLine');

obj.changed = obj.selectionLine;

}

else {

wikEd.GetText(obj, 'focusLine');

obj.changed = obj.cursor;

}

break;

// wikify pasted: cursor

case 'wikEdPastedWikify':

wikEd.GetText(obj, 'cursor');

obj.changed = obj.cursor;

break;

// textify during pasting: selection

case 'wikEdPasting':

// get text, do not wikify

wikEd.GetText(obj, 'selection', false);

obj.changed = obj.selection;

break;

// textify pasted: cursor

case 'wikEdPastedTextify':

wikEd.GetText(obj, 'cursor');

obj.changed = obj.cursor;

break;

// wikify: selection / whole

case 'wikEdWikify':

if (parameters == 'whole') {

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

}

else {

wikEd.GetText(obj, 'selection');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

}

}

break;

// textify: selection / whole, without wikifying

case 'wikEdTextify':

wikEd.GetText(obj, 'selection', false);

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'whole', false);

obj.changed = obj.whole;

}

break;

// redirect: whole

case 'wikEdRedirect':

wikEd.GetText(obj, 'whole, selection, cursor');

if (obj.selection.plain === '') {

wikEd.GetText(obj, 'selectionWord');

}

obj.changed = obj.whole;

break;

// find and replace: selection / focusWord / cursor

case 'wikEdFindPrev':

case 'wikEdFindNext':

case 'wikEdJumpPrev':

case 'wikEdJumpNext':

case 'wikEdReplacePrev':

case 'wikEdReplaceNext':

case 'wikEdFindAll':

wikEd.GetText(obj, 'selection');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'focusWord');

if (obj.focusWord.plain !== '') {

obj.changed = obj.focusWord;

}

else {

obj.changed = obj.cursor;

}

}

break;

// replace all: selection / whole

case 'wikEdReplaceAll':

wikEd.GetText(obj, 'selection');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

}

break;

// fixing buttons: selection / whole

case 'wikEdFixBasic':

case 'wikEdFixUnicode':

case 'wikEdFixAll':

case 'wikEdFixHtml':

case 'wikEdFixRegExTypo':

case 'wikEdFixRedirect':

case 'wikEdFixRedirectReplace':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

}

break;

// fixing buttons: selection / focusPara / cursor

case 'wikEdFixPunct':

case 'wikEdFixMath':

case 'wikEdFixUnits':

case 'wikEdFixDashes':

case 'wikEdFixCaps':

case 'wikEdFixChem':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'focusPara');

if (obj.focusPara.plain !== '') {

obj.changed = obj.focusPara;

}

else {

obj.changed = obj.cursor;

}

}

break;

// fixing buttons: selection / focusLine / cursor

case 'wikEdFixChem':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'focusLine');

if (obj.focusPara.plain !== '') {

obj.changed = obj.focusLine;

}

else {

obj.changed = obj.cursor;

}

}

break;

// source: selection / whole

case 'wikEdSource':

wikEd.GetText(obj, 'selection');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

}

break;

// insert tags: selection / cursor

case 'wikEdInsertTags':

wikEd.GetText(obj, 'selection, cursor');

if (obj.selection.plain !== '') {

obj.changed = obj.selection;

}

else {

obj.changed = obj.cursor;

}

break;

// update text view using current control button settings

case 'wikEdUpdateAll':

wikEd.GetText(obj, 'whole');

obj.changed = obj.whole;

break;

// custom edit functions have to call wikEd.GetText() themselves

default:

wikEd.GetText(obj, 'cursor');

obj.changed = obj.cursor;

break;

}

// exit

if (obj.changed === undefined) {

wikEd.frameWindow.focus();

// reset button to active, reset cursor

if (buttonObj !== null) {

if (buttonObj.className != 'wikEdButtonInactive') {

buttonObj.className = 'wikEdButton';

}

}

return;

}

// set local syntax highlighting flag

var highlightSyntax = wikEd.highlightSyntax;

// apply selected action

var selectChanged = true;

var selectChangedText = '';

var emptyOrSpaces = /^ *$/.test(obj.changed.plain);

switch (buttonId) {

// undo

case 'wikEdUndo':

if (wikEd.lastVersion === null) {

wikEd.lastVersion = obj.changed.plain;

}

wikEd.frameDocument.execCommand('undo');

if (obj.sel.rangeCount === 0) {

obj.sel.collapse(wikEd.frameBody, 0);

}

obj.changed.range = obj.sel.getRangeAt(0);

obj.changed.plain = null;

obj.changed.keepSel = true;

break;

// redo

case 'wikEdRedo':

wikEd.frameDocument.execCommand('redo');

if (obj.sel.rangeCount === 0) {

obj.sel.collapse(wikEd.frameBody, 0);

}

obj.changed.range = obj.sel.getRangeAt(0);

obj.changed.plain = null;

obj.changed.keepSel = true;

break;

// bold

case 'wikEdBold':

// remove markup

if (/^(\s*)((.|\n)*?)(\s*)$/.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/^(\s*)((.|\n)*?)(\s*)$/g, '$1$2$4');

}

// add markup

else {

obj.changed.plain = '\'\'\ + obj.changed.plain + '\'\'\;

if (emptyOrSpaces === false) {

// move spaces outside markup

obj.changed.plain = obj.changed.plain.replace(/^()(\s*)((.|\n)*?)(\s*)()$/, '$2$1$3$6$5');

// trim to maximal number of ' (bold + italic)

obj.changed.plain = obj.changed.plain.replace(/^'{6,}((.|\n)*)'{6,}$/g, '\'\'\'\'\'$1\'\'\'\'\'');

}

}

obj.changed.keepSel = true;

break;

// italic

case 'wikEdItalic':

// remove markup

if (/^(\s*)((.|\n)*?)(\s*)$/.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/^(\s*)((.|\n)*?)(\s*)$/g, '$1$2$4');

}

// add markup

else {

obj.changed.plain = '\'\ + obj.changed.plain + '\'\;

if (emptyOrSpaces === false) {

// move spaces outside markup

obj.changed.plain = obj.changed.plain.replace(/^()(\s*)((.|\n)*?)(\s*)()$/, '$2$1$3$6$5');

// trim to maximal number of ' (bold + italic)

obj.changed.plain = obj.changed.plain.replace(/^'{6,}((.|\n)*)'{6,}$/g, '\'\'\'\'\'$1\'\'\'\'\'');

}

}

obj.changed.keepSel = true;

break;

// underline

case 'wikEdUnderline':

// remove markup

if ( /<u>((.|\n)*?)<\/u>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<u>((.|\n)*?)<\/u>/gi, '$1');

}

// add markup

else {

obj.changed.plain = '<u>' + obj.changed.plain + '<\/u>';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<u>)(\s*)((.|\n)*?)(\s*)(<\/u>)$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// strikethrough

case 'wikEdStrikethrough':

if ( /<s>((.|\n)*?)<\/s>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<s>((.|\n)*?)<\/s>/gi, '$1');

}

else {

obj.changed.plain = '<s>' + obj.changed.plain + '<\/s>';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<s>)(\s*)((.|\n)*?)(\s*)(<\/s>)$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// nowiki

case 'wikEdNowiki':

if ( /<nowiki>((.|\n)*?)<\/nowiki>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<nowiki>((.|\n)*?)<\/nowiki>/gi, '$1');

}

else {

obj.changed.plain = '<nowiki>' + obj.changed.plain + '<\/nowiki>';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<nowiki>)(\s*)((.|\n)*?)(\s*)(<\/nowiki>)$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// superscript

case 'wikEdSuperscript':

obj.changed.plain = obj.changed.plain.replace(/^(\s*)<sub>((.|\n)*?)<\/sub>(\s*)$/, '$1$2$4');

if ( /<sup>((.|\n)*?)<\/sup>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<sup>((.|\n)*?)<\/sup>/gi, '$1');

}

else {

obj.changed.plain = '<sup>' + obj.changed.plain + '</sup>';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<sup>)(\s*)((.|\n)*?)(\s*)(<\/sup>)$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// subscript

case 'wikEdSubscript':

obj.changed.plain = obj.changed.plain.replace(/^(\s*)<sup>((.|\n)*?)<\/sup>(\s*)$/, '$1$2$4');

if ( /<sub>((.|\n)*?)<\/sub>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<sub>((.|\n)*?)<\/sub>/gi, '$1');

}

else {

obj.changed.plain = '<sub>' + obj.changed.plain + '</sub>';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<sub>)(\s*)((.|\n)*?)(\s*)(<\/sub>)$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// in-text reference

case 'wikEdRef':

case 'wikEdRefNamed':

if (obj.changed.plain === '') {

if (buttonId == 'wikEdRef') {

obj.changed.plain = '<ref><\/ref>';

}

else {

obj.changed.plain = '<ref name="" \/>';

}

}

else if ( /<ref( name="")? ?\/>/i.test(obj.changed.plain) ) {

obj.changed.plain = '';

}

else if ( /<ref( name="")?>((.|\n)*?)<\/ref>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<ref( name="")?>((.|\n)*?)<\/ref>/gi, '$2');

}

else {

if (buttonId == 'wikEdRef') {

obj.changed.plain = '<ref>' + obj.changed.plain + '</ref>';

}

else {

obj.changed.plain = '<ref name="">' + obj.changed.plain + '</ref>';

}

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(<ref( name="")?>)(\s*)((.|\n)*?)(\s*)(<\/ref>)$/, '$3$1$4$7$6');

}

}

obj.changed.keepSel = true;

break;

// signature ~~~~

case 'wikEdSign':

if (obj.changed.plain == '~~~~') {

obj.changed.plain = '';

}

else {

obj.changed.plain = '~~~~';

}

obj.changed.keepSel = true;

break;

// name only signature ~~~

case 'wikEdSignName':

if (obj.changed.plain == '~~~') {

obj.changed.plain = '';

}

else {

obj.changed.plain = '~~~';

}

obj.changed.keepSel = true;

break;

// references location

case 'wikEdReferences':

case 'wikEdReferencesSection':

var ref = wikEd.config.text.wikEdReferencesSection;

ref = ref.replace(/

ref = ref.replace(/>/g, '>');

var refEscaped = ref;

refEscaped = refEscaped.replace(/([^\w\s;&])/g, '\\$1');

refEscaped = refEscaped.replace(/^\n|\n$/g, '\\n*');

refEscaped = refEscaped.replace(/(\n)/g, '\\n');

var regExp = new RegExp(refEscaped, 'gi');

// plain references tag

if (buttonId == 'wikEdReferences') {

if (obj.changed.plain === '') {

obj.changed.plain = '<references/>';

}

else if (regExp.test(obj.changed.plain) === true) {

obj.changed.plain = obj.changed.plain.replace(regExp, '');

}

else if (/<references ?\/>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<references ?\/>/gi, '');

}

else {

obj.changed = obj.cursor;

obj.changed.plain = '<references/>';

}

}

// complete references code

else {

if (obj.changed.plain === '') {

obj.changed.plain = ref;

}

else if (regExp.test(obj.changed.plain) === true) {

obj.changed.plain = obj.changed.plain.replace(regExp, '');

}

else if ( /<references ?\/>/i.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/<references ?\/>/gi, '');

}

else {

obj.changed = obj.cursor;

obj.changed.plain = ref;

}

}

obj.changed.keepSel = true;

break;

// toggle lowercase / uppercase

case 'wikEdCase':

if (obj.changed.plain === '') {

obj.changed.plain = null;

}

// lowercase all uppercased text

else {

// html character entities to chars

var plain = obj.changed.plain;

plain = plain.replace(/>/g, '>');

plain = plain.replace(/</g, '<');

plain = plain.replace(/&/g, '&');

if (plain.toUpperCase() == plain) {

plain = plain.toLowerCase();

}

// first-letter-uppercase all lowercased text

else if (plain.toLowerCase() == plain) {

var regExp = new RegExp('(^|[^' + wikEd.letters + '_0-9])([' + wikEd.letters + '])([' + wikEd.letters + '_0-9\']*)', 'g');

plain = plain.replace(regExp,

function(p, p1, p2, p3) {

return p1 + p2.toUpperCase() + p3.toLowerCase();

}

);

}

// uppercase mixed upper and lowercased text

else {

plain = plain.toUpperCase();

}

// chars back to html character entities

plain = wikEd.EscapeHtml(plain);

obj.changed.plain = plain;

}

obj.changed.keepSel = true;

break;

// sort alphabetically by visible words, case insensitive, and numerically

case 'wikEdSort':

// fix unicode and character entities

wikEd.FixUnicode(obj.changed);

// sort a single line

if (/\n./.test(obj.changed.plain) === false) {

// Normalize(): normalize strings for sorting

var Normalize = function (text) {

// [ [ |( ) ] ]

text = text.replace(/\[\^\[\]\*)\]\]/g, '$1');

// [ [( ) ] ]

text = text.replace(/\[\[([^\[\]\|]*)\]\]/g, '$1');

// start with first letter

var regExp = new RegExp('^[^' + wikEd.letters + '_0-9]+', 'g');

text = text.replace(regExp, '');

// sort numerically by adding preceeding 0s to numbers

text = text.replace(/0*(\d+)(\.\d*)?/g,

function(p, p1, p2) {

return '000000000000000'.substr(p1.length) + p1 + p2;

}

);

// case insensitive

text = text.toLowerCase();

return text;

};

// SplitSortJoin(): sort list items in one line

var SplitSortJoin = function (regExp, text) {

var sorted = null;

// split text into array of element / separator pairs

var array = [];

var regExpMatch;

var lastMatch = 0;

while ( (regExpMatch = regExp.exec(text)) !== null) {

var element = text.substring(lastMatch, regExpMatch.index);

var separator = regExpMatch[0];

array.push([element, separator, Normalize(element)]);

lastMatch = regExp.lastIndex;

}

if (array.length > 0) {

var element = text.substring(lastMatch);

if (element !== '') {

array.push([element, '', Normalize(element)]);

}

// sort array after normalized elements

array.sort(function(a, b) {

if (a[2] > b[2]) {

return 1;

}

if (a[2] < b[2]) {

return -1;

}

return 0;

});

// join, keep separator next to element if possible, otherwise use last separator

sorted = '';

for (var i = 0; i < array.length; i ++) {

if ( (array[i][1] === '') && (i < array.length - 1) ) {

array[i][1] = array[array.length - 1][1];

array[array.length - 1][1] = '';

}

sorted += array[i][0] + array[i][1];

}

}

return sorted;

};

// extract sortable text

var pre = '';

var sortable = obj.changed.plain;

var post = '';

// 123 3 4 4 2 15 56 6

var regExpMatch = /^(((\|[\w ]+\=)|\||!|(:*;)+) *)(.*?)( *\n*)$/.exec(obj.changed.plain);

if (regExpMatch !== null) {

pre = regExpMatch[1];

sortable = regExpMatch[5];

post = regExpMatch[6];

}

// sortable text enclosed in html

var regExpMatch = /^(<[^>]>+)(.*?)(<\/[^>]>+)$/.exec(sortable);

if (regExpMatch !== null) {

pre = pre + regExpMatch[1];

sortable = regExpMatch[2];

post = regExpMatch[3] + post;

}

// table cells

var sorted = SplitSortJoin(/ *((\||!){2,2}) *()/g, sortable);

if ( (sorted === null) || (/^(\|{1,1}|!{1,1})/.test(pre) === false) ) {

// bullets, dots, dashes, \|/:-,; in spaces

sorted = SplitSortJoin(/((&nbsp;| )+((\\|\||\/|:|-|,|;)+)(&nbsp;| )+|(&nbsp;| )*(•|•|•|•|·|·|�*xb7;|�*183;|–|–|–|–|—|—|―|―)(&nbsp;| )*)()/gi, sortable);

if (sorted === null) {

// ,;:

sorted = SplitSortJoin(/(&nbsp;| )*(,|;|:)(&nbsp;| )+/g, sortable);

if (sorted === null) {

// multiple spaces with  

sorted = SplitSortJoin(/( +&nbsp;|&nbsp;&nbsp;|&nbsp; )(&nbsp;| )*()/g, sortable);

// simple spaces

if (sorted === null) {

sorted = SplitSortJoin(/ +/g, sortable);

}

}

}

}

// join pre, sorted, and post

if (sorted !== null) {

sorted = sorted.replace(/ {2,}/, ' ');

sorted = sorted.replace(/ +$/, '');

post = post.replace(/ +(\n*|$)/, '$1');

obj.changed.plain = pre + sorted + post;

}

break;

}

// keep leading and trailing empty lines and table syntax

var pre = '';

var main = '';

var post = '';

var regExpMatch = /^(((\{\|.*|!.*|\|\+.*|\|\-.*|)\n)*)((.|\n)*?)(((\|\}.*|\|\-.*|)\n)*)$/.exec(obj.changed.plain);

if (regExpMatch !== null) {

pre = regExpMatch[1];

main = regExpMatch[4];

post = regExpMatch[6];

}

else {

main = obj.changed.plain;

}

// join cells in table rows

main = main.replace(/(^|\n)(\|[^\-\+\}](.|\n)*?(?=(\|\-|\{\||\|\}|$)|$))/g,

function(p, p1, p2, p3) {

p2 = p2.replace(/\n/g, '\x00');

return p1 + p2;

}

);

// cycle through lines

var lines = main.split('\n');

var sortArray = [];

for (var i = 0; i < lines.length; i ++) {

var line = lines[i];

var sortKey = line;

// remove empty lines

if (line === '') {

continue;

}

sortKey = sortKey.replace(/\x00/g, '\n');

// remove html

sortKey = sortKey.replace(/<.*>/g, '');

// lowercase

sortKey = sortKey.toLowerCase();

// keep visible text of wikilinks only

sortKey = sortKey.replace(/\[\\[\*\|/g, '');

sortKey = sortKey.replace(/\[\[|\]\]/g, '');

// keep visible text of external links only

sortKey = sortKey.replace(/\[(https?:|ftp:|irc:|gopher:)\/\/\S+/g, '');

// keep visible cell content only

sortKey = sortKey.replace(/((^|\n)(\||\!))(?![\+\-\}\|\!])[^\|\!]*(\||\!)(?!\4)/g, '$1');

sortKey = sortKey.replace(/(^|\n)\|-.*?(\n|$)/g, '$2');

// keep single ' only

sortKey = sortKey.replace(/'{2,}/g, '');

// remove decimal commas

sortKey = sortKey.replace(/(\d)\,(?=\d\d\d(\D|$))/g, '$1');

// sort numerically by adding preceeding 0s to numbers

sortKey = sortKey.replace(/0*(\d+)(\.\d*)?/g,

function(p, p1, p2) {

return '000000000000000'.substr(p1.length) + p1 + p2;

}

);

// non-breaking and other spaces

sortKey = sortKey.replace(/ |\s/g, ' ');

// remove umlauts (just guessing, but probably better than not doing it)

sortKey = sortKey.replace(/[à-æ]/g, 'a');

sortKey = sortKey.replace(/[ç]/g, 'c');

sortKey = sortKey.replace(/[ð]/g, 'd');

sortKey = sortKey.replace(/[è-ë]/g, 'e');

sortKey = sortKey.replace(/[ì-ï]/g, 'i');

sortKey = sortKey.replace(/[ñ]/g, 'n');

sortKey = sortKey.replace(/[ò-öø]/g, 'o');

sortKey = sortKey.replace(/[ß]/g, 'ss');

sortKey = sortKey.replace(/[ù-ü]/g, 'u');

sortKey = sortKey.replace(/[ýÿ]/g, 'y');

// remove non-chars

sortKey = sortKey.replace(/[^$@.,:;\-\w\s'\u007f-\uffff]/g, '');

// join multiple spaces

sortKey = sortKey.replace(/ +/g, ' ');

// remove leading and trailing spaces

sortKey = sortKey.replace(/^ +| +$/g, '');

sortArray.push( [line, sortKey] );

}

// sort lines

sortArray = sortArray.sort(

function(a, b) {

if (a[1] > b[1]) {

return 1;

}

if (a[1] < b[1]) {

return -1;

}

else {

return 0;

}

}

);

// join lines

var joined = '';

for (var i = 0; i < sortArray.length; i ++) {

joined += sortArray[i][0];

if (i < sortArray.length - 1) {

joined += '\n';

}

}

joined = joined.replace(/\x00/g, '\n');

obj.changed.plain = pre + joined + post;

obj.changed.keepSel = true;

break;

// undo all

case 'wikEdUndoAll':

if (wikEd.lastVersion === null) {

wikEd.lastVersion = obj.changed.plain;

}

obj.changed.plain = wikEd.origVersion;

obj.changed.plain = wikEd.EscapeHtml(obj.changed.plain);

break;

// redo all

case 'wikEdRedoAll':

if (wikEd.lastVersion !== null) {

obj.changed.plain = wikEd.lastVersion;

}

break;

// create wikilink

case 'wikEdWikiLink':

if ( /\[\[((.|\n)*?)\]\]/.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/\[\[(.*?)\|\s*(.*?)\s*\]\]/g, '$2');

obj.changed.plain = obj.changed.plain.replace(/\[\[((.|\n)*?)\]\]/g, '$1');

}

else {

obj.changed.plain = '' + obj.changed.plain + '';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(\[\[)(\s*)((.|\n)*?)(\s*)(\]\])$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// create weblink

case 'wikEdWebLink':

if ( /\[((.|\n)*?)\]/.test(obj.changed.plain) ) {

obj.changed.plain = obj.changed.plain.replace(/\[((.|\n)*?)\]/g, '$1');

}

else {

obj.changed.plain = '[' + obj.changed.plain + ']';

if (emptyOrSpaces === false) {

obj.changed.plain = obj.changed.plain.replace(/^(\[)(\s*)((.|\n)*?)(\s*)(\])$/, '$2$1$3$6$5');

}

}

obj.changed.keepSel = true;

break;

// decrease heading level

case 'wikEdDecreaseHeading':

// decrease heading

obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(=+) *(.*?) *=+(?=\n|$)/g, '$1$2 $3 $2');

// remove heading

obj.changed.plain = obj.changed.plain.replace(/(^|\n)=(?!=) *(.*?) *=+(?=\n|$)/g, '$1$2');

// adjust closing tags

obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *(.*?) *=+(?=\n|$)/g, '$1$2 $3 $2');

obj.changed.keepSel = true;

break;

// increase heading level

case 'wikEdIncreaseHeading':

// increase heading

obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *(.*?) *=+(?=\n|$)/g, '$1=$2 $3 $2=');

// create new heading

if (/\n/.test(obj.changed.plain) === false) {

obj.changed.plain = obj.changed.plain.replace(/(^|\n)([^=\s].*?)(?=\n|$)/g, '$1== $2 ==');

}

// adjust closing tags

obj.changed.plain = obj.changed.plain.replace(/(^|\n)(=+) *(.*?) *=+(?=\n|$)/g, '$1$2 $3 $2');

obj.changed.keepSel = true;

break;

// increase bullet list

case 'wikEdIncreaseBulletList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^ *([*#:;]*) *()/g, '*$1 ');

return p1;

}

);

obj.changed.keepSel = true;

break;

// decrease bullet list

case 'wikEdDecreaseBulletList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^[*#:;] *()/g, '');

return p1;

}

);

obj.changed.keepSel = true;

break;

// increase numbered list

case 'wikEdIncreaseNumberList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^ *([*#:;]*) *()/g, '#$1 ');

return p1;

}

);

obj.changed.keepSel = true;

break;

// decrease numbered list

case 'wikEdDecreaseNumberList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^[*#:;] *()/g, '');

return p1;

}

);

obj.changed.keepSel = true;

break;

// increase indented list

case 'wikEdIncreaseIndentList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^ *([*#:;]*) *()/g, ':$1 ');

return p1;

}

);

obj.changed.keepSel = true;

break;

// decrease indented list

case 'wikEdDecreaseIndentList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^[*#:;] *()/g, '');

return p1;

}

);

obj.changed.keepSel = true;

break;

// create definition list

case 'wikEdDefinitionList':

obj.changed.plain = obj.changed.plain.replace(/(.+)/g,

function(p, p1) {

p1 = p1.replace(/^ *([^\s;]+) *()/g, '; $1 : ');

return p1;

}

);

break;

// create image

case 'wikEdImage':

if (obj.changed.plain !== '') {

obj.changed.plain = 'Image:' + wikEd.config.text['image filename'] + '';

}

else {

obj.changed.plain = 'Image:' + wikEd.config.text['image filename'] + '';

if (obj.focusWord !== undefined) {

if (obj.focusWord.plain !== '') {

obj.changed.plain = ' ' + obj.changed.plain + ' ';

}

}

}

break;

// create table

case 'wikEdTable':

if (obj.changed.plain !== '') {

obj.changed.plain = obj.changed.plain.replace(/(^|\n) *()/g, '\n|-\n| ');

obj.changed.plain = obj.changed.plain.replace(/^\n\|\-\n/, '\n

class="wikitable"\n');

obj.changed.plain = obj.changed.plain.replace(/$/g, '\n

\n');

}

else {

obj.changed.plain = '\n

class="wikitable"\n|+ ' + wikEd.config.text['table caption'] + '\n! ' + wikEd.config.text['table heading'] + ' !! ' + wikEd.config.text['table heading'] + '\n
\n| ' + wikEd.config.text['table cell'] + '' + wikEd.config.text['table cell'] + '\n
\n| ' + wikEd.config.text['table cell'] + '' + wikEd.config.text['table cell'] + '\n
\n';

if (obj.focusLine.plain !== '') {

obj.changed.plain = '\n' + obj.changed.plain + '\n';

}

}

break;

// wikify pasted

case 'wikEdPastedWikify':

// wikify already pasted content

if ( (wikEd.paste === null) || (wikEd.paste.polling === true) ) {

wikEd.PastedOff();

return;

}

// reselect pasted

obj.sel.removeAllRanges();

obj.sel.addRange(wikEd.paste.range);

obj = {};

wikEd.GetText(obj, 'selection', false);

obj.changed = obj.selection;

obj.changed.plain = wikEd.paste.wikified;

wikEd.paste.last = 'wikify';

wikEd.PastedSwitch();

obj.changed.keepSel = true;

break;

// textify during pasting

case 'wikEdPasting':

if ( (wikEd.paste === null) || (wikEd.paste.polling === true) ) {

wikEd.PastedOff();

return;

}

// move content before br after paste at end of line, part 1

if (wikEd.paste.pasteAtEndOfLine === true) {

if (wikEd.paste.blockStart === true) {

obj.changed.plain = obj.changed.plain.replace(/^\n/, '');

obj.changed.html = obj.changed.html.replace(/^]*>/, '');

}

}

// textify, not changing obj.html

wikEd.Textify(obj.changed);

obj.changed.plain = obj.changed.plain.replace(/\xa0/g, ' ');

wikEd.paste.last = 'textify';

// wikify, not changing obj.plain

wikEd.RemoveEmbracingTags(obj.changed);

wikEd.WikifyHTML(obj.changed, false);

obj.changed.html = obj.changed.html.replace(/\s*]*>\s*/g, '\n');

obj.changed.html = obj.changed.html.replace(/\xa0/g, ' ');

// move content before br after paste at end of line, part 2

if (wikEd.paste.pasteAtEndOfLine === true) {

if (wikEd.paste.blockEnd === true) {

obj.changed.plain += '\n';

obj.changed.html += '\n';

}

}

// save textified and wikified for switching

wikEd.paste.textified = obj.changed.plain;

wikEd.paste.wikified = obj.changed.html;

// no textify/wikify option when pasting plain text

if (wikEd.paste.textified == wikEd.paste.wikified) {

wikEd.PastedOff();

}

else {

obj.changed.keepSel = true;

}

break;

// textify pasted: strip html from recently pasted content

case 'wikEdPastedTextify':

if ( (wikEd.paste === null) || (wikEd.paste.polling === true) ) {

wikEd.PastedOff();

return;

}

// reselect pasted

obj.sel.removeAllRanges();

obj.sel.addRange(wikEd.paste.range);

obj = {};

wikEd.GetText(obj, 'selection', false);

obj.changed = obj.selection;

obj.changed.plain = wikEd.paste.textified;

wikEd.paste.last = 'textify';

wikEd.PastedSwitch();

obj.changed.keepSel = true;

break;

// wikify

case 'wikEdWikify':

// wikify already done in wikEd.GetText()

break;

// textify: strip html from pasted content

case 'wikEdTextify':

wikEd.Textify(obj.changed);

if (parameters == 'shift') {

highlightNoTimeOut = true;

}

break;

// redirect

case 'wikEdRedirect':

var linkTarget;

if (obj.selection.plain !== '') {

linkTarget = obj.selection.plain;

}

else if (obj.selectionWord.plain !== '') {

linkTarget = obj.selectionWord.plain;

}

else {

linkTarget = '' + wikEd.config.text['redirect article link'] + '';

}

// remove link text after |

linkTarget = linkTarget.replace(/\|(.|\n)*()/, '');

// remove formatting and spaces

linkTarget = linkTarget.replace(/^(=+|'+|<[^>]*>|\s+|\[)+((.|\n)*?)(=+|'+|<[^>]*>|\s+|\])+$/g, '$2');

linkTarget = linkTarget.replace(/</g, '<');

linkTarget = linkTarget.replace(/>/g, '>');

linkTarget = linkTarget.replace(/\s+/g, ' ');

linkTarget = linkTarget.replace(/^\s+|\s+$/g, '');

obj.changed.plain = '#REDIRECT ' + linkTarget + '';

// append to summary

if (wikEd.wikiGlobals.wgUseAutomaticEditSummaries !== true) {

if (wikEd.inputElement.summary !== undefined) {

if ( (obj.selection.plain !== ) || (obj.selectionWord.plain !== ) ) {

wikEd.inputElement.summary.value = wikEd.inputElement.summary.value.replace(/#REDIRECT( \[\^\*\]\])?(, *)?/g, '');

wikEd.inputElement.summary.value = wikEd.AppendToSummary(wikEd.inputElement.summary.value, '#REDIRECT ' + linkTarget + '');

}

else {

wikEd.inputElement.summary.value = wikEd.AppendToSummary(wikEd.inputElement.summary.value, '#REDIRECT');

}

}

}

selectChanged = false;

break;

// find and replace

case 'wikEdFindPrev':

case 'wikEdFindNext':

case 'wikEdJumpPrev':

case 'wikEdJumpNext':

case 'wikEdReplacePrev':

case 'wikEdReplaceNext':

case 'wikEdFindAll':

case 'wikEdReplaceAll':

// get the find text

var findText;

// unescape <, >, and &

obj.changed.plain = obj.changed.plain.replace(/</g, '<');

obj.changed.plain = obj.changed.plain.replace(/>/g, '>');

obj.changed.plain = obj.changed.plain.replace(/&/g, '&');

// copy selection/word under cursor to find field

if ( (parameters == 'shift') && ( (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdReplaceNext') ) ) {

if (/\n/.test(obj.changed.plain) === false) {

if (buttonId == 'wikEdFindNext') {

wikEd.inputElement.find.value = obj.changed.plain;

}

else {

wikEd.inputElement.replace.value = obj.changed.plain;

}

obj.changed.keepSel = true;

obj.changed.plain = null;

break;

}

}

// get the find text from the selection

if ( (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {

findText = obj.changed.plain;

if (obj.selection.plain === '') {

obj.changed.keepSel = true;

obj.changed.plain = null;

break;

}

}

// get the find text from the find field

else {

if (wikEd.inputElement.find.value !== '') {

findText = wikEd.inputElement.find.value.replace(/\xa0/g, ' ');

}

else {

obj.changed.plain = null;

break;

}

}

// get button status

var regExpChecked = wikEd.regExp.getAttribute('checked');

var caseSensitiveChecked = wikEd.caseSensitive.getAttribute('checked');

// get case sensitive setting

var caseSensitive = false;

if (caseSensitiveChecked == 'true') {

caseSensitive = true;

}

// get the replace text

var replaceText = wikEd.inputElement.replace.value.replace(/\xa0/g, ' ');

// format the find and replace texts for a plain text search

var useRegExp = true;

if ( (regExpChecked == 'false') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ) {

useRegExp = false;

}

// format the replace text for a regular expression search

if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') || (buttonId == 'wikEdReplaceAll') ) {

if (useRegExp === true) {

// substitute \\ \n \r \t \' \" \127 \x1f \u12ef

replaceText = replaceText.replace(/\\\\/g, '\x00');

replaceText = replaceText.replace(/\\n/g, '\n');

replaceText = replaceText.replace(/\\r/g, '\r');

replaceText = replaceText.replace(/\\t/g, '\t');

replaceText = replaceText.replace(/\\'/g, '\'');

replaceText = replaceText.replace(/\\"/g, '\"');

replaceText = replaceText.replace(/\\([0-7]{3})/g,

function(p, p1) {

return String.fromCharCode(parseInt(p1, 8));

}

);

replaceText = replaceText.replace(/\\x([0-9a-fA-F]{2})/g,

function(p, p1) {

return String.fromCharCode(parseInt(p1, 16));

}

);

replaceText = replaceText.replace(/\\u([0-9a-fA-F]{4})/g,

function(p, p1) {

return String.fromCharCode(parseInt(p1, 16));

}

);

replaceText = replaceText.replace(/\x00/g, '\\');

}

}

// check the regexp

var replacedFlag = false;

var regExpFind;

if (

(buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') || (buttonId == 'wikEdReplaceAll') ||

(buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindAll')

) {

var regExpFindText = findText;

if (useRegExp !== true){

regExpFindText = regExpFindText.replace(/([\\^$*+?.()\[\]{}:=!|,\-])/g, '\\$1');

}

var regExpFlags = 'gm';

if (caseSensitive !== true) {

regExpFlags += 'i';

}

try {

regExpFind = new RegExp(regExpFindText, regExpFlags);

}

catch (exception) {

return;

}

}

// replace all

if (buttonId == 'wikEdReplaceAll') {

if (regExpFind.test(obj.changed.plain)) {

obj.changed.plain = obj.changed.plain.replace(regExpFind, replaceText);

replacedFlag = true;

}

else {

obj.changed.plain = null;

}

}

// replace an existing selection

else if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') ) {

if (regExpFind.test(obj.selection.plain)) {

var replaced = obj.selection.plain.replace(regExpFind, replaceText);

if (obj.changed.plain != replaced) {

obj.changed.plain = replaced;

replacedFlag = true;

}

else {

obj.changed.plain = null;

}

}

else {

obj.changed.plain = null;

}

}

else if (

(buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') ||

(buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext')

) {

obj.changed.plain = null;

}

if (

(buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') ||

(buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdJumpNext') ||

(buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') ||

(buttonId == 'wikEdFindAll')

) {

if (replacedFlag === false) {

// get direction

var backwards = false;

if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdJumpPrev') || (buttonId == 'wikEdReplacePrev') ) {

backwards = true;

}

// find all

if (buttonId == 'wikEdFindAll') {

var found;

var foundRanges = [];

// start at top of text

obj.sel.removeAllRanges();

var range = wikEd.frameDocument.createRange();

if (wikEd.frameBody.firstChild !== null) {

range.setStartBefore(wikEd.frameBody.firstChild);

}

range.collapse(true);

range = obj.sel.addRange(range);

// cycle through matches

var scrollTop = wikEd.frameBody.scrollTop;

do {

// wikEd.Find(obj, findText, caseSensitive, backwards, wrap, useRegExp)

found = wikEd.Find(obj, findText, caseSensitive, false, false, useRegExp);

if (found === true) {

foundRanges.push(obj.changed.range.cloneRange());

}

} while (found === true);

// scroll back

if (regExpChecked == 'false') {

wikEd.frameBody.scrollTop = scrollTop;

}

// add the found ranges, Webkit does not support multiple selections

obj.sel.removeAllRanges();

for (var i = 0; i < foundRanges.length; i ++) {

obj.sel.addRange(foundRanges[i]);

}

obj.changed.plain = null;

selectChanged = false;

}

// normal find

else {

obj.selectChanged = selectChanged;

wikEd.Find(obj, findText, caseSensitive, backwards, true, useRegExp);

selectChanged = obj.selectChanged;

}

}

}

// escape <, >, and &

if (obj.changed.plain !== null) {

obj.changed.plain = wikEd.EscapeHtml(obj.changed.plain);

}

// save search history to settings

if ( (buttonId == 'wikEdFindPrev') || (buttonId == 'wikEdFindNext') || (buttonId == 'wikEdFindAll') ) {

wikEd.AddToHistory('find');

}

if ( (buttonId == 'wikEdReplacePrev') || (buttonId == 'wikEdReplaceNext') || (buttonId == 'wikEdReplaceAll') ) {

wikEd.AddToHistory('find');

wikEd.AddToHistory('replace');

}

obj.changed.keepSel = true;

break;

// fixbasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions

// to do: only certain changes in multiline tags: comments, tables, subst

case 'wikEdFixBasic':

wikEd.FixBasic(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixPunct':

wikEd.FixPunct(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixMath':

wikEd.FixMath(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixChem':

wikEd.FixChem(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixUnicode':

wikEd.FixUnicode(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixRedirect':

wikEd.LinkInfoCall(obj.changed, function (ajax) {

wikEd.LinkInfoHandler(ajax);

wikEd.EditButton(null, 'wikEdFixRedirectReplace');

});

return;

case 'wikEdFixRedirectReplace':

wikEd.FixRedirectReplace(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixUnits':

wikEd.FixUnits(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixDashes':

wikEd.FixDashes(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixHtml':

wikEd.FixHTML(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixRegExTypo':

if ( (wikEd.config.regExTypoFix === true) && (wikEd.typoRulesFind.length > 0) ) {

wikEd.FixTypos(obj.changed);

}

else {

obj.changed.plain = null;

}

obj.changed.keepSel = true;

break;

case 'wikEdFixCaps':

wikEd.FixCaps(obj.changed);

obj.changed.keepSel = true;

break;

case 'wikEdFixAll':

wikEd.FixAll(obj.changed);

obj.changed.keepSel = true;

break;

// source on

case 'wikEdSource':

obj.changed.plain = obj.changed.code;

obj.changed.plain = obj.changed.plain.replace(/(<(br|p)\b[^>]*>)/g, '$1\n\n');

obj.changed.plain = wikEd.EscapeHtml(obj.changed.plain);

highlightSyntax = false;

break;

// insert tags

case 'wikEdInsertTags':

var tagOpen = parameters[0] || '';

var tagClose = parameters[1] || '';

var sampleText = parameters[2] || '';

tagOpen = wikEd.EscapeHtml(tagOpen);

tagClose = wikEd.EscapeHtml(tagClose);

sampleText = wikEd.EscapeHtml(sampleText);

// single string to insert

if ( (tagOpen.length > 0) && (tagClose.length === 0) && (sampleText.length === 0) ) {

obj.changed.plain = tagOpen;

}

else if ( (tagOpen.length === 0) && (tagClose.length === 0) && (sampleText.length > 0) ) {

obj.changed.plain = sampleText;

}

// opening and closing strings

else if ( (obj.changed.plain === '') && (sampleText.length > 0) ) {

obj.changed.plain = tagOpen + sampleText + tagClose;

// select sample text

selectChangedText = sampleText;

obj.changed.keepSel = true;

}

else {

obj.changed.plain = tagOpen + obj.changed.plain + tagClose;

}

break;

// update text view using current control button settings

case 'wikEdUpdateAll':

obj.changed.keepSel = true;

if ( (parameters !== undefined) && (parameters.keepSel === false) ) {

obj.changed.keepSel = false;

}

break;

// custom edit functions

default:

if (CustomHandler !== undefined) {

CustomHandler(obj);

}

else {

window.alert('Unknown edit function \ + buttonId + '\);

}

break;

}

// pause frame spellchecking

var pauseFrameSpellchecking = false;

var frameSpellchecking = wikEd.frameBody.spellcheck;

if (frameSpellchecking === true) {

var wholeLength = 0;

var changedLength = 0;

if (obj.whole !== undefined) {

if (obj.whole.plain !== null) {

wholeLength = obj.whole.plain.length;

}

}

if (obj.changed.plain !== null) {

changedLength = obj.changed.plain.length;

}

if ( (changedLength > 10000) || (wholeLength > 10000) ) {

pauseFrameSpellchecking = true;

wikEd.frameBody.spellcheck = false;

}

}

// get the scroll position

var frameScrollTop = wikEd.frameBody.scrollTop;

// update the selection ranges, do not add any text changes

if (obj.changed.plain === null) {

if (buttonId != 'wikEdFindAll') {

obj.sel.removeAllRanges();

obj.sel.addRange(obj.changed.range);

// scroll the selected text into the viewport

if (selectChanged !== false) {

wikEd.ScrollToSelection();

}

}

}

// apply text changes

else {

// a text change erases the last version for redo all

if ( (buttonId != 'wikEdUndo') && (buttonId != 'wikEdRedo') && (buttonId != 'wikEdUndoAll') ) {

wikEd.lastVersion = null;

}

// highlight the syntax

obj.html = obj.changed.plain;

if (highlightSyntax === true) {

if (obj.changed.from == 'whole') {

obj.whole = true;

}

wikEd.HighlightSyntax(obj, highlightNoTimeOut);

}

// at least highlight tab characters

else {

obj.html = obj.html.replace(/(\t)/g, '$1');

}

// display multiple blanks as blank- 

obj.html = obj.html.replace(/(^|\n) /g, '$1 ');

obj.html = obj.html.replace(/ (\n|$)/g, ' $1');

obj.html = obj.html.replace(/ {2}/g, '  ');

obj.html = obj.html.replace(/ {2}/g, '  ');

// newlines to

obj.html = obj.html.replace(/\n/g, '
');

// make changed range text the current selection

obj.sel.removeAllRanges();

var range = obj.changed.range;

obj.sel.addRange(range);

// replace the selection with changed text

if ( (obj.changed.keepSel === false) && (obj.html === '') && (obj.sel.isCollapsed === false) ) {

wikEd.frameDocument.execCommand('delete');

}

else if ( (obj.changed.keepSel === false) || (obj.changed.from == 'whole') ) {

// read only toggle highlight button

if (wikEd.readOnly === true) {

wikEd.frameBody.innerHTML = obj.html;

}

else if (obj.html !== '') {

wikEd.frameDocument.execCommand('inserthtml', false, obj.html);

}

// firefox workaround https://bugzilla.mozilla.org/show_bug.cgi?id=309731

else {

wikEd.frameDocument.execCommand('delete', false);

}

}

else {

wikEd.insertCounter ++;

var reselectBefore = '';

var reselectAfter = '';

wikEd.frameDocument.execCommand('inserthtml', false, reselectBefore + obj.html + reselectAfter);

}

// select the whole text after replacing the whole text and scroll to same height

var range = null;

if ( (obj.changed.from == 'whole') && (wikEd.frameBody.firstChild !== null) ) {

obj.sel.removeAllRanges();

range = wikEd.frameDocument.createRange();

range.setStartBefore(wikEd.frameBody.firstChild);

range.setEndAfter(wikEd.frameBody.lastChild);

obj.sel.addRange(range);

selectChanged = false;

// scheduling needed for Firefox but not Chrome

window.setTimeout( function () { wikEd.frameBody.scrollTop = frameScrollTop; }, 0);

}

// select the changed text and scroll it into the viewport

else if (selectChanged !== false) {

obj.sel.removeAllRanges();

range = wikEd.frameDocument.createRange();

var startNodeReselect = wikEd.frameDocument.getElementById('wikEdScrollBefore' + wikEd.insertCounter);

var endNodeReselect = wikEd.frameDocument.getElementById('wikEdScrollAfter' + wikEd.insertCounter);

if ( (startNodeReselect !== null) && (endNodeReselect !== null) ) {

range.setStartBefore(startNodeReselect);

range.setEndAfter(endNodeReselect);

obj.sel.addRange(range);

wikEd.ScrollToNodes(startNodeReselect, endNodeReselect);

}

}

// save paste range for reselection to switch between textified and wikified text

if ( (wikEd.paste !== null) && (range !== null) ) {

wikEd.paste.range = range.cloneRange();

}

}

// remove selection, keep whole text auto-selection as warning

if (

( (obj.changed.keepSel !== true) && (obj.changed.from != 'whole') ) ||

(obj.changed.keepSel === false) ||

(buttonId == 'wikEdRedirect') ||

( (buttonId == 'wikEdWikify') && (parameters == 'whole') )

) {

if (obj.sel.rangeCount === 0) {

obj.sel.collapse(wikEd.frameBody, 0);

}

else {

obj.sel.collapseToEnd();

}

// focus edit area to continue editing as there is no selection that would be overwritten

wikEd.frameWindow.focus();

wikEd.keepSelRange = null;

}

// save curently selected range

else if (obj.sel.rangeCount > 0) {

wikEd.keepSelRange = obj.sel.getRangeAt(0);

}

else {

wikEd.keepSelRange = null;

}

// reset button to active, reset cursor

if (buttonObj !== null) {

if (buttonObj.className != 'wikEdButtonInactive') {

buttonObj.className = 'wikEdButton';

}

buttonObj.style.cursor = '';

}

// grey out inactive buttons

wikEd.InactiveButtons();

// add event handlers to unhide refs and templates

if ( (highlightSyntax === true) && (obj.changed.plain !== null) ) {

// add ref and template names to hide buttons

wikEd.HighlightNamedHideButtons();

// add event handlers to unhide refs and templates

wikEd.HideAddHandlers();

// add event handlers to make highlighted frame links ctrl-clickable

wikEd.LinkifyLinks();

// get link infos from server (redirects, redlinks)

wikEd.LinkInfoCall();

}

// resume frame spellchecking

if (pauseFrameSpellchecking === true) {

wikEd.frameBody.spellcheck = true;

}

return;

};

//

// wikEd.LocalPreview: display local preview box using AJAX call

//

wikEd.LocalPreview = function ( fetchRefs ) {

// interrupt fullscreen mode

if ( wikEd.fullscreen === true ) {

wikEd.FullScreen( false );

}

// update textarea

if ( wikEd.useWikEd === true && wikEd.textareaUpdated === false ) {

wikEd.UpdateTextarea();

wikEd.textareaUpdated = true;

}

// clear box to display loading indicator, keep wrapper height to prevent scrolling

var previewHeight = wikEd.localPrevWrapper.offsetHeight;

if ( ( wikEd.previewArticle.innerHTML !== || wikEd.previewDiff.innerHTML !== ) && previewHeight > 0 ) {

wikEd.localPrevWrapper.style.height = previewHeight + 'px';

}

if ( wikEd.previewArticle.innerHTML === '' ) {

wikEd.previewArticle.innerHTML = wikEd.config.text.wikEdPreviewLoading;

}

wikEd.previewArticle.style.display = 'block';

wikEd.previewDiff.style.display = 'none';

wikEd.localPrevWrapper.style.display = 'block';

// load MathJax js

if ( window.MathJax === undefined ) {

if ( wikEd.loader === true ) {

// prevent error if module is not installed

try {

window.mw.loader.using( 'ext.math.mathjax.enabler', function () {

window.$( '.wikEdPreviewArticle' ).renderTeX();

} );

}

catch ( exception ) {

}

}

}

// prepare ajax preview

wikEd.previewIsAjax = false;

var bodyData = wikEd.textarea.value;

if ( wikEd.config.useAjaxPreview === true ) {

// use Live preview if possible, see https://www.mediawiki.org/wiki/Manual:Live_preview

var livePreview = true;

// articles on watchlist preview page

if ( wikEd.editWatchlist === true ) {

bodyData = bodyData.replace( /\n{1}/g, '\n\n' );

bodyData = bodyData.replace( /(.+)/g,

function( p, p1 ) {

if ( /[#<>\[\]|{}]/.test(p1) === true ) {

return p1;

}

var article = p1;

// get article talk page

var talk;

if ( /:/.test(article) === true ) {

// $1_ns:name

if ( wikEd.config.text['talk namespace suffix'].indexOf('$1') >= 0 ) {

talk = article.replace( /^([^:]*)/, wikEd.config.text['talk namespace suffix'] );

}

// talk_ns:name (Discussion_Utilisateur) (all ASCII non-letters as separator)

else if ( /[ -\/:-@\[-`{-\x88‰‹\x8d\x8f-\x98™›\x9d\xa0-»¿×÷]$/.test( wikEd.config.text['talk namespace suffix'] ) === true ) {

talk = article.replace( /^([^:]*)/, wikEd.config.text['talk namespace suffix'] + '$1' );

}

// ns_talk:name (User_talk)

else {

talk = article.replace( /^([^:]*)/, '$1' + wikEd.config.text['talk namespace suffix'] );

}

}

else {

talk = wikEd.config.text['talk namespace'] + ':' + article;

}

var uriArticle = wikEd.EncodeTitle( article );

var hist = wikEd.wikiGlobals.wgServer + wikEd.wikiGlobals.wgScript + '?title=' + uriArticle + '&action=history';

return ':' + p1 + ' • (' + wikEd.config.text['talk page'] + ', [' + hist + ' ' + wikEd.config.text['history page'] + '])';

}

);

}

// normal article edit page

else {

// check for section edits with tags

if (

wikEd.editSection !== null &&

/\/]*(\/>|>(.|\n)*?<\/ref>)/i.test( bodyData ) === true

) {

// check for named references defined outside edited section

if (

true

) {

// collect named references in section text

var namedRefs = wikEd.ParseNamedRefs( bodyData );

// check for undefined named refs

var undefinedRefs = false;

for ( var name in namedRefs ) {

if (

Object.prototype.hasOwnProperty.call( namedRefs, name ) === true &&

namedRefs[name] === null

) {

// reference definition not yet fetched

if ( wikEd.namedRefs[name] === undefined ) {

undefinedRefs = true;

if ( fetchRefs !== false ) {

break;

}

}

// replace first ref tag with fetched reference definition

else {

var regExpRef = new RegExp( ']*?\\bname\\s*=\\s*' + name + '[^>/]*(/>|>)', 'i' );

bodyData = bodyData.replace( regExpRef, wikEd.namedRefs[name] );

}

}

}

// fetch reference definitions from whole article text for outside refs, do not repeat fetch cycle

if ( undefinedRefs === true && fetchRefs !== false ) {

wikEd.GetArticleText( wikEd.GetArticleTextAjaxHandler );

return;

}

}

// append references section

if (

/]*>/i.test(bodyData) === false &&

/\{\{reflist\b(.|\n)*?\}\}/i.test(bodyData) === false

) {

bodyData += '

';

}

}

}

// GeSHi syntax highlighting support, CSS is only provided dynamically and not for Live preview

// request a full preview and attach CSS to page, remember already loaded languages

var regExp = /<(syntaxhighlight|source)\b[^>]*?lang\s*=\s*("|')(\w+)\2/gi;

var regExpMatch;

while ( (regExpMatch = regExp.exec(bodyData)) !== null) {

var lang = regExpMatch[3];

if (wikEd.syntaxHighlightTagCSS['wikEd' + lang] === undefined) {

livePreview = false;

wikEd.syntaxHighlightTagCSS['wikEd' + lang] = true;

break;

}

}

// make the AJAX request

wikEd.AjaxPreview( bodyData, wikEd.LocalPreviewAjaxHandler, livePreview );

}

return;

};

//

// wikEd.LocalPreviewAjaxHandler: process the returned article preview

//

wikEd.LocalPreviewAjaxHandler = function ( ajax ) {

wikEd.previewIsAjax = true;

// get response

var html = ajax.responseText;

// API reponse

if ( html.indexOf( '' ) != -1 ) {

html = wikEd.StringGetInnerHTML( html, 'text', '' )

.replace( /</g, '<' )

.replace( />/g, '>' )

.replace( /"/g, '"' )

.replace( /&/g, '&' );

}

// livepreview (https://www.mediawiki.org/wiki/Manual:Live_preview)

else if ( html.indexOf( '' ) != -1 ) {

html = wikEd.StringGetInnerHTML( html, 'preview', '' )

.replace( /</g, '<' )

.replace( />/g, '>' )

.replace( /"/g, '"' )

.replace( /'/g, '\'' )

.replace( /&/g, '&' );

html = wikEd.RemoveTag( html, 'div', /\bclass=("|')previewnote("|')/, '\x00', '\x01' );

html = html.replace( /\x00(.|\n)*?\x01/g, '' );

}

// full preview page

else {

// attach