User:Krinkle/Scripts/InsertWikiEditorButton.js
Appearance
From Meta, a Wikimedia project coordination wiki
< User:Krinkle | Scripts
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/** * Insert WikiEditor Button * @version 2015年11月12日 * @source https://meta.wikimedia.org/wiki/User:Krinkle/Scripts/InsertWikiEditorButton * @author Krinkle * @author Locos epraix * @license Released in the public domain */ /*jshint browser: true */ /*global jQuery, mediaWiki */ (function($,mw){ "use strict"; var$toolbar,ready=false,queue=[]; functioninsertButton(btnObj){ $toolbar.wikiEditor('addToToolbar',btnObj); } functionhandleQueue(){ ready=true; for(vari=0;i<queue.length;i++){ insertButton(queue[i]); } queue=handleQueue=null; } // Only on editpage if($.inArray(mw.config.get('wgAction'),['edit','submit','formedit'])!==-1){ /** * krInsertWikiEditorButton * * @param options {Object} An object with options: * - section {String} (optional) The name of the section in the WikiEditor. Defaults to 'main' * - group {String} (optional) The name of the group in the WikiEditor. Defaults to 'insert' * - id {String} (required) Unique id (ie. 'my-button') * - icon {String} (recommended) URL to the icon, should be square about 21 to 22px * - label {String} (required) Tooltip displayed when hovering button * - insertBefore {String} (optional) Wikitext to be inserted before the cursor on-click * - sampleText {String} (optional) Text inserted in place of the cursor if no text was selected * - insertAfter {String} (optional) Wikitext to be inserted after the cursor on-click * - callback {Function} (optional) Called when the button is clicked * - autoSummary {mixed} (optional) Null or an Object with the following properties: * - summary {String} (required) Edit summary that should be used * - position {String} (optional) 'append', 'prepend' or 'replace' * - delimiter {String} (optional) delimiter between the (possibly) current summary and the to-be-inserted summary */ window.krInsertWikiEditorButton=function(options){ // Defaults options=$.extend({ 'section':'main', 'group':'insert', 'id':null, 'icon':'//upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Toolbaricon_bold_!.png/21px-Toolbaricon_bold_!.png', 'label':'', 'insertBefore':'', 'sampleText':'', 'insertAfter':'', 'callback':null, 'autoSummary':{ 'summary':null, 'position':'append', 'delimiter':'; ' } },options); // Required if(!options.id||!options.label){ returnfalse; } varbtnObj={ 'section':options.section, 'group':options.group, 'tools':{} }; btnObj.tools[options.id]={ label:options.label, type:'button', icon:options.icon, action:{ type:'callback', execute:function(){ // encapsulateSelection $toolbar.textSelection('encapsulateSelection',{ pre:options.insertBefore, peri:options.sampleText, post:options.insertAfter }); // Auto summary if(options.autoSummary&&options.autoSummary.summary){ var$summary=$('#wpSummary'),currentSum=$summary.val(); if(!$.trim(currentSum)){ $summary.val(options.autoSummary.summary); }else{ switch(options.autoSummary.position){ case'prepend': $summary.val( options.autoSummary.summary+ options.autoSummary.delimiter+ currentSum ); break; case'replace': $summary.val(options.autoSummary.summary); break; default:// 'append' $summary.val( currentSum+ options.autoSummary.delimiter+ options.autoSummary.summary ); } } } // Callback if($.isFunction(options.callback)){ options.callback(); } } } }; if(ready){ insertButton(btnObj); }else{ queue.push(btnObj); } }; // Wait for WikiEditor to be ready $(function(){ $toolbar=$('#wpTextbox1'); if($.fn.wikiEditor){handleQueue();}else{$toolbar.on('wikiEditor-toolbar-doneInitialSections',handleQueue);} }); }else{ // No-op function to avoid errors on other pages window.krInsertWikiEditorButton=function(){}; } // Load callback if(window.kCustomMainInsertButton_config){ kCustomMainInsertButton_config(); } }(jQuery,mediaWiki));