User:Cacycle/wikEd dev.js: Difference between revisions

Content deleted Content added
0.9.94 (October 03, 2010)
wikEd 0.9.96
Line 4:
 
// version info
wikEd.programVersion = '0.9.9496';
wikEd.programDate = 'OctoberNovember 0306, 2010';
 
/*
Line 15:
on-page Show preview and Show changes, and advanced search and replace functions.
wikEd works under all web browsers except Internet Explorer and Opera.
The code has to be saved as UTF-8 in your editor to preserve Unicode characters like ♥ (heart symbol)
 
Greasemonkey metadata:
Line 67:
'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
Line 317 ⟶ 319:
 
// highlighting popups
'wikEdHyphenDashhyphenDash': 'Standard hyphen',
'wikEdFigureDashfigureDash': 'Figure dash',
'wikEdEnDashenDash': 'En dash',
'wikEdEmDashemDash': 'Em dash',
'wikEdBarDashbarDash': 'Horizontal bar',
'wikEdMinusDashminusDash': 'Minus sign',
'wikEdSoftHyphensoftHyphen': 'Soft hyphen',
'wikEdTabtab': 'Tab',
'wikEdEnSpaceenSpace': 'En space',
'wikEdEmSpaceemSpace': 'Em space',
'wikEdThinSpacethinSpace': 'Thin space',
'wikEdIdeographicSpaceideographicSpace': 'Ideographic space',
 
// highlighting
Line 458 ⟶ 460:
'tableMode': 'e/ee/WikEd_table_edit.png',
'tableBG': '8/8a/WikEd_unknown.png',
'testVersion': '3/3e/WikEd_error.png',
'textify': 'c/cd/WikEd_textify.png',
'thinSpace': '5/56/WikEd_thin_space.png',
Line 791 ⟶ 794:
'input#wpDiff, input#wpPreview': 'margin-right: 0;', // monobook fix
'.wikEdButtonDummy': 'vertical-align: text-top; margin: 1px 2px; padding: 1px; background: #d4d0cc;',
 
// preview box
'.wikEdPreviewBoxOuter': 'clear: both; margin: 0; border-width: 1px; border-style: solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
Line 872 ⟶ 875:
 
// format top
1: ['wikEdUndo', 'wikEdButtonInactive', wikEd.config.text['wikEdUndo title'], wikEd.config.image['.undo'], '16', '16', wikEd.config.text['wikEdUndo alt'], 'wikEd.EditButton(obj, objId);' ],
2: ['wikEdRedo', 'wikEdButtonInactive', wikEd.config.text['wikEdRedo title'], wikEd.config.image['.redo'], '16', '16', wikEd.config.text['wikEdRedo alt'], 'wikEd.EditButton(obj, objId);' ],
3: ['wikEdBold', 'wikEdButton', wikEd.config.text['wikEdBold title'], wikEd.config.image['.bold'], '16', '16', wikEd.config.text['wikEdBold alt'], 'wikEd.EditButton(obj, objId);' ],
4: ['wikEdItalic', 'wikEdButton', wikEd.config.text['wikEdItalic title'], wikEd.config.image['.italic'], '16', '16', wikEd.config.text['wikEdItalic alt'], 'wikEd.EditButton(obj, objId);' ],
5: ['wikEdUnderline', 'wikEdButton', wikEd.config.text['wikEdUnderline title'], wikEd.config.image['.underline'], '16', '16', wikEd.config.text['wikEdUnderline alt'], 'wikEd.EditButton(obj, objId);' ],
6: ['wikEdStrikethrough', 'wikEdButton', wikEd.config.text['wikEdStrikethrough title'], wikEd.config.image['.strikethrough'], '16', '16', wikEd.config.text['wikEdStrikethrough alt'], 'wikEd.EditButton(obj, objId);' ],
7: ['wikEdNowiki', 'wikEdButton', wikEd.config.text['wikEdNowiki title'], wikEd.config.image['.nowiki'], '16', '16', wikEd.config.text['wikEdNowiki alt'], 'wikEd.EditButton(obj, objId);' ],
8: ['wikEdSuperscript', 'wikEdButton', wikEd.config.text['wikEdSuperscript title'], wikEd.config.image['.superscript'], '16', '16', wikEd.config.text['wikEdSuperscript alt'], 'wikEd.EditButton(obj, objId);' ],
9: ['wikEdSubscript', 'wikEdButton', wikEd.config.text['wikEdSubscript title'], wikEd.config.image['.subscript'], '16', '16', wikEd.config.text['wikEdSubscript alt'], 'wikEd.EditButton(obj, objId);' ],
10: ['wikEdRef', 'wikEdButton', wikEd.config.text['wikEdRef title'], wikEd.config.image['.ref'], '16', '16', wikEd.config.text['wikEdRef alt'], 'if (!eventShiftKey) { 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, objId);' ],
80: ['wikEdSort', 'wikEdButton', wikEd.config.text['wikEdSort title'], wikEd.config.image['.sort'], '16', '16', wikEd.config.text['wikEdSort alt'], 'wikEd.EditButton(obj, objId);' ],
25: ['wikEdRedirect', 'wikEdButton', wikEd.config.text['wikEdRedirect title'], wikEd.config.image['.redirect'], '16', '16', wikEd.config.text['wikEdRedirect alt'], 'wikEd.EditButton(obj, objId);' ],
13: ['wikEdUndoAll', 'wikEdButton', wikEd.config.text['wikEdUndoAll title'], wikEd.config.image['.undoAll'], '16', '16', wikEd.config.text['wikEdUndoAll alt'], 'wikEd.EditButton(obj, objId);' ],
14: ['wikEdRedoAll', 'wikEdButtonInactive', wikEd.config.text['wikEdRedoAll title'], wikEd.config.image['.redoAll'], '16', '16', wikEd.config.text['wikEdRedoAll alt'], 'wikEd.EditButton(obj, objId);' ],
 
// format bottom
15: ['wikEdWikiLink', 'wikEdButton', wikEd.config.text['wikEdWikiLink title'], wikEd.config.image['.wikiLink'], '16', '16', wikEd.config.text['wikEdWikiLink alt'], 'wikEd.EditButton(obj, objId);' ],
16: ['wikEdWebLink', 'wikEdButton', wikEd.config.text['wikEdWebLink title'], wikEd.config.image['.webLink'], '16', '16', wikEd.config.text['wikEdWebLink alt'], 'wikEd.EditButton(obj, objId);' ],
17: ['wikEdHeading', 'wikEdButton', wikEd.config.text['wikEdHeading title'], wikEd.config.image['.heading'], '16', '16', wikEd.config.text['wikEdHeading alt'], 'if (!eventShiftKey) { 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 (!eventShiftKey) { 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 (!eventShiftKey) { 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 (!eventShiftKey) { 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, objId);' ],
23: ['wikEdImage', 'wikEdButton', wikEd.config.text['wikEdImage title'], wikEd.config.image['.image'], '16', '16', wikEd.config.text['wikEdImage alt'], 'wikEd.EditButton(obj, objId);' ],
24: ['wikEdTable', 'wikEdButton', wikEd.config.text['wikEdTable title'], wikEd.config.image['.table'], '16', '16', wikEd.config.text['wikEdTable alt'], 'wikEd.EditButton(obj, objId);' ],
11: ['wikEdReferences', 'wikEdButton', wikEd.config.text['wikEdReferences title'], wikEd.config.image['.references'], '16', '16', wikEd.config.text['wikEdReferences alt'], 'if (!eventShiftKey) { wikEd.EditButton(obj, objId); } else { wikEd.EditButton(obj, \'wikEdReferencesSection\'); }' ],
 
// wikify, textify
26: ['wikEdWikify', 'wikEdButton', wikEd.config.text['wikEdWikify title'], wikEd.config.image['.wikify'], '16', '16', wikEd.config.text['wikEdWikify alt'], 'wikEd.EditButton(obj, objId);' ],
27: ['wikEdTextify', 'wikEdButton', wikEd.config.text['wikEdTextify title'], wikEd.config.image['.textify'], '16', '16', wikEd.config.text['wikEdTextify alt'], 'if (eventShiftKey) { wikEd.EditButton(obj, objId, \'shift\'); } else { wikEd.EditButton(obj, objId); }' ],
 
// control top
77: ['wikEdRefHide', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRefHide title'], wikEd.config.image['.refHide'], '16', '16', wikEd.config.text['wikEdRefHide alt'], 'wikEd.Button(obj, objId, true);' ],
29: ['wikEdTextZoom', 'wikEdButton', wikEd.config.text['wikEdTextZoom title'], wikEd.config.image['.textZoom'], '16', '16', wikEd.config.text['wikEdTextZoom alt'], 'if (!eventShiftKey) { 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, objId);' ],
31: ['wikEdScrollToPreview', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview title'], wikEd.config.image['.scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview alt'], 'wikEd.Button(obj, objId);' ],
32: ['wikEdScrollToEdit', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit title'], wikEd.config.image['.scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit alt'], 'wikEd.Button(obj, objId);' ],
 
// control bottom
33: ['wikEdUseWikEd', 'wikEdButtonChecked', wikEd.config.text['wikEdUseWikEd title'], wikEd.config.image['.useWikEd'], '16', '16', wikEd.config.text['wikEdUseWikEd alt'], 'wikEd.Button(obj, objId, true);' ],
34: ['wikEdHighlightSyntax', 'wikEdButtonUnchecked', wikEd.config.text['wikEdHighlightSyntax title'], wikEd.config.image['.highlightSyntax'], '16', '16', wikEd.config.text['wikEdHighlightSyntax alt'], 'wikEd.Button(obj, objId, true);' ],
35: ['wikEdSource', 'wikEdButton', wikEd.config.text['wikEdSource title'], wikEd.config.image['.source'], '16', '16', wikEd.config.text['wikEdSource alt'], 'wikEd.EditButton(obj, objId);' ],
75: ['wikEdCloseToolbar', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCloseToolbar title'], wikEd.config.image['.closeToolbar'], '16', '16', wikEd.config.text['wikEdCloseToolbar alt'], 'wikEd.Button(obj, objId, true);' ],
36: ['wikEdUsing', 'wikEdButtonUnchecked', wikEd.config.text['wikEdUsing title'], wikEd.config.image['.using'], '16', '16', wikEd.config.text['wikEdUsing alt'], 'wikEd.Button(obj, objId, true);' ],
37: ['wikEdFullScreen', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFullScreen title'], wikEd.config.image['.fullScreen'], '16', '16', wikEd.config.text['wikEdFullScreen alt'], 'wikEd.Button(obj, objId, true);' ],
79: ['wikEdTableMode', 'wikEdButtonUnchecked', wikEd.config.text['wikEdTableMode title'], wikEd.config.image['.tableMode'], '16', '16', wikEd.config.text['wikEdTableMode alt'], 'wikEd.Button(obj, objId, 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, objId);' ],
40: ['wikEdFindPrev', 'wikEdButton', wikEd.config.text['wikEdFindPrev title'], wikEd.config.image['.findPrev'], '16', '16', wikEd.config.text['wikEdFindPrev alt'], 'wikEd.EditButton(obj, objId);' ],
41: ['wikEdFindNext', 'wikEdButton', wikEd.config.text['wikEdFindNext title'], wikEd.config.image['.findNext'], '16', '16', wikEd.config.text['wikEdFindNext alt'], 'if (eventShiftKey) { wikEd.EditButton(obj, objId, \'shift\'); } else { wikEd.EditButton(obj, objId); }' ],
43: ['wikEdJumpPrev', 'wikEdButton', wikEd.config.text['wikEdJumpPrev title'], wikEd.config.image['.jumpPrev'], '16', '16', wikEd.config.text['wikEdJumpPrev alt'], 'wikEd.EditButton(obj, objId);' ],
44: ['wikEdJumpNext', 'wikEdButton', wikEd.config.text['wikEdJumpNext title'], wikEd.config.image['.jumpNext'], '16', '16', wikEd.config.text['wikEdJumpNext alt'], 'wikEd.EditButton(obj, objId);' ],
 
// find bottom
46: ['wikEdReplaceAll', 'wikEdButton', wikEd.config.text['wikEdReplaceAll title'], wikEd.config.image['.replaceAll'], '16', '16', wikEd.config.text['wikEdReplaceAll alt'], 'wikEd.EditButton(obj, objId);' ],
47: ['wikEdReplacePrev', 'wikEdButton', wikEd.config.text['wikEdReplacePrev title'], wikEd.config.image['.replacePrev'], '16', '16', wikEd.config.text['wikEdReplacePrev alt'], 'wikEd.EditButton(obj, objId);' ],
48: ['wikEdReplaceNext', 'wikEdButton', wikEd.config.text['wikEdReplaceNext title'], wikEd.config.image['.replaceNext'], '16', '16', wikEd.config.text['wikEdReplaceNext alt'], 'if (eventShiftKey) { wikEd.EditButton(obj, objId, \'shift\'); } else { wikEd.EditButton(obj, objId); }' ],
49: ['wikEdCaseSensitive', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCaseSensitive title'], wikEd.config.image['.caseSensitive'], '16', '16', wikEd.config.text['wikEdCaseSensitive alt'], 'wikEd.Button(obj, objId, true);' ],
50: ['wikEdRegExp', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRegExp title'], wikEd.config.image['.regExp'], '16', '16', wikEd.config.text['wikEdRegExp alt'], 'wikEd.Button(obj, objId, true);' ],
51: ['wikEdFindAhead', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFindAhead title'], wikEd.config.image['.findAhead'], '16', '16', wikEd.config.text['wikEdFindAhead alt'], 'wikEd.Button(obj, objId, 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, objId);' ],
53: ['wikEdFixHtml', 'wikEdButton', wikEd.config.text['wikEdFixHtml title'], wikEd.config.image['.fixHtml'], '16', '16', wikEd.config.text['wikEdFixHtml alt'], 'wikEd.EditButton(obj, objId);' ],
54: ['wikEdFixCaps', 'wikEdButton', wikEd.config.text['wikEdFixCaps title'], wikEd.config.image['.fixCaps'], '16', '16', wikEd.config.text['wikEdFixCaps alt'], 'wikEd.EditButton(obj, objId);' ],
55: ['wikEdFixUnicode', 'wikEdButton', wikEd.config.text['wikEdFixUnicode title'], wikEd.config.image['.fixUnicode'], '16', '16', wikEd.config.text['wikEdFixUnicode alt'], 'wikEd.EditButton(obj, objId);' ],
81: ['wikEdFixRedirect', 'wikEdButton', wikEd.config.text['wikEdFixRedirect title'], wikEd.config.image['.fixRedirect'], '16', '16', wikEd.config.text['wikEdFixRedirect alt'], 'wikEd.EditButton(obj, objId);' ],
56: ['wikEdFixAll', 'wikEdButton', wikEd.config.text['wikEdFixAll title'], wikEd.config.image['.fixAll'], '16', '16', wikEd.config.text['wikEdFixAll alt'], 'wikEd.EditButton(obj, objId);' ],
57: ['wikEdFixRegExTypo', 'wikEdButton', wikEd.config.text['wikEdFixRegExTypo title'], wikEd.config.image['.fixRegExTypo'], '16', '16', wikEd.config.text['wikEdFixRegExTypo alt'], 'wikEd.EditButton(obj, objId);' ],
 
// fix bottom
58: ['wikEdFixDashes', 'wikEdButton', wikEd.config.text['wikEdFixDashes title'], wikEd.config.image['.fixDash'], '16', '16', wikEd.config.text['wikEdFixDashes alt'], 'wikEd.EditButton(obj, objId);' ],
59: ['wikEdFixPunct', 'wikEdButton', wikEd.config.text['wikEdFixPunct title'], wikEd.config.image['.fixPunct'], '16', '16', wikEd.config.text['wikEdFixPunct alt'], 'wikEd.EditButton(obj, objId);' ],
60: ['wikEdFixMath', 'wikEdButton', wikEd.config.text['wikEdFixMath title'], wikEd.config.image['.fixMath'], '16', '16', wikEd.config.text['wikEdFixMath alt'], 'wikEd.EditButton(obj, objId);' ],
61: ['wikEdFixChem', 'wikEdButton', wikEd.config.text['wikEdFixChem title'], wikEd.config.image['.fixChem'], '16', '16', wikEd.config.text['wikEdFixChem alt'], 'wikEd.EditButton(obj, objId);' ],
62: ['wikEdFixUnits', 'wikEdButton', wikEd.config.text['wikEdFixUnits title'], wikEd.config.image['.fixUnits'], '16', '16', wikEd.config.text['wikEdFixUnits alt'], 'wikEd.EditButton(obj, objId);' ],
 
// preview top
65: ['wikEdClose', 'wikEdButton', wikEd.config.text['wikEdClose title'], wikEd.config.image['.close'], '16', '16', wikEd.config.text['wikEdClose alt'], 'wikEd.Button(obj, objId);' ],
66: ['wikEdScrollToPreview2', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview2 title'], wikEd.config.image['.scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview2 alt'], 'wikEd.Button(obj, objId);' ],
67: ['wikEdScrollToEdit2', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit2 title'], wikEd.config.image['.scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit2 alt'], 'wikEd.Button(obj, objId);' ],
 
// preview bottom
70: ['wikEdClose2', 'wikEdButton', wikEd.config.text['wikEdClose2 title'], wikEd.config.image['.close'], '16', '16', wikEd.config.text['wikEdClose2 alt'], 'wikEd.Button(obj, objId);' ],
71: ['wikEdScrollToPreview3', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview3 title'], wikEd.config.image['.scrollToPreview'], '16', '16', wikEd.config.text['wikEdScrollToPreview3 alt'], 'wikEd.Button(obj, objId);' ],
72: ['wikEdScrollToEdit3', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit3 title'], wikEd.config.image['.scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit3 alt'], 'wikEd.Button(obj, objId);' ],
 
// jump
78: ['wikEdDiff', 'wikEdButtonUnchecked', wikEd.config.text['wikEdDiff title'], wikEd.config.image['.wikEdDiff'], '16', '16', wikEd.config.text['wikEdDiff alt'], 'wikEd.Button(obj, objId, true);' ],
74: ['wikEdScrollToEdit4', 'wikEdButtonSolo', wikEd.config.text['wikEdScrollToEdit4 title'], wikEd.config.image['.scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit4 alt'], 'wikEd.Button(obj, objId);' ],
 
// 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, objId);' ],
83: ['wikEdLocalDiff', 'wikEdLocalDiff', wikEd.config.text['wikEdLocalDiff title'], wikEd.config.image.diff, '16', '16', wikEd.config.text['wikEdLocalDiffImg alt'], 'wikEd.Button(obj, objId);' ]
});
};
Line 1,016 ⟶ 1,023:
// presets for combo input fields dropdown options, {wikEdUsing} appends a link to this script
if (typeof(wikEd.config.comboPresetOptions) == 'undefined') { wikEd.config.comboPresetOptions = {}; }
if (typeof(wikEd.config.comboPresetOptions['.summary']) == 'undefined') { wikEd.config.comboPresetOptions['.summary'] = wikEd.config.text['.wikEdPresetSummary']; }
 
// text for summary link to this script
if (typeof(wikEd.config.summaryUsing) == 'undefined') { wikEd.config.summaryUsing = wikEd.config.text['.wikEdSummaryUsing']; }
 
// expiration time span for permanent cookies in seconds
Line 1,070 ⟶ 1,077:
 
// the wikEd help page link to be displayed after the editing help link, an empty string disables the link
if (typeof(wikEd.config.helpPageLink) == 'undefined') { wikEd.config.helpPageLink = wikEd.config.text['.wikEdHelpPageLink']; }
 
// enable external diff script
Line 1,211 ⟶ 1,218:
// file preview image size in pixels
if (typeof(wikEd.config.antiHighlightBleeding) == 'undefined') { wikEd.config.antiHighlightBleeding = true; }
 
// do not hide templates shorter than this number of chars
if (typeof(wikEd.config.templNoHideLength) == 'undefined') { wikEd.config.templNoHideLength = 40; }
 
// debug window maximal length in chars
Line 1,266 ⟶ 1,270:
 
// content language default, also used for wikEd UI localization
if (typeof(wikEd.config.languageDefault) == 'undefined') { wikEd.config['.languageDefault'] = ''; }
 
// load external translation
if (typeof(wikEd.config.loadTranslation) == 'undefined') { wikEd.config['.loadTranslation'] = true; }
 
// translation javascript URLs
Line 1,299 ⟶ 1,303:
'pt': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Mosca/wikEd_international_pt.js',
'ro': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Roamataa/wikEd_international_ro.js',
'ru': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:IGW/wikEd_international_ru.js',
'scn': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Meloscn/wikEd_international_scn.js',
'sk': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Helix84/wikEd_international_sk.js',
Line 1,304 ⟶ 1,309:
'es': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Axelei/wikEd_international_es.js',
'sv': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Where_next_Columbus?/wikEd_international_sv.js',
'hsb': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Michalwiki/wikEd_international_hsb.js',
'tr': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Vito_Genovese/wikEd_international_tr.js',
'hsb': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Michalwiki/wikEd_international_hsb.js',
'vi': wikEd.config.homeBaseUrl + 'w/index.php?action=raw&ctype=text/javascript&title=User:Vinhtantran/wikEd_international_vi.js'
});
Line 1,345 ⟶ 1,350:
// custom skins
gumax: [ 'gumax-p-login', true, true, ['gumax-header', 'gumax-content-body'] ],
gumaxdd: [ 'gumax-p-login', true, true, ['gumax-header', 'gumax-content-body'] ],
 
// custom MediaWiki identifier
Line 1,370 ⟶ 1,376:
wikEd.watchlistEdit = false;
wikEd.debugOpen = false;
wikEd.pageName = null;
wikEd.pageNamespace = null;
 
Line 1,465 ⟶ 1,470:
wikEd.previewButton = null;
wikEd.lDiffButton = null;
wikEd.localPreview = null;
wikEd.localDiff = null;
wikEd.diffPreviewButton = null;
wikEd.summaryLabel = null;
Line 1,536 ⟶ 1,539:
wikEd.charHighlighting = null;
wikEd.charHighlightingStr = '';
wikEd.letters = '';
 
// linkification and hiding
Line 1,622 ⟶ 1,627:
if (typeof(wikEd.chrome) == 'undefined') { wikEd.chrome = false; }
if (typeof(wikEd.greasemonkey) == 'undefined') { wikEd.greasemonkey = false; }
if (typeof(wikEd.testVersion) == 'undefined') { wikEd.testVersion = false; }
if (typeof(wikEd.platform) == 'undefined') { wikEd.platform = null; }
 
Line 1,653 ⟶ 1,659:
if (typeof(wikEd.pageOrigin) == 'undefined') { wikEd.pageOrigin = ''; }
if (typeof(wikEd.head) == 'undefined') { wikEd.head = null; }
 
// also defined in wikEdDiff.js
if (typeof(wikEd.pageName) == 'undefined') { wikEd.pageName = null; }
 
 
Line 1,743 ⟶ 1,752:
flag.setAttribute('name', 'wikEdStartupFlag');
wikEd.head.appendChild(flag);
 
// get site of origin (window.___location.href is about:blank if Firefox during page load)
wikEd.pageOriginvar origin = wikEd.head.baseURI.replace(/^((https?|file):\/\/[^\/?#]*)?.*$/, '$1');
if (origin == null) {
origin = window.___location.toString();
}
wikEd.pageOrigin = origin.replace(/^((https?|file):\/\/[^\/?#]*)?.*$/, '$1');
 
// check browser and version
Line 1,868 ⟶ 1,881:
// set listener for GetGlobals messaging
wikEd.AddEventListener(window, 'message', wikEd.GetGlobalsReceiver, false);
 
// parse globals (asynchronous)
wikEd.GetGlobals(globalNames, gotGlobalsHook);
Line 1,981 ⟶ 1,994:
}
}
}
 
// detect developer version
if (wikEd.externalScripts['wikEd_dev.js'] == true) {
wikEd.testVersion = true;
}
 
Line 2,117 ⟶ 2,135:
if ( (wikEd.config.loadDiffScript == true) && (wikEd.externalScripts['diff.js'] == null) ) {
if (typeof(WDiffString) == 'undefined') {
var sep = '&';
wikEd.AppendScript(wikEd.config.diffScriptSrc);
if (wikEd.config.diffScriptSrc.indexOf('?') == -1) {
sep = '?';
}
wikEd.AppendScript(wikEd.config.diffScriptSrc + sep + wikEd.programVersion);
}
wikEd.externalScripts['diff.js'] = true;
Line 2,125 ⟶ 2,147:
if ( (wikEd.config.loadDiff == true) && (wikEd.externalScripts['wikEdDiff.js'] == null) ) {
if (typeof(wikEd.Diff) == 'undefined') {
var sep = '&';
wikEd.AppendScript(wikEd.config.diffSrc);
if (wikEd.config.diffSrc.indexOf('?') == -1) {
sep = '?';
}
wikEd.AppendScript(wikEd.config.diffSrc + sep + wikEd.programVersion);
}
wikEd.externalScripts['wikEdDiff.js'] = true;
Line 2,134 ⟶ 2,160:
if ( (wikEd.config.loadIERange == true) && (wikEd.externalScripts['ierange.js'] == null) ) {
if (typeof(DOMUtils) == 'undefined') {
var sep = '&';
wikEd.AppendScript(wikEd.config.IERangeSrc);
if (wikEd.config.IERangeSrc.indexOf('?') == -1) {
sep = '?';
}
wikEd.AppendScript(wikEd.config.IERangeSrc + sep + wikEd.programVersion);
}
wikEd.externalScripts['ierange.js'] = true;
Line 2,153 ⟶ 2,183:
// ___location search string function: put all used images and icons on an empty page
if (window.___location.search.match(/(\?|&)wikEd=iconPage\b/i) != null) {
var str = wikEd.config.text['.iconPage'];
for (var imageKey in wikEd.config.image) {
if (wikEd.config.image.hasOwnProperty(imageKey) == true) {
Line 2,182 ⟶ 2,212:
if (wikEd.turnedOn == true) {
return;
}
 
// 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);
}
}
 
Line 2,380 ⟶ 2,396:
if ( (wikEd.GetAttribute(wikEd.textarea, 'readonly') != null) || (wikEd.saveButton == null) ) {
wikEd.readOnly = true;
}
}
 
// get missing wg variables from footer link, fails on /subpages (code copied to wikEdDiff.js)
if (wikEd.wikiGlobals.wgArticlePath == null) {
var printfooter = wikEd.GetElementsByClassName('printfooter', 'div')[0];
if (printfooter != null) {
var articleLink = printfooter.getElementsByTagName('a')[0];
if (articleLink != null) {
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 == null) {
wikEd.wikiGlobals.wgScript = wikEd.editForm.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);
}
}
Line 2,434 ⟶ 2,487:
if ( (wikEd.greasemonkey == false) && (wikEd.config.loadInstaView == true) && (wikEd.externalScripts['instaview.js'] == null) ) {
if (typeof(InstaView) == 'undefined') {
var sep = '&';
wikEd.AppendScript(wikEd.config.instaViewSrc);
if (wikEd.config.instaViewSrc.indexOf('?') == -1) {
sep = '?';
}
wikEd.AppendScript(wikEd.config.instaViewSrc + sep + wikEd.programVersion);
}
wikEd.externalScripts['instaview.js'] = true;
Line 2,787 ⟶ 2,844:
wikEd.wikiEditorBar.style.zIndex = '5';
}
 
// get edit options
wikEd.editOptions = wikEd.GetElementsByClassName('editCheckboxes', 'div', wikEd.editForm)[0];
Line 2,821 ⟶ 2,878:
}
 
// add submit buttons to submit wrapper
if (wikEd.rearrange == true) {
var wpEditButtons;
Line 3,011 ⟶ 3,068:
// form wrapper has been 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);
 
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);
}
Line 3,050 ⟶ 3,107:
 
// add preview box top bar to submit wrapper
wikEd.buttonBarPreview = wikEd.MakeButtonBar(wikEd.config.buttonBar['.preview']);
if ( (wikEd.rearrange == true) && (wikEd.submitWrapper != null) ) {
wikEd.submitWrapper.insertBefore(wikEd.buttonBarPreview, wikEd.submitWrapper.firstChild);
Line 3,066 ⟶ 3,123:
wikEd.previewBox.className = 'wikEdPreviewBox';
div.appendChild(wikEd.previewBox);
wikEd.buttonBarPreview2 = wikEd.MakeButtonBar(wikEd.config.buttonBar['.preview2']);
wikEd.localPrevWrapper.appendChild(wikEd.buttonBarPreview2);
}
Line 3,074 ⟶ 3,131:
if (wikiPreview != null) {
if (wikiPreview.firstChild != null) {
wikEd.buttonBarJump = wikEd.MakeButtonBar(wikEd.config.buttonBar['.jump']);
wikiPreview.insertBefore(wikEd.buttonBarJump, wikiPreview.firstChild);
}
Line 3,090 ⟶ 3,147:
 
// add local preview button next to submit button
wikEd.localPreviewvar previewSpan = document.createElement('buttonspan');
previewSpan.innerHTML = wikEd.MakeButtonCode(82, 'button');
wikEd.localPreview.id = 'wikEdLocalPreview';
wikEd.localPreview.title = wikEd.config.text['wikEdLocalPreview title'];
wikEd.localPreview.className = 'wikEdLocalPreview';
 
var localPreviewImg = document.createElement('img');
localPreviewImg.id = 'wikEdLocalPreviewImg';
localPreviewImg.src = wikEd.config.image['preview'];
localPreviewImg.alt = wikEd.config.text['wikEdLocalPreviewImg alt'];
localPreviewImg.title = wikEd.config.text['wikEdLocalPreview title'];
wikEd.localPreview.appendChild(localPreviewImg);
 
if (wikEd.previewButton != null) {
wikEd.previewButton.parentNode.insertBefore(wikEd.localPreviewpreviewSpan, wikEd.previewButton.nextSibling);
}
else if (wikEd.saveButton != null) {
wikEd.saveButton.parentNode.insertBefore(wikEd.localPreviewpreviewSpan, wikEd.saveButton.nextSibling);
}
 
// add local diff button next to submit button
if ( ( (wikEd.diffPreviewButton != null) || (wikEd.watchlistEdit == true) ) && (wikEd.readOnly == false) ) {
wikEd.localDiffvar diffSpan = document.createElement('buttonspan');
diffSpan.innerHTML = wikEd.MakeButtonCode(83, 'button');
wikEd.localDiff.id = 'wikEdLocalDiff';
wikEd.localDiff.title = wikEd.config.text['wikEdLocalDiff title'];
wikEd.localDiff.className = 'wikEdLocalDiff';
 
var localDiffImg = document.createElement('img');
localDiffImg.id = 'wikEdLocalDiffImg';
localDiffImg.src = wikEd.config.image['diff'];
localDiffImg.alt = wikEd.config.text['wikEdLocalDiffImg alt'];
localDiffImg.title = wikEd.config.text['wikEdLocalDiff title'];
 
wikEd.localDiff.appendChild(localDiffImg);
 
if (wikEd.diffPreviewButton != null) {
wikEd.diffPreviewButton.parentNode.insertBefore(wikEd.localDiffdiffSpan, wikEd.diffPreviewButton.nextSibling);
}
else if (wikEd.localPreviewpreviewSpan != null) {
wikEd.localPreviewpreviewSpan.parentNode.insertBefore(wikEd.localDiffdiffSpan, wikEd.localPreviewpreviewSpan.nextSibling);
}
else if (wikEd.previewButton != null) {
wikEd.previewButton.parentNode.insertBefore(wikEd.localDiffdiffSpan, wikEd.previewButton.nextSibling);
}
}
Line 3,184 ⟶ 3,220:
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);
Line 3,215 ⟶ 3,251:
// 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'];
}
 
Line 3,391 ⟶ 3,427:
wikEd.AddEventListener(wikEd.previewButton, 'click', wikEd.PreviewButtonHandler, true);
wikEd.AddEventListener(wikEd.diffPreviewButton, 'click', wikEd.DiffPreviewButtonHandler, true);
wikEd.AddEventListener(wikEd.localPreview, 'click', wikEd.LocalPreviewHandler, true);
wikEd.AddEventListener(wikEd.localDiff, 'click', wikEd.LocalDiffHandler, true);
 
// unload (leaving page) events
Line 3,428 ⟶ 3,462:
wikEd.AddEventListener(wikEd.summarySelect, 'focus', function() { wikEd.SetComboOptions('summary'); }, false);
 
wikEd.AddEventListener(wikEd.selectElement['.find'], 'change', function() { wikEd.ChangeComboInput('find'); }, false);
wikEd.AddEventListener(wikEd.selectElement['.find'], 'focus', function() { wikEd.SetComboOptions('find'); }, false);
 
wikEd.AddEventListener(wikEd.selectElement['.replace'], 'change', function() { wikEd.ChangeComboInput('replace'); }, false);
wikEd.AddEventListener(wikEd.selectElement['.replace'], 'focus', function() { wikEd.SetComboOptions('replace'); }, false);
 
// register the clear summary click handler
Line 3,494 ⟶ 3,528:
}
 
// hook wikEd into the enhanced new edit toolbar, not Greasemonkey compatible
if (typeof(jQuery) == 'function') {
jQuery('#wpTextbox1').bind('encapsulateSelection', function(e, before, inside, after) {
Line 3,503 ⟶ 3,537:
}
 
// update textarea before using UI LivePreview function, not Greasemonkey compatible
// override insertAtCursor function in wikia.com MediaWiki:Functions.js
if ( (typeof(jQuery) == 'function') && (typeof(mw) == 'object') ) {
jQuery(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(insertAtCursor) == 'function') {
if (wikEd.InsertAtCursorOriginal == null) {
Line 3,519 ⟶ 3,562:
resizeGripImage.id = 'wikEdResizeGrip';
wikEd.AddEventListener(resizeGripImage, 'load', wikEd.ResizeGripLoadHandler, true);
resizeGripImage.src = wikEd.config.image['.resizeGrip'];
 
// remove accesskeys that are defined in wikEd from page elements
wikEd.deleteAccesskeys();
 
// run scheduled custom functions
Line 3,528 ⟶ 3,574:
 
// done with setup and turn-on
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 = wikEd.GetAttribute(accesskeyElements[j], 'accesskey');
if (attribute != null) {
if (wikEd.buttonKeyCode[ attribute.toUpperCase().charCodeAt(0) ] != null) {
accesskeyElements[j].setAttribute('accesskey', null);
}
}
}
}
return;
};
Line 3,617 ⟶ 3,685:
return;
};
 
 
//
Line 3,642 ⟶ 3,711:
// 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);
alert(updatePopup);
Line 3,668 ⟶ 3,737:
 
// make the ajax request
var sep = '&';
wikEd.AjaxRequest('GET', wikEd.config.regExTypoFixURL, null, 'text/plain', function(ajax) {
if (wikEd.config.regExTypoFixURL.indexOf('?') == -1) {
sep = '?';
}
wikEd.AjaxRequest('GET', wikEd.config.regExTypoFixURL + sep + wikEd.programVersion, null, 'text/plain', function(ajax) {
 
// get response
Line 3,674 ⟶ 3,747:
 
// parse regexp rules
var regExp = new RegExp('/^<Typo +word="(.+?)" +find="(.+?)" +replace="(.+?)" +\/>', '/gim');
while ( (regExpMatch = regExp.exec(rulesTxt)) != null) {
 
Line 3,743 ⟶ 3,816:
 
// Firefox < 3.0
if ( typeof(wikEd.inputElement['.summary'].clientLeft) == 'undefined' ) {
wikEd.inputElement['.summary'].style.width = (wikEd.inputElement['.summary'].clientWidth - diffWidth) + 'px';
wikEd.selectElement['.summary'].style.width = (wikEd.selectElement['.summary'].clientWidth - diffWidth) + 'px';
}
 
// Firefox >= 3.0
else {
wikEd.inputElement['.summary'].style.width = (wikEd.inputElement['.summary'].clientWidth - diffWidth) + 'px';
wikEd.selectElement['.summary'].style.width = (wikEd.selectElement['.summary'].clientWidth - diffWidth + 3) + 'px';
}
wikEd.clearSummaryWidth = wikEd.clearSummary.offsetWidth;
Line 3,780 ⟶ 3,853:
 
wikEd.UnloadHandler = function(event) {
 
// event compatibility fixes
event = wikEd.EventWrapper(event, this);
if (event == null) {
return;
}
 
// update textarea if not already done in submit handlers
Line 3,907 ⟶ 3,974:
}
}
return;
};
 
 
//
// wikEd.LocalPreviewHandler: local 'Show preview' image button click handler
//
 
wikEd.LocalPreviewHandler = function(event) {
 
// event compatibility fixes
event = wikEd.EventWrapper(event, this);
if (event == null) {
return;
}
 
event.preventDefault();
wikEd.Button(wikEd.localPreview, 'wikEdLocalPreview');
return;
};
 
 
//
// wikEd.LocalDiffHandler: local 'Show changes' image button click handler
//
 
wikEd.LocalDiffHandler = function(event) {
 
// event compatibility fixes
event = wikEd.EventWrapper(event, this);
if (event == null) {
return;
}
 
event.preventDefault();
wikEd.Button(wikEd.localDiff, 'wikEdLocalDiff');
return;
};
Line 4,375 ⟶ 4,406:
 
return;
};
 
 
Line 4,681 ⟶ 4,712:
 
if (state == 'error') {
wikEd.logo.src = wikEd.config.image['.error'];
wikEd.logo.alt = wikEd.config.text['wikEdLogo error alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo error title'];
}
else if (state == 'browser') {
wikEd.logo.src = wikEd.config.image['.browser'];
wikEd.logo.alt = wikEd.config.text['wikEdLogo browser alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo browser title'];
}
else if (state == 'incompatible') {
wikEd.logo.src = wikEd.config.image['.incompatible'];
wikEd.logo.alt = wikEd.config.text['wikEdLogo incompatible alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo incompatible title'];
Line 4,697 ⟶ 4,728:
else {
if (wikEd.disabled == true) {
wikEd.logo.src = wikEd.config.image['.disabled'];
wikEd.logo.alt = wikEd.config.text['wikEdLogo disabled alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo disabled title'];
}
else if (wikEd.testVersion == true) {
wikEd.logo.src = wikEd.config.image.testVersion;
wikEd.logo.alt = wikEd.config.text['wikEdLogo testVersion alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo testVersion title'];
}
else {
wikEd.logo.src = wikEd.config.image['.logo'];
wikEd.logo.alt = wikEd.config.text['wikEdLogo alt'];
wikEd.logo.title = wikEd.config.text['wikEdLogo title'];
Line 4,723 ⟶ 4,759:
 
//
// wikEd.MakeButtonBar: generate button bar div element
//
 
windowwikEd.MakeButtonBar = function(bar) {
 
// id outer, class outer, id inner, class inner, alt, button numbers
Line 4,772 ⟶ 4,808:
else if ( (currButton[0] == 'wikEdTableMode') && (wikEd.config.showTableModeButton != true) ) {
break;
}
 
// add accesskey information to button title and
var accessKey = '';
if (wikEd.config.buttonKey[buttonNo] != null) {
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
buttons += '<img ' + wikEd.MakeButtonCode(buttonNo) + '>';
buttons += '<img id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'" src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '">';
 
// collect click event info
wikEd.editButtonHandler[ currButton[0] ] = currButton[7];
}
}
Line 4,841 ⟶ 4,865:
 
 
//
// wikEd.MakeButtonCode: create button code and register
//
 
wikEd.MakeButtonCode = function(buttonNo, type) {
 
var currButton = wikEd.config.button[buttonNo];
 
// add accesskey information to button title and
var accessKey = '';
if (wikEd.config.buttonKey[buttonNo] != null) {
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 = '<button type="button" id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'"><img src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '"></button>';
}
else {
html = '<img id="' + currButton[0] + '" class="' + currButton[1] + '" title="' + currButton[2] + accessKey +'" src="' + currButton[3] + '" width="' + currButton[4] + '" height="' + currButton[5] + '" alt="' + currButton[6] + '"';
}
 
// collect click event info
wikEd.editButtonHandler[ currButton[0] ] = currButton[7];
 
return(html);
};
//
// wikEd.ButtonBarInit: hide buttons bar, see also wikEd.ButtonBarGripHandler()
Line 5,121 ⟶ 5,178:
wikEd.previewBox.style.height = previewHeight + 'px';
}
wikEd.previewBox.innerHTML = wikEd.config.text['.wikEdPreviewLoading'];
wikEd.localPrevWrapper.style.display = 'inline';
 
Line 5,161 ⟶ 5,218:
uriArticle = encodeURI(uriArticle);
uriArticle = uriArticle.replace(/%25(\d\d)/g, '%$1');
uriArticle = uriArticle.replace(/\'/g, '%27');
var hist = wikEd.wikiGlobals.wgServer + wikEd.wikiGlobals.wgScript + '?title=' + uriArticle + '&action=history';
return('[[:' + p1 + ']]&nbsp;•&nbsp;([[:' + talk + '|' + wikEd.config.text['talk page'] + ']], [' + hist + ' ' + wikEd.config.text['history page'] + '])');
Line 5,187 ⟶ 5,244:
// GesHI syntax highlighting support, GeSHi css is only provided dynamically and not for &live
// so request a full preview and attach css to page, remember already loaded GeSHi languages
while ( (regExpMatch = /<(source|syntaxhighlight)\b[^>]*?lang\s*=\s*(\"|\')(\w+)\2/gi.exec(bodyData)) != null) {
var lang = regExpMatch[3];
if (wikEd.geSHiCSS['wikEd' + lang] == null) {
Line 5,230 ⟶ 5,287:
case 'wikEdLocalDiff':
if (typeof(WDiffString) != 'function') {
var diffTextLinkified = '';
wikEd.previewBox.innerHTML = '<div class="wikEdPreviewDiffError">' + wikEd.config.text['diffNotLoaded'] + '</div>';
wikEd.previewBox.innerHTML = '<div class="wikEdPreviewDiffError">' + wikEd.config.text.diffNotLoaded + '</div>';
wikEd.localPrevWrapper.style.display = 'block';
break;
Line 5,246 ⟶ 5,304:
// Opera 0.9.51
currentVersion = currentVersion.replace(/\r\n|\n\r|\r/g, '\n');
 
if (currentVersion.substr(currentVersion.length - 1, 1) != '\n') {
currentVersion += '\n';
}
if (wikEd.origVersion.substr(wikEd.origVersion.length - 1, 1) != '\n') {
wikEd.origVersion += '\n';
}
 
// call external diff program
var diffTextwikEd.previewBox.innerHTML = WDiffStringwikEd.DiffResponse(wikEd.origVersion, currentVersion);
if (wikEd.config.fullDiff != true) {
diffText = WDiffShortenOutput(diffText);
}
 
// display diff, keep wrapper height to prevent scrolling
Line 5,265 ⟶ 5,313:
wikEd.previewBox.style.height = previewHeight + 'px';
}
wikEd.previewBox.innerHTML = diffText;
wikEd.localPrevWrapper.style.display = 'block';
 
Line 5,841 ⟶ 5,888:
// bold
case 'wikEdBold':
if ( /\'\'\'([^\'](.|\n)*?)\'\'\'/.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/\'\'\'([^\'](.|\n)*?)\'\'\'/g, '$1');
}
else {
obj.changed.plain = '\'\'\'' + obj.changed.plain + '\'\'\'';
obj.changed.plain = obj.changed.plain.replace(/(\'\'\')( *)((.|\n)*?)( *)(\'\'\')/, '$2$1$3$6$5');
}
obj.changed.plain = obj.changed.plain.replace(/\'{6,}/g, '\'\'\'\'\'');
obj.changed.keepSel = true;
break;
Line 5,854 ⟶ 5,901:
// italic
case 'wikEdItalic':
if ( /(\'{3,})\'\'([^\'](.|\n)*?)\'\'(\'{3,})/.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/(\'{3,})\'\'([^\'](.|\n)*?)\'\'(\'{3,})/g, '$1$2$4');
}
else if ( /(^|[^\'])\'\'([^\'](.|\n)*?)\'\'([^\']|$)/.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/(^|[^\'])\'\'([^\'](.|\n)*?)\'\'([^\']|$)/g, '$1$2$4');
}
else {
obj.changed.plain = '\'\'' + obj.changed.plain + '\'\'';
obj.changed.plain = obj.changed.plain.replace(/(\'\')( *)((.|\n)*?)( *)(\'\')/, '$2$1$3$6$5');
}
obj.changed.plain = obj.changed.plain.replace(/\'{6,}/g, '\'\'\'\'\'');
obj.changed.keepSel = true;
break;
Line 5,938 ⟶ 5,985:
}
else {
obj.changed.plain = '&lt;ref name=\"\" \/&gt;';
}
}
else if ( /&lt;ref( name=\"\")? ?\/&gt;/i.test(obj.changed.plain) ) {
obj.changed.plain = '';
}
else if ( /&lt;ref( name=\"\")?&gt;((.|\n)*?)&lt;\/ref&gt;/i.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/&lt;ref( name=\"\")?&gt;((.|\n)*?)&lt;\/ref&gt;/gi, '$2');
}
else {
Line 5,952 ⟶ 5,999:
}
else {
obj.changed.plain = '&lt;ref name=\"\"&gt;' + obj.changed.plain + '&lt;/ref&gt;';
}
obj.changed.plain = obj.changed.plain.replace(/(&lt;ref( name=\"\")?&gt;)( *)((.|\n)*?)( *)(&lt;\/ref&gt;)/, '$3$1$4$7$6');
}
obj.changed.keepSel = true;
Line 5,962 ⟶ 6,009:
case 'wikEdReferences':
case 'wikEdReferencesSection':
var ref = wikEd.config.text['.wikEdReferencesSection'];
ref = ref.replace(/</g, '&lt;');
ref = ref.replace(/>/g, '&gt;');
Line 6,028 ⟶ 6,075:
// first-letter-uppercase all lowercased text
else if (plain.toLowerCase() == plain) {
var regExp = new RegExp('(^|[^' + wikEd.letters + '_])([' + wikEd.letters + '_])([' + wikEd.letters + '_\']*)', 'g')
plain = plain.replace(/(^|[^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])([\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])([\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\']*)/g,
plain = plain.replace(regExp,
function (p, p1, p2, p3) {
return(p1 + p2.toUpperCase() + p3.toLowerCase());
Line 6,071 ⟶ 6,119:
// 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);
Line 6,108 ⟶ 6,156:
 
// keep single ' only
sortKey = sortKey.replace(/\'{2,}/g, '');
 
// remove decimal commas
Line 6,136 ⟶ 6,184:
 
// remove non-chars
sortKey = sortKey.replace(/[^\$\@\.\,\:\;\-\w\s\'\u007f-\uffff]/g, '');
 
// join multiple spaces
Line 6,387 ⟶ 6,435:
 
// remove formatting and spaces
linkTarget = linkTarget.replace(/^(=+|\'+|<[^>]*>|\s+|\[)+((.|\n)*?)(=+|\'+|<[^>]*>|\s+|\])+$/g, '$2');
linkTarget = linkTarget.replace(/&lt;/g, '<');
linkTarget = linkTarget.replace(/&gt;/g, '>');
Line 6,397 ⟶ 6,445:
// append to summary
if (wikEd.wikiGlobals.wgUseAutomaticEditSummaries != true) {
if (wikEd.inputElement['.summary'] != null) {
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');
}
}
Line 6,432 ⟶ 6,480:
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;
Line 6,455 ⟶ 6,503:
// get the find text from the find field
else {
if (wikEd.inputElement['.find'].value != '') {
findText = wikEd.inputElement['.find'].value;
}
else {
Line 6,469 ⟶ 6,517:
 
// get the replace text
var replaceText = wikEd.inputElement['.replace'].value;
 
// format the find and replace texts for a plain text search
Line 6,486 ⟶ 6,534:
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,
Line 6,517 ⟶ 6,565:
var regExpFindText = findText;
if (useRegExp != true){
regExpFindText = regExpFindText.replace(/([\\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1');
}
var regExpFlags = 'gm';
Line 6,961 ⟶ 7,009:
 
// livepreview
if (html.indexOf("'<livepreview>"') != -1) {
html = html.replace(/\s*<\/livepreview>\s*()/, '');
html = html.replace(/\s*<\/preview>\s*()/, '');
Line 6,969 ⟶ 7,017:
html = html.replace(/&apos;/g, '\'');
html = html.replace(/&amp;/g, '&');
html = html.replace(/(.|\n)*<div class=\("|')previewnote\("|')>(.|\n)*?<\/div>/, '');
}
 
Line 6,977 ⟶ 7,025:
// attach <style> stylesheet declarations to document (GeSHi)
var regExpMatch;
while ( (regExpMatch = /<()style\b[^>]*?type=\"text\/css\">((.|\n)*?)<\/style>/gi.exec(html)) != null) {
var css = regExpMatch[2];
var stylesheet = new wikEd.StyleSheet(document);
stylesheet.AddRulesAddCSSRules(css);
}
 
// get preview html
html = wikEd.StringGetInnerHTML(html, 'div', 'id', 'wikiPreview', true);
html = wikEd.StringGetInnerHTML(html, 'div', 'class', 'previewnote', true, false, true);
html = html.replace(/<!--(.|\n)*?-->/g, '');
html = html.replace(/\s+$/g, '');
Line 6,995 ⟶ 7,043:
 
// remove cite errors for automatic section preview refs
html = html.replace(/(<div\b[^>]*?\bclass=\"wikEdPreviewRefs\"[^>]*>(.|\s)*$)/,
function (p, p1, p2) {
p1 = p1.replace(/<strong\b[^>]*?\bclass=\"error\"[^>]*>(.|\s)*?<\/strong>/g, '');
return(p1);
}
Line 7,047 ⟶ 7,095:
var fileObj = {};
var regExpMatch;
if ( (regExpMatch = /\bsrc=\"(.+?)\"/.exec(links)) != null) {
fileObj.url = regExpMatch[1];
if ( (regExpMatch = /\bwidth=\"(\d+)\"/.exec(links)) != null) {
fileObj.width = parseInt(regExpMatch[1]);
}
if ( (regExpMatch = /\bheight=\"(\d+)\"/.exec(links)) != null) {
fileObj.height = parseInt(regExpMatch[1]);
}
}
else {
fileObj.url = wikEd.config.image['.noFile'];
fileObj.width = 16;
fileObj.height = 16;
Line 7,089 ⟶ 7,137:
 
//
// wikEd.DiffResponse: calculate calculate and linkify the diff between two versions (code copied to wikEdDiff.js)
// StringGetInnerHTML: get innerHTML of element from html in a string; can also get text before or after node
//
 
wikEd.DiffResponse = function(oldVersion, newVersion) {
window.StringGetInnerHTML = function(html, tag, attrib, value, defaultToWholeHTML, getBeforeHTML, getAfterHTML) {
 
// add trailing newline
if (oldVersion.substr(oldVersion.length - 1, 1) != '\n') {
oldVersion += '\n';
}
if (newVersion.substr(newVersion.length - 1, 1) != '\n') {
newVersion += '\n';
}
 
// call external diff program
var diffText = WDiffString(oldVersion, newVersion);
if (wikEd.config.fullDiff != true) {
diffText = WDiffShortenOutput(diffText);
}
 
// linkify blockwise with breaks at delete and block move tags
var diffTextLinkified = '';
var regExp = /<span\b[^>]+?\bclass="wDiffHtml(Delete|Block)"[^>]*>/g;
var regExpMatch;
var pos = 0;
while ( (regExpMatch = regExp.exec(diffText)) != null) {
diffTextLinkified += wikEd.DiffLinkify(diffText.substring(pos, regExpMatch.index)) + regExpMatch[0];
pos = regExp.lastIndex;
}
diffTextLinkified += wikEd.DiffLinkify(diffText.substr(pos));
 
return(diffTextLinkified);
};
 
 
//
// wikEd.DiffLinkify: linkify external links and wikilinks in diffed text as <a> anchor elements (code copied to wikEdDiff.js)
//
 
wikEd.DiffLinkify = function(html) {
 
// &lt; &gt; to \x00 \x01
html = html.replace(/&lt;/g, '\x00');
html = html.replace(/&gt;/g, '\x01');
 
// external links
html = html.replace(/\b(((https?|ftp|irc|gopher):\/\/)|news:|mailto:)([^\x00-\x20\s"\[\]\x7f\|\{\}<>]|<[^>]*>)+?(?=([\!"\(\)\.\,\:\;\‘-•]*\s|[\x00-\x20\s"\[\]\x7f\|\{\}]))/gi,
function (p) {
var whole = p;
 
var title = whole;
title = title.replace(/\x00!--.*?--\x01/g, '');
title = title.replace(/.*--\x01|\x00!--.*/g, '');
title = title.replace(/<.*?>/g, '');
title = title.replace(/^.*>|<.*$/g, '');
title = title.replace(/^\s+|\s+$/g, '');
title = decodeURI(title);
var url = title.replace(/\s/g, '_');
url = encodeURI(url);
url = url.replace(/"/g, '%22');
url = url.replace(/'/g, '%27');
url = url.replace(/#/g, '%23');
var linkTitle = title.replace(/"/g, '&quot;');
 
// linkify all url text fragments between highlighting <span>s seperately
var anchorOpen = '<a href = "' + url + '" style="text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color);" title="' + linkTitle + '">';
var anchorClose = '</a>';
whole = whole.replace(/(<[^>]*>)/g, anchorClose + '$1' + anchorOpen);
return(anchorOpen + whole + anchorClose);
}
);
 
// linkify links and templates
if ( (wikEd.wikiGlobals.wgServer != null) && (wikEd.wikiGlobals.wgArticlePath != null) ) {
 
// 1 [[ 2title 23 | text 3 ]]1 4 {{ 5title 56 6 4
html = html.replace(/(\[\[([^|\[\]{}\n]+)(\|[^\[\]{}<>]*)?\]\])|(\{\{([^|\[\]{}\n]*)([^\[\]{}<>]*\}\})?)/g,
function (p, p1, p2, p3, p4, p5, p6) {
var articleName = p2 || '';
var templateName = p5 || '';
var whole = p;
 
// extract title
var title = articleName;
if (title == '') {
title = templateName;
}
title = title.replace(/\x00!--.*?--\x01/g, '');
title = title.replace(/.*--\x01|\x00!--.*/g, '');
title = title.replace(/<.*?>/g, '');
title = title.replace(/^.*>|<.*$/g, '');
title = title.replace(/^\s+|\s+$/g, '');
 
// [[/subpage]] refers to a subpage of the current page, [[#section]] to a section of the current page
if ( (title.indexOf('/') == 0) || (title.indexOf('#') == 0) ) {
title = wikEd.pageName + title;
}
 
// create url
var url = title.replace(/\s/g, '_');
url = encodeURI(url);
url = url.replace(/"/g, '%22');
url = url.replace(/'/g, '%27');
url = url.replace(/#/g, '%23');
var articleTitle = title.replace(/"/g, '&quot;');
if (templateName != '') {
if (/:/.test(title) == false) {
url = 'Template:' + url;
articleTitle = 'Template:' + articleTitle;
}
}
url = wikEd.wikiGlobals.wgServer + wikEd.wikiGlobals.wgArticlePath.replace(/\$1/, url);
 
// linkify all text fragments between highlighting <span>s seperately
var anchorOpen = '<a href = "' + url + '" style = "text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color)" title="' + articleTitle + '">';
var anchorClose = '</a>';
whole = whole.replace(/(<[^>]*>)/g, anchorClose + '$1' + anchorOpen);
return(anchorOpen + whole + anchorClose);
}
);
}
 
// \x00 and \x01 back to &lt; and &gt;
html = html.replace(/\x00/g, '&lt;');
html = html.replace(/\x01/g, '&gt;');
 
return(html);
};
 
 
//
// wikEd.StringGetInnerHTML: get innerHTML of element from html in a string; can also get text before or after node
//
 
wikEd.StringGetInnerHTML = function(html, tag, attrib, value, defaultToWholeHTML, getBeforeHTML, getAfterHTML) {
 
var startPos;
Line 7,104 ⟶ 7,284:
var attribValue = '';
if (attrib != '') {
attribValue = '[^>]*?' + attrib + '\\s*=\\s*(\\"|\\\')?' + value + '\\1';
}
var regExpStart = new RegExp('<' + tag + '\\b' + attribValue + '[^>]*?>', 'gi');
Line 7,238 ⟶ 7,418:
rules += '.wikEdRefButtonShow' + i + ' { border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0; }\n';
 
rules += '.wikEdRefButton' + i + ':before, .wikEdRefButtonShow' + i + ':before { content: "' + wikEd.config.text['.hideRef'] + ' ' + wikEd.referenceArray[i].text + '"; line-height: 0.75em; font-size: 65%; color: #000; font-family: sans-serif; }\n';
 
wikEd.referenceArray[i].added = true;
Line 7,252 ⟶ 7,432:
rules += '.wikEdTemplButtonShow' + i + ' { border: 1px solid; border-color: #000 #e8e8e8 #e8e8e8 #000; background: #c8c4c0; }\n';
 
rules += '.wikEdTemplButton' + i + ':before, .wikEdTemplButtonShow' + i + ':before { content: "' + wikEd.config.text['.hideTempl'] + ' ' + wikEd.templateArray[i].text + '"; line-height: 0.75em; font-size: 65%; color: #000; font-family: sans-serif; }\n';
 
wikEd.templateArray[i].added = true;
Line 7,277 ⟶ 7,457:
// add or replace existing css rules
if (rules != '') {
wikEd.HighlightNamedHideButtonsStylesheet.AddRulesAddCSSRules(rules);
}
return;
Line 7,755 ⟶ 7,935:
if (typeof(wikEd.frameWindow.find) != 'function') {
useRegExp = true;
findText = findText.replace(/([\\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1');
}
}
Line 8,162 ⟶ 8,342:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"wikEd[\w\/]+\"/.test(p3) == true) {
isRemove.push(true);
return('');
Line 8,197 ⟶ 8,377:
function (p, p1, p2, p3) {
if (p2.match(/\bclass=/) != null) {
p2 = p2.replace(/\bclass\s*=\s*([\'\"]?)[^<>\'\"\n]*?\1/g, 'class="wikEdTableEdit"');
}
else {
Line 8,304 ⟶ 8,484:
obj.plain = obj.plain.replace(/(^|\n)+(=+) *(.*?) *(=+)(?=(\n|$))/g,
function(p, p1, p2, p3, p4) {
p3 = p3.replace(/\'{2,}/g, '');
return('\n\n' + p2 + ' ' + p3 + ' ' + p2 + '\n\n');
}
Line 8,314 ⟶ 8,494:
regExp = new RegExp('\\n=+ ' + wikEd.config.text['See also'] + ' =+\\n', 'gi');
obj.plain = obj.plain.replace(regExp, '\n== ' + wikEd.config.text['See also'] + ' ==\n');
regExp = new RegExp('\\n=+ ' + wikEd.config.text['.References'] + '? =+\\n', 'gi');
obj.plain = obj.plain.replace(regExp, '\n== ' + wikEd.config.text['.References'] + ' ==\n');
 
// add space after * # : ; (list) and after {| |- |+ | (table), spare #REDIRECT
Line 8,381 ⟶ 8,561:
// remove underscores in wikilinks
obj.plain = obj.plain.replace(/\[\[(.*?)((\|.*?)|)\]\]/g,
function (p, p1, p2, p3) {
p1 = p1.replace(/_/g, ' ');
return('[[' + p1 + p2 + ']]');
Line 8,436 ⟶ 8,616:
 
// protect punctuation in URLs
obj.plainvar regExp = obj.plain.replacenew RegExp(/'(\\b(http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:|file:\/\/)[\!\#\%\&\(\)+,\\+-\./\:\;\=\?\@\w\~ŠŒŽœžŸŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9' + wikEd.letters + '_]*)/', 'g,');
obj.plain = obj.plain.replace(regExp,
function(p, p1, p2) {
p = p.replace(/([\.\,\:\;\?\!](?!$))/g, '\x00$1');
return(p);
}
Line 8,444 ⟶ 8,625:
 
// protect punctuation in filenames
obj.plainregExp = obj.plain.replacenew RegExp(/'([a-zA-Z_ŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8' + wikEd.letters + '_\u04f9\-])([\.\,\:\;\?\!])(?=([a-zA-Z]{32,4})([\\s\:\;\?\!\.\,\(\)\\[\\]\{\}\|]|$))/g', '$1\x00$2g');
obj.plain = obj.plain.replace(regExp, '$1\x00$2');
 
// protect punctuation in article names
obj.plain = obj.plain.replace(/(\[\[|\{\{)([^\]\}\|\n]*)/g,
function(p, p1, p2) {
p = p.replace(/([\.\,\:\;\?\!])/g, '\x00$1');
return(p);
}
Line 8,457 ⟶ 8,639:
obj.plain = obj.plain.replace(/(«) *()/g, '$1 ');
obj.plain = obj.plain.replace(/ *(»)/g, ' $1');
obj.plain = obj.plain.replace(/([a-zA-Z_ŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) *([\.\,])(?=([a-zA-ZŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\[\{\(\s]|$))/g, '$1$2 ');
regExp = new RegExp('([' + wikEd.letters + '_\'"”\\]})]) *([.,])(?=(['+ wikEd.letters + '\'"”\\[{(\\s]|$))', 'g');
obj.plain = obj.plain.replace(/([a-zA-Z_ŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) *([\:\;\?\!])/g, '$1 $2 ');
obj.plain = obj.plain.replace(regExp, '$1$2 ');
regExp = new RegExp('([' + wikEd.letters + '\'"”\\]})]) *([:;?!])', 'g');
obj.plain = obj.plain.replace(regExp, '$1 $2 ');
}
else {
regExp = new RegExp('([' + wikEd.letters + '_\'"”\\]})]) *([.,:;])(?=([' + wikEd.letters + '\'"”\\[{(\\s]|$))', 'g');
obj.plain = obj.plain.replace(/([a-zA-Z_ŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\]\}\)]) *([\.\,\:\;])(?=([a-zA-ZŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\'\"”\[\{\(\s]|$))/g, '$1$2 ');
obj.plain = obj.plain.replace(regExp, '$1$2 ');
}
obj.plain = obj.plain.replace(/\x00/g, '');
Line 8,569 ⟶ 8,757:
var links = '';
 
// 1 [[ 2 2 3 34# 4 5 6 6 5 ]] 1
var regExpLink = /(\[\[\s*(:?)\s*([^\n#<>\[\]\{\}\|]+)(\s*#[^\n\[\]\|]*?)?(\s*\|(.|\s)*?)?\]\]\s*)/g;
while ( (regExpMatch = regExpLink.exec(obj.plain)) != null) {
links += regExpMatch[3] + '|';
Line 8,596 ⟶ 8,784:
postFields['wpAutoSummary'] = wikEd.autoSummary;
}
 
var requestUrl = wikEd.scriptURL + 'api.php';
 
Line 8,617 ⟶ 8,805:
wikEd.redirectsCache.allFrom = '';
 
var regExpRedir = /<(r|n) .*?\bfrom=\"([^\">]*)\".*?\bto=\"([^\"]*)\".*?>/g;
while ( (regExpMatch = regExpRedir.exec(txt)) != null) {
wikEd.redirectsCache.from[i] = regExpMatch[2];
Line 8,650 ⟶ 8,838:
wikEd.ResolveRedirects = function(i) {
var toRegExp = wikEd.redirectsCache.to[i].replace(/(\W)/g, '\\$1');
var regExp = new RegExp('(\\d+)=\\"' + toRegExp + '\\"');
if ( (regExpMatch = wikEd.redirectsCache.allFrom.match(regExp)) != null) {
i = wikEd.ResolveRedirects( parseInt(regExpMatch[1], 10) );
Line 8,672 ⟶ 8,860:
for (var i = 0; i < wikEd.redirectsCache.from.length; i ++) {
 
// 1 1 2 23 # 23 # 3 4 |56 6 54
var regExp = new RegExp('\\[\\[\\s*(:?)\\s*(' + wikEd.redirectsCache.from[i] + ')(\\s*#[^\\n\\[\\]\\|]*?)?(\\s*\\|((.|\\s)*?))?\\s*\\]\\]', 'g');
obj.plain = obj.plain.replace(regExp,
function(p, p1, p2, p3, p4, p5) {
Line 8,679 ⟶ 8,867:
var article = p2;
var redirect = wikEd.redirectsCache.to[ wikEd.redirectsCache.toIndex[i] ];
var fragmentId = p3 || '';
var linkText = p5 || '';
 
Line 8,743 ⟶ 8,931:
 
// convert dash next to a number into a minus sign character
var regExp = new RegExp('([^' + wikEd.letters + '_,{])-(\\d)', 'g');
p1 = p1.replace(/([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\,\{])-(\d)/g, '$1\u2212$2');
p1 = p1.replace(regExp, '$1\u2212$2');
 
// changes 2x3 to 2×3
Line 8,752 ⟶ 8,941:
 
// change x^3 to x<sup>3</sup>
var regExp = new RegExp('([' + wikEd.letters + '_])\\^(\\u2212?\\d+\\.?\\d*) ', 'g');
p1 = p1.replace(/([\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9])\^(\u2212?\d+\.?\d*) /g, '$1&lt;sup&gt;$2&lt;/sup&gt;');
p1 = p1.replace(regExp, '$1&lt;sup&gt;$2&lt;/sup&gt;');
 
// change +/- to ±
Line 8,825 ⟶ 9,015:
 
// fix -
var regExp = new RegExp('([' + wikEd.letters + '_]|\\)|&gt;) +(-|\\u2212) +([' + wikEd.letters + '_]|\\()', 'g');
obj.plain = obj.plain.replace(/([\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\)|&gt;) +(-|\u2212) +([\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\()/g, '$1 \u2212 $3');
obj.plain = obj.plain.replace(regExp, '$1 \u2212 $3');
 
return;
Line 8,845 ⟶ 9,036:
 
// add space before units, remove space around /, and use abreviations
obj.plainvar regExp = obj.plain.replacenew RegExp(/'( *\/ *|\\d *)(Y|yotta|Z|zetta|E|exa|P|peta|T|tera|G|giga|M|mega|k|kilo|K|h|hecto|da|deca|d|deci|c|centi|m|mill?i|micro|u|µ|n|nano|p|pico|f|femto|a|atto|z|zepto|y|yocto|mibi|mebi|)(gramm?s?|g|metres?|meters?|m|amperes?|Amperes?|amps?|Amps?|A|Angstroms?|Angströms?|Å|Kelvins?|kelvins?|K|moles?|Moles?|mol|candelas?|cd|rad|Ci|sr|Hert?z|hert?z|Hz|newtons?|Newtons?|N|Joules?|joules?|J|watts?|Watts?|W|pascals?|Pascals?|Pa|lm|lx|C|volts?|Volts?|V|O|Farads?|F|Wb|T|H|S|bequerels?|Bequerels?|Bq|Gy|Sv|kat|centigrades?|°C|decibels?|db|dB|M|ohms?|Ohms?|\\u03a9|sec|seconds?|s|minutes?|min|hour?|h|bits?|Bits?|bit|bytes?|Bytes?|B|bps|Bps)(?=[^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9' + wikEd.letters + '_]|$)/', 'g,');
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3) {
 
Line 8,904 ⟶ 9,096:
 
// fix prefix casing
var regExp = new RegExp(' K(bit/s|B/s)([^' + wikEd.letters + '_]|$)', 'g');
obj.plain = obj.plain.replace(/ K(bit\/s|B\/s)([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' k$1$2');
obj.plain = obj.plain.replace(/ m(bit\/s|B\/s)([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/gregExp, ' Mk$1$2');
 
obj.plain = obj.plain.replace(/ g(bit\/s|B\/s)([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' G$1$2');
var regExp = new RegExp(' m(bit/s|B/s)([^' + wikEd.letters + '_]|$)', 'g');
obj.plain = obj.plain.replace(/ t(bit\/s|B\/s)([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/g, ' T$1$2');
obj.plain = obj.plain.replace(/ e(bit\/s|B\/s)([^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|$)/gregExp, ' EM$1$2');
var regExp = new RegExp(' g(bit/s|B/s)([^' + wikEd.letters + '_]|$)', 'g');
obj.plain = obj.plain.replace(regExp, ' G$1$2');
 
var regExp = new RegExp(' t(bit/s|B/s)([^' + wikEd.letters + '_]|$)', 'g');
obj.plain = obj.plain.replace(regExp, ' T$1$2');
 
var regExp = new RegExp(' e(bit/s|B/s)([^' + wikEd.letters + '_]|$)', 'g');
obj.plain = obj.plain.replace(regExp, ' E$1$2');
 
return;
Line 8,928 ⟶ 9,129:
 
// remove spaces around em dashes
obj.plainvar regExp = obj.plain.replacenew RegExp(/'([a-zA-Z\' + wikEd.letters + '\'"”\]\]}\)])( |&amp;nbsp;)*—( |&amp;nbsp;)*([a-zA-Z\' + wikEd.letters + '\'"“\[\[{\(])/g', '$1—$4g');
obj.plain = obj.plain.replace(regExp, '$1—$4');
 
// convert -- to em dashes
obj.plainvar regExp = obj.plain.replacenew RegExp(/'([a-zA-Z\' + wikEd.letters + '\'"”\\]\}\)])( |&amp;nbsp;)*--( |&amp;nbsp;)*([a-zA-Z\' + wikEd.letters + '\'"“\[\[{\(])/g', '$1—$4g');
obj.plain = obj.plain.replace(regExp, '$1—$4');
 
// convert hyphen next to lone number into a minus sign character
obj.plainvar regExp = obj.plain.replacenew RegExp(/'([a-zA-Z\' + wikEd.letters + '\'"”\\]>] ) *(\\u2212|–)(\\d)/g', '$1\u2212$3g');
obj.plain = obj.plain.replace(regExp, '$1\u2212$3');
 
// convert minus or en dashes to dashes with spaces
obj.plainvar regExp = obj.plain.replacenew RegExp(/'([a-zA-Z\' + wikEd.letters + '\'"”\]\]}])( |&amp;nbsp;)*(\\u2212|–)( |&amp;nbsp;)*([a-zA-Z\' + wikEd.letters + '\'"“\[\[{])/g', '$1 – $5g');
obj.plain = obj.plain.replace(regExp, '$1 – $5');
 
// convert dashes to en dashes in dates
Line 8,979 ⟶ 9,184:
obj.html = obj.html.replace(/((\{\{)|\}\})/g,
function (p, p1, p2) {
p2 = p2 || '';
if (p2 != '') {
depth ++;
Line 9,056 ⟶ 9,262:
// uppercase lists
// start (listcode (char-ent|tag|category..|digit|non-word,non-ret))(word,non-digit..) end
obj.plainvar regExp = obj.plain.replacenew RegExp(/'^((\\||[\*\#\:\;]+)[ \'\"]*(\'+|\&\\w+\;|&lt;.*?&gt;|\\{\\{.*?\\}\\}.*|\\d|[^' + wikEd.letters + '_\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([^' + wikEd.letters + '_\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\d\\n].*?)?$/gm', 'gm');
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3, p4) {
if (p4.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda|$)/) == null) {
Line 9,073 ⟶ 9,280:
 
// uppercase link lists (link)
// 12 table list 2 13 34 4
obj.plain = obj.plain.replace(/^((\||[\*\#\:\;]+)[ \'\"]*\[\[)(.*?)(\]\])/gm,
function (p, p1, p2, p3, p4) {
 
// uppercase link
var regExp = new RegExp('^((&\\w+;|[^' + wikEd.letters + '_]|\\d)*)([' + wikEd.letters + '_].*)$', '');
p3 = p3.replace(/^((\&\w+\;|[^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9]|\d)*)([a-zA-ZŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*)$/,
p3 = p3.replace(regExp,
function (p, p1, p2, p3) {
if (p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) == null) {
Line 9,088 ⟶ 9,296:
 
// uppercase comment
var regExp = new RegExp('(\\| *(&\\w+;|&lt;.*?&gt;|[^' + wikEd.letters + '_][^|]*)$', '');
p3 = p3.replace(/(\| *(\&\w+\;|&lt;.*?&gt;|[^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\|]|\d)*)([a-zA-ZŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_][^\|]*)$/,
p3 = p3.replace(regExp,
function (p, p1, p2, p3) {
if (p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) == null) {
Line 9,101 ⟶ 9,310:
 
// uppercase headings
var regExp = new RegExp('^(=+ (&\\w+\\;|&lt;.*?&gt;|\\d|[^' + wikEd.letters + '_\\n])*)([' + wikEd.letters + '_].*? =+)$', 'gm');
obj.plain = obj.plain.replace(/^(=+ (\&\w+\;|&lt;.*?&gt;|\d|[^\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\n])*)([a-zA-ZŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9_].*? =+)$/gm,
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3) {
if (p3.match(/^(http|ftp|alpha|beta|gamma|delta|epsilon|kappa|lambda)/) == null) {
Line 9,111 ⟶ 9,321:
 
// uppercase images
var regExp = new RegExp('(\\[\\[)(Image|File|' + wikEd.config.text['wikicode Image'] + '|' + wikEd.config.text['wikicode File'] + '):([\\wŠŒŽšœžŸÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9' + wikEd.letters + '_])([^\\n]*\\]\\])', 'igm');
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3, p4) {
Line 9,135 ⟶ 9,345:
var fragment = [];
var nextPos = 0;
var regExp = new RegExp('/{{\\s*lang\\s*\\|(.|\\n)*?}}', '/gi');
while ( (regExpMatch = regExp.exec(obj.plain)) != null) {
fragment.push(obj.plain.substring(nextPos, regExpMatch.index));
Line 9,233 ⟶ 9,443:
var foundLine = false;
var foundPara = false;
var regExp = new RegExp('.*[^\\w\\-ŠŒŽšœžŸÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9' + wikEd.letters + '_]', 'g');
var plainPrev = '';
 
Line 9,289 ⟶ 9,499:
 
// find next word and line boundary
regExp = new RegExp('[^' + wikEd.letters + '_]', 'g');
regExp = new RegExp('[^\\w\\-ŠŒŽšœžŸÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9]', 'g');
foundWord = false;
foundLine = false;
Line 9,433 ⟶ 9,643:
 
// remove MediaWiki section edit spans
obj.html = obj.html.replace(/<span[^>]*class=\"editsection\"[^>]*>.*?<\/span>\s*()/gi, '');
 
// remove MediaWiki heading spans
obj.html = obj.html.replace(/<span\b[^>]*\bclass=\"mw-headline\"[^>]*>(.*?)<\/span>\s*()/g, '$1');
 
// remove MediaWiki divs from article top
obj.html = obj.html.replace(/<h3\b[^>]*\bid=\"siteSub\"[^>]*>.*?<\/h3>\s*()/g, '');
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"contentSub\"[^>]*>.*?<\/div>\s*()/g, '');
obj.html = obj.html.replace(/<div\b[^>]*\bid=\"jump-to-nav\"[^>]*>.*?<\/div>\s*()/g, '');
 
// remove MediaWiki table of contents
obj.html = obj.html.replace(/<table\b[^>]*?\bid=\"toc\"[^>]*>.*?<\/table>\s*()/g, '');
 
// remove MediaWiki print footer
obj.html = obj.html.replace(/<div\b[^>]*?\bclass=\"printfooter\"[^>]*>[^<>\"]+\"<a\b[^>]*>[^<]+<\/a>\"<\/div>\s*()/g, '');
 
// remove MediaWiki category list tags
while(/<div\b[^>]*\bid=\"catlinks\"[^>]*>(.*?)<\/div>\s*()/g.test(obj.html) == true) {
obj.html = obj.html.replace(regExp, '$1');
}
while(/<p\b[^>]*?\bclass=\"catlinks\"[^>]*>(.*?)<a\b[^>]*>[^<>]+<\/a>: (.*?)<\/p>/g.test(obj.html) == true) {
obj.html = obj.html.replace(regExp, '$1$2');
}
Line 9,489 ⟶ 9,699:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"poem\"/.test(p3) == true) {
isPoem.push(true);
return('<poem>');
Line 9,658 ⟶ 9,868:
obj.html = obj.html.replace(/[\s\x00]*<table>[\s\x00]*(\|-(?=[\n\x00]))?/gi, '\x00\x00{|\x00');
obj.html = obj.html.replace(/[\s\x00]*<(table) +([^>]*)>[\s\x00]*(\|-(?=[\n\x00]))?/gi,
function (p, p1, p2, p3) {
var table = '\x00\x00{|';
if (wikEd.config.wikifyTableParameters != '') {
Line 9,678 ⟶ 9,888:
function (p, p1, p2, p3) {
if (p2.match(/\bclass=/)) {
p2 = p2.replace(/\bclass\s*=\s*([\'\"]?)[^<>\'\"\n]*?\1/g, 'class="wikEdTableEdit"');
}
else {
Line 9,698 ⟶ 9,908:
 
// convert links
obj.html = obj.html.replace(/<a(\b[^>]*)>(.*?)<\/a>/gi,
var regExpMatch = [];
function (p, p1, p2) {
var regExpStr = '(<a(\\b[^>]*)>(.*?)</a>)';
var linkParam = p1;
var regExp = new RegExp(regExpStr, 'gi');
var linkText = p2;
obj.html = obj.html.replace(regExp,
 
function (p, p1, p2, p3) {
var linkParam = p2;
var linkText = p3;
var hrefUrlParam = null;
var hrefUrlArticle = null;
Line 9,718 ⟶ 9,926:
// get href value
var hrefValue;
regExpMatchvar regExpMatchLink = linkParam.match(/ href\bhref=\"([^\">]*)\"/);
if (regExpMatchregExpMatchLink != null) {
hrefValue = regExpMatchregExpMatchLink[1];
 
// get absolute path from ./index.php and ../../index.php
Line 9,726 ⟶ 9,934:
 
// check for wiki article link and get parameters
// 1 1 2 article 2 article 2 3article 314 3article314 anchor 4 6 7 8 urlpar 87539 anchor 9
regExpStrvar regExpArticle = new RegExp(wikEd.server + '(' + wikEd.articlePath + '([^\\"\\?#]+)|' + wikEd.script + '\\?([^\\"#]*))(#[^\\"]*)?');
var regExpMatchArticle = regExpArticle.exec(hrefValue);
regExp = new RegExp(regExpStr);
if (regExpMatchArticle != null) {
regExpMatch = regExp.exec(hrefValue);
if (regExpMatch != null) {
 
// article name from url path <a href="../wiki/ hrefUrlArticle ">
hrefUrlArticle = regExpMatchArticle[2];
if (regExpMatch[2] != null) {
hrefUrlArticle = regExpMatch[2];
}
 
// article name from url parameters <a href="url? hrefUrlParam ">
hrefUrlParam = regExpMatchArticle[3];
else if (regExpMatch[3] != null) {
hrefUrlParam = regExpMatch[3];
}
 
// link anchor <a href="link #anchor">
linkArticleAnchor = regExpMatchArticle[4];
if (regExpMatch[4] != null) {
if (linkArticleAnchor != regExpMatch[4];null) {
linkArticleAnchor = linkArticleAnchor.replace(/\.([0-9A-F]{2})/g, '%$1');
linkArticleAnchor = decodeURIComponent(linkArticleAnchor);
Line 9,752 ⟶ 9,955:
// parse hrefUrlParam and check for special parameters
if (hrefUrlParam != null) {
var regExpMatchHref;
regExp = new RegExp('(^|&amp;)(\\w+)=([^\\"\\&]+)', 'g');
while ( (regExpMatchregExpMatchHref = regExp/(^|&amp;)(\w+)=([^"\&]+)/g.exec(hrefUrlParam)) != null) {
var param = regExpMatchregExpMatchHref[2];
var value = regExpMatchregExpMatchHref[3];
switch (param) {
case 'title':
Line 9,781 ⟶ 9,984:
if ( (hrefParamISBN != null) && (hrefParamSpecial != true) ) {
var isbn = hrefParamISBN;
regExpMatchvar regExpMatchISBN = /((\d\-?){13}|(\d\-?){10})/.exec(linkText);
if (regExpMatchregExpMatchISBN != null) {
isbn = regExpMatchregExpMatchISBN[1];
}
return('ISBN ' + isbn);
Line 9,804 ⟶ 10,007:
// get article name from <a title="">
else {
regExpMatchvar regExpMatchTitle = / title\btitle=\"([^\">]+)\"/.exec(linkParam);
if (regExpMatchregExpMatchTitle != null) {
linkArticle = regExpMatchregExpMatchTitle[1];
}
}
Line 9,816 ⟶ 10,019:
 
// check for wiki image
regExpStrvar regExpMatchImage = '/^<img\\b[^>]*?\\bwidth=\\"(\\d+)\\"[^>]*?>$'/.exec(linkText);
if (regExpMatchImage != null) {
regExp = new RegExp(regExpStr);
regExpMatch imgWidth = regExp.exec(linkText)regExpMatchImage[1];
if (regExpMatch != null) {
imgWidth = regExpMatch[1];
imgWidth = '|' + imgWidth + 'px';
if ( (linkTitle != '') && (linkTitle != 'Enlarge') ) {
Line 9,832 ⟶ 10,033:
 
// category link
var regExpregExpCat = new RegExp('^(Category|' + wikEd.config.text['wikicode Category'] + ')\\s*:(.*)', 'i');
regExpMatchvar regExpMatchCat = regExpregExpCat.exec(linkArticle);
if (regExpMatch != null) {
return('[[' + wikEd.config.text['wikicode Category'] + ':' + regExpMatchregExpMatchCat[1].charAt(0).toUpperCase() + linkText.substr(1) + ']]');
}
 
Line 9,844 ⟶ 10,045:
 
// date link (English only)
regExpMatchvar regExpMatchDate = /^(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2})$/.exec(linkArticle);
if (regExpMatchregExpMatchDate != null) {
var month = regExpMatchregExpMatchDate[1];
var day = regExpMatchregExpMatchDate[2];
if (linkText == (day + ' ' + month) ) {
return('[[' + linkArticle + linkArticleAnchor + ']]');
Line 9,861 ⟶ 10,062:
 
// suffix links
regExpStrvar regExpStrSuffix = '^' + linkArticle.replace(/(\W)/g, '\\$1') + '([\\wŠŒŽšœžŸÀ-ÖØ-öø-\\u0220\\u0222-\\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\\u0400-\\u0481\\u048a-\\u04ce\\u04d0-\\u04f5\\u04f8\\u04f9' + wikEd.letters + '_]+)$';
var regExpMatchSuffix = regExpStrSuffix.exec(linkText);
regExp = new RegExp(regExpStr);
if (regExpMatchSuffix != null) {
regExpMatch = regExp.exec(linkText);
return('[[' + linkArticle + linkArticleAnchor + ']]' + regExpMatchSuffix[1]);
if (regExpMatch != null) {
return('[[' + linkArticle + linkArticleAnchor + ']]' + regExpMatch[1]);
}
return('[[' + linkArticle + linkArticleAnchor + '|' + linkText + ']]');
Line 9,874 ⟶ 10,074:
 
// PubMed link
regExpMatchvar regExpMatchPubMed = /^http:\/\/www\.ncbi\.nlm\.nih\.gov\/entrez\/query\.fcgi\?cmd=Retrieve&amp;db=pubmed&amp;.*?&amp;list_uids=(\d+)/.exec(hrefValue);
if (regExpMatchregExpMatchPubMed != null) {
return('PMID ' + regExpMatchregExpMatchPubMed[1]);
}
 
// DOI link
regExpMatchregExpMatchDOI = /^http:\/\/dx\.doi\.org\/(.*)/.exec(hrefValue);
if (regExpMatchregExpMatchDOI != null) {
return('{{doi|' + regExpMatchregExpMatchDOI[1] + '}}');
}
 
Line 9,908 ⟶ 10,108:
// get and format parameters
var address = '';
var regExpMatch = /\bsrc\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
if (regExpMatch != null) {
address = regExpMatch[2].replace(/^ +| +$/g, '');
Line 9,914 ⟶ 10,114:
 
var imgAlt = '';
regExpMatch = /\balt\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
if (regExpMatch != null) {
imgAlt = regExpMatch[2].replace(/^ +| +$/g, '');
Line 9,926 ⟶ 10,126:
 
var imgWidth = '';
regExpMatch = /\bwidth\s*=\s*(\'|\")([^\'\"]*)(\'|\")/i.exec(p1);
if (regExpMatch != null) {
imgWidth = '|' + regExpMatch[2].replace(/^ +| +$/g, '') + 'px';
Line 9,992 ⟶ 10,192:
}
}
else if ( /^(big|blockquote|colgroup|center|code|del|div|font|ins|p|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki|math|noinclude|includeonly|ref|charinsert|fundraising|fundraisinglogo|gallery|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references|syntaxhighlight)$/i.test(p3) == true) {
return(p1 + p2 + p3 + p4);
}
Line 10,013 ⟶ 10,213:
// unformat underlined, italic or bold blanks
// corrupts existing text
// obj.html = obj.html.replace(/<u>(\'\'\'|\'\'|\s|\x00)*([\s\x00]+)(\'\'\'|\'\'|\s|\x00)*<\/u>/g, '$2');
// obj.html = obj.html.replace(/\'\'\'(\'\'|\s|\x00)*([\s\x00]+)(\'\'|\s|\x00)*\'\'\'/g, '$2');
// obj.html = obj.html.replace(/\'\'([\s\x00]+)\'\'/g, '$1');
 
// fix MS Word non-style heading formatting
obj.html = obj.html.replace(/(\x00(={1,6}) *)(<u>|\'\'\'|\'\')+(.*?)(<\/u>|\'\'\'|\'\')+( *\2\x00)/gi, '$1$4$6');
 
// remove empty headings
Line 10,144 ⟶ 10,344:
var sanitized = '';
var regExpMatch;
while ( (regExpMatch = /(\w+)\s*=\s*((\'|\")(.*?)\3|(\w+))/g.exec(attributes)) != null) {
var attrib = regExpMatch[1];
var attribValue = regExpMatch[4] || regExpMatch[5];
Line 10,381 ⟶ 10,581:
// remove highlighting error messages
if (wikEd.config.highlightError == true) {
obj.html = obj.html.replace(/<span\b[^>]*?\bclass=\"wikEdHighlightError\"[^>]*>.*?<\/span><!--wikEdHighlightError-->/g, '');
}
 
Line 10,389 ⟶ 10,589:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"wikEd[\w\/]+\"/.test(p3) == true) {
isRemove.push(true);
return('');
Line 10,408 ⟶ 10,608:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"wikEd[\w\/]+\"/.test(p3) == true) {
isRemove.push(true);
return('');
Line 10,428 ⟶ 10,628:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"(Apple-style-span|Apple-.*?)\"/.test(p3) == true) {
isRemove.push(true);
return('\x00');
Line 10,447 ⟶ 10,647:
function (p, p1, p2, p3) {
if (p2 == '') {
if (/\bclass=\"(Apple-style-span|Apple-.*?)\"/.test(p3) == true) {
isRemove.push(true);
return('\x00');
Line 10,469 ⟶ 10,669:
if (p3 == '') {
if ( (p2 != '') || (p5 != '') ) {
if (/\bstyle=\"/.test(p4) == true) {
if (/\bclass=\"/.test(p4) == false) {
isRemove.push(true);
return('');
Line 10,520 ⟶ 10,720:
// [regular expression fragment, tag, tagClass, tagStart (regexp starts with newline)]
var tagArray = [
['\\b(((https?|ftp|irc|gopher):\\/\\/)|news:|mailto:)[^\\x00-\\x20\\s\\\"\\[\\]\\x7f]+', 'inlineURL', 'block'], // inline link
 
// faster without (!?)
// ['[^\\{\\}\\[\\]\x00\x01_\\|\\!\\=\\*\\#\\:\\;\\\"\\\'\\n\\\\~\\-]+', 'text', 'ignore'], // chew-up fragment to ignore plain text, triples regExp speed, check later if chewed into start of inlineLink; start-with-text tags (PMID,...) have to be tested for separately to benefit from his
// ['[^\\{\\}\\[\\]\x00\x01_\\|\\!\\=\\*\\#\\:\\;"\'\\n\\\\~\\-]+', 'text', 'ignore'], // chew-up fragment to ignore plain text, triples regExp speed, check later if chewed into start of inlineLink; start-with-text tags (PMID,...) have to be tested for separately to benefit from his
 
['\x00(nowiki)\\b[^\x00\x01]*\x01(.|\\n)*?\x00\\/nowiki\\s*\x01', 'nowiki', 'block'], // <nowiki>...</nowiki>
['\x00(pre)\\b[^\x00\x01]*\x01(.|\\n)*?\x00\\/pre\\s*\x01', 'pre', 'block'], // <pre>...</pre>
['\x00(math)\\b[^\x00\x01]*\x01(.|\\n)*?\x00\\/math\\s*\x01', 'math', 'block'], // <math>...</math>
 
['(^|\\n)([ \xa0]+)(\\S[^\\n]*)', 'preform', 'block'], // "preformatted" text line (leading space)
['(^|\\n)([\\*\\#\\:\\;]+)([^\\n]*)', 'list', 'block'], // list line
 
['\x00(br\\b)[^\x00\x01]*\x01', 'br', 'block'], // <br>
Line 10,561 ⟶ 10,762:
['\\]\\]', 'doubleCloseBracket', 'close'], // wikilink, category, file link, redirect end
 
['\\[((((https?|ftp|irc|gopher):\\/\\/)|news:|mailto:)[^\\x00-\\x20\\s\\\"\\[\\]\\x7f]+)(\\s*)', 'external', 'open'], // external link start; up?? [[url]] detected as ext link!
['\\]', 'external', 'close'], // external link end
 
Line 10,569 ⟶ 10,770:
['\\\'{2,}', 'boldItalic', 'multi'], // bold, italic
 
['__(' + wikEd.magicWords + ')__', 'magic', 'block'], // magic words
['~{3,5}', 'signature', 'block'], // signature
['(^|\\n)\\-{4,}', 'hr', 'block'], // hr
Line 10,646 ⟶ 10,847:
var ns = '';
var article = p1;
var regExp = new RegExp(/^((.*?):)(.*)$/);
var regExpMatch = regExp.exec(article);
if (regExpMatch != null) {
Line 10,658 ⟶ 10,859:
return;
}
 
// &lt; &gt; &amp; to \x00 \x01
obj.html = obj.html.replace(/&lt;/g, '\x00');
Line 10,814 ⟶ 11,015:
var errorText;
if (parseObj.lastOpenTag == 'link') {
errorText = wikEd.config.text['.wikEdErrorCodeInLinkName'];
}
else if (parseObj.lastOpenTag == 'template') {
errorText = wikEd.config.text['.wikEdErrorCodeInTemplName'];
}
else if (parseObj.lastOpenTag == 'parameter') {
errorText = wikEd.config.text['.wikEdErrorCodeInParamName'];
}
wikEd.HighlightMarkLastOpenNode(errorText, parseObj);
Line 10,915 ⟶ 11,116:
break;
default:
parseObj.tree.push( { 'start': tagFrom, 'tagLength': tagLength, 'type': 'error', 'left': wikEd.config.text['.wikEdErrorBoldItalic'] } );
break;
}
Line 11,003 ⟶ 11,204:
'tagLength': node.tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplParam']
} );
redefinedTag = 'spare';
Line 11,051 ⟶ 11,252:
(openNode.tag == 'paramTempl') &&
( (openNode.tagLength > 3) && (tagLength > 3) )
) {
parseObj.tree.push( {
'start': openNode.start,
'tagLength': openNode.tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplParamAmbig']
} );
parseObj.tree.push( {
Line 11,062 ⟶ 11,263:
'tagLength': tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplParamAmbig']
} );
}
Line 11,072 ⟶ 11,273:
'tagLength': openNode.tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplParam']
} );
parseObj.tree.push( {
Line 11,078 ⟶ 11,279:
'tagLength': tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplParam']
} );
}
Line 11,108 ⟶ 11,309:
var regExpMatch;
if (/\(/.test(tagMatch) == true) {
regExpMatch = /^(.*?)([\.\,\:\;\\\!\?\)]+)$/.exec(tagMatch);
}
else {
regExpMatch = /^(.*?)([\.\,\:\;\\\!\?]+)$/.exec(tagMatch);
}
if (regExpMatch != null) {
Line 11,320 ⟶ 11,521:
// unrecognized tag
default:
parseObj.tree.push( { 'start': tagFrom, 'tagLength': tagLength, 'type': 'error', 'left': wikEd.config.text['.wikEdErrorNoHandler'] } );
}
 
Line 11,334 ⟶ 11,535:
// mark remaining unmatched opening tags
while ( (parseObj.lastOpenNode != 0) && (parseObj.lastOpenNode != null) ) {
wikEd.HighlightMarkLastOpenNode(wikEd.config.text['.wikEdErrorNoClose'], parseObj);
}
}
Line 11,349 ⟶ 11,550:
 
// named html colors in quotation marks
var regExpColorLight = /(\'|\")(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|blanchedalmond|burlywood|chartreuse|coral|cornsilk|cyan|darkgray|darkgrey|darkkhaki|darkorange|darksalmon|darkseagreen|floralwhite|fuchsia|gainsboro|ghostwhite|gold|goldenrod|greenyellow|honeydew|hotpink|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightskyblue|lightsteelblue|lightyellow|lime|linen|magenta|mediumaquamarine|mediumspringgreen|mediumturquoise|mintcream|mistyrose|moccasin|navajowhite|oldlace|orange|palegoldenrod|palegreen|paleturquoise|papayawhip|peachpuff|peru|pink|plum|powderblue|salmon|sandybrown|seashell|silver|skyblue|snow|springgreen|tan|thistle|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)(\1)/gi;
while ( (regExpMatch = regExpColorLight.exec(obj.html) ) != null) {
wikEd.HighlightBuildTree('colorLight', 'block', regExpMatch.index + regExpMatch[1].length, regExpMatch[2].length, parseObj);
}
var regExpColorDark = /(\'|\")(black|blue|blueviolet|brown|cadetblue|chocolate|cornflowerblue|crimson|darkblue|darkcyan|darkgoldenrod|darkgreen|darkmagenta|darkolivegreen|darkorchid|darkred|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|forestgreen|gray|green|grey|indianred|indigo|lightseagreen|lightslategray|lightslategrey|limegreen|maroon|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumvioletred|midnightblue|navy|olive|olivedrab|orangered|orchid|palevioletred|purple|red|rosybrown|royalblue|saddlebrown|seagreen|sienna|slateblue|slategray|slategrey|steelblue|teal|tomato)(\1)/g;
while ( (regExpMatch = regExpColorDark.exec(obj.html) ) != null) {
wikEd.HighlightBuildTree('colorDark', 'block', regExpMatch.index + regExpMatch[1].length, regExpMatch[2].length, parseObj);
Line 11,562 ⟶ 11,763:
'tagLength': tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorNoOpen']
} );
}
Line 11,595 ⟶ 11,796:
(node.tag == 'boldItalic')
) {
wikEd.HighlightMarkLastOpenNode(wikEd.config.text['.wikEdErrorNewline'], parseObj);
wikEd.HighlightGetLevel(parseObj);
}
Line 11,650 ⟶ 11,851:
nodeNo = node.parent;
node.type = 'error';
node.left = wikEd.config.text['.wikEdErrorNoClose'];
node.parent = null;
}
Line 11,664 ⟶ 11,865:
'tagLength': tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorNoOpen']
} );
break;
Line 11,696 ⟶ 11,897:
 
// convert opening tag to error
wikEd.HighlightMarkLastOpenNode(wikEd.config.text['.wikEdErrorTemplHeading'], parseObj);
 
parseObj.tree.push( {
Line 11,702 ⟶ 11,903:
'tagLength': tagLength,
'type': 'error',
'left': wikEd.config.text['.wikEdErrorTemplHeading']
} );
break;
Line 11,772 ⟶ 11,973:
}
return;
};
 
 
Line 11,958 ⟶ 12,159:
break;
case 'file':
 
var previewCode = '';
var regExpFile = new RegExp('^\\s*(Image|File|' + wikEd.config.text['wikicode Image'] + '|' + wikEd.config.text['wikicode File'] + ')\\s*:\\s*([^\\|\\n]*)', 'i');
Line 12,006 ⟶ 12,206:
wikEd.filePreviewIds[wikEd.filePreviewNo] = filePlain + filePreviewSize;
}
previewCode = '<span class="wikEdFilePreview" id="wikEdFilePreview' + wikEd.filePreviewNo + '" style="' + style + '" title="' + wikEd.config.text['.wikEdFilePreview'] + ' (' + filePlain + ')"></span><!--wikEdFilePreview-->';
wikEd.filePreviewNo ++;
}
Line 12,026 ⟶ 12,226:
break;
case 'template':
 
// do not hide templates if it has no parameters or if it shorter than wikEd.config.templNoHideLength chars
if ( (innerPlain.indexOf('|') == -1) || (innerPlain.length < wikEd.config.templNoHideLength) ) {
node.noHide = true;
}
var mod = '';
var inter = '';
Line 12,040 ⟶ 12,235:
var follow = '';
 
// 12 mod 2 : 1 34 : 4 5 namespace 53 6 template 6 7 89 param 98
var regExpTempl = new RegExp('^\\s*((' + wikEd.templModifier + ')\\:\\s*)?((\\:\\s*)?([^\\:\\|\\[\\]\\{\\}\\s\\x00\\x01]*\\s*\\:))?\\s*([^\\:\\n\\x00\\x01\\{\\}]+?)\\s*(\\|((.|\\n)*?))?\\s*$', 'gi');
 
// detect parser variables and functions, might slow main regexp down
Line 12,153 ⟶ 12,348:
var hideStyle = '';
var hideClass = 'wikEdTempl';
if ( (template != '') && (parserVar == false) && (node.noHide != true) ) {
if (wikEd.refHide == true) {
 
Line 12,171 ⟶ 12,366:
}
}
insertLeft = '<span class="wikEdTemplContainer"><button class="' + hideButtonClass + wikEd.templateArray.length + '" title="' + wikEd.config.text['.wikEdTemplButtonTooltip'] + '"></button><!--wikEdTemplButton--></span><!--wikEdTemplContainer-->';
wikEd.templateArray.push( {'text': template, 'added': false} );
}
Line 12,243 ⟶ 12,438:
break;
case 'p':
insertLeft = '<span class="wikEdHtmlUnknown" title="' + wikEd.config.text['.wikEdErrorHtmlUnknown'] + '">';
pushRight = '</span><!--wikEdHtmlUnknown-->';
break;
Line 12,259 ⟶ 12,454:
var refName = '';
var regExpMatch;
if ( (regExpMatch = /(\bname\s*=\s*(\'|\"))([^\x01]+?)\2/i.exec(tagMatch)) != null) {
refName = regExpMatch[3];
wikEd.HighlightBuildTree('refName', 'block', tagFrom + regExpMatch.index + regExpMatch[1].length, regExpMatch[3].length, parseObj);
Line 12,269 ⟶ 12,464:
if (wikEd.refHide == true) {
if (refName != '') {
insertLeft = '<span class="wikEdRefContainer"><button class="wikEdRefButton' + wikEd.referenceArray.length + '" title="' + wikEd.config.text['.wikEdRefButtonTooltip'] + '"></button><!--wikEdRefButton--></span><!--wikEdRefContainer-->';
wikEd.referenceArray.push( {'text': refName, 'added': false} );
}
else {
insertLeft = '<span class="wikEdRefContainer"><button class="wikEdRefButton" title="' + wikEd.config.text['.wikEdRefButtonTooltip'] + '"></button><!--wikEdRefButton--></span><!--wikEdRefContainer-->';
}
}
Line 12,286 ⟶ 12,481:
case 'heading':
var heading = innerPlain.replace(/^\s+|\s+$/g, '');
if ( (heading == wikEd.config.text['See also']) || (heading == wikEd.config.text['.References']) || (heading == wikEd.config.text['External links']) ) {
insertLeft = '<span class="wikEdHeadingWP">';
}
Line 12,297 ⟶ 12,492:
 
// wikitable
var regExpTable = /\{\| *((\w+ *= *(\'|\")[^\n\'\"]*\3 *)*)(\n|$)/gi;
regExpTable.lastIndex = tagFrom;
var regExpMatch = regExpTable.exec(obj.html);
Line 12,303 ⟶ 12,498:
 
// html table
regExpTable = /<table\b\s*((\w+\s*=\s*(\'|\")[^>\'\"]*\3\s*)*)\s*>/gi;
regExpTable.lastIndex = tagFrom;
regExpMatch = regExpTable.exec(obj.html)
Line 12,431 ⟶ 12,626:
break;
case 'p':
insertLeft = '<span class="wikEdHtmlUnknown" title="' + wikEd.config.text['.wikEdErrorHtmlUnknown'] + '">';
pushRight = '</span><!--wikEdHtmlUnknown-->';
break;
Line 12,573 ⟶ 12,768:
break;
case 'htmlUnknown':
insertLeft = '<span class="wikEdHtmlUnknown" title="' + wikEd.config.text['.wikEdErrorHtmlUnknown'] + '">';
pushRight = '</span><!--wikEdHtmlUnknown-->';
break;
Line 12,579 ⟶ 12,774:
var refName = '';
var regExpMatch;
if ( (regExpMatch = /(\bname\s*=\s*(\'|\"))([^\x01]+?)\2/i.exec(tagMatch)) != null) {
refName = regExpMatch[3];
wikEd.HighlightBuildTree('refName', 'block', tagFrom + regExpMatch.index + regExpMatch[1].length, regExpMatch[3].length, parseObj);
Line 12,589 ⟶ 12,784:
if (wikEd.refHide == true) {
if (refName != '') {
insertLeft = '<span class="wikEdRefContainer"><button class="wikEdRefButton' + wikEd.referenceArray.length + '" title="' + wikEd.config.text['.wikEdRefButtonTooltip'] + '"></button><!--wikEdRefButton--></span><!--wikEdRefContainer-->';
wikEd.referenceArray.push( {'text': refName + ' ↑', 'added': false} );
}
else {
insertLeft = '<span class="wikEdRefContainer"><button class="wikEdRefButton" title="' + wikEd.config.text['.wikEdRefButtonTooltip'] + '"></button><!--wikEdRefButton--></span><!--wikEdRefContainer-->';
}
}
Line 12,643 ⟶ 12,838:
/*
if (parseObj.tableMode == true) {
var regExpTable = /\| *((\w+ *= *(\'|\")[^\n\'\"]*\3 *)*)\|\|/gi;
regExpTable.lastIndex = tagFrom;
var regExpMatch;
Line 12,733 ⟶ 12,928:
break;
case 'char':
var titleClasscharName = wikEd.charHighlighting[tagMatch.charCodeAt(0).toString()];
var charClass = 'wikEd' + charName;
insertLeft = '<span class="' + titleClass + '" title="' + titleClass + '">';
insertRightinsertLeft = '</span><!-- class="' + charClass + '" title="' + titleClasswikEd.config.text[charName] + '--">';
insertRight = '</span><!--' + charClass + '-->';
break;
case 'charEntity':
Line 12,742 ⟶ 12,938:
if (character != null) {
if (wikEd.refHide == true) {
insertLeft = '<span class="wikEdCharEntityContainer"><button class="wikEdCharEntityButton' + wikEd.charEntityArray.length + '" title="' + wikEd.config.text['.wikEdCharEntityButtonTooltip'] + '"></button><!--wikEdCharEntityButton--></span><!--wikEdCharEntityContainer-->';
wikEd.charEntityArray.push( {'text': character, 'added': false} );
}
Line 12,961 ⟶ 13,157:
linkUrl = encodeURI(linkUrl);
linkUrl = linkUrl.replace(/%25(\d\d)/g, '%$1');
linkUrl = linkUrl.replace(/\'/g, '%27');
linkUrl = linkUrl.replace(/#/g, '%23');
if (wikEd.config.LinkifyArticlePath != null) {
linkUrl = wikEd.config.LinkifyArticlePath.replace(/\$1/, linkUrl);
}
else if (wikEd.wikiGlobals.wgArticlePath != null) {
linkUrl = wikEd.wikiGlobals.wgArticlePath.replace(/\$1/, linkUrl);
}
Line 12,984 ⟶ 13,180:
linkUrl = encodeURI(linkUrl);
linkUrl = linkUrl.replace(/%25(\d\d)/g, '%$1');
linkUrl = linkUrl.replace(/\'/g, '%27');
}
var linkPopup = linkName;
Line 12,992 ⟶ 13,188:
linkPopup = linkPopup.replace(/</g, '&lt;');
linkPopup = linkPopup.replace(/>/g, '&gt;');
linkPopup = linkPopup.replace(/\"/g, '&quot;');
var linkParam = '';
if (linkUrl != '') {
var titleClick;
if (wikEd.platform == 'mac') {
titleClick = wikEd.config.text['.followLinkMac'];
}
else {
titleClick = wikEd.config.text['.followLink'];
}
linkParam += 'id="wikEdLinkify' + wikEd.linkifyArray.length + '" title="' + linkPopup + ' ' + titleClick + '"';
Line 13,253 ⟶ 13,449:
 
// get the replace text
var replaceText = wikEd.inputElement['.replace'].value;
 
// get insensitive and regexp button states
Line 13,651 ⟶ 13,847:
if ( (field == 'find') && (/^=.*?=$/.test(option.value) == true) ) {
var obj = {};
var findText = option.value.replace(/([\\\^\$\*\+\?\.\(\)\[\]\{\}\:\=\!\|\,\-])/g, '\\$1');
findText = '^' + findText + '$';
 
Line 13,710 ⟶ 13,906:
}
else if (summary.match(/[\.\;\:]$/) != null) {
summary += ' ';
}
else if (summary.match(/^[\wŠŒŽšœžŸÀ-ÖØ-öø-\u0220\u0222-\u0233ΆΈΉΊΌΎΏΑ-ΡΣ-ώ\u0400-\u0481\u048a-\u04ce\u04d0-\u04f5\u04f8\u04f9\(\)\"\'\+\-]/) == null) {
summary += ' ';
}
else {
var regExp = new RegExp('^[' + wikEd.letters + '_()"\'+\\-]', '');
summary += ', ';
if (summary.match(regExp) == null) {
summary += ' ';
}
else {
summary += ', ';
}
}
}
Line 13,921 ⟶ 14,120:
 
wikEd.ClearHistory = function(field) {
 
wikEd.SetPersistent(wikEd.savedName[field], '', 0, '/');
wikEd.SetComboOptions(field);
Line 13,932 ⟶ 14,132:
 
wikEd.LoadHistoryFromSettings = function(field) {
 
var setting = wikEd.GetPersistent(wikEd.savedName[field]);
if ( (setting != '') && (setting != null) ) {
setting = decodeURIComponent(setting);
wikEd.fieldHist[field] = setting.split('\n');
Line 14,120 ⟶ 14,321:
if (wikEd.webStorage == true) {
if (expires == -1) {
value = '';
window.localStorage.removeItem(name, '');
}
else {
window.localStorage.setItem(name, value);
}
window.localStorage.setItem(name, value);
}
 
Line 14,130 ⟶ 14,329:
else if (wikEd.greasemonkey == true) {
if (expires == -1) {
GM_setValue(name,value = '');
}
 
else {
// see http://wiki.greasespot.net/Greasemonkey_access_violation
setTimeout(function() {
GM_setValue(name, value);
}, 0);
}
 
Line 14,500 ⟶ 14,701:
(currentNode.nodeType == currentNode.ENTITY_REFERENCE_NODE) ||
(wikEd.leafElements[currentNode.nodeName] == true)
) {
obj.foundNode = currentNode;
obj.foundLevel = currentLevel;
Line 14,550 ⟶ 14,751:
(currentNode.nodeType == currentNode.ENTITY_REFERENCE_NODE) ||
(wikEd.leafElements[currentNode.nodeName] == true)
) {
obj.foundNode = currentNode;
obj.foundLevel = currentLevel;
Line 14,597 ⟶ 14,798:
}
}
stylesheet.AddRulesAddCSSRules(rules);
return;
};
Line 14,630 ⟶ 14,831:
 
//
// wikEd.StyleSheet.AddRuleAddCSSRule: add one rule at the time using DOM method, very slow
//
 
this.AddRuleAddCSSRule = function(selector, declaration) {
 
// MS IE compatibility
if (this.styleElement.AddRuleaddRule != null) {
if (declaration.length > 0) {
this.styleElement.AddRuleaddRule(selector, declaration);
}
}
Line 14,654 ⟶ 14,855:
 
//
// wikEd.StyleSheet.AddRulesAddCSSRules: add or replace all rules at once, much faster
//
 
this.AddRulesAddCSSRules = function(rules) {
 
// MS IE compatibility
Line 14,726 ⟶ 14,927:
}
}
else if (wikEd.wikiGlobals.wgScriptPath != null) {
requestUrl = wikEd.wikiGlobals.wgScriptPath + '/index.php';
}
Line 14,837 ⟶ 15,038:
}
});
}, 0);
}
 
Line 14,931 ⟶ 15,132:
+ ' wikEd.wikiGlobals.' + names[i] + ' = ' + names[i] + ';'
+ '}';
}
if (gotGlobalsHook != null) {
globalScopeCode += 'wikEd.ExecuteHook(wikEd.gotGlobalsHook[' + (wikEd.gotGlobalsHook.length - 1) + '], true);';
}
eval(globalScopeCode);
Line 15,249 ⟶ 15,450:
}
return(node);
};
 
 
Line 15,294 ⟶ 15,495:
}
return(str);
};
 
 
Line 15,472 ⟶ 15,673:
msg = objectName + ': ' + value;
}
msg = msg.replace(/\'/g, '\\\'');
setTimeout('throw new Error(\'wikEd.Debug: ' + msg + '\')', 0);
}
Line 15,883 ⟶ 16,084:
// character syntax highlighting: strange spaces, hyphens, and dashes (decimal value, class = title)
wikEd.charHighlighting = {
'9': 'wikEdTabtab', // \u0009 ' '
'8194': 'wikEdEnSpaceenSpace', // \u2002 ' '
'8195': 'wikEdEmSpaceemSpace', // \u2003 ' '
'8201': 'wikEdThinSpacethinSpace', // \u2009 ' '
'12288': 'wikEdIdeographicSpaceideographicSpace', // \u3000 ' '
'45': 'wikEdHyphenDashhyphenDash', // \u00a0 '-'
'173': 'wikEdSoftHyphensoftHyphen', // \u00ad '­'
'8210': 'wikEdFigureDashfigureDash', // \u2012 '‒'
'8211': 'wikEdEnDashenDash', // \u2013 '–'
'8212': 'wikEdEmDashemDash', // \u2014 '—'
'8213': 'wikEdBarDashbarDash', // \u2015 '―'
'8722': 'wikEdMinusDashminusDash' // \u2212 '−'
};
for (var decimalValue in wikEd.charHighlighting) {
Line 15,901 ⟶ 16,102:
}
}
 
// UniCode support for regexps, from http://xregexp.com/plugins/xregexp-unicode-base.js and /xregexp-unicode-categories.js
wikEd.letters = '0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC'.replace(/(\w{4})/g, '\\u$1');
 
return;
};
 
 
// call startup