Skip to content

Instantly share code, notes, and snippets.

@mattn
Created March 23, 2009 00:32
Show Gist options
  • Save mattn/83351 to your computer and use it in GitHub Desktop.
Save mattn/83351 to your computer and use it in GitHub Desktop.
github pagination
// ==UserScript==
// @name github pagination
// @namespace http://mattn.kaoriya.net/
// @description generate newer/older link on github.com
// @include https://github.com/*
// ==/UserScript==
(function() {
// extend version of $X
// $X(exp);
// $X(exp, context);
// $X(exp, type);
// $X(exp, context, type);
function $X (exp, context, type /* want type */) {
if (typeof context == "function") {
type = context;
context = null;
}
if (!context) context = document;
exp = (context.ownerDocument || context).createExpression(exp, function (prefix) {
return document.createNSResolver((context.ownerDocument === null ? context
: context.ownerDocument).documentElement)
.lookupNamespaceURI(prefix) ||
document.contentType === "application/xhtml+xml" ? "http://www.w3.org/1999/xhtml" : "";
});
switch (type) {
case String: return exp.evaluate(context, XPathResult.STRING_TYPE, null).stringValue;
case Number: return exp.evaluate(context, XPathResult.NUMBER_TYPE, null).numberValue;
case Boolean: return exp.evaluate(context, XPathResult.BOOLEAN_TYPE, null).booleanValue;
case Array:
var result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var ret = [], i = 0, len = result.snapshotLength; i < len; i++) {
ret.push(result.snapshotItem(i));
}
return ret;
case undefined:
var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
// not ensure the order.
var ret = [], i = null;
while ((i = result.iterateNext())) ret.push(i);
return ret;
}
return null;
default: throw(TypeError("$X: specified type is not valid type."));
}
}
if (!$X('//div[contains(concat(" ",@class," "), " pagination ")]')[0]) {
var queryString = window.location.search.replace('?', '&');
var split = queryString.split("&");
var params = {};
for (var i=0; i < split.length; i++) {
var pair = split[i].split("=");
params[pair[0]] = pair[1];
}
var page = parseInt(params['page']||0);
var newer = page > 0 ?
'<a href="/dashboard?page=' + (page-1) + '" hotkey="h">&laquo; Newer</a>'
: '<div class="pagination"><span class="disabled">&laquo; Newer</span>';
var older = '<a href="/dashboard?page=' + (page+1) + '" hotkey="l">Older &raquo;</a></div>';
$X('//div[contains(concat(" ",@class," "), " repos ")]/preceding-sibling::div')[0].innerHTML += '<div class="pagination">' + newer + older + '</div>';
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment