/// User:PerfektesChaos/js/localEdit/d.js
/// 2018-08-24 [email protected]
// Edit local file in Wiki environment, collaborate with browser add-on
// ResourceLoader: compatible;
// dependencies: user, mediawiki.user, mediawiki.util
/// Fingerprint: #0#0#
/// @license GPL [//www.mediawiki.org/w/COPYING] (+GFDL, LGPL, CC-BY-SA)
/// <nowiki>
/* global window:false */
/* jshint forin:false,
bitwise:true, curly:true, eqeqeq:true, latedef:true,
laxbreak:true,
nocomma:true, strict:true, undef:true, unused:true */
( function ( mw, $ ) {
"use strict";
var vsn = -0.3,
WLE;
if ( typeof mw.libs.localEdit !== "object" ||
! mw.libs.localEdit ) {
mw.libs.localEdit = { };
}
WLE = mw.libs.localEdit;
WLE.vsn = vsn;
WLE.type = "localEdit";
WLE.scan = "*.txt; *.text; *.wiki";
WLE.suffix = "txt";
if ( ! WLE.lang ) {
WLE.lang = { };
}
if ( ! WLE.pageImport ) {
WLE.pageImport = { };
}
// User options:
// .scan pattern for text file selection
// .suffix default file extension
// .mid number of minutes for scheduled autosaves
if ( typeof WLE.debugging !== "object" ) {
WLE.debugging = { loud: true,
say: "localEdit" };
}
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*/
// Requires: JavaScript 1.3 (String.replace)
// MediaWiki 1.18 (mw.libs, jQuery core)
WLE.lang.texts = {
// 2012-12-11 [email protected]
"BrowserType": {"en": "Browser type",
"de": "Browser-Typ"},
// "Abort": {"en": "Abort",
// "de": "Abbruch"},
"AddOn": {"en": "Add-on",
"de": "Add-On"},
"ConfirmLosses": {"en": "Really loose edits?",
"de": "Wirklich Änderungen verlieren?"},
"DirBase": {"en": "Base directory (local)",
"de": "Stammverzeichnis (lokal)"},
"DirSub": {"en": "Sub directory for project",
"de": "Unterverzeichnis für Projekt"},
"Edit": {"en": "Start editing local file",
"de": "Bearbeitung lokaler Dateien beginnen"},
// "Exit": {"en": "Exit",
// "de": "Exit"},
"FileExtFilter": {"en": "File extensions (Filter)",
"de": "Datei-Erweiterungen (Filter)"},
"FileExtNew": {"en": "File extension (create)",
"de": "Datei-Erweiterung (Neuanlage)"},
"HeadlineConfig": {"en": "Personal options",
"de": "Persönliche Einstellungen"},
"ImportPage": {"en": "Import from page",
"de": "Seitentext importieren"},
"ImportPageAbort": {"en": "Abort",
"de": "Abbrechen"},
"ImportPageClear": {"en": "Empty edit area first",
"de": "Erst Bearbeitungsfeld leeren"},
"ImportPageFire": {"en": "Import",
"de": "Importieren"},
"installed-false": {"en": "Not active",
"de": "Nicht aktiv"},
"installed-true": {"en": "Active",
"de": "Aktiviert"},
"NamePage": {"en": "Page name:",
"de": "Seitenname:"},
"OldID": {"en": "Optional revision",
"de": "Optional/alternativ Version"},
"OpenFile": {"en": "Open file",
"de": "Datei öffnen"},
"SaveFile": {"en": "Save file",
"de": "Datei speichern"},
"SaveFileAs": {"en": "Save file as",
"de": "Datei speichern unter"},
"URLform": {"en": "URL format",
"de": "URL-Format"},
"URLformfix": {"en": "Fix it",
"de": "Verbessern"}
}; // .lang.texts
WLE.lang.trans = {
// 2012-11-30 [email protected]
"de" : "de",
"de-at" : "de",
"de-ch" : "de",
"de-formal" : "de",
"als" : "de",
"bar" : "de",
"dsb" : "de",
"frr" : "de",
"gsw" : "de",
"hsb" : "de",
"ksh" : "de",
"lb" : "de",
"nds" : "de",
"pdc" : "de",
"pdt" : "de",
"pfl" : "de",
"sli" : "de",
"stq" : "de",
"vmf" : "de"
}; // .lang.trans
WLE.pageImport.fault = function () {
// Postprocess after ajax request failure
// Uses:
// .pageImport.flop()
// Remark: Used as event handler -- 'this' is not WLE
// 2012-12-12 [email protected]
WLE.pageImport.flop();
}; // .pageImport.fault()
WLE.lang.favorite = function () {
// Guess user language
// Uses:
// this
// > .lang.trans
// >< .lang.slang
// mw.config.get()
// 2012-11-30 [email protected]
var s;
if ( ! this.slang ) {
s = mw.config.get( "wgUserLanguage" ).toLowerCase();
s = this.trans[ s ];
if ( s ) {
this.slang = s;
} else {
this.slang = "en";
}
}
}; // .lang.favorite()
WLE.lang.feature = function ( apply ) {
// Wrap message text access for user language
// Precondition:
// apply -- text keyword
// Postcondition:
// Return text closest to user language
// Uses:
// this
// > .lang.slang
// > .lang.texts
// .lang.favorite()
// Remark: To be replaced
// if one day ResourceLoader3 gives access to
// gadget@translatewiki
// 2012-11-30 [email protected]
var e, r;
if ( ! this.slang ) {
this.favorite();
}
e = this.texts[ apply ];
if ( e ) {
r = e[ this.slang ];
if ( ! r ) {
r = e.en;
if ( ! r ) {
r = "???" + apply + "???";
}
}
} else {
r = "***" + apply + "***";
}
return r;
}; // .lang.feature()
WLE.pageImport.fiat = function () {
// Perform "ImportPage" action
// Uses:
// this
// > .pageImport.$throbber
// < .pageImport.source
// mw.loader.using()
// (.pageImport.find)
// 2012-12-12 [email protected]
this.$throbber.attr( "style", "display:block;float:right;" );
mw.loader.using( [ "mediawiki.api" ],
this.find );
}; // .pageImport.fiat()
WLE.pageImport.fill = function () {
// Content of name or revID field may have been changed
// Uses:
// > .pageImport.$name
// > .pageImport.$vsn
// > .pageImport.$fire
// >< .reTrim
// >< .reNum
// Remark: Used as event handler -- 'this' is not WLE.pageImport
// 2012-12-12 [email protected]
var g,
l = true,
s = WLE.pageImport.$name.val();
if ( ! WLE.reTrim ) {
WLE.reTrim = new RegExp( "^[ \t]*(.+[^ \t])?[ \t]*$", "" );
}
if ( s ) {
g = WLE.reTrim.exec( s );
if ( g ) {
s = g[ 1 ];
WLE.pageImport.$name.val( s );
l = false;
}
}
s = WLE.pageImport.$vsn.val();
if ( s ) {
g = WLE.reTrim.exec( s );
if ( g ) {
s = g[ 1 ];
WLE.pageImport.$vsn.val( s );
if ( ! WLE.reNum ) {
WLE.reNum = new RegExp( "^[1-9][0-9]*$", "" );
}
l = (! WLE.reNum.test( s ) );
}
}
WLE.pageImport.$fire.prop( "disabled", l );
}; // .pageImport.fill()
WLE.pageImport.find = function () {
// Start API request
// Uses:
// > mw.Api
// > .pageImport.$vsn
// > .pageImport.$name
// >< .pageImport.reSpU
// (.pageImport.found)
// (.pageImport.fault)
// Remark: Used as event handler -- 'this' is not WLE.pageImport
// 2012-12-12 [email protected]
var q = new mw.Api(),
s = WLE.pageImport.$vsn.val(),
w = { action: "query",
prop: "revisions",
rvlimit: "1",
rvprop: "content" };
if ( s ) {
w.revids = s;
} else {
if ( ! WLE.pageImport.reSpU ) {
WLE.pageImport.reSpU = new RegExp( " ", "g" );
}
s = WLE.pageImport.$name.val();
s = s.replace( WLE.pageImport.reSpU, "_" );
w.titles = s;
}
q.get( w ).done( WLE.pageImport.found )
.fail( WLE.pageImport.fault );
}; // .pageImport.find()
WLE.pageImport.found = function ( arrived ) {
// Postprocess page content after ajax request
// Precondition:
// arrived -- JSON result of ajax query
// Uses:
// < .suggest
// .feed()
// Remark: Used as event handler -- 'this' is not WLE.pageImport
// 2012-12-12 [email protected]
var pid,
q = ( typeof arrived === "object" );
if ( q ) {
q = arrived.query;
if ( q ) {
q = q.pages;
if ( q ) {
for ( pid in q ) {
q = q[ pid ];
if ( q ) {
WLE.feed( q.revisions[ 0 ][ "*" ] );
WLE.suggest = q.title;
}
break; // for pid
} // for pid in q
}
}
}
WLE.pageImport.flop();
}; // .pageImport.found()
WLE.pageImport.flop = function () {
// Remove "ImportPage" form
// Uses:
// this
// > .pageImport.$div
// 2012-12-12 [email protected]
this.$div.attr( "style", "display:none" );
}; // .pageImport.flop()
WLE.pageImport.form = function () {
// Button "ImportPage" has been pressed; build form
// Uses:
// this
// > .$editform
// > .$textarea
// >< .reWS
// >< .pageImport.$div
// >< .pageImport.$form
// >< .pageImport.$throbber
// < .pageImport.$name
// < .pageImport.$vsn
// < .pageImport.$fire
// jQuery().find()
// .lang.feature()
// .forward()
// .pageImport.fill()
// 2012-12-12 [email protected]
var launch = true,
s = WLE.feed( false );
if ( s ) {
if ( ! WLE.reWS ) {
WLE.reWS = new RegExp( "[^ \t\n]", "" );
}
launch = ( ! WLE.reWS.test( s ) );
}
if ( launch ) {
this.$div = WLE.$editform.find( "#LocalEditPageImportDiv" );
if ( this.$div.length ) {
this.$form = this.$div.find( "#LocalEditPageImportForm" );
if ( ! this.$form.length ) {
s = "<span id='LocalEditPageImportForm'>"
+ "<label for='pageImportName'>"
+ WLE.lang.feature( "NamePage" )
+ "</label> "
+ "<input name='pageImportName'"
+ " id='pageImportName'"
+ " type='text'"
+ " size='66' />"
+ " "
+ WLE.forward( "ImportPageFire", false )
+ "<br />"
+ "<label for='pageImportVsn'>"
+ WLE.lang.feature( "OldID" )
+ "</label> "
+ " <code>oldid=</code>"
+ " <input name='pageImportVsn'"
+ " type='text'"
+ " size='15' />"
+ "<br />"
+ WLE.forward( "ImportPageAbort", true )
+ "</span>";
this.$form = $( s );
this.$div.append( this.$form );
s = "//upload.wikimedia.org/"
+ "wikipedia/commons"
+ "/d/de/Ajax-loader.gif";
s = "<img name='pageImportThrobber'"
+ " src='" + s + "' />";
this.$throbber = $( s );
this.$div.prepend( this.$throbber );
this.$name = this.$form.find( "#pageImportName" );
this.$name.mouseleave( this.fill );
this.$name.blur( this.fill );
this.$vsn = this.$form.find( "#pageImportVsn" );
this.$vsn.mouseleave( this.fill );
this.$vsn.blur( this.fill );
this.$fire = this.$div.find( "#WLE_select_"
+ "ImportPageFire" );
}
this.$form.attr( "style", "display:block" );
this.$throbber.attr( "style", "display:none" );
this.$div.attr( "style",
"border: solid 3px #0000FF;" +
"padding: 0.4em;" );
this.fill();
}
} else {
window.alert( WLE.lang.feature( "ImportPageClear" ) );
}
}; // .pageImport.form()
WLE.face = function () {
// Write on static page table with content
// Uses:
// document
// > .vsn
// > .opt
// < .specific
// < .scan
// < .suffix
// .flat()
// jQuery()
// .first()
// jQuery.client()
// jQuery().find()
// mw.config.get()
// .lang.feature()
// .fix()
// .factory()
// .folder()
// jQuery().prepend()
// Remark: Used as event handler -- 'this' is not WLE
// 2013-01-12 [email protected]
var icon = -1,
s,
scan = "",
start = "",
suffix = "",
system = "",
$div, $edit, $table;
WLE.flat( false );
$div = $( "<div id='LocalEditDiv' />" );
WLE.first( $div );
if ( $.client ) {
system = $.client.profile().layout;
if ( "gecko".indexOf( system ) >= 0 ) {
icon = 1;
}
}
if ( WLE.opt && typeof WLE.opt === "object" ) {
if ( typeof WLE.opt.scan === "string" ) {
WLE.scan = WLE.opt.scan;
}
if ( typeof WLE.opt.suffix === "string" ) {
WLE.suffix = WLE.opt.suffix;
}
}
$edit = $( window.document ).find( "#ca-edit" );
if ( $edit.length ) {
$edit = $edit.find( "a" );
if ( $edit.length ) {
start = $edit.attr( "href" );
if ( start ) {
start = start.replace( /\x27/g, "'")
.replace( /</g, "<");
start = "<a class='WLE.buttons'"
+ " id='WLE.startEdit'"
+ " style='display:none'"
+ " href='" + start + "'>"
+ WLE.lang.feature( "Edit" )
+ "</a>";
}
}
}
WLE.specific = mw.config.get( "wgDBname" ) + "." +
mw.config.get( "wgUserName" );
s = "<table id='LocalEditTable' "
+ "class='wikitable'>\n"
+ "<caption>LocalEdit " + WLE.vsn + "</caption>\n"
+ "<tbody>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "BrowserType" )
+ "</td>\n<td>"
+ system
+ "</td>\n<td>"
+ WLE.factory( icon, "WLE.client" )
+ "</td>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "URLform" )
+ "</td>\n<td>"
+ WLE.fix( false )
+ "</td>\n<td>"
+ WLE.factory( WLE.fix( true ), "WLE.URL" )
+ "</td>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "AddOn" )
+ "</td>\n<td>"
+ "<span id='WLE.inactive'>"
+ WLE.lang.feature( "installed-false" ) + "</span>"
+ "<span id='WLE.active' style='display:none'>"
+ WLE.lang.feature( "installed-true" ) + "</span>"
+ "</td>\n<td>"
+ WLE.factory( -1, "WLE.stateIMG" )
+ "</td>\n</tr>\n"
+ "<tr>\n<th colspan='3'>"
+ WLE.lang.feature( "HeadlineConfig" )
+ "</th>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "DirBase" )
+ "</td>\n<td>"
+ "<span id='WLE.dirbase'></span>"
+ "</td>\n<td>"
+ WLE.folder( "DirBase" )
+ "</td>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "DirSub" )
+ "</td>\n<td>"
+ "<span id='WLE.specific' style='display:none'>"
+ WLE.specific + "</span>"
+ "<span id='WLE.dirsub' />"
+ "</td>\n<td>"
+ WLE.folder( "DirSub" )
+ "</td>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "FileExtFilter" )
+ "</td>\n<td>"
+ "<span id='WLE.filextScan'>" + scan + "</span>"
+ "</td>\n<td> </td>\n</tr>\n"
+ "<tr>\n<td>"
+ WLE.lang.feature( "FileExtNew" )
+ "</td>\n<td>"
+ "<span id='WLE.filextNew'>" + suffix + "</span>"
+ "</td>\n<td> </td>\n</tr>\n"
+ "<tr>\n<th colspan='2'>" + start + "</th>\n</tr>\n"
+ "</tbody>\n</table>";
$table = $( s );
$div.prepend( $table );
}; // .face()
WLE.factory = function ( access, assign ) {
// Retrieve IMG element
// Precondition:
// access -- image identifier
// -1 Red x
// 0 Neutral
// +1 Yes check
// assign -- element identifier
// Postcondition:
// Return html string
// 2012-12-11 [email protected]
var pictures = [ [ "Red_x", "ba" ],
[ "Neutral", "bd" ],
[ "Yes_check", "fb" ] ],
picture = pictures[ access + 1 ],
symbol = picture[ 0 ],
sucks = picture[ 1 ];
return "<img src='"
+ "//upload.wikimedia.org/wikipedia/commons/thumb/"
+ sucks.substr( 0, 1 ) + "/" + sucks + "/"
+ symbol + ".svg/16px-" + symbol + ".svg.png"
+ "' id='" + assign + "' />";
}; // .factory()
WLE.feed = function ( apply ) {
// Retrieve content of text area
// Precondition:
// document.ready
// apply -- false: retrieve content
// string: insert
// true: just update
// Postcondition:
// Return textarea string; or false
// Uses:
// this
// > .$textarea
// > wikEd
// > mw.util.$content
// jQuery().val()
// .wikEd()
// wikEd.UpdateFrame()
// wikEd.UpdateTextarea()
// 2013-09-01 [email protected]
var r = false;
if ( this.$textarea ) { // editing
if ( typeof apply === "string" ) {
this.$textarea.val( apply );
r = apply;
}
if ( this.wikEd()
&& window.wikEd.turnedOn
&& window.wikEd.useWikEd
&& window.wikEd.UpdateFrame
&& window.wikEd.UpdateTextarea ) {
if ( apply ) {
window.wikEd.UpdateFrame();
} else {
window.wikEd.UpdateTextarea();
}
}
if ( ! apply ) {
r = this.$textarea.val();
this.suggest = false;
}
} // editing
return r;
}; // .feed()
WLE.fetch = function ( action, add ) {
// Send event to extension after button action
// Precondition:
// action -- identifier
// add -- Array with additional information pairs, or false
// Postcondition:
// Event dispatched to privileged chrome:// level.
// Uses:
// document
// DOM.getElementById()
// DOM.createEvent()
// DOM.initEvent()
// DOM.setAttribute()
// DOM.dispatchEvent()
// 2012-11-30 [email protected]
var i, n,
elemt = window.document.getElementById( "LocalEditDiv" ),
event = window.document.createEvent( "Events" );
event.initEvent( "wikilocaleditButton", true, false );
elemt.setAttribute( "action", action );
if ( add ) {
n = add.length;
for ( i = 0; i < n; i++ ) {
elemt.setAttribute( add[ i ][ 0 ], add[ i ][ 1 ] );
} // for i
}
elemt.dispatchEvent( event );
}; // .fetch()
WLE.filled = function () {
// Hook function if content of text area changed
// Uses:
// .feed()
// Remark: Used as event handler -- 'this' is not WLE
// 2012-12-14 [email protected]
WLE.feed( true );
}; // .filled()
WLE.fire = function () {
// Start page processing; check whether situation is interesting
// Uses:
// mw.config.get()
// mw.loader.using()
// .form()
// DOM.addEventListener()
// (.face)
// Remark: Used as event handler -- 'this' is not WLE
// 2012-12-12 [email protected]
var s = mw.config.get( "wgAction" );
switch ( s ) {
case "view" :
mw.loader.using( [ "user",
"mediawiki.user",
"mediawiki.util",
"jquery.client" ],
WLE.face );
break;
case "edit" :
case "submit" :
WLE.form( s );
window.document.addEventListener( "wikilocaleditFilled",
WLE.filled,
true );
/*
window.document.addEventListener( "wikilocaleditSaved",
WLE.flushed,
true );
*/
break;
} // switch wgAction
}; // .fire()
WLE.fired = function ( action ) {
// Execute button action
// Precondition:
// action -- identifier
// Postcondition:
// Local processing and event dispatched to privileged level.
// Uses:
// > mw.util.$content
// > .scan
// > .suffix
// >< .specific
// .pageImport.form()
// .pageImport.flop()
// .pageImport.fiat()
// .feed()
// mw.config.get()
// .fetch()
// Remark: Used as event handler -- 'this' is not WLE
// 2012-12-12 [email protected]
var cb, low,
plus = [ ];
switch ( action ) {
case "ImportPage" :
WLE.pageImport.form();
break;
case "ImportPageAbort" :
WLE.pageImport.flop();
break;
case "ImportPageFire" :
WLE.pageImport.fiat();
break;
case "OpenFile" :
WLE.feed( false );
low = false;
cb = mw.util.$content.find( "#ANSI" );
if ( cb.length ) {
low = cb.prop( "checked" );
}
plus.push( [ "lowcode", low ] );
case "SaveFileAs" :
if ( WLE.scan ) {
plus.push( [ "scan", WLE.scan ] );
}
if ( WLE.suffix ) {
plus.push( [ "suffix", WLE.suffix ] );
}
if ( WLE.suggest ) {
plus.push( [ "suggest", WLE.suggest ] );
}
case "DirSub" : // fall through
if ( ! WLE.specific ) {
WLE.specific = mw.config.get( "wgDBname" ) + "." +
mw.config.get( "wgUserName" );
}
plus.push( [ "specific", WLE.specific ] );
case "Abort" : // fall through
case "SaveFile" :
switch ( action ) {
case "Abort" :
case "SaveFile" :
case "SaveFileAs" :
WLE.feed( false );
break;
} // switch wgAction
break;
} // switch wgAction
if ( ! plus.length ) {
plus = false;
}
WLE.fetch( action, plus );
}; // .fired()
WLE.first = function ( $assign ) {
// Detect high level page content element and place element there
// Precondition:
// $assign -- element
// Postcondition:
// Local processing and event dispatched to privileged level.
// Uses:
// this
// > mw.util.$content
// >< .$top
// jQuery().prepend()
// jQuery().before()
// 2012-11-30 [email protected]
this.$top = $( "#mw-content-text" );
if ( this.$top.length ) {
this.$top.prepend( $assign );
} else {
this.$top = $( "#bodyContent" );
if ( ! this.$top.length ) {
this.$top = $( "#article" );
if ( ! this.$top.length ) {
this.$top = $( "#content" );
if ( ! this.$top.length ) {
this.$top = mw.util.$content;
}
}
}
this.$top.before( $assign );
}
}; // .first()
WLE.fix = function ( aim ) {
// Check URL format
// Precondition:
// aim -- true: return symbol key
// false: return link to correct page, or " "
// Uses:
// this
// window
// >< .iconURL
// mw.config.get()
// mw.util.getUrl()
// .lang.feature()
// 2014-09-28 [email protected]
var r;
if ( aim ) {
r = this.iconURL;
} else if ( window.location.pathname.substr(0, 6)
=== "/wiki/" ) {
this.iconURL = 1;
r = " ";
} else {
this.iconURL = -1;
r = "<a href='"
+ mw.util.getUrl( mw.config.get( "wgPageName" ) )
+ "'>" + this.lang.feature( "URLformfix" )
+ "</a>";
}
return r;
}; // .fix()
WLE.flat = function ( after ) {
// Hide undesired content from regular page
// Precondition:
// after -- true: dynamic, else static
// Uses:
// this
// .wikEd()
// mw.util.addCSS()
// 2013-09-01 [email protected]
var s = ".cn-fundraiser-banner,"
+ "#mw-js-message,"
+ "#siteNotice,"
+ "#fundraising\n"
+ "#ca-nstab-user,"
+ "#ca-edit,"
+ "#ca-view,"
+ "#ca-history,"
+ "#ca-move,"
+ ".noarticletext,"
+ "#newarticletext\n"
+ "{display: none ! important;}";
if ( after ) {
s = ".editOptions\n"
+ "{margin-top: 10px;"
+ ( this.wikEd()
? "background-color: transparent;" : "" )
+ " margin-bottom: 10px;}"
+ "#editnotice-ns-2,"
+ ".previewnote,\n"
+ "DIV.mw-tos-summary,"
+ "SPAN#wpSummaryLabel,"
+ "DIV#editpage-copywarn,"
+ "A#mw-editform-cancel,"
+ ".editHelp,"
+ "A[target=\"helpwindow\"],\n"
+ "INPUT#wpDiff,"
+ "INPUT#wpSave,"
+ "INPUT#wpSummary,"
+ ".editCheckboxes,"
+ ".cancelLink,"
+ "#enhanced-diff-live-button,"
+ "#wikEdEditHelp,"
+ "#wikEdLocalDiff,"
+ "#wikEdSummaryInputWrapper,"
+ "#thresholdSave,\n"
+ s;
}
mw.util.addCSS( s );
}; // .flat()
WLE.folder = function ( action ) {
// Create button for directory selection, initially invisible
// Precondition:
// action -- identifier
// Postcondition:
// Return html string
// Uses:
// this
// .force()
// 2012-11-30 [email protected]
var show = "<span style='font-size: 200%;"
+ " font-weight: bold;'>*</span>";
return "<div class='WLE.buttons'"
+ " id='WLE." + action + "'"
+ " style='display:none'>"
+ this.force( action, show, true ) + "</div>";
}; // .folder()
WLE.force = function ( action, assign, able ) {
// Create button
// Precondition:
// action -- identifier
// assign -- label
// able -- false: disabled
// Postcondition:
// Return html string
// 2012-11-30 [email protected]
return "<button type='button'"
+ " id='WLE_select_" + action + "'"
+ " style='background-color: #80FFFF'"
+ " onclick='mw.libs.localEdit.fired(\"" + action
+ "\")'"
+ ( able ? "" : " disabled" )
+ ">" + assign + "</button>";
}; // .force()
WLE.form = function ( action ) {
// Start edit page processing
// Precondition:
// action -- "edit" or "submit"
// Uses:
// this
// > mw.util.$content
// > .wgTitle
// < .$editform
// < .$textarea
// .flat()
// jQuery().find()
// jQuery().attr()
// jQuery().text()
// .forward()
// jQuery()
// jQuery().after()
// jQuery().css()
// .first()
// 2012-12-14 [email protected]
var s, $elt, $form, $h1, $ta;
this.flat( true );
$form = mw.util.$content.find( "#editform" );
if ( $form.length ) {
$ta = $form.find( "#wpTextbox1" );
if ( $ta.length ) { // textarea
if ( ! $ta.attr( "readonly" ) ) { // modifiable
this.$editform = $form;
this.$textarea = $ta;
if ( action === "edit" ) {
$ta.text( "" );
}
$elt = $form.find( "#wpPreview" );
if ( $elt.length ) {
s = "<span id='LocalEditDiv'"
+ " style='border: solid 3px #0000FF;"
+ " margin-left: 5px;"
+ " padding: 0.4em;'>\n"
+ "ANSI:"
+ "<input type='checkbox'"
+ " name='ANSI'"
+ " id='ANSI' />"
+ WLE.forward( "OpenFile", true )
+ WLE.forward( "ImportPage", true )
+ WLE.forward( "SaveFile", false )
+ WLE.forward( "SaveFileAs", true )
+ "</span>"
+ "<div id='LocalEditPageImportDiv'"
+ " style='display:none' />";
$elt.after( $( s ) );
}
}
} // textarea
}
$h1 = mw.util.$content.find( "#firstHeading" );
if ( $h1.length ) {
$h1.text( this.wgTitle );
$h1.css( "border", "solid 2px #0000FF" );
$h1.css( "text-align", "center" );
$h1.css( "background-color", "#D0FFFF" );
}
s = "<div id='LocalEditFileDiv'>"
+ "<span id='LocalEditFilePath'"
+ " style='background-color: #D0FFFF;' />"
+ "</div>";
this.first( $( s ) );
}; // .form()
WLE.forward = function ( action, able ) {
// Create button for file selection or canceling
// Precondition:
// action -- identifier
// able -- initially enabled
// Postcondition:
// Return html string
// Uses:
// this
// .lang.feature()
// .force()
// 2012-11-30 [email protected]
return this.force( action, this.lang.feature( action ), able );
}; // .forward()
WLE.wikEd = function () {
// Check whether wikEd is active
// Postcondition:
// Return true iff wikEd is active
// Uses:
// > wikEd
// 2013-09-01 [email protected]
return ( window.wikEd
&& typeof window.wikEd === "object"
&& ! window.wikEd.disabled );
}; // .wikEd()
if ( ! WLE.loaded ) {
WLE.loaded = true;
if ( mw.config.get( "wgNamespaceNumber" ) === 2 ) {
WLE.wgTitle = mw.config.get( "wgTitle" );
if ( WLE.wgTitle ===
mw.config.get( "wgUserName" ) + "/LocalEdit" ) {
$( WLE.fire );
}
}
mw.loader.state( { "ext.gadget.localEdit": "ready" } );
}
}( window.mediaWiki, window.jQuery ) );
// Emacs
// Local Variables:
// coding: utf-8-dos
// fill-column: 80
// End:
/// EOF </nowiki> /localEdit/d.js