Jump to content

User:He7d3r/Tools/GlobalPreferences.js

From Meta, a Wikimedia project coordination wiki

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.
// [[File:User:He7d3r/Tools/GlobalPreferences.js]] (workaround for [[phab:T35355]])
/**
 * Set global preferences when the user visits a wiki
 *
 * @author: Helder (https://github.com/he7d3r)
 * @license: CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0/>
 */
// <nowiki>
(function(e,r){"use strict";function n(n){(new e.Api).saveOptions(n).done(function(){e.notify(r("<p></p>").append(e.msg("global-preferences-changed",'<pre style="white-space: pre-wrap;">'+JSON.stringify(n,null,2)+"</pre>")),{autoHide:!1})}).fail(function(n,s){e.notify(r("<p></p>").append(e.msg("global-preferences-api-error",n,s.error.info)),{autoHide:!1})})}function s(r,s){var t=prompt(e.msg(r)),o={};if(t){try{JSON.parse(t)}catch(i){return alert(i),void 0}o[s]=t,e.loader.using(["mediawiki.api"]).done(function(){n(o)})}}function t(e){e.preventDefault(),s("global-preferences-exceptions-set-prompt","userjs-global-preferences-exceptions")}function o(e){e.preventDefault(),s("global-preferences-set-prompt","userjs-global-preferences")}function i(){var s=e.config.get("wgServer"),i=e.user.options.get("global-preferences-server","//meta.wikimedia.org"),a={},p={action:"query",meta:"userinfo",uiprop:"options"};i===s?r(function(){r(e.util.addPortletLink("p-cactions","#",e.msg("global-preferences-set"),"ca-global-preferences",e.msg("global-preferences-set-desc"))).click(o),r(e.util.addPortletLink("p-cactions","#",e.msg("global-preferences-exceptions-set"),"ca-global-preferences",e.msg("global-preferences-exceptions-set-desc"))).click(t)}):(p.origin="https:"+s,a.url=i+"/w/api.php",a.xhrFields={withCredentials:!0}),new e.Api({ajax:a}).get(p).done(function(s){var t,o=s.query.userinfo.options,i=o["userjs-global-preferences"],a=o["userjs-global-preferences-exceptions"];if(i){try{i=JSON.parse(i)}catch(p){return alert(p),void 0}if(a){try{a=JSON.parse(a)[e.config.get("wgDBname")]}catch(p){return alert(p),void 0}if(a==="*")return;if(Array.isArray(a))for(t=0;a.length>t;t++)delete i[a[t]]}for(t in i)i[t]==e.user.options.get(t)&&delete i[t];r.isEmptyObject(i)||e.loader.using(["mediawiki.api"]).done(function(){n(i)})}})}e.messages.set({"global-preferences-changed":"Some of your preferences were changed on this wiki: $1.","global-preferences-set":"Set global preferences","global-preferences-set-desc":"Set the your global preferences by providing a string in JSON format","global-preferences-set-prompt":"Provide a JSON string representing the preferences you want to set as global preferences.","global-preferences-exceptions-set":"Set preference exceptions","global-preferences-exceptions-set-desc":"Set the exceptions to your global preferences by providing a string in JSON format","global-preferences-exceptions-set-prompt":'Provide a JSON string with database names as keys and "*" or arrays of preference names (the exceptions) as its values.',"global-preferences-api-error":"There was an error: $1; $2"}),e.config.get("wgAction")==="view"&&e.loader.using(["mediawiki.api","user.options"],i)})(mediaWiki,jQuery);
// </nowiki>