Created
June 25, 2010 14:38
-
-
Save Milly/452937 to your computer and use it in GitHub Desktop.
allunofficial.net extender
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name allunofficial.net extender | |
// @namespace http://d.hatena.ne.jp/MillyC/ | |
// @include http://allunofficial.net/trpg/action.php* | |
// @include http://allunofficial.net/trpg/arianrhod_pc_making.html | |
// ==/UserScript== | |
// Sortable skill table {{{1 | |
if ('addLineSkill' in unsafeWindow) { | |
// add style {{{2 | |
GM_addStyle([ | |
'a.spin-button { display:block; height:0.8em; font-size:0.8em; padding:0 0.2em; line-height:1em; }', | |
'#skill_disp tr.focus input { background-color:#ddf; }', | |
'#skill_disp tr input:focus { background-color:#bbd; }' | |
].join('')); | |
// create elements {{{2 | |
var skill_disp = document.getElementById('skill_disp'); | |
var rows = skill_disp.getElementsByTagName('tr'); | |
for (var i = 0; i < rows.length; ++i) { | |
var th_ary = rows[i].getElementsByTagName('th'); | |
if (1 == th_ary.length) { | |
var col = document.createElement('td'); | |
if (th_ary[0].innerHTML.match(/<input/)) { | |
col.innerHTML = | |
'<a href="#" class="spin-button up" onclick="moveUpLineSkill(event);return false;">▲</a>' + | |
'<a href="#" class="spin-button down" onclick="moveDownLineSkill(event);return false;">▼</a>'; | |
} else { | |
col.innerHTML = ' '; | |
rows[i].setAttribute('type', 'fixed'); | |
} | |
} else { | |
var col = document.createElement('th'); | |
col.innerHTML = ' '; | |
} | |
rows[i].appendChild(col); | |
} | |
// unsafe functions {{{2 | |
function find(element, nodeName, propName) { | |
propName = propName || 'firstChild'; | |
while (element = element[propName]) { | |
if (nodeName == element.nodeName) | |
return element; | |
} | |
} | |
var moveUpLineSkill = unsafeWindow.moveUpLineSkill = function(event) { | |
var target = event.target || event; | |
var row = find(target, 'TR', 'parentNode'); | |
var prev_row = find(row, 'TR', 'previousSibling'); | |
if (prev_row && 'fixed' != prev_row.getAttribute('type')) | |
row.parentNode.insertBefore(row, prev_row); | |
target.focus(); | |
} | |
var moveDownLineSkill = unsafeWindow.moveDownLineSkill = function(event) { | |
var target = event.target || event; | |
var row = find(target, 'TR', 'parentNode'); | |
var next_row = find(row, 'TR', 'nextSibling'); | |
if (next_row && 'fixed' != next_row.getAttribute('type')) | |
row.parentNode.insertBefore(next_row, row); | |
target.focus(); | |
} | |
// functions {{{2 | |
function hasClass(element, className) { | |
return -1 != (' ' + element.className + ' ').indexOf(' ' + className + ' '); | |
} | |
function addClass(element, className) { | |
if (!hasClass(element, className)) | |
element.className += ' ' + className; | |
} | |
function removeClass(element, className) { | |
if (hasClass(element, className)) { | |
var all = element.className.split(/\s+/); | |
for (var i = all.length; 0 <= --i;) { | |
if (all[i] == className) | |
delete all[i]; | |
} | |
element.className = all.join(' ').replace(/ +/g, ' '); | |
} | |
} | |
// events {{{2 | |
function updownKeyListener(event) { | |
var target = event.target; | |
var keycode = event.which; | |
var keychar = String.fromCharCode(keycode).toUpperCase(); | |
if (event.ctrlKey && (38 == keycode || 40 == keycode)) { | |
event.stopPropagation(); | |
event.preventDefault(); | |
setTimeout(function() { | |
target.blur(); | |
if (38 == event.which) { | |
moveUpLineSkill(event); | |
} else { | |
moveDownLineSkill(event); | |
} | |
}, 50); | |
} | |
} | |
skill_disp.addEventListener('keydown', updownKeyListener, true); | |
function rowFocusListener(event) { | |
var target = event.target; | |
var row = find(target, 'TR', 'parentNode'); | |
if ('focus' == event.type) { | |
addClass(row, 'focus'); | |
} else { | |
removeClass(row, 'focus'); | |
} | |
} | |
skill_disp.addEventListener('focus', rowFocusListener, true); | |
skill_disp.addEventListener('blur', rowFocusListener, true); | |
// }}}2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment