Content deleted Content added
0.9.105 test |
0.9.115alpha01 |
||
Line 1:
// <
if (typeof(wikEd) == 'undefined') { window.wikEd = {}; }
// version info
wikEd.programVersion = '0.9.
wikEd.programDate = '
/*
Line 28:
// @author Cacycle (http://en.wikipedia.org/wiki/User:Cacycle)
// @license Released into the public ___domain
// @grant GM_getValue
// @grant GM_log
// @grant GM_xmlhttpRequest
// ==/UserScript==
Line 81 ⟶ 84:
'wikEdGripCustom2 title': 'Custom buttons (click to hide or show)',
'wikEdGripControl title': 'wikEd control buttons (click to hide or show)',
// button bar background titles
'wikEdBarFormat title': '',
'wikEdBarTextify title': '',
'wikEdBarCustom1 title': '',
'wikEdBarFind title': '',
'wikEdBarFix title': '',
'wikEdBarCustom2 title': '',
'wikEdBarControl title': 'wikEd {wikEdProgramVersion} ({wikEdProgramDate})',
'wikEdBarPreview title': '',
'wikEdBarPreview2 title': '',
'wikEdBarJump title': '',
// formatting buttons, top row
Line 490 ⟶ 505:
'.wikEdFrameBodySyntax': 'height: auto; min-height: 100%; width: auto; background: transparent; margin: 0; padding: 0; padding-left: 0.25em; overflow: auto; font-family: monospace; text-shadow: white -1px -1px 0, white -1px 0 0, white -1px 1px 0, white 0 -1px 0, white 0 1px 0, white 1px -1px 0, white 1px 0 0, white 1px 1px 0;',
'::selection': 'text-shadow: none; color: #fff; background: #006;',
'::-moz-selection': 'text-shadow: none; color: #fff; background: #006;',
'::-webkit-selection': 'text-shadow: none; color: #fff; background: #006;',
'.wikEdFrameBodyNewbie': 'height: auto; min-height: 100%; width: auto; background: transparent; margin: 0; padding: 0; padding-left: 0.25em; overflow: auto; font-family: monospace;',
Line 746 ⟶ 760:
// combo input box
'.wikEdCombo': '
// wikEd button areas
Line 764 ⟶ 778:
// button bar inner wrapper: border (hidden: invisible)
'.wikEdButtonBarInnerWrapperVisible': 'border: 1px solid; border-color: #e0e0e0 #808080 #808080 #e0e0e0; line-height: 1em;',
'.wikEdButtonBarInnerWrapperHidden': '',
Line 782 ⟶ 796:
'.wikEdButtonsTextify': 'background: #d4d0cc; padding: 2px 2px 0 0px;',
'.wikEdButtonsCustom1': 'background: #d4d0cc; padding: 2px 2px 0 0px;',
'.wikEdButtonsFind': 'background: #d4d0cc; padding:
'.wikEdButtonsFix': 'background: #d4d0cc; padding: 2px 2px 0 0px;',
'.wikEdButtonsCustom2': 'background: #d4d0cc; padding: 2px 2px 0 0px;',
Line 813 ⟶ 827:
'.wikEdPreviewDiffError': 'padding: 0.5em; font-weight: bold; color: red; text-align: center;',
// find
'.wikEdFindComboInput, .wikEdReplaceComboInput':
'#wikEdFindText
'#wikEdFindSelect
// summary field
'.wikEdSummaryComboInput': 'position: relative
'.wikEdSummaryText': '
'.wikEdSummarySelect': '
// space around submit buttons
Line 833 ⟶ 842:
// frame (frame container border will be removed if textarea has none; frame must not have a border)
'.wikEdFrameOuter': 'float: left; width: auto; border: 1px solid; border-color: #808080 #d0d0d0 #d0d0d0 #808080;',
'.wikEdFrameInner': 'float: left; width: auto; background: white; border: 1px solid; border-color: #404040 #ffffff #ffffff #404040; line-height: 0;',
'.wikEdFrame': 'border: 0;',
Line 839 ⟶ 848:
'.wikEdSummaryWrapper': 'margin: 0 0 0.4em 0; width: 100%',
'.wikEdSummaryWrapperTop': 'margin: 0.1em 0 0.4em 0; width: 100%',
'#wpSummaryLabel': 'margin:
'.editOptions': 'position: relative; top: 0.1em;',
'.wikEdClearSummaryForm': 'display: inline;',
'.wikEdClearSummary': 'vertical-align:
'#wikEdClearSummaryImg': 'vertical-align: 5%;',
// input wrapper
Line 877 ⟶ 887:
};
// buttons
if (typeof(wikEd.config.button) == 'undefined') { wikEd.config.button = {}; }
// wikEd.InitButton: define built-in buttons
wikEd.InitButton = function() {
wikEd.InitObject(wikEd.config.button, {
// button number: [id, class, tooltip, image url, width, height, alt text, onclick handler code were obj is the button element]
// format top
1: ['wikEdUndo', 'wikEdButtonInactive', wikEd.config.text['wikEdUndo title'], wikEd.config.image['undo'], '16', '16', wikEd.config.text['wikEdUndo alt'], 'wikEd.EditButton(obj,
2: ['wikEdRedo', 'wikEdButtonInactive', wikEd.config.text['wikEdRedo title'], wikEd.config.image['redo'], '16', '16', wikEd.config.text['wikEdRedo alt'], 'wikEd.EditButton(obj,
3: ['wikEdBold', 'wikEdButton', wikEd.config.text['wikEdBold title'], wikEd.config.image['bold'], '16', '16', wikEd.config.text['wikEdBold alt'], 'wikEd.EditButton(obj,
4: ['wikEdItalic', 'wikEdButton', wikEd.config.text['wikEdItalic title'], wikEd.config.image['italic'], '16', '16', wikEd.config.text['wikEdItalic alt'], 'wikEd.EditButton(obj,
5: ['wikEdUnderline', 'wikEdButton', wikEd.config.text['wikEdUnderline title'], wikEd.config.image['underline'], '16', '16', wikEd.config.text['wikEdUnderline alt'], 'wikEd.EditButton(obj,
6: ['wikEdStrikethrough', 'wikEdButton', wikEd.config.text['wikEdStrikethrough title'], wikEd.config.image['strikethrough'], '16', '16', wikEd.config.text['wikEdStrikethrough alt'], 'wikEd.EditButton(obj,
7: ['wikEdNowiki', 'wikEdButton', wikEd.config.text['wikEdNowiki title'], wikEd.config.image['nowiki'], '16', '16', wikEd.config.text['wikEdNowiki alt'], 'wikEd.EditButton(obj,
8: ['wikEdSuperscript', 'wikEdButton', wikEd.config.text['wikEdSuperscript title'], wikEd.config.image['superscript'], '16', '16', wikEd.config.text['wikEdSuperscript alt'], 'wikEd.EditButton(obj,
9: ['wikEdSubscript', 'wikEdButton', wikEd.config.text['wikEdSubscript title'], wikEd.config.image['subscript'], '16', '16', wikEd.config.text['wikEdSubscript alt'], 'wikEd.EditButton(obj,
10: ['wikEdRef', 'wikEdButton', wikEd.config.text['wikEdRef title'], wikEd.config.image['ref'], '16', '16', wikEd.config.text['wikEdRef alt'], 'if (!
12: ['wikEdCase', 'wikEdButton', wikEd.config.text['wikEdCase title'], wikEd.config.image['case'], '16', '16', wikEd.config.text['wikEdCase alt'], 'wikEd.EditButton(obj,
80: ['wikEdSort', 'wikEdButton', wikEd.config.text['wikEdSort title'], wikEd.config.image['sort'], '16', '16', wikEd.config.text['wikEdSort alt'], 'wikEd.EditButton(obj,
25: ['wikEdRedirect', 'wikEdButton', wikEd.config.text['wikEdRedirect title'], wikEd.config.image['redirect'], '16', '16', wikEd.config.text['wikEdRedirect alt'], 'wikEd.EditButton(obj,
13: ['wikEdUndoAll', 'wikEdButton', wikEd.config.text['wikEdUndoAll title'], wikEd.config.image['undoAll'], '16', '16', wikEd.config.text['wikEdUndoAll alt'], 'wikEd.EditButton(obj,
14: ['wikEdRedoAll', 'wikEdButtonInactive', wikEd.config.text['wikEdRedoAll title'], wikEd.config.image['redoAll'], '16', '16', wikEd.config.text['wikEdRedoAll alt'], 'wikEd.EditButton(obj,
// format bottom
15: ['wikEdWikiLink', 'wikEdButton', wikEd.config.text['wikEdWikiLink title'], wikEd.config.image['wikiLink'], '16', '16', wikEd.config.text['wikEdWikiLink alt'], 'wikEd.EditButton(obj,
16: ['wikEdWebLink', 'wikEdButton', wikEd.config.text['wikEdWebLink title'], wikEd.config.image['webLink'], '16', '16', wikEd.config.text['wikEdWebLink alt'], 'wikEd.EditButton(obj,
17: ['wikEdHeading', 'wikEdButton', wikEd.config.text['wikEdHeading title'], wikEd.config.image['heading'], '16', '16', wikEd.config.text['wikEdHeading alt'], 'if (!
19: ['wikEdBulletList', 'wikEdButton', wikEd.config.text['wikEdBulletList title'], wikEd.config.image['bulletList'], '16', '16', wikEd.config.text['wikEdBulletList alt'], 'if (!
20: ['wikEdNumberList', 'wikEdButton', wikEd.config.text['wikEdNumberList title'], wikEd.config.image['numberList'], '16', '16', wikEd.config.text['wikEdNumberList alt'], 'if (!
21: ['wikEdIndentList', 'wikEdButton', wikEd.config.text['wikEdIndentList title'], wikEd.config.image['indentList'], '16', '16', wikEd.config.text['wikEdIndentList alt'], 'if (!
22: ['wikEdDefinitionList', 'wikEdButton', wikEd.config.text['wikEdDefinitionList title'], wikEd.config.image['definitionList'], '16', '16', wikEd.config.text['wikEdDefinitionList alt'], 'wikEd.EditButton(obj,
23: ['wikEdImage', 'wikEdButton', wikEd.config.text['wikEdImage title'], wikEd.config.image['image'], '16', '16', wikEd.config.text['wikEdImage alt'], 'wikEd.EditButton(obj,
24: ['wikEdTable', 'wikEdButton', wikEd.config.text['wikEdTable title'], wikEd.config.image['table'], '16', '16', wikEd.config.text['wikEdTable alt'], 'wikEd.EditButton(obj,
11: ['wikEdReferences', 'wikEdButton', wikEd.config.text['wikEdReferences title'], wikEd.config.image['references'], '16', '16', wikEd.config.text['wikEdReferences alt'], 'if (!
// wikify, textify
26: ['wikEdWikify', 'wikEdButton', wikEd.config.text['wikEdWikify title'], wikEd.config.image['wikify'], '16', '16', wikEd.config.text['wikEdWikify alt'], 'wikEd.EditButton(obj,
27: ['wikEdTextify', 'wikEdButton', wikEd.config.text['wikEdTextify title'], wikEd.config.image['textify'], '16', '16', wikEd.config.text['wikEdTextify alt'], 'if (
// control top
77: ['wikEdRefHide', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRefHide title'], wikEd.config.image['refHide'], '16', '16', wikEd.config.text['wikEdRefHide alt'], 'wikEd.Button(obj,
29: ['wikEdTextZoom', 'wikEdButton', wikEd.config.text['wikEdTextZoom title'], wikEd.config.image['textZoom'], '16', '16', wikEd.config.text['wikEdTextZoom alt'], 'if (!
30: ['wikEdClearHistory', 'wikEdButton', wikEd.config.text['wikEdClearHistory title'], wikEd.config.image['clearHistory'], '16', '16', wikEd.config.text['wikEdClearHistory alt'], 'wikEd.Button(obj,
31: ['wikEdScrollToPreview', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview title'], wikEd.config.image['scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview alt'], 'wikEd.Button(obj,
32: ['wikEdScrollToEdit', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit title'], wikEd.config.image['scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit alt'], 'wikEd.Button(obj,
// control bottom
33: ['wikEdUseWikEd', 'wikEdButtonChecked', wikEd.config.text['wikEdUseWikEd title'], wikEd.config.image['useWikEd'], '16', '16', wikEd.config.text['wikEdUseWikEd alt'], 'if (!event.ctrlKey) { wikEd.Button(obj,
34: ['wikEdHighlightSyntax', 'wikEdButtonUnchecked', wikEd.config.text['wikEdHighlightSyntax title'], wikEd.config.image['highlightSyntax'], '16', '16', wikEd.config.text['wikEdHighlightSyntax alt'], 'wikEd.Button(obj,
35: ['wikEdSource', 'wikEdButton', wikEd.config.text['wikEdSource title'], wikEd.config.image['source'], '16', '16', wikEd.config.text['wikEdSource alt'], 'wikEd.EditButton(obj,
75: ['wikEdCloseToolbar', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCloseToolbar title'], wikEd.config.image['closeToolbar'], '16', '16', wikEd.config.text['wikEdCloseToolbar alt'], 'wikEd.Button(obj,
36: ['wikEdUsing', 'wikEdButtonUnchecked', wikEd.config.text['wikEdUsing title'], wikEd.config.image['using'], '16', '16', wikEd.config.text['wikEdUsing alt'], 'wikEd.Button(obj,
37: ['wikEdFullScreen', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFullScreen title'], wikEd.config.image['fullScreen'], '16', '16', wikEd.config.text['wikEdFullScreen alt'], 'wikEd.Button(obj,
79: ['wikEdTableMode', 'wikEdButtonUnchecked', wikEd.config.text['wikEdTableMode title'], wikEd.config.image['tableMode'], '16', '16', wikEd.config.text['wikEdTableMode alt'], 'wikEd.Button(obj,
// find top
39: ['wikEdFindAll', 'wikEdButton', wikEd.config.text['wikEdFindAll title'], wikEd.config.image['findAll'], '16', '16', wikEd.config.text['wikEdFindAll alt'], 'wikEd.EditButton(obj,
40: ['wikEdFindPrev', 'wikEdButton', wikEd.config.text['wikEdFindPrev title'], wikEd.config.image['findPrev'], '16', '16', wikEd.config.text['wikEdFindPrev alt'], 'wikEd.EditButton(obj,
41: ['wikEdFindNext', 'wikEdButton', wikEd.config.text['wikEdFindNext title'], wikEd.config.image['findNext'], '16', '16', wikEd.config.text['wikEdFindNext alt'], 'if (
43: ['wikEdJumpPrev', 'wikEdButton', wikEd.config.text['wikEdJumpPrev title'], wikEd.config.image['jumpPrev'], '16', '16', wikEd.config.text['wikEdJumpPrev alt'], 'wikEd.EditButton(obj,
44: ['wikEdJumpNext', 'wikEdButton', wikEd.config.text['wikEdJumpNext title'], wikEd.config.image['jumpNext'], '16', '16', wikEd.config.text['wikEdJumpNext alt'], 'wikEd.EditButton(obj,
// find bottom
46: ['wikEdReplaceAll', 'wikEdButton', wikEd.config.text['wikEdReplaceAll title'], wikEd.config.image['replaceAll'], '16', '16', wikEd.config.text['wikEdReplaceAll alt'], 'wikEd.EditButton(obj,
47: ['wikEdReplacePrev', 'wikEdButton', wikEd.config.text['wikEdReplacePrev title'], wikEd.config.image['replacePrev'], '16', '16', wikEd.config.text['wikEdReplacePrev alt'], 'wikEd.EditButton(obj,
48: ['wikEdReplaceNext', 'wikEdButton', wikEd.config.text['wikEdReplaceNext title'], wikEd.config.image['replaceNext'], '16', '16', wikEd.config.text['wikEdReplaceNext alt'], 'if (
49: ['wikEdCaseSensitive', 'wikEdButtonUnchecked', wikEd.config.text['wikEdCaseSensitive title'], wikEd.config.image['caseSensitive'], '16', '16', wikEd.config.text['wikEdCaseSensitive alt'], 'wikEd.Button(obj,
50: ['wikEdRegExp', 'wikEdButtonUnchecked', wikEd.config.text['wikEdRegExp title'], wikEd.config.image['regExp'], '16', '16', wikEd.config.text['wikEdRegExp alt'], 'wikEd.Button(obj,
51: ['wikEdFindAhead', 'wikEdButtonUnchecked', wikEd.config.text['wikEdFindAhead title'], wikEd.config.image['findAhead'], '16', '16', wikEd.config.text['wikEdFindAhead alt'], 'wikEd.Button(obj,
// fix top
52: ['wikEdFixBasic', 'wikEdButton', wikEd.config.text['wikEdFixBasic title'], wikEd.config.image['fixBasic'], '16', '16', wikEd.config.text['wikEdFixBasic alt'], 'wikEd.EditButton(obj,
53: ['wikEdFixHtml', 'wikEdButton', wikEd.config.text['wikEdFixHtml title'], wikEd.config.image['fixHtml'], '16', '16', wikEd.config.text['wikEdFixHtml alt'], 'wikEd.EditButton(obj,
54: ['wikEdFixCaps', 'wikEdButton', wikEd.config.text['wikEdFixCaps title'], wikEd.config.image['fixCaps'], '16', '16', wikEd.config.text['wikEdFixCaps alt'], 'wikEd.EditButton(obj,
55: ['wikEdFixUnicode', 'wikEdButton', wikEd.config.text['wikEdFixUnicode title'], wikEd.config.image['fixUnicode'], '16', '16', wikEd.config.text['wikEdFixUnicode alt'], 'wikEd.EditButton(obj,
81: ['wikEdFixRedirect', 'wikEdButton', wikEd.config.text['wikEdFixRedirect title'], wikEd.config.image['fixRedirect'], '16', '16', wikEd.config.text['wikEdFixRedirect alt'], 'wikEd.EditButton(obj,
56: ['wikEdFixAll', 'wikEdButton', wikEd.config.text['wikEdFixAll title'], wikEd.config.image['fixAll'], '16', '16', wikEd.config.text['wikEdFixAll alt'], 'wikEd.EditButton(obj,
57: ['wikEdFixRegExTypo', 'wikEdButton', wikEd.config.text['wikEdFixRegExTypo title'], wikEd.config.image['fixRegExTypo'], '16', '16', wikEd.config.text['wikEdFixRegExTypo alt'], 'wikEd.EditButton(obj,
// fix bottom
58: ['wikEdFixDashes', 'wikEdButton', wikEd.config.text['wikEdFixDashes title'], wikEd.config.image['fixDash'], '16', '16', wikEd.config.text['wikEdFixDashes alt'], 'wikEd.EditButton(obj,
59: ['wikEdFixPunct', 'wikEdButton', wikEd.config.text['wikEdFixPunct title'], wikEd.config.image['fixPunct'], '16', '16', wikEd.config.text['wikEdFixPunct alt'], 'wikEd.EditButton(obj,
60: ['wikEdFixMath', 'wikEdButton', wikEd.config.text['wikEdFixMath title'], wikEd.config.image['fixMath'], '16', '16', wikEd.config.text['wikEdFixMath alt'], 'wikEd.EditButton(obj,
61: ['wikEdFixChem', 'wikEdButton', wikEd.config.text['wikEdFixChem title'], wikEd.config.image['fixChem'], '16', '16', wikEd.config.text['wikEdFixChem alt'], 'wikEd.EditButton(obj,
62: ['wikEdFixUnits', 'wikEdButton', wikEd.config.text['wikEdFixUnits title'], wikEd.config.image['fixUnits'], '16', '16', wikEd.config.text['wikEdFixUnits alt'], 'wikEd.EditButton(obj,
// preview top
65: ['wikEdClose', 'wikEdButton', wikEd.config.text['wikEdClose title'], wikEd.config.image['close'], '16', '16', wikEd.config.text['wikEdClose alt'], 'wikEd.Button(obj,
66: ['wikEdScrollToPreview2', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview2 title'], wikEd.config.image['scrollToPreviewDown'], '16', '16', wikEd.config.text['wikEdScrollToPreview2 alt'], 'wikEd.Button(obj,
67: ['wikEdScrollToEdit2', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit2 title'], wikEd.config.image['scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit2 alt'], 'wikEd.Button(obj,
// preview bottom
70: ['wikEdClose2', 'wikEdButton', wikEd.config.text['wikEdClose2 title'], wikEd.config.image['close'], '16', '16', wikEd.config.text['wikEdClose2 alt'], 'wikEd.Button(obj,
71: ['wikEdScrollToPreview3', 'wikEdButton', wikEd.config.text['wikEdScrollToPreview3 title'], wikEd.config.image['scrollToPreview'], '16', '16', wikEd.config.text['wikEdScrollToPreview3 alt'], 'wikEd.Button(obj,
72: ['wikEdScrollToEdit3', 'wikEdButton', wikEd.config.text['wikEdScrollToEdit3 title'], wikEd.config.image['scrollToEdit'], '16', '16', wikEd.config.text['wikEdScrollToEdit3 alt'], 'wikEd.Button(obj,
// jump
78: ['wikEdDiff', 'wikEdButtonUnchecked', wikEd.config.text['wikEdDiff title'], wikEd.config.image['wikEdDiff'], '16', '16', wikEd.config.text['wikEdDiff alt'], 'wikEd.Button(obj,
74: ['wikEdScrollToEdit4', 'wikEdButtonSolo', wikEd.config.text['wikEdScrollToEdit4 title'], wikEd.config.image['scrollToEditDown'], '16', '16', wikEd.config.text['wikEdScrollToEdit4 alt'], 'wikEd.Button(obj,
// dummy (empty placeholder)
Line 984 ⟶ 994:
// 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,
83: ['wikEdLocalDiff', 'wikEdLocalDiff', wikEd.config.text['wikEdLocalDiff title'], wikEd.config.image['diff'], '16', '16', wikEd.config.text['wikEdLocalDiffImg alt'], 'wikEd.Button(obj,
});
};
Line 992 ⟶ 1,002:
if (typeof(wikEd.config.buttonKey) == 'undefined') { wikEd.config.buttonKey = {}; }
// wikEd.InitButtonKey: define accesskeys for edit buttons
wikEd.InitButtonKey = function() {
wikEd.InitObject(wikEd.config.buttonKey, {
// wikEd button number: [key string, JS key code]
26: ['b', 66], // wikify
27: ['o', 79], // textify
Line 1,007 ⟶ 1,019:
if (typeof(wikEd.config.buttonBar) == 'undefined') { wikEd.config.buttonBar = {}; }
// wikEd.InitButtonBar: define built-in button bars
wikEd.InitButtonBar = function() {
wikEd.InitObject(wikEd.config.buttonBar, {
// button name: [id outer, class outer, id inner, class inner, height, grip title, button numbers, bar title]
'
'
'
'
'
'custom2': ['wikEdButtonBarCustom2', 'wikEdButtonBarCustom2', 'wikEdButtonsCustom2', 'wikEdButtonsCustom2', 44, wikEd.config.text['wikEdGripCustom2 title'], [ ], wikEd.config.text['wikEdBarCustom2 title'] ],
'control': ['wikEdButtonBarControl', 'wikEdButtonBarControl', 'wikEdButtonsControl', 'wikEdButtonsControl', 44, wikEd.config.text['wikEdGripControl title'], [77,29,30,35,31,32,'br',33,34,79,75,36,78,37], wikEd.config.text['wikEdBarControl title'] ],
'preview': ['wikEdButtonBarPreview', 'wikEdButtonBarPreview', 'wikEdButtonsPreview', 'wikEdButtonsPreview', 0, null, [66,67,65], wikEd.config.text['wikEdBarPreview title'] ],
'preview2': ['wikEdButtonBarPreview2', 'wikEdButtonBarPreview2', 'wikEdButtonsPreview2', 'wikEdButtonsPreview2', 0, null, [71,72,70], wikEd.config.text['wikEdBarPreview2 title'] ],
'jump': ['wikEdButtonBarJump', 'wikEdButtonBarJump', 'wikEdButtonsJump', 'wikEdButtonsJump', 0, null, [74], wikEd.config.text['wikEdBarJump title'] ]
});
};
Line 1,140 ⟶ 1,154:
// enable local preview (Pilaf's InstaView)
if (typeof(wikEd.config.useLocalPreview) == 'undefined') { wikEd.config.useLocalPreview = true; }
// enable server preview (Ajax)
Line 1,248 ⟶ 1,259:
// debug display of DOM nodes: maximal length of innerHTML in chars
if (typeof(wikEd.config.debugInnerHtmlLength) == 'undefined') { wikEd.config.debugInnerHtmlLength = 150; }
// wikibase data repository url path
if (typeof(wikEd.config.wbRepoUrl) == 'undefined') { wikEd.config.wbRepoUrl = '//www.wikidata.org/wiki/'; }
// interlanguage name of default wiki on wikibase data repository (wikidata)
if (typeof(wikEd.config.wbInterLang) == 'undefined') { wikEd.config.wbInterLang = 'enwiki'; }
return;
Line 1,256 ⟶ 1,273:
// init config
if (typeof(wikEd.config) == 'undefined') { wikEd.config = {}; }
// debug mode
if (typeof(wikEd.config.debugging) == 'undefined') { wikEd.config.debugging = false; }
// wikEd code home base URL, also defined in wikEdDiff.js
Line 1,392 ⟶ 1,412:
wikEd.uploadEdit = false;
wikEd.viewDeleted = false;
wikEd.watchlistEdit = false;
wikEd.debugOpen = false;
wikEd.pageNamespace = null;
wikEd.wbRepoUrl = '';
wikEd.wbRepoItem = '';
wikEd.wbInterLang = '';
// history
Line 1,452 ⟶ 1,474:
// edit form fields
wikEd.editForm = null;
wikEd.starttime = null;
wikEd.edittime = null;
wikEd.editToken = null;
Line 1,605 ⟶ 1,627:
// parser variables {{variable}}
wikEd.parserVariables = 'CURRENTYEAR|CURRENTMONTH|CURRENTMONTHNAME|CURRENTMONTHNAMEGEN|CURRENTMONTHABBREV|CURRENTDAY|CURRENTDAY2|CURRENTDOW|CURRENTDAYNAME|CURRENTTIME|CURRENTHOUR|CURRENTWEEK|CURRENTTIMESTAMP|LOCALYEAR|LOCALMONTH|LOCALMONTHNAME|LOCALMONTHNAMEGEN|LOCALMONTHABBREV|LOCALDAY|LOCALDAY2|LOCALDOW|LOCALDAYNAME|LOCALTIME|LOCALHOUR|LOCALWEEK|LOCALTIMESTAMP|SITENAME|CURRENTVERSION|CONTENTLANGUAGE|REVISIONID|REVISIONDAY|REVISIONDAY2|REVISIONMONTH|REVISIONYEAR|REVISIONTIMESTAMP|SERVER|SERVERNAME|SCRIPTPATH|FULLPAGENAME|PAGENAME|BASEPAGENAME|SUBPAGENAME|SUBJECTPAGENAME|TALKPAGENAME|FULLPAGENAMEE|PAGENAMEE|BASEPAGENAMEE|SUBPAGENAMEE|SUBJECTPAGENAMEE|TALKPAGENAMEE|NAMESPACE|SUBJECTSPACE|ARTICLESPACE|TALKSPACE|NAMESPACEE|SUBJECTSPACEE|TALKSPACEE|DIRMARK|DIRECTIONMARK|PAGENAME|PAGENAMEE|ARTICLEPATH|NOEXTERNALLANGLINKS';
// parser variables {{variable:R}}
Line 1,614 ⟶ 1,636:
// parser functions {{function:param|param}}
wikEd.parserFunctions = 'localurl|localurle|fullurl|filepath|fullurle|urlencode|urldecode|anchorencode|ns|lc|lcfirst|uc|ucfirst|formatnum|padleft|padright|padright|plural|grammar|gender|int|noexternallanglinks';
// parser functions {{#function:param|param}}
wikEd.parserFunctionsHash = 'language|special|tag|tag|expr|if|ifeq|ifexist|ifexpr|switch|time|timel|rel2abs|titleparts|iferror|iferror|special|tag|categorytree|formatdate|property';
// define leaf elements for wikEd.GetInnerHTML
Line 1,650 ⟶ 1,672:
if (typeof(wikEd.testVersion) == 'undefined') { wikEd.testVersion = false; }
if (typeof(wikEd.platform) == 'undefined') { wikEd.platform = null; }
if (typeof(wikEd.installationType) == 'undefined') { wikEd.installationType = ''; }
// global variables for Greasemonkey
Line 1,870 ⟶ 1,893:
// parse global-context (MediaWiki) variables into hash (for Greasemonkey)
var globalNames = ['skin', 'wgServer', 'wgTitle', 'wgCanonicalNamespace', 'wgArticlePath', 'wgScript', 'wgScriptPath', 'wgUserName', 'wgCurRevisionId', 'wgContentLanguage', 'wgUserLanguage', 'wgEnableAPI', 'wgPageName', 'wgNamespaceIds', 'wgFormattedNamespaces', 'wgUseAutomaticEditSummaries', 'wgVersion'];
if (wikEd.greasemonkey == true) {
globalNames.push('wikEdConfig', 'wikEdText');
Line 2,014 ⟶ 2,037:
continue;
}
// ignore resource loader
if (scriptName == 'load.php') {
continue;
}
wikEd.externalScripts[scriptName] = true;
wikEd.externalScriptsString += scriptName + '\n';
Line 2,047 ⟶ 2,076:
wikEd.config.gadget = true;
}
}
// set installation type
if (wikEd.config.gadget == true) {
wikEd.installationType += ' G';
}
else if (wikEd.greasemonkey == true) {
wikEd.installationType += ' GM';
}
Line 2,152 ⟶ 2,189:
}
// add event
wikEd.AddEventListener(wikEd.logo, 'click', wikEd.MainSwitch, true);
wikEd.AddEventListener(wikEd.logo, 'click', wikEd.DebugInfo, true);
}
Line 2,209 ⟶ 2,247:
// ___location search string function: put all used images and icons on an empty page
if
var str = wikEd.config.text.iconPage;
for (var imageKey in wikEd.config.image) {
Line 2,446 ⟶ 2,484:
if (wikEd.wikiGlobals.wgScript == null) {
wikEd.wikiGlobals.wgScript = wikEd.editForm.action.replace(/^https?:\/\/[^\/]*|\?.*$/g, '');
wikEd.wikiGlobals.wgScriptPath = wikEd.wikiGlobals.wgScript.replace(/\/index\.php/, '');
}
Line 2,461 ⟶ 2,499:
wikEd.pageNamespace = wikEd.pageName.substr(0, colonPos);
}
}
// get wikibase data repository url and item from interlanguage edit link (wikidata)
// work in progress!
var parents = wikEd.GetElementsByClassName('wbc-editpage');
if (parents.length > 0) {
var node = parents[parents.length - 1].firstChild;
if ( (node != null) && (node.nodeName == 'A') && (node.href != null) ) {
var regExpMatch = /^(.*\/)(.*?)$/.exec(node.href);
if (regExpMatch != null) {
wikEd.wbRepoUrl = regExpMatch[1];
wikEd.wbRepoItem = regExpMatch[2];
}
}
}
if (wikEd.wbRepoUrl == '') {
if (wikEd.config.wbRepoUrl != null) {
wikEd.wbRepoUrl = wikEd.config.wbRepoUrl;
}
}
// get interlanguage name of wiki on wikibase data repository (wikidata)
// work in progress!
var regExpMatch;
if ( (regExpMatch = /\/\/([\w-]+)\.wikipedia\.org/.exec(wikEd.wikiGlobals.wgServer)) != null) {
wikEd.wbInterLang = regExpMatch[1].replace(/-/, '_') + 'wiki';
}
else {
wikEd.wbInterLang = wikEd.config.wbInterLang;
}
Line 2,565 ⟶ 2,632:
// detect preview page
if
wikEd.previewPage = true;
}
Line 2,575 ⟶ 2,642:
// disable wikEd for Lupin's autoedit scripts
if
wikEd.useWikEd = false;
}
Line 3,050 ⟶ 3,117:
html += ' onload="var doc = window.document; doc.designMode = \'on\'; ';
}
html += 'try { doc.execCommand(\'styleWithCSS\', 0, false); } catch (
html += 'try { doc.execCommand(\'useCSS\', 0, true); } catch (
html += 'try { doc.execCommand(\'styleWithCSS\', false, false); } catch (
html += '></body></html>';
Line 3,061 ⟶ 3,128:
wikEd.frameDocument = wikEd.frameWindow.document;
// set frame height and width, border divs shrink around
wikEd.frameBorderHeight = parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderTopWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderBottomWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderTopWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderBottomWidth'), 10);
wikEd.frameHeight = (wikEd.textareaOffsetHeightInitial - wikEd.frameBorderHeight) + 'px';
wikEd.frame.style.height = wikEd.frameHeight;
wikEd.frameBorderWidth = parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderLeftWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameOuter, 'borderRightWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderLeftWidth'), 10) + parseInt(wikEd.GetStyle(wikEd.frameInner, 'borderRightWidth'), 10);
wikEd.frameWidth = (wikEd.editorWrapper.clientWidth - wikEd.frameBorderWidth) + 'px';
wikEd.frame.style.width = wikEd.frameWidth;
// do not remember
if (wikEd.fullScreenMode == true) {
wikEd.frameHeight = 0;
Line 3,079 ⟶ 3,146:
if ( (onloadWorkaround == false) && (wikEd.readOnly == false) ) {
wikEd.frameDocument.designMode = 'on';
try { wikEd.frameDocument.execCommand('styleWithCSS', 0, false); } catch (
try { wikEd.frameDocument.execCommand('useCSS', 0, true); } catch (
try { wikEd.frameDocument.execCommand('styleWithCSS', false, false); } catch (
}
}
Line 3,250 ⟶ 3,317:
wikEd.clearSummary.alt = wikEd.config.text['wikEdClearSummary alt'];
wikEd.clearSummary.title = wikEd.config.text['wikEdClearSummary title'];
clearSummaryForm.appendChild(wikEd.clearSummary);
Line 3,700 ⟶ 3,766:
wikEd.SetPersistent('wikEdAutoUpdate', currentDate.toUTCString(), 0, '/');
// get response
Line 3,791 ⟶ 3,857:
regExpFind = new RegExp(regExpMatch[2], 'gm');
}
catch (
var msg = 'Invalid RegExTypoFix rule:\nfind=' + regExpMatch[2] + '\nreplace=' + regExpMatch[3];
wikEd.ConsoleLog(msg);
Line 3,837 ⟶ 3,903:
}
eval(wikEd.editButtonHandler[obj.id]);
return;
};
Line 3,852 ⟶ 3,915:
var diffWidth = wikEd.clearSummary.offsetWidth - wikEd.clearSummaryWidth;
wikEd.inputElement.summary.style.width = (wikEd.inputElement.summary.offsetWidth - diffWidth) + 'px';
wikEd.selectElement.summary.style.width = (wikEd.selectElement.summary.offsetWidth - diffWidth) + 'px';
wikEd.clearSummaryWidth = wikEd.clearSummary.offsetWidth;
return;
Line 3,954 ⟶ 4,007:
wikEd.PreviewButtonHandler = function(event) {
// temporary debugging for 0.9.114
if ( (wikEd.config.debugging == true) && (event.shiftKey == true) ) {
event = wikEd.EventWrapper(event, this);
var obj = {};
wikEd.GetInnerHTML(obj, wikEd.frameBody);
var html = obj.html;
html = html.replace(/\n/g, '\\n\n');
html = html.replace(/\r/g, '\\r\n');
WED('PreviewButtonHandler wikEd.frameBody.innerHTML', html);
}
if (wikEd.useWikEd == true) {
// temporary debugging for 0.9.114
if ( (wikEd.config.debugging == true) && (event.shiftKey == true) ) {
var html = wikEd.textarea.value;
html = html.replace(/\n/g, '\\n\n');
html = html.replace(/\r/g, '\\r\n');
WED('PreviewButtonHandler wikEd.textarea.value before', html);
}
wikEd.UpdateTextarea();
wikEd.textareaUpdated = true;
// temporary debugging for 0.9.114
if ( (wikEd.config.debugging == true) && (event.shiftKey == true) ) {
var html = wikEd.textarea.value;
html = html.replace(/\n/g, '\\n\n');
html = html.replace(/\r/g, '\\r\n');
WED('PreviewButtonHandler wikEd.textarea.value after', html);
}
}
// temporary debugging for 0.9.114
if ( (wikEd.config.debugging == true) && (event.shiftKey == true) ) {
WED(wikEd.GetDebugInfo(), undefined, true);
event.preventDefault();
}
return;
};
Line 4,744 ⟶ 4,833:
wikEd.SetLogo = function(state, parameter) {
var src = '';
var alt = '';
var title = '';
if (state == 'error') {
}
else if (state == 'browser') {
}
else if (state == 'incompatible') {
}
else {
if (wikEd.disabled == true) {
}
else if (wikEd.testVersion == true) {
}
else {
}
}
title = title.replace(/\{wikEdParameter\}/g, parameter);
title = title.replace(/\{wikEdProgramVersion\}/g, wikEd.programVersion + wikEd.installationType);
title = title.replace(/\{wikEdProgramDate\}/g, wikEd.programDate);
wikEd.logo.src = src;
wikEd.logo.title = title;
return;
};
Line 4,805 ⟶ 4,892:
var gripTitle = bar[5];
var buttonNumbers = bar[6];
var barTitle = bar[7];
// collect the buttons
Line 4,833 ⟶ 4,921:
alert('Loading error: The button "' + buttonNumbers[i] + '" is not defined.');
}
if ( (currButton[0] == 'wikEdSource') && (wikEd.config.showSourceButton != true) && (wikEd.config.debug != true) ) {
break;
}
Line 4,852 ⟶ 4,940:
div.id = barId;
div.className = barClass;
if ( (barTitle != null) && (barTitle != '') ) {
barTitle = barTitle.replace(/\{wikEdProgramVersion\}/g, wikEd.programVersion + wikEd.installationType);
barTitle = barTitle.replace(/\{wikEdProgramDate\}/g, wikEd.programDate);
div.title = barTitle;
}
var buttonsStyle = '';
if (barHeight > 0) {
Line 5,213 ⟶ 5,305:
wikEd.previewBox.innerHTML = wikEd.config.text.wikEdPreviewLoading;
wikEd.localPrevWrapper.style.display = 'inline';
// get MathJax
try {
mw.loader.using('ext.math.mathjax.enabler', function () {
WED('Loaded MathJax');
WED('wikEd.textarea.value.renderTeX()', wikEd.textarea.value.renderTeX());
wikEd.textarea.value = wikEd.textarea.value.renderTeX());
});
}
catch (error) {
}
// prepare ajax preview
Line 5,229 ⟶ 5,332:
bodyData = bodyData.replace(/(.+)/g,
function (p, p1) {
if (/[
return(p1);
}
Line 5,238 ⟶ 5,341:
// postfix (User_talk) or prefix (Discussion_Utilisateur), test for xxx_ vs. _xxx (all ASCII non-letters as separator)
// Firefox 3.6.7 + Greasemonkey 0.8.20100408.06: invalid range with \{-‰ and \x8f-™
if (/[ -\/
talk = article.replace(/([^:]*)/, wikEd.config.text['talk namespace suffix'] + '$1');
}
Line 5,266 ⟶ 5,369:
if (section.length > 0) {
if (/\d+/.test(section[0].value) == true) {
if (/<ref[^>\/]*>(.|\n)*?<\/ref[^>]*>/i.test(bodyData) == true) {
if (/<references\b[^>]*>/i.test(bodyData) == false) {
bodyData += '<div class="wikEdPreviewRefs"><references/></div>';
Line 5,277 ⟶ 5,380:
// 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
var regExp = /<(
while ( (regExpMatch = regExp.exec(bodyData)) != null) {
var lang = regExpMatch[3];
Line 5,534 ⟶ 5,637:
wikEd.EditButton = function(buttonObj, buttonId, parameters, CustomHandler) {
// check if iframe is enabled
if (wikEd.UseWikEd == false) {
return;
}
// check if button is disabled
Line 5,891 ⟶ 5,999:
var highlightSyntax = wikEd.highlightSyntax;
// apply selected action
var selectChanged = true;
var selectChangedText = '';
var emptyOrSpaces = /^ *$/.test(obj.changed.plain);
switch (buttonId) {
Line 5,923 ⟶ 6,032:
// bold
case 'wikEdBold':
// remove markup
if (/^(\s*)'''((.|\n)*?)'''(\s*)$/.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/^(\s*)'''((.|\n)*?)'''(\s*)$/g, '$1$2$4');
}
// add markup
else {
obj.changed.plain = '\'\'\'' + obj.changed.plain + '\'\'\'';
if (emptyOrSpaces == false) {
// move spaces outside markup
obj.changed.plain = obj.changed.plain.replace(/^(''')(\s*)((.|\n)*?)(\s*)(''')$/, '$2$1$3$6$5');
// trim to maximal number of ' (bold + italic)
obj.changed.plain = obj.changed.plain.replace(/^'{6,}((.|\n)*)'{6,}$/g, '\'\'\'\'\'$1\'\'\'\'\'');
}
}
obj.changed.keepSel = true;
break;
Line 5,936 ⟶ 6,055:
// italic
case 'wikEdItalic':
// remove markup
if (/^(\s*)''((.|\n)*?)''(\s*)$/.test(obj.changed.plain) ) {
}
// add markup
else {
obj.changed.plain = '\'\'' + obj.changed.plain + '\'\'';
if (emptyOrSpaces == false) {
// move spaces outside markup
obj.changed.plain = obj.changed.plain.replace(/^('')(\s*)((.|\n)*?)(\s*)('')$/, '$2$1$3$6$5');
// trim to maximal number of ' (bold + italic)
obj.changed.plain = obj.changed.plain.replace(/^'{6,}((.|\n)*)'{6,}$/g, '\'\'\'\'\'$1\'\'\'\'\'');
}
}
obj.changed.keepSel = true;
break;
Line 5,952 ⟶ 6,078:
// underline
case 'wikEdUnderline':
// remove markup
if ( /<u>((.|\n)*?)<\/u>/i.test(obj.changed.plain) ) {
obj.changed.plain = obj.changed.plain.replace(/<u>((.|\n)*?)<\/u>/gi, '$1');
}
// add markup
else {
obj.changed.plain = '<u>' + obj.changed.plain + '<\/u>';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<u>)(\s*)((.|\n)*?)(\s*)(<\/u>)$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 5,969 ⟶ 6,101:
else {
obj.changed.plain = '<s>' + obj.changed.plain + '<\/s>';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<s>)(\s*)((.|\n)*?)(\s*)(<\/s>)$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 5,981 ⟶ 6,115:
else {
obj.changed.plain = '<nowiki>' + obj.changed.plain + '<\/nowiki>';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<nowiki>)(\s*)((.|\n)*?)(\s*)(<\/nowiki>)$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 5,994 ⟶ 6,130:
else {
obj.changed.plain = '<sup>' + obj.changed.plain + '</sup>';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<sup>)(\s*)((.|\n)*?)(\s*)(<\/sup>)$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 6,007 ⟶ 6,145:
else {
obj.changed.plain = '<sub>' + obj.changed.plain + '</sub>';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<sub>)(\s*)((.|\n)*?)(\s*)(<\/sub>)$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 6,036 ⟶ 6,176:
obj.changed.plain = '<ref name="">' + obj.changed.plain + '</ref>';
}
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(<ref( name="")?>)(\s*)((.|\n)*?)(\s*)(<\/ref>)$/, '$3$1$4$7$6');
}
}
obj.changed.keepSel = true;
Line 6,048 ⟶ 6,190:
ref = ref.replace(/>/g, '>');
var refEscaped = ref;
refEscaped = refEscaped.replace(/([^\w\s
refEscaped = refEscaped.replace(/^\n|\n$/g, '\\n*');
refEscaped = refEscaped.replace(/(\n)/g, '\\n');
Line 6,342 ⟶ 6,484:
// remove non-chars
sortKey = sortKey.replace(/[^
// join multiple spaces
Line 6,405 ⟶ 6,547:
else {
obj.changed.plain = '[[' + obj.changed.plain + ']]';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(\[\[)(\s*)((.|\n)*?)(\s*)(\]\])$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 6,417 ⟶ 6,561:
else {
obj.changed.plain = '[' + obj.changed.plain + ']';
if (emptyOrSpaces == false) {
obj.changed.plain = obj.changed.plain.replace(/^(\[)(\s*)((.|\n)*?)(\s*)(\])$/, '$2$1$3$6$5');
}
}
obj.changed.keepSel = true;
Line 6,456 ⟶ 6,602:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^ *([
return(p1);
}
Line 6,467 ⟶ 6,613:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^[
return(p1);
}
Line 6,478 ⟶ 6,624:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^ *([
return(p1);
}
Line 6,489 ⟶ 6,635:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^[
return(p1);
}
Line 6,500 ⟶ 6,646:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^ *([
return(p1);
}
Line 6,511 ⟶ 6,657:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^[
return(p1);
}
Line 6,522 ⟶ 6,668:
obj.changed.plain = obj.changed.plain.replace(/(.+)/g,
function (p, p1) {
p1 = p1.replace(/^ *([^\s
return(p1);
}
Line 6,732 ⟶ 6,878:
regExpFind = new RegExp(regExpFindText, regExpFlags);
}
catch (
return;
}
Line 6,920 ⟶ 7,066:
case 'wikEdSource':
obj.changed.plain = obj.changed.code;
obj.changed.plain = obj.changed.plain.replace(/(<(br|p)\b
obj.changed.plain = obj.changed.plain.replace(/&/g, '&');
obj.changed.plain = obj.changed.plain.replace(/</g, '<');
Line 7,204 ⟶ 7,350:
}
// clean form elements as these could interfere with the submit buttons
html = html.replace(/<\/?form\b[^>]*>/
html = html.replace(/
html = html.replace(/<input\b([^>]*)>/gi,
function (p, p1) {
p1 = p1.replace(/\bname\s*=\s*([^"'`=]+|\'[^'=]*\'|\"[^"=]*\")/gi, '');
return(p1);
}
);
// remove cite errors for automatic section preview refs
html = html.replace(/(<div\b[^>]*?\bclass="wikEdPreviewRefs"[^>]*>(.|\s)*$)/gi,
function (p, p1, p2) {
p1 = p1.replace(/<strong\b[^>]*?\bclass="error"[^>]*>(.|\s)*?<\/strong>/g, '');
Line 7,254 ⟶ 7,406:
html = html.replace(/"/g, '"');
html = html.replace(/'/g, '\'');
html = html.replace(/<\/?(br|p)\b
// parse response into file url cache
Line 7,370 ⟶ 7,522:
plain = plain.replace(/</g, '<');
// external links 123 3 2 14 4 5 6
plain = plain.replace(/\b(((https?|ftp|irc|gopher):\/\/)|news:|mailto:)([^\x00-\x20\s"\[\]\x7f\|\{\}<>]|<[^>]*>)+?(?=([
function (p) {
var whole = p;
Line 7,456 ⟶ 7,608:
linkified = linkified.replace(/\x00/g, '<');
linkified = linkified.replace(/\x01/g, '>');
return(linkified);
};
Line 7,479 ⟶ 7,631:
attribValue = '[^>]*?' + attrib + '\\s*=\\s*("|\\\')?' + value + '\\1';
}
var regExpStart = new RegExp('<' + tag + '\\b' + attribValue + '[^>]*
if ( (regExpMatch = regExpStart.exec(html)) != null) {
startPos = regExpMatch.index;
Line 8,171 ⟶ 8,323:
regExpFind = new RegExp(findText, regExpFlags);
}
catch (
return(false);
}
Line 8,525 ⟶ 8,677:
// convert html to plain
obj.plain = obj.html;
// conserve spaces and linebreaks in <pre> tags
obj.plain = obj.plain.replace(/(<pre\b[^>]*>)((.|\n)*?)(<\/pre>)/g,
function (p, p1, p2, p3, p4) {
p2 = p2.replace(/ /g, '\x03');
p2 = p2.replace(/\n/g, '\x04');
return(p1 + p2 + p4);
}
);
// remove linebreaks
obj.plain = obj.plain.replace(/ \n|\n /g, ' ');
obj.plain = obj.plain.replace(/\n/g, ' ');
// delete content tags
obj.plain = obj.plain.replace(/<(style|script|object|applet|embed)\b[^>]*>(.|\n)*?<\/\1>/g, '');
// delete outlook tags
obj.plain = obj.plain.replace(/<(w:|m:)\b[^>]*>(.|\n)*?<\/\1>/g, '');
// newlines
Line 8,550 ⟶ 8,713:
// remove empty lines from block tags
obj.plain = obj.plain.replace(/(<(blockquote|center|div|p|pre|gallery)\b[^>]*>)[\s\x00]+/gi, '$1');
obj.plain = obj.plain.replace(/[\s\x00]+(<\/(blockquote|center|div|p|pre|gallery|syntaxhighlight|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references)>)/gi, '$1');
// remove highlighting pre tags
Line 8,557 ⟶ 8,720:
// blocks
obj.plain = obj.plain.replace(/<\/?(address|blockquote|center|div|hr|isindex|p|pre)\b
// keep headings only if starting with a newline
obj.plain = obj.plain.replace(/[\s|\x00]*(^|\n|\x00)[\s|\x00]*<h[1-6]\b[^>]*>((.|\n)*?)<\/h[1-6]>[\s|\x00]*()/g, '\x00\x00$2\x00\x00');
// lists
obj.plain = obj.plain.replace(/<\/?(dir|dl|menu|ol|ul)\b
obj.plain = obj.plain.replace(/<\/(dd|dt|li)>/g, '\x00');
// forms
obj.plain = obj.plain.replace(/<\/?(select|textarea)\b
obj.plain = obj.plain.replace(/<\/(option|legend|optgroup)>/g, '\x00');
Line 8,574 ⟶ 8,737:
// override pasted table class // {{TABLE}}
obj.plain = obj.plain.replace(/(<table\b)([^>]*)(>)/
function (p, p1, p2, p3) {
if
p2 = p2.replace(/\bclass\s*=\s*(['"]?)[^<>'"\n]*?\1/g, 'class="wikEdTableEdit"');
}
Line 8,587 ⟶ 8,750:
// keep table html markup // {{TABLE}}
obj.plain = obj.plain.replace(/[\s\x00]*(<table\b
obj.plain = obj.plain.replace(/(<\/table>)[\s\x00]*()/g, '$1\x00');
Line 8,595 ⟶ 8,758:
// textify table
else if (wikEd.tableMode == false) {
obj.plain = obj.plain.replace(/<\/?(table|caption)\b
obj.plain = obj.plain.replace(/<\/(tr|th|td)>/g, '\x00');
}
// finish html to plain conversion
obj.plain = obj.plain.replace(/<
// recover table html
Line 8,616 ⟶ 8,779:
obj.plain = obj.plain.replace(/\x00/g, '\n');
obj.plain = obj.plain.replace(/(<\/table>\n)\n+/g, '$1');
// recover spaces and linebreaks from <pre> tags
obj.plain = obj.plain.replace(/\x03/g, ' ');
obj.plain = obj.plain.replace(/\x04/g, '\n');
// remove empty lines and spaces from article start and end
Line 8,664 ⟶ 8,831:
// wikEd.FixBasic: fix characters, spaces, empty lines, certain headings, needed for all fixing functions
//
wikEd.FixBasic = function(obj) {
// preserve spaces and content in pre, syntaxhighlight, source, and nowiki
obj.plain = obj.plain.replace(/(<(syntaxhighlight|source|pre|nowiki)\b[^\/]*?>)((.|\n)*?)(<\/\2>)/gi,
function (p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/([\[\]{}=*#:;|&])/g, '\x00$1\x00');
if (/^(syntaxhighlight|source|pre)$/i.test(p2) == true) {
p3 = p3.replace(/ /g, '\x01');
p3 = p3.replace(/\n/g, '\x02');
}
return(p1 + p3 + p5);
}
);
// non-breaking space character to normal space
Line 8,676 ⟶ 8,853:
// remove trailing spaces
obj.plain = obj.plain.replace(/([^\n])(\t| | )+(?=(\n|$))/g, '
// empty line before and after headings, spaces around word (lookahead), remove bold, italics, and extra =
Line 8,697 ⟶ 8,871:
obj.plain = obj.plain.replace(regExp, '\n== ' + wikEd.config.text.References + ' ==\n');
// add space after * # : ; (list)
obj.plain = obj.plain.replace(/(^|\n)
obj.plain = obj.plain.replace(/(^|\n)
function(p, p1) {
p = p.replace(/:/g, '\x04');
return(p);
}
);
obj.plain = obj.plain.replace(/(^|\n)([*#:;]+)(?![ \n*#:;\x00])/g, '$1$2 ');
obj.plain = obj.plain.replace(/\x03/g, '#');
obj.plain = obj.plain.replace(/\x04/g, ':');
// add space after table markup {| |- |+ |
obj.plain = obj.plain.replace(/(^|\n)([*#:;]*)(\{\||\|-|\|\+|\|(?!(\}|-|\+)))(?!( |\n|\x00|$))/g, '$1$2$3 ');
// empty line before and after tables
Line 8,707 ⟶ 8,891:
// empty line before and after lists
obj.plain = obj.plain.replace(/(^|\n)([^
obj.plain = obj.plain.replace(/(^|\n)([
// split into lines and change single lines, used to handle tables
var lines = obj.plain.split('\n');
obj.plain = '';
var
var preFlag = false;
for (var i = 0; i < lines.length; i ++) {
var line = lines[i];
//
if (/^ /.test(line) == false) {
preFlag = false;
// detect table
if
}
else if
}
// changes only to be done in tables
if (
// add spaces around ||
Line 8,737 ⟶ 8,922:
// changes not to be done in tables
// empty line before and after images
Line 8,747 ⟶ 8,932:
// empty line before and after includes
line = line.replace(/^(\{\{.*?\}\})$/g, '\n$1\n');
}
}
// line starting with blank
else {
// detect preformatted blocks
if (/^ +\S/.test(line) == true) {
preFlag = true;
}
// add <br> to preformatted empty line
if (preFlag == true) {
line = line.replace(/^( +)$/g, '$1<br>');
}
}
Line 8,758 ⟶ 8,957:
}
}
// remove spaces in empty lines
obj.plain = obj.plain.replace(/(^|\n)( | |\t)+(?=(\n|$))/g, '$1');
// remove underscores in wikilinks
Line 8,768 ⟶ 8,970:
// remove spaces in wikilinks, protect [[xxx| ]]
obj.plain = obj.plain.replace(/\[\[ *([^\|\[\]]*?) *\| +\]\]/g, '[[$1|\
obj.plain = obj.plain.replace(/\[\[ *([^\|\[\]]*?) *\| *([^\[\][]*?) *\]\]/g, '[[$1|$2]]');
obj.plain = obj.plain.replace(/\[\[ *([^\|\[\]]*) *\]\]/g, '[[$1]]');
obj.plain = obj.plain.replace(/\
// remove spaces in external links
Line 8,783 ⟶ 8,985:
// spaces in comments
obj.plain = obj.plain.replace(/(<!--) *((.|\n)*?) *(-->)/g, '$1 $2 $
// empty line before and after categories
Line 8,799 ⟶ 9,001:
obj.plain = obj.plain.replace(/^\n+/, '');
obj.plain = obj.plain.replace(/\n{2,}$/, '\n');
// preserved markup and spaces
obj.plain = obj.plain.replace(/\x00/g, '');
obj.plain = obj.plain.replace(/\x01/g, ' ');
obj.plain = obj.plain.replace(/\x02/g, '\n');
return;
Line 8,836 ⟶ 9,043:
);
// protect punctuation in single letter abbreviations (e.g. U.S.) (language specific behaviour)
regExp = new RegExp('(^|[\\s\'"”\\[{(])([' + wikEd.letters + '][.,:;]){2,}', 'g');
obj.plain = obj.plain.replace(regExp,
function(p) {
p = p.replace(/([.,:;])/g, '\x00$1');
return(p);
}
);
// preserve double spaces after dot
obj.plain = obj.plain.replace(/([.!?]) {2}(?=\S)/g, '$1\x01\x01');
// remove spaces before punctuation
if (wikEd.config.fixPunctFrench == true) {
obj.plain = obj.plain.replace(/(«) *()/g, '$1 ');
obj.plain = obj.plain.replace(/ *(»)/g, ' $1');
regExp = new RegExp('([' + wikEd.letters + '_\'"”\\]})]) *([.,])(?=(['+ wikEd.letters + '\'"”\\[{(\\s\\x01]|$))', 'g');
obj.plain = obj.plain.replace(regExp, '$1$2 ');
Line 8,847 ⟶ 9,067:
}
else {
regExp = new RegExp('([' + wikEd.letters + '_\'"”\\]})]) *([.,:;])(?=([' + wikEd.letters + '\'"”\\[{(\\s\\x01]|$))', 'g');
obj.plain = obj.plain.replace(regExp, '$1$2 ');
}
obj.plain = obj.plain.replace(/\x00/g, '');
obj.plain = obj.plain.replace(/ +$/g, '');
obj.plain = obj.plain.replace(/ +\n/g, '\n');
// multiple spaces
obj.plain = obj.plain.replace(/ {2,}/g, ' ');
obj.plain = obj.plain.replace(/ (?=\x01)/g, '');
obj.plain = obj.plain.replace(/\x01/g, ' ');
return;
Line 9,361 ⟶ 9,586:
wikEd.FixBasic(obj);
// get html from plain, keep leading spaces, \n to <br>
obj.html = obj.plain;
obj.html = obj.html.replace(/(^|\n) +/g,
function (p, p1) {
p = p.replace(/ /g, '\xa0');
return(p);
}
);
obj.html = obj.html.replace(/\n/g, '<br>');
// preserve double spaces after dot
obj.html = obj.html.replace(/([.!?]) {2}(?=\S)/g, '$1\xa0\xa0');
// remove syntax highlighting
wikEd.RemoveHighlighting(obj);
// keep <br> in preformatted lines
obj.html = obj.html.replace(/(^|<br>)( |\xa0).*?(?=<br>)/g,
function (p, p1, p2) {
p = p.replace(/<(br\b.*?)>/g, '\x00$1\x01');
return(p);
}
);
// keep <br> in blockquote
obj.html = obj.html.replace(/(<blockquote\b.*?>)([\S\s]*?)(<\/blockquote>)/gi,
function (p, p1, p2, p3) {
p2 = p2.replace(/<(br\b.*?)><br\b
return(p1 + p2 + p3);
}
Line 9,445 ⟶ 9,689:
// turn real html into visible html code
obj.html = obj.html.replace(/<br\b[^>]*>
obj.html = obj.html.replace(/<br\b[^>]*>/g, '\n');
obj.html = obj.html.replace(/</g, '<');
obj.html = obj.html.replace(/>/g, '>');
obj.plain = obj.html;
return;
};
Line 9,467 ⟶ 9,712:
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3, p4) {
if
// spaces cannot be added to p1 in above regExp !?
Line 9,490 ⟶ 9,735:
p3 = p3.replace(regExp,
function (p, p1, p2, p3) {
if
p3 = p3.charAt(0).toUpperCase() + p3.substr(1);
}
Line 9,501 ⟶ 9,746:
p3 = p3.replace(regExp,
function (p, p1, p2, p3) {
if
p3 = p3.charAt(0).toUpperCase() + p3.substr(1);
}
Line 9,512 ⟶ 9,757:
// uppercase headings
var regExp = new RegExp('^(=+ (&\\w+
obj.plain = obj.plain.replace(regExp,
function (p, p1, p2, p3) {
if
p3 = p3.charAt(0).toUpperCase() + p3.substr(1);
}
Line 9,805 ⟶ 10,050:
// expects < > < > & spaces instead of <br> (not \n)
// returns <br> (not \n)
// wikiCode == true: allow extended set of attributes for existing wikicode, keep leading spaces
//
// allowed and converted tags:
// br|p
Line 9,820 ⟶ 10,066:
// big|blockquote|colgroup|center|code|del|div|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby
// mediawiki tags (inline/block):
// nowiki|math|noinclude|includeonly|onlyinclude|ref|charinsert
// gallery|syntaxhighlight|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references
wikEd.WikifyHTML = function(obj,
var regExpStr;
var regExp;
var regExpMatch;
// preserve spaces and content in pre, syntaxhighlight, source, and nowiki
obj.html = obj.html.replace(/(<(syntaxhighlight|source|pre|nowiki)\b[^\/>]*>)((.|\n)*?)(<\/\2>)/gi,
function (p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/</g, '\x01');
p3 = p3.replace(/>/g, '\x02');
if (/^(syntaxhighlight|source|pre)$/i.test(p2) == true) {
p3 = p3.replace(/ |\xa0/g, '\x03');
}
return(p1 + p3 + p5);
}
);
// delete tags: <style>
obj.html = obj.html.replace(/<(style)\b[^>]*>(.|\n)*?<\/\1>/gi, '');
// remove MediaWiki section edit spans
obj.html = obj.html.replace(/<span[^>]*class="editsection"[^>]*>(.|\n)*?<\/span>\s*()/gi, '');
// remove MediaWiki heading spans
obj.html = obj.html.replace(/<span\b[^>]*\bclass="mw-headline"[^>]*>((.|\n)*?)<\/span>\s*()/g, '$1');
// remove MediaWiki divs from article top
obj.html = obj.html.replace(/<h3\b[^>]*\bid="siteSub"[^>]*>(.|\n)*?<\/h3>\s*()/g, '');
obj.html = obj.html.replace(/<div\b[^>]*\bid="contentSub"[^>]*>(.|\n)*?<\/div>\s*()/g, '');
obj.html = obj.html.replace(/<div\b[^>]*\bid="jump-to-nav"[^>]*>(.|\n)*?<\/div>\s*()/g, '');
// remove MediaWiki table of contents
obj.html = obj.html.replace(/<table\b[^>]*?\bid="toc"[^>]*>(.|\n)*?<\/table>\s*()/g, '');
// remove MediaWiki print footer
Line 9,850 ⟶ 10,108:
// remove MediaWiki category list tags
while(/<div\b[^>]*\bid="catlinks"[^>]*>((.|\n)*?)<\/div>\s*()/g.test(obj.html) == true) {
obj.html = obj.html.replace(regExp, '$1');
}
while(/<p\b[^>]*?\bclass="catlinks"[^>]*>((.|\n)*?)<a\b[^>]*>[^<>]+<\/a>: ((.|\n)*?)<\/p>/g.test(obj.html) == true) {
obj.html = obj.html.replace(regExp, '$1$
}
// convert MS-Word non-standard lists: *
obj.html = obj.html.replace(/\s*<p
// collect MS-Word footnote texts
var footnotes = {};
obj.html = obj.html.replace(/<div\b[^>]*
function(p, p1, p2, p3) {
footnotes[p1] = p3.replace(/^(\s|<br\b[^>]*>)|(\s|<br\b[^>]*>)$/g, '');
Line 9,870 ⟶ 10,128:
// add footnotes as <ref> tags
obj.html = obj.html.replace(/<a\b[^>]*
function(p, p1) {
var ref = '<ref name="footnote_' + p1 + '">' + footnotes[p1] + '</ref>';
Line 9,882 ⟶ 10,140:
// correct name for MS-Word images
// 1 2 2 3 3 4 4 1 5 5
obj.html = obj.html.replace(/(<v:imagedata\b[^>]*?
// convert <div class="poem">...</div> to <poem>...</poem>
obj.html = wikEd.RemoveTag(obj.html, 'div', /\bclass="poem"/, '<poem>', '</poem>');
// sanitize <br style="clear: both;"/>
obj.html = obj.html.replace(/<(br)\s+([^>]*?)\s*(\/)>/gi,
function (p, p1, p2, p3) {
return('<' + p1 + wikEd.SanitizeAttributes(p1, p2, wikiCode) + p3 + '>');
}
);
// sanitize <span> <div> <p> <font>
obj.html = obj.html.replace(/<(span|div|p|font)\
function (p, p1, p2, p3) {
return('<' + p1 + wikEd.SanitizeAttributes(p1, p2,
}
);
Line 9,904 ⟶ 10,169:
// remove comments
obj.html = obj.html.replace(/<!--(.|\n)*?-->/g, '');
// <hr> horizontal rule
Line 9,910 ⟶ 10,175:
// <i> <em> <dfn> <var> <cite> italic
obj.html = obj.html.replace(/<(i|em|dfn|var|cite)\b
obj.html = obj.html.replace(/<\/(i|em|dfn|var|cite)\b
// <b> <strong> bold
obj.html = obj.html.replace(/<(b|strong)\b
obj.html = obj.html.replace(/<\/(b|strong)\b
// <h1> .. <h6> headings
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h1\b[^>]*>((.|\n)*?)<\/h1>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00= $4 =\x00\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h2\b[^>]*>((.|\n)*?)<\/h2>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00== $4 ==\x00\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h3\b[^>]*>((.|\n)*?)<\/h3>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00=== $4 ===\x00\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h4\b[^>]*>((.|\n)*?)<\/h4>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00==== $4 ====\x00\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h5\b[^>]*>((.|\n)*?)<\/h5>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00===== $4 =====\x00\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(^|\n|<br\b[^>]*>|\x00)(\s|<br\b[^>]*>|\x00)*<h6\b[^>]*>((.|\n)*?)<\/h6>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00\x00====== $4 ======\x00\x00');
obj.html = obj.html.replace(/<(h[0-6])\b[^>]*>((.|\n)*?)<\/\1>/gi, '$2');
// {{TABLE}}
// convert html tables to wikicode
if (wikEd.tableMode == false) {
Line 9,935 ⟶ 10,201:
// remove <col></col> and <colgroup></colgroup>\s
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(col)\b[^>]*>(.|\n)*?<\/\2>(|<br\b[^>]*>|\x00)*()/gi, '');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(colgroup)\b[^>]*>(.|\n)*?<\/\2>(|<br\b[^>]*>|\x00)*()/gi, '');
// line breaks to <br /> in table cells, but not in html markup
obj.html = obj.html.replace(/(<(td|th|caption)\b[^>]*>)((.|\n)*?)(<\/\2>)/gi,
function(p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/^(\s|<br\b[^>]*>|\x00>)+/gi, '');
p3 = p3.replace(/(\s|<br\b[^>]*>|\x00>)+$/gi, '');
p3 = p3.replace(/(<(\w+)[^>]*>)((.|\n)*?)(<\/\2+>)/gi,
function(p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/<br\b[^>]*>\s*()/gi, '\x04');
return(p1 + p3 + p5);
}
);
p3 = p3.replace(/<br\b[^>]*>\s*()/gi, '<br />');
p3 = p3.replace(/\x04/g, '<br>');
return(p1 + p3 + p5);
}
);
Line 9,953 ⟶ 10,228:
// <td> table cells
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<td>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00| ');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(td)
function (p, p1, p2, p3, p4) {
p3 = wikEd.SanitizeAttributes(p2, p3,
if (p3 == '') {
return('\x00| ');
Line 9,966 ⟶ 10,241:
// <th> table cells
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<th>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(th)
function (p, p1, p2, p3, p4) {
p3 = wikEd.SanitizeAttributes(p2, p3,
if (p3 == '') {
return('\x00
}
else {
return('\x00
}
}
Line 9,981 ⟶ 10,256:
// <tr> table rows
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<tr>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00|-\x00');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(tr)
function (p, p1, p2, p3, p4) {
return('\x00|-' + wikEd.SanitizeAttributes(p2, p3,
}
);
Line 9,989 ⟶ 10,264:
// <caption> table caption
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<caption>(\s|<br\b[^>]*>|\x00)*()/gi, '\x00|+ ');
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*<(caption)
function (p, p1, p2, p3, p4) {
p3 = wikEd.SanitizeAttributes(p2, p3,
if (p3 == '') {
return('\x00|+ ');
Line 10,005 ⟶ 10,280:
// line breaks, also in table cells (continued)
obj.html = obj.html.replace(/<br\
// <table>
obj.html = obj.html.replace(/[\s\x00]*<table>[\s\x00]*(\|-(?=[\n\x00]))?/gi, '\x00\x00{|\x00');
obj.html = obj.html.replace(/[\s\x00]*<(table)
function (p, p1, p2, p3) {
var table = '\x00\x00{|';
Line 10,016 ⟶ 10,291:
}
else {
table += wikEd.SanitizeAttributes(p1, p2, wikiCode);
}
return(table + '\x00');
}
);
obj.html = obj.html.replace(/[\s\x00]*<\/table>[\s\x00]*()/gi, '\x00|}\x00\x00');
}
Line 10,029 ⟶ 10,303:
obj.html = obj.html.replace(/(<table\b)([^>]*)(>)/gi,
function (p, p1, p2, p3) {
if
p2 = p2.replace(/\bclass\s*=\s*(['"]?)[^<>'"\n]*?\1/g, 'class="wikEdTableEdit"');
}
Line 10,040 ⟶ 10,314:
// table block element needs only one newline
obj.html = obj.html.replace(/(\s|<br\b[^>]*>|\x00)*(<table\b
obj.html = obj.html.replace(/(<\/table>)(\s|<br\b[^>]*>|\x00)*()/gi, '$1\x00');
}
Line 10,046 ⟶ 10,320:
// line breaks (continued)
if (wikEd.tableMode == true) {
obj.html = obj.html.replace(/<br\
}
// convert links
obj.html = obj.html.replace(/<a(\b[^>]*)>((.|\n)*?)<\/a>/gi,
function (p, p1, p2) {
var linkParam = p1;
Line 10,162 ⟶ 10,436:
// check for wiki image
var regExpMatchImage = /^<img\b[^>]*?\bwidth="(\d+)"[^>]*
if (regExpMatchImage != null) {
imgWidth = regExpMatchImage[1];
Line 10,253 ⟶ 10,527:
var regExpMatch = /\bsrc\s*=\s*('|")([^'"]*)('|")/i.exec(p1);
if (regExpMatch != null) {
address = regExpMatch[2].replace(/^
}
Line 10,259 ⟶ 10,533:
regExpMatch = /\balt\s*=\s*('|")([^'"]*)('|")/i.exec(p1);
if (regExpMatch != null) {
imgAlt = regExpMatch[2].replace(/^
imgAlt = imgAlt.replace(/&nbsp;|[\n\x00]/g, ' ');
imgAlt = imgAlt.replace(/
imgAlt = imgAlt.replace(/^
if (imgAlt != '') {
imgAlt = '|' + imgAlt;
Line 10,271 ⟶ 10,545:
regExpMatch = /\bwidth\s*=\s*('|")([^'"]*)('|")/i.exec(p1);
if (regExpMatch != null) {
imgWidth = '|' + regExpMatch[2].replace(/^
}
Line 10,319 ⟶ 10,593:
}
);
obj.html = obj.html.replace(/[\n|\x00]+[#
// <> remove not allowed tags
obj.html = obj.html.replace(/(<\/?)(\/?)(\w+)(
function (p, p1, p2, p3, p4) {
Line 10,346 ⟶ 10,620:
// keep allowed tags
if ( /^(big|blockquote|colgroup|center|code|del|div|br|font|ins|p|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki|math|noinclude|includeonly|onlyinclude|ref|charinsert|
return(p);
}
Line 10,355 ⟶ 10,629:
// sanitize attributes in opening html tags
obj.html = obj.html.replace(/<(\w+)
function (p, p1, p2, p3) {
if (p3 != '') {
p3 = ' ' + p3;
}
return('<' + p1 + wikEd.SanitizeAttributes(p1, p2,
}
);
Line 10,371 ⟶ 10,645:
// fix MS Word non-style heading formatting
obj.html = obj.html.replace(/(\x00(={1,6})
// remove empty headings
Line 10,377 ⟶ 10,651:
// remove space-only lines
if (wikiCode != true) {
obj.html = obj.html.replace(/([\s\x00]*\x00[\s\x00]*)/g,
function (p, p1) {
return(p1.replace(/\n/g, '\x00')); }
}
// remove trailing linebreaks from table cells
obj.html = obj.html.replace(/\x00{2,}(\||!)/g, '\x00$1');
// remove leading and trailing spaces
if (wikiCode == true) {
obj.html = obj.html.replace(/\x00[ \n]+</g, '\x00<');
}
else {
obj.html = obj.html.replace(/\x00\s+</g, '\x00<');
}
obj.html = obj.html.replace(/>\s+\x00/g, '>\x00');
// remove empty inline and block tag pairs
obj.html = wikEd.RemoveEmptyTags(obj.html, /( *)<(big|colgroup|code|del|font|ins|pre|s|small|span|strike|sub|sup|tt|u|rb|rp|rt|ruby|nowiki|math|noinclude|includeonly|onlyinclude|ref|charinsert
obj.html = wikEd.RemoveEmptyTags(obj.html, /[\s\x00]*<(blockquote|center|div|gallery|syntaxhighlight|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references)\b[^>]*><\/\1>[\s\x00]*()/gi, '\x00\x00');
// remove empty lines from block tags
obj.html = obj.html.replace(/(<(blockquote|center|div|p|pre|gallery|syntaxhighlight|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references)\b[^>]*>[\s\x00])[\s\x00]+/gi, '$1');
obj.html = obj.html.replace(/[\s\x00]+([\s\x00]<\/(blockquote|center|div|p|pre|gallery|syntaxhighlight|source|poem|categorytree|hiero|imagemap|inputbox|timeline|references)>)/gi, '$1');
// blockquote
Line 10,409 ⟶ 10,690:
obj.html = obj.html.replace(/</g, '<');
obj.html = obj.html.replace(/>/g, '>');
// newlines to <br>
Line 10,420 ⟶ 10,697:
obj.html = obj.html.replace(/\x00/g, '\n');
obj.html = obj.html.replace(/\n/g, '<br>');
// preserved table and pre tags and spaces
obj.html = obj.html.replace(/\x01/g, '<');
obj.html = obj.html.replace(/\x02/g, '>');
obj.html = obj.html.replace(/\x03/g, '\xa0');
// table block element needs only one newline
Line 10,429 ⟶ 10,711:
obj.html = obj.html.replace(/(<br\b[^>]*>)+$/gi, '');
}
return;
};
Line 10,467 ⟶ 10,748:
var tagRegExp;
if (typeof(tag) == 'string') {
// 1 2 23 3 4 4 1
tagRegExp = new RegExp('(<(\\/?)(' + tag + ')\\b([^>]*)>)', 'g');
}
Line 10,489 ⟶ 10,771:
if (
( (attribRegExp == null) && (p4 == '') ) ||
( (attribRegExp != null) && (attribRegExp.test(p4) == true) )
) {
isRemove.push(true);
Line 10,509 ⟶ 10,791:
//
// wikEd.RelativeToAbsolutePath
//
wikEd.RelativeToAbsolutePath = function(relativePath, fullPath) {
Line 10,549 ⟶ 10,831:
//
// wikEd.SanitizeAttributes: see Sanitizer.php
// wikiCode == true: allow extended set of attributes for existing wikicode
wikEd.SanitizeAttributes = function(tag, attributes, wikiCode) {
var common;
var tablealign;
var tablecell;
var table;
if (
common = 'dir|style|class
tablealign = '|align|char|charoff|valign';
table = '|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor';
Line 10,571 ⟶ 10,854:
var sanitized = '';
var regExpMatch;
// 1 12 34 45 5 6 632
var regExp = /(\w+)(\s*=\s*(('|")(.*?)\4|(\w+)))?/g;
while ( (regExpMatch = regExp.exec(attributes)) != null) {
var attrib = regExpMatch[1];
var attribValue = regExpMatch[
var valid = false;
// empty or missing attributes as parameters for wiki markup
var flag = false;
// include non-html wiki markup and extended set of attributes for existing wikicode
if (wikiCode == true) {
if ('center|em|strong|cite|code|var|sub|sup|dl|dd|dt|tt|b|i|big|small|strike|s|u|rb|rp|ruby'.indexOf(tag) >= 0) {
if (common.indexOf(attrib) >= 0) { valid = true; }
}
Line 10,636 ⟶ 10,921:
if ((common + '|rbspan').indexOf(attrib) >= 0) { valid = true; }
}
else if ('dfn'.indexOf(tag) >= 0) {
if (('name|id').indexOf(attrib) >= 0) { valid = true; }
}
// wiki markup
else if ('ref'.indexOf(tag) >= 0) {
if (('name').indexOf(attrib) >= 0) { valid = true; }
Line 10,641 ⟶ 10,931:
else if ('references'.indexOf(tag) >= 0) {
}
else if ('syntaxhighlight|source'.indexOf(tag) >= 0) {
if ((common + '|lang|enclose|highlight|line|start').indexOf(attrib) >= 0) {
valid = true;
if ( ('line'.indexOf(attrib) >= 0) && (attribValue == '') ) {
flag = true;
}
}
}
else if ('poem'.indexOf(tag) >= 0) {
if ((common + '|compact').indexOf(attrib) >= 0) {
valid = true; if ( ('compact'.indexOf(attrib) >= 0) && (attribValue == '') ) {
flag = true;
}
}
}
else if ('categorytree'.indexOf(tag) >= 0) {
if ((common + '|mode|depth|onlyroot|hideroot|hideprefix|showcount|namespaces').indexOf(attrib) >= 0) { valid = true; }
}
else if ('
if ((common + '|perrow|widths|heights|caption').indexOf(attrib) >= 0) { valid = true; }
}
else if ('
}
else if ('
if ((common + '|alt').indexOf(attrib) >= 0) { valid = true; }
}
}
Line 10,671 ⟶ 10,962:
// strict, for html code to be wikified from external sources (websites, Word)
else {
if ('center|em|strong|cite|code|var|sub|
if (common.indexOf(attrib) >= 0) { valid = true; }
}
Line 10,716 ⟶ 11,007:
if ((common + '|rbspan').indexOf(attrib) >= 0) { valid = true; }
}
else if ('
if (('name|id').indexOf(attrib) >= 0) { valid = true; }
}
}
// ignore empty or missing attributes
if (
continue;
}
continue;
}
// clean up defaults for align
if (attrib == 'align') {
if ('tr|td|th'.indexOf(tag) >= 0) {
if (attribValue == 'left') {
attribValue = '';
}
}
}
}
}
}
// add attribute
if (flag == true) {
sanitized += ' ' + attrib;
}
else if (attribValue != '') {
sanitized += ' ' + attrib + '="' + attribValue + '"';
}
}
Line 10,803 ⟶ 11,077:
//
// wikEd.RemoveHighlighting: remove syntax highlighting in obj.html; sets obj.htmlCode if text contains html code
//
wikEd.RemoveHighlighting = function(obj) {
// preserve tags, spaces and newlines in pre tag markup
obj.html = obj.html.replace(/(<(syntaxhighlight|source|pre)\b[^\/]*?>)((.|\n)*?)(<\/\2>)/gi,
function(p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/ /g, '\xa0');
p3 = p3.replace(/\n/g, '\x00');
return(p1 + p3 + p5);
}
);
// preserve spaces and content in pre, syntaxhighlight, source, and nowiki
obj.plain = obj.plain.replace(/(<(syntaxhighlight|source|pre|nowiki)\b[^\/]*?>)((.|\n)*?)(<\/\2>)/gi,
function (p, p1, p2, p3, p4, p5) {
p3 = p3.replace(/([\[\]{}=*#:;|&])/g, '\x00$1\x00');
if (/^(syntaxhighlight|source|pre)$/i.test(p2) == true) {
p3 = p3.replace(/ /g, '\x01');
p3 = p3.replace(/\n/g, '\x02');
}
return(p1 + p3 + p5);
}
);
// remove highlighting error messages
if (wikEd.config.highlightError == true) {
obj.html = obj.html.replace(/<span\b[^>]*?\bclass="wikEdHighlightError"[^>]*>(.|\n)*?<\/span><!--wikEdHighlightError-->/g, '');
}
Line 10,850 ⟶ 11,146:
// comments
obj.html = obj.html.replace(/<!--wikEd[\w\/]+-->/g, '');
// preserve spaces and newlines in pre tag
obj.html = obj.html.replace(/(<pre\b[^>]*>)((.|\n)*?)(<\/pre>)/g,
function(p, p1, p2, p3, p4) {
p2 = p2.replace(/ /g, '\xa0');
p2 = p2.replace(/\n/g, '\x00');
return(p1 + p2 + p4);
}
);
// newlines
obj.html = obj.html.replace(/[\n ]+/g, ' ');
obj.html = obj.html.replace(/\x00/g, '\n');
// non-breaking spaces
Line 10,858 ⟶ 11,164:
// check for pasted html content
if
obj.htmlCode = true;
}
Line 10,864 ⟶ 11,170:
obj.htmlCode = false;
}
return;
};
Line 10,884 ⟶ 11,189:
// faster without (!?)
// ['[^
['\x00(nowiki)\\b[^\x00\x01]*\x01(.|\\n)*?\x00/nowiki\\s*\x01', 'nowiki', 'block'], // <nowiki>...</nowiki>
Line 10,891 ⟶ 11,196:
['(^|\\n)([ \xa0]+)(\\S[^\\n]*)', 'preform', 'block'], // "preformatted" text line (leading space)
['(^|\\n)([
['\x00(br\\b)[^\x00\x01]*\x01', 'br', 'block'], // <br>
Line 10,994 ⟶ 11,299:
<tr> closes <td>
heading closes links
valid table markup: \n :{|
preformatted lines: space-only lines inside and as last allowed
*/
wikEd.HighlightSyntax = function(obj, noTimeOut) {
Line 11,058 ⟶ 11,364:
'secondlastOpenNodeFiltered': null,
'
'tableMode': wikEd.tableMode
Line 11,172 ⟶ 11,478:
}
// no wikicode in link target
if ( (parseObj.lastOpenTag == 'link') || (parseObj.lastOpenTag == 'template') || (parseObj.lastOpenTag == 'parameter') ) {
Line 11,178 ⟶ 11,484:
if ( (openNode != null) && (openNode.firstChild == null) ) {
// allow templates and template parameters, template and link separators, and newline
if (
( (tagClass == 'open') && (tag != '
( (tagClass == 'block') && (tag != 'newlinePipe') && (tag != 'doublePipe') && (tag != 'pipe') && (tag != 'headerSep') && (tag != 'headerParam') && (tag != 'newline') && (tag != 'preform') ) //// preform ok?
) {
Line 11,254 ⟶ 11,561:
switch(parseObj.lastOpenTagFiltered) {
case 'bold':
if (parseObj.
wikEd.HighlightBuildTree('bold', 'close', tagFrom, 3, parseObj);
wikEd.HighlightBuildTree('italic', 'close', tagFrom + 3, 2, parseObj);
Line 11,264 ⟶ 11,571:
break;
case 'italic':
if (parseObj.
wikEd.HighlightBuildTree('italic', 'close', tagFrom, 2, parseObj);
wikEd.HighlightBuildTree('bold', 'close', tagFrom + 2, 3, parseObj);
Line 11,563 ⟶ 11,870:
wikEd.HighlightBuildTree(htmlTag, tagClass, tagFrom, tagLength, parseObj);
}
else if (/^(table|tr|td|th|col|thead|tfoot|tbody|colgroup|caption|big|blockquote|center|code|del|div|font|ins|small|span|strike|tt|rb|rp|rt|ruby|nowiki|math|noinclude|includeonly|onlyinclude|gallery|categorytree|charinsert|hiero|imagemap|inputbox|poem
wikEd.HighlightBuildTree(htmlTag, tagClass, tagFrom, tagLength, parseObj);
}
Line 12,007 ⟶ 12,314:
nodeNo = parseObj.tree[nodeNo].parent;
}
}
nodeNo = node.parent;
node.type = 'error';
node.left = wikEd.config.text.wikEdErrorNoClose;
node.parent = null;
}
wikEd.HighlightGetLevel(parseObj);
}
}
}
Line 12,157 ⟶ 12,462:
parseObj.lastOpenTagFiltered = null;
parseObj.secondlastOpenNodeFiltered = null;
parseObj.
if ( (parseObj.lastOpenNode == 0) || (parseObj.lastOpenNode == null) ) {
return;
Line 12,180 ⟶ 12,486:
if ( (node.tag != 'p') && (node.tag != 'spare') ) {
parseObj.secondlastOpenNodeFiltered = nodeNo;
parseObj.
break;
}
Line 12,247 ⟶ 12,553:
// detect interlink and namespace
// 12 inter: 2 1 34 : 4 5 namespace
var regExpLink = /^\s*(([\w\- ]+)\:\s*)?((\:\s*)?([^\:\|\[\]\{\}\n\t]*\s*\:\s*))?([^\|\n]+?)\s*(\|((.|\n)*))?\s*$/gi;
regExpLink.lastIndex = 0;
Line 12,289 ⟶ 12,595:
}
}
article = regExpMatch[6] || '';
param = regExpMatch[8] || '';
Line 12,339 ⟶ 12,645:
else {
var file = regExpMatch[1] + ':' + regExpMatch[2];
var filePlain = regExpMatch[1] + ':' + regExpMatch[2].replace(/<
filePlain = filePlain.replace(/ /g,'_');
Line 12,410 ⟶ 12,716:
// detect parser variables and functions, might slow main regexp down
var regExpMatch;
var
if ( (regExpMatch = regExpTempl.exec(innerPlain)) != null) {
Line 12,432 ⟶ 12,738:
template = regExpMatch[6] || '';
param = regExpMatch[8] || '';
var parserVar = ns.substr(0, ns.length - 1);
// {{VARIABLE}}
if (
if ( (template != '') && (ns == '') && (param == '') ) {
var regExpParserVar = new RegExp('^(' + wikEd.parserVariables + '|' + wikEd.parserVariablesR + ')$', '');
if ( (
wikEd.HighlightBuildTree('templateParserFunct', 'block', tagFrom + 2, innerPlain.length, parseObj);
}
Line 12,445 ⟶ 12,752:
// {{VARIABLE:R}}
if (
if ( (ns != '') && (template == 'R') ) {
var regExpParserVar = new RegExp('^(' + wikEd.parserVariablesR + ')$', '');
if ( (
wikEd.HighlightBuildTree('templateParserFunct', 'block', tagFrom + 2, innerPlain.indexOf(':') + 1, parseObj);
}
Line 12,456 ⟶ 12,763:
// {{FUNCTION:param|R}}
if (
if ( (ns != '') && ( (param == '') || (param == 'R') ) ) {
var regExpParserVar = new RegExp('^(' + wikEd.parserFunctionsR + ')$', '');
if ( (regExpMatch = regExpParserVar.exec(
wikEd.HighlightBuildTree('templateParserFunct', 'block', tagFrom + 2, innerPlain.indexOf(':') + 1, parseObj);
}
Line 12,467 ⟶ 12,774:
// {{function:param|param}}
if (
if (ns != '') {
var regExpParserVar = new RegExp('^(' + wikEd.parserFunctions + ')$', 'i');
if ( (regExpMatch = regExpParserVar.exec(
wikEd.HighlightBuildTree('templateParserFunct', 'block', tagFrom + 2, innerPlain.indexOf(':') + 1, parseObj);
}
Line 12,478 ⟶ 12,785:
// {{#function:param|param}}
if (
if (ns != '') {
var regExpParserVar = new RegExp('^(#(' + wikEd.parserFunctionsHash + '))$', 'i');
if ( (regExpMatch = regExpParserVar.exec(
// linkify wikibase template (wikidata)
// work in progress!
if (parserVar = '#property') {
var item = wikEd.wbRepoItem;
var regExpMatchItem;
if ( (regExpMatchItem = /(^|\|)id=([^|]+)/.exec(param)) != null) {
item = regExpMatchItem[2];
}
else if ( (regExpMatchItem = /(^|\|)of=([^|]+)/.exec(param)) != null) {
item = 'Special:ItemByTitle/' + wikEd.wbInterLang + '/' + regExpMatchItem[2];
}
if (item == '') {
var url = encodeURI(wikEd.wikiGlobals.wgTitle);
url = url.replace(/ /g, '_');
url = url.replace(/"/g, '%22');
url = url.replace(/'/g, '%27');
url = url.replace(/#/g, '%23');
item = 'Special:ItemByTitle/' + wikEd.wbInterLang + '/' + url;
}
if (item != '') {
follow = ' ' + wikEd.HighlightLinkify('', '', wikEd.wbRepoUrl + item);
}
}
isParserVar = true;
wikEd.HighlightBuildTree('templateParserFunct', 'block', tagFrom + 2, innerPlain.indexOf(':') + 1, parseObj);
}
Line 12,489 ⟶ 12,820:
// highlight template
if (
// highlight modifier
Line 12,516 ⟶ 12,847:
}
var hideClass = 'wikEdTempl';
if ( (template != '') && (
if (wikEd.refHide == true) {
Line 12,575 ⟶ 12,906:
case 'noinclude':
case 'includeonly':
case 'onlyinclude':
case 'gallery':
case 'categorytree':
Line 12,582 ⟶ 12,914:
case 'inputbox':
case 'poem':
case 'syntaxhighlight':
case 'source':
case 'timeline':
insertLeft = '<span class="wikEdHtml"><span class="wikEdHtmlTag">';
Line 12,626 ⟶ 12,958:
}
else if ( (regExpMatch = /(\bname\s*=\s*)(\w+)/i.exec(tagMatch)) != null) {
refName = regExpMatch[2]
wikEd.HighlightBuildTree('refName', 'block', tagFrom + regExpMatch.index + regExpMatch[1].length, regExpMatch[2].length, parseObj);
}
Line 12,763 ⟶ 13,095:
case 'noinclude':
case 'includeonly':
case 'onlyinclude':
case 'gallery':
case 'categorytree':
Line 12,770 ⟶ 13,103:
case 'inputbox':
case 'poem':
case 'syntaxhighlight':
case 'source':
case 'timeline':
insertLeft = '<span class="wikEdHtmlTag">';
Line 13,270 ⟶ 13,603:
// remove highlighting code
linkPrefix = linkPrefix.replace(/<
linkTitle = linkTitle.replace(/<
// remove control chars
Line 13,395 ⟶ 13,728:
// remove leading spaces in lines
obj.html = obj.html.replace(/(<br\b[^>]*>)[\n\r]* *()/g, '$1');
// textify so that no html formatting is submitted
Line 13,524 ⟶ 13,857:
}
// trap enter in find/replace input elements
if ( (event.type == 'keydown') && (event.keyCode == 13) ) {
if (event.target.id == 'wikEdFindText') {
event.preventDefault();
wikEd.EditButton(null, 'wikEdFindPrev');
}
else if (event.
wikEd.EditButton(null, 'wikEdFindAll');
}
else {
}
}
else if (event.target.id == 'wikEdReplaceText') {
event.preventDefault();
event.stopPropagation();
if (event.shiftKey == true) {
wikEd.EditButton(null, 'wikEdReplacePrev');
}
else if (event.ctrlKey == true) {
wikEd.EditButton(null, 'wikEdReplaceAll');
}
else {
wikEd.EditButton(null, 'wikEdReplaceNext');
}
}
}
eval(wikEd.editButtonHandler[buttonId]);
return;
}
}
Line 13,668 ⟶ 13,998:
return;
};
//
// wikEd.DebugInfo: click handler for ctrl-click of logo buttons, pastes debug info into edit field or popup; shift-ctrl-click: extended info with resource loader modules
//
wikEd.DebugInfo = function(event) {
// event compatibility fixes
event = wikEd.EventWrapper(event, this);
if (event == null) {
return;
}
// ctrl-click
if (event.ctrlKey != true) {
return;
}
// get debug infos
var debug = wikEd.GetDebugInfo(event.shiftKey);
debug = debug.replace(/(^|\n(?=.))/g, '$1* ');
debug = '== wikEd bug report ==\n\n' + debug;
debug += '* Error console: ____ (Firefox: Tools → Web Developer → Error console; push clear and reload the page. Chrome: Control button → Tools → JavaScript console. Copy and paste error messages related to wikEd.js)\n';
debug += '* Problem description: ____ (Please be as specific as possible about what is wrong, including when it happens, what happens, what is broken, and what still works)\n';
debug += '* Steps to reproduce: ____ (Please include what happens at each step. Your problems cannot be fixed without reproducing them first!)\n';
// print to iframe, textarea, debug area, or alert
if (event.target == wikEd.logo) {
alert(debug);
}
else if (wikEd.useWikEd == true) {
debug = ('\n' + debug).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\n/g, '<br>');
wikEd.FrameExecCommand('inserthtml', debug);
}
else if (wikEd.textarea != null) {
wikEd.textarea.value += '\n' + debug;
}
else {
wikEd.Debug(debug, undefined, true);
}
return;
}
//
// wikEd.GetDebugInfo: compiles debug info into string
//
wikEd.GetDebugInfo = function(extended) {
var loader = ''
var mediawiki = '';
var gadgets = '';
var scripts = '';
// cycle through script urls
var pageScripts = document.getElementsByTagName('script');
for (var i = 0; i < pageScripts.length; i ++) {
var src = pageScripts[i].src;
if (src != '') {
// resource loader modules
var regExpMatch = /load.php\?(|.*?&)modules=(.*?)(&|$)/.exec(src);
if (regExpMatch != null) {
loader += decodeURIComponent(regExpMatch[2]).replace(/\|/g, '; ') + '; ';
}
// mediawiki: scripts
else {
var regExpMatch = /index.php\?(|.*?&)title=(.*?)(&|$)/.exec(src);
if (regExpMatch != null) {
var script = regExpMatch[2];
if (/^MediaWiki:Gadget/.test(script) == true) {
gadgets += script.replace(/^MediaWiki:/, '') + ', ';
}
else if (/^MediaWiki:/.test(script) == true) {
mediawiki += script.replace(/^MediaWiki:/, '') + ', ';
}
else {
scripts += script + ', ';
}
}
// other scripts
else {
var regExpScript = new RegExp(wikEd.wikiGlobals.wgServer + '(' + wikEd.wikiGlobals.wgScriptPath + ')?');
scripts += src.replace(regExpScript, '').replace(/\?.*/, '') + ', ';
}
}
}
}
// get date
var date = new Date();
var time = (date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate() + ' ' + date.getUTCHours() + ':' + date.getUTCMinutes() + ':' + date.getUTCSeconds() + ' UTC').replace(/\b(\d)\b/g, '0$1');
// get user js pages
var userPage = wikEd.wikiGlobals.wgServer + wikEd.wikiGlobals.wgArticlePath.replace(/\$1/, wikEd.wikiGlobals.wgFormattedNamespaces[2] + wikEd.wikiGlobals.wgUserName);
var protocol = document.___location.href.replace(/\/\/.*/, '');
if (/^\/\//.test(userPage) == true) {
userPage = protocol + userPage;
}
var skinJs = userPage + '/' + wikEd.wikiGlobals.skin + '.js';
var commonJs = userPage + '/common.js';
// remove trailing separators
loader = loader.replace(/; $/, '');
mediawiki = mediawiki.replace(/, $/, '');
gadgets = gadgets.replace(/, $/, '');
scripts = scripts.replace(/, $/, '');
var debug = '';
debug += 'Date: ' + time + '\n';
debug += 'wikEd version: ' + wikEd.programVersion + wikEd.installationType + ' (' + wikEd.programDate + ')\n';
debug += 'Browser: ' + navigator.userAgent + ' (' + navigator.platform + ')\n';
debug += 'Skin: ' + wikEd.wikiGlobals.skin + ' (detected: ' + wikEd.skin + ')\n';
debug += 'MediaWiki: ' + wikEd.wikiGlobals.wgVersion + '\n';
debug += 'Gadgets: ' + gadgets + '\n';
debug += 'MediaWiki scripts: ' + mediawiki + '\n';
debug += 'Scripts: ' + scripts + '\n';
if (extended == true) {
debug += 'Loader: ' + loader + '\n';
}
debug += 'URL: ' + window.___location.href + '\n';
debug += 'User/skin.js: ' + skinJs + '\n';
debug += 'User/common.js: ' + commonJs + '\n';
return(debug);
}
Line 13,674 ⟶ 14,134:
//
wikEd.MainSwitch = function(event) {
// event compatibility fixes
event = wikEd.EventWrapper(event, this);
if (event == null) {
return;
}
// ctrl-click for debug info
if (event.ctrlKey == true) {
return;
}
// disable function if browser is incompatible
Line 13,907 ⟶ 14,378:
//
// wikEd.ResizeComboInput: set the size of
//
Line 13,919 ⟶ 14,388:
}
// short names
var input = wikEd.inputElement[field];
//
var selectInnerHTML = select.innerHTML;
select.innerHTML = '';
// set measuring styles
select.style.fontFamily = 'sans-serif';
input.style.margin = '0';
select.style.margin = '0';
select.style.width = 'auto';
// get button width from small empty select box
var inputWidth = input.offsetWidth;
var selectWidth = select.offsetWidth;
var selectBorder = parseInt(wikEd.GetStyle(select, 'borderTopWidth'), 10);
var buttonWidth = selectWidth - selectBorder - 8;
//
select.style.margin = null;
input.style.fontFamily = null;
select.style.fontFamily = null;
//
if (inputWidth + buttonWidth > 150) {
input.style.width = (inputWidth - buttonWidth) + 'px';
select.style.width = inputWidth + 'px';
}
// otherwise increase select width
else {
}
//
select.innerHTML = selectInnerHTML;
return;
};
Line 14,079 ⟶ 14,504:
summary = summary.replace(/[, ]+$/, '');
if (summary != '') {
if
summary += ' ';
}
else if
summary += ' ';
}
else {
var regExp = new RegExp('^[' + wikEd.letters + '_()"\'+\\-]', '');
if (
summary += ' ';
}
Line 14,256 ⟶ 14,681:
var plain = wikEd.frameBody.innerHTML;
plain = plain.replace(/<br\b[^>]*>/g, '\n');
plain = plain.replace(/<
plain = plain.replace(/ /g, '\xa0');
plain = plain.replace(/>/g, '>');
Line 14,534 ⟶ 14,959:
if (wikEd.webStorage == null) {
wikEd.webStorage = false;
// https://bugzilla.mozilla.org/show_bug.cgi?id=748620
try {
if (typeof(window.localStorage) == 'object') {
// web storage does not persist between local html page loads in firefox
if (/^file:\/\//.test(wikEd.pageOrigin) == false) {
wikEd.webStorage = true;
}
}
}
catch(error) {
}
}
Line 14,844 ⟶ 15,275:
case childNode.TEXT_NODE:
var value = childNode.nodeValue;
// newline handling important for pasted page content
if (currentNode.nodeName != 'PRE') {
value = value.replace(/\n/g, ' ');
}
// plain array contains & < > instead of & < >
obj.plainArray.push(value);
obj.plainNode.push(childNode);
obj.plainStart.push(obj.plain.length);
Line 14,851 ⟶ 15,288:
value = value.replace(/</g, '<');
value = value.replace(/>/g, '>');
if (currentNode.nodeName == 'PRE') {
obj.html += value.replace(/\n/g, '<br>');
}
else {
obj.html += value;
}
obj.plain += value;
break;
Line 14,909 ⟶ 15,352:
// recurse into child nodes
if ( (currentNode.nodeType == currentNode.ELEMENT_NODE) && (/wikEd\.scroll(Before|After)/.test(currentNode.className) != true) ) {
wikEd.GetNextTextNodeChilds(obj, currentNode, currentLevel - 1);
if (obj.foundNode != null) {
Line 14,959 ⟶ 15,402:
// recurse into child nodes
if ( (currentNode.nodeType == currentNode.ELEMENT_NODE) && (/wikEd\.scroll(Before|After)/.test(currentNode.className) != true) ) {
wikEd.GetNextTextNodeChilds(obj, currentNode, currentLevel - 1);
if (obj.foundNode != null) {
Line 15,245 ⟶ 15,688:
else {
// allow ajax request from local copy for testing no longer working, see https://bugzilla.mozilla.org/show_bug.cgi?id=546848
// create new XMLHttpRequest object
Line 15,266 ⟶ 15,704:
// IE 5.5
catch(
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
}
catch(
return;
}
Line 15,298 ⟶ 15,736:
request.send(formData);
}
catch(
return;
}
Line 15,882 ⟶ 16,320:
//
// wikEd.ConsoleLog: log message to console
// mw.log no longer works
wikEd.ConsoleLog = function(msg) {
msg = msg.replace(/\n/g, '\\n');
msg = msg.replace(/([\'\"\\])/g, '\\$1');
setTimeout('throw new Error(\'wikEd.ConsoleLog: ' + msg + '\')', 0);
return;
};
Line 16,326 ⟶ 16,759:
return;
};
// call startup
wikEd.Startup();
// </
|