User:Quarl/userscript.js

// User:Quarl/userscript.js - utilities to help develop user scripts and

// style sheets

// - adds "raw" tab to user script pages

// - adds "refresh" tab to user script pages (refresh the raw script)

// - automatically refreshes the raw version when you save a user script page

// depends: wikipage.js, cookie.js, wikitabs.js

// quarl 2006-01-10 initial version

var userscript = new Object();

userscript.rawUrl = function(wp) {

// note: wp.qurl is parsed from source and is not the same as blindly

// escaping the input! String has to exactly match what the user is

// using, e.g. "User:Quarl/script", not "User%3AQuarl/script"!

if (wp.page.match(/[.]js$/)) {

return wp.qurl + '&action=raw&ctype=text/javascript&dontcountme=s';

} else if (wp.page.match(/\/monobook[.]css$/)) {

return wp.qurl + '&action=raw&ctype=text/css';

} else if (wp.page.match(/[.]css$/)) {

return wp.qurl + '&action=raw&ctype=text/css&dontcountme=s';

} else {

return null;

}

}

userscript._load = function() {

var url = userscript.rawUrl(wikiPage);

if (!url) return;

addTab(url, 'Raw', 'ca-raw', "Show raw version of user script");

addTab('javascript:userscript.doRefresh()', 'Refresh', 'ca-refresh', "Force browser to refresh the raw version of this script");

userscript.refreshIfChanged();

}

// Check if the current script has changed since last time we looked at it;

// if so, refresh. Use a cookie to check.

userscript.refreshIfChanged = function() {

// if we're not looking at current revision, don't do anything.

if (permalinkP) return;

// we don't have the oldid for some reason (e.g. we're currently editing)

if (!pageOldid) return;

//var cookie_name = 'usl_oldid_' + wikiPage.pageQuoted;

var cookie_name = 'usl_oldid';

// by using a different cookie-path we avoid sending tons of cookies for every page,

// and we don't have to uniquify the cookie name. Note that if unspecified, the path

// is equivalent to "/wiki/User:Quarl/" instead of "/wiki/User:Quarl/foo.js", which is

// just as bad as "/"

var path = url_getpath(wikiPage.url); // only bother with canonical URL

last_oldid = readCookie(cookie_name);

if (last_oldid != pageOldid) {

// first time we're looking at the page, or the page has changed. refresh.

userscript.doRefresh();

}

createCookie(cookie_name, pageOldid, 7, path);

}

userscript.doRefresh = function() {

userscript._forceRefresh(userscript.rawUrl(wikiPage));

}

userscript._forceRefresh = function(url) {

// We can't do frm.location.reload() right now because frm.location will still be "about:blank", but if we complete this event and start a new one, it works.

//frm.location.replace(url);

//frm.location.href = url;

document.getElementById('userscript_refresher').src = url;

setTimeout(userscript._forceRefresh_1, 0);

}

userscript._forceRefresh_1 = function() {

var frm = window.frames['userscript_refresher'];

frm.location.reload();

// status

document.getElementById('ca-refresh').innerHTML = 'Refreshed';

}

$(userscript._load);

// hidden iframe

if (false) // debug

document.write('

');

else

document.write('

');