User:PerfektesChaos/js/localEdit/d.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. User:PerfektesChaos/js/localEdit/d. |
/// 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