User:The Evil IP address/hdedit.js

/** importScript( 'User:The Evil IP address/hdedit.js' ); // Backlink: User:The Evil IP address/hdedit.js mw.loader.load('mediawiki.api'); window.hdedit = { openeditform: function ($e) { hdedit.anchor = $e.attr('id'); hdedit.pagename = mw.config.get('wgPageName'); hdedit.api = new mw.Api; hdedit.api.get( {               action: 'parse',                page: this.pagename,                prop: 'sections',                format: 'json'        }).done( function (data) {        	error = false;        	error_msg = '';            $.each(data.parse.sections, function (i, v) { if (v.anchor == hdedit.anchor) { if (v.index !== '') { hdedit.index = v.index; }                   	else { error = true; error_msg = 'This section cannot be edited automatically ' + 'because it uses HTML formatting.'; }                       if (v.fromtitle && (v.fromtitle != hdedit.pagename)) { error = true; error_msg += 'This section cannot be edited automatically ' + 'because it is transcluded from a template.'; }                       return false; }           });            if (error) {            	hdedit.seterror(error_msg);            	return;            }            if (hdedit.$e) {            	hdedit.cancel;        	}        	hdedit.$e = $e;            hdedit.api.get({ action: 'parse', page: hdedit.pagename, section: hdedit.index, prop: 'wikitext', format: 'json' }).done( function (obj) { hdedit.wikitext = obj.parse.wikitext['*']; hdedit.section_wikitext = hdedit.wikitext.replace(/^(=+)\s*(.+?)\s*\1[\s\S]*$/, '$2'); hdedit.inputsize = hdedit.section_wikitext.length*1.5; var form = $(' ').css('display', 'inline').submit(hdedit.save); var input = $(' ').attr('id', 'hdedit_input').attr('size', hdedit.inputsize).val(hdedit.section_wikitext); var button1 = $(' ').attr('id', 'hdedit_submit').attr('type', 'submit').text('Save'); var button2 = $(' ').attr('type', 'button').attr('id', 'hdedit_cancel').text('Cancel').click(hdedit.cancel); $(form).append(input).append(button1).append(button2); hdedit.form = form; $e.after(form); $e.hide; }           );        }        );    },    save: function  { hdedit.newheading = $(this).parent.find('input').val; if (hdedit.newheading == hdedit.section_wikitext) { return false; }       $('#hdedit_input, #hdedit_submit, #hdedit_cancel').attr('disabled', 'disabled'); hdedit.api.edit(hdedit.pagename, function {        		return {        			action: 'edit',        			format: 'json',        			section: hdedit.index,        			minor: true,        			summary: 'Section heading change: ' + hdedit.section_wikitext + ' → ' + hdedit.newheading         			+ ' using a script',        			text: hdedit.wikitext.replace(/^(=+)(\s*).+?(\s*)\1(\s*)$/m, '$1$2' + hdedit.newheading + '$3$1$4'),       		};        }).then(        function (resp) {        	if (resp.result == 'Success') {        		window.location.reload;        	}        	else if (resp.result == 'Failure') {        		hdedit.seterror('API returned error code ' + data.error.code + ': ' + data.error.info);        	}        	else {        		hdedit.seterror('Unknown API error.');        	}        }); return false; },   cancel: function  { hdedit.$e.show; hdedit.form.remove; },   seterror: function (msg) { mw.notify(msg + '\nPlease edit the section heading manually.', {title: 'Error!', autoHide: false}); },   getpref: function (name) { if (window.hdedit_prefs !== undefined && name in window.hdedit_prefs) { return window.hdedit_prefs[name]; }   	else { return hdedit.defaultprefs[name]; }   },    defaultprefs: { 'eventToActivate': 'click' }, };
 * Allows for one click modification of section headings when viewing a page
 * add the following line to your .js file to use it:
 * @author Janko Hoener (The Evil IP address)
 * @version 1.1.1

if (mw.config.get('wgNamespaceNumber') >= 0             // disable on special pages    && mw.config.get('wgAction') == 'view'               // activate on view only    && mw.config.get('wgIsProbablyEditable')             // only if the page is probably editable    && !mw.config.get('wgIsMainPage')                    // disable on Main Page    && !('sysop' in mw.config.get('wgRestrictionEdit'))) { // disable on protected pages // they should be edited manually per https://en.wikipedia.org/w/index.php?oldid=982545683

var eventname = hdedit.getpref('eventToActivate'); var selector = ''; // find the appropriate selector of headings after breaking change https://www.mediawiki.org/wiki/Heading_HTML_changes var oldmarkup = $('h1 span.mw-headline, h2 span.mw-headline, h3 span.mw-headline, h4 span.mw-headline, h5 span.mw-headline, h6 span.mw-headline'); // still using previous layout var newmarkup = $('#bodyContent h1, #bodyContent h2, #bodyContent h3, #bodyContent h4, #bodyContent h5, #bodyContent h6'); // using new layout, all h* elements of the page body if (oldmarkup.length) { // we have the old layout, then load only on those selectors selector = oldmarkup; }	else if (newmarkup.length) { // we have the new layout, then load only on those selectors selector = newmarkup; }   $(selector).bind(eventname, 	    function  {		    hdedit.openeditform($(this));	    }    ); }