Skip to content

Instantly share code, notes, and snippets.

@umorigu
Created May 22, 2011 15:33
Show Gist options
  • Save umorigu/985590 to your computer and use it in GitHub Desktop.
Save umorigu/985590 to your computer and use it in GitHub Desktop.
PukiWiki attach plugin filename length bookmarklet
javascript:(function(){
function checkUploadFile() {
var maxLength = 100;
function getHexNameString(s) {
var enc = encodeURIComponent(s);
var result = '';
for (var i = 0; i < enc.length; i++) {
if (enc.substr(i, 1) === '%') {
result += enc.substr(i + 1, 2);
i += 2;
} else {
var c = enc.charCodeAt(i) + 0x100;
var cs = c.toString(16);
result += cs.substr(cs.length - 2, 2).toUpperCase();
}
}
return result;
}
function getAttachFileName(p, f) {
return getHexNameString(p) + '_' + getHexNameString(f) + '.log';
}
var submitElement = null;
var pageName = '';
var fileLeafName = '';
var fileE = document.getElementById('_p_attach_file');
if (fileE.value != '') {
if (fileE.value.match(/[\\\/]([^\\\/]+)$/)) {
fileLeafName = RegExp.$1;
}
}
var nodes = document.getElementsByTagName('input');
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
if (n.name == 'refer' && n.type == 'hidden') {
pageName = n.value;
} else if (n.type == 'submit') {
submitElement = n;
n.disabled = false;
}
}
var aFileName = getAttachFileName(pageName, fileLeafName);
var nameLength = aFileName.length;
if (nameLength > maxLength) {
submitElement.disabled = true;
} else {
submitElement.disabled = false;
}
alert('file: [' + nameLength + '] ' + pageName + ' - ' + fileLeafName);
var warnLabelId = '___warnLabel';
var warnLabel = document.getElementById(warnLabelId);
if (warnLabel) {
while (warnLabel.hasChildNodes()) {
warnLabel.removeChild(warnLabel.lastChild);
}
} else {
warnLabel = document.createElement('span');
warnLabel.id = warnLabelId;
}
if (nameLength > maxLength) {
warnLabel.appendChild(document.createElement('br'));
var expLabel = 'ファイル名が長すぎます! 添付できません ('
+ nameLength + '文字 > 最大' + maxLength + '文字)';
warnLabel.appendChild(document.createTextNode(expLabel));
warnLabel.appendChild(document.createElement('br'));
warnLabel.appendChild(document.createTextNode('Page: ' + pageName));
warnLabel.appendChild(document.createElement('br'));
warnLabel.appendChild(document.createTextNode('File: ' + fileLeafName));
warnLabel.appendChild(document.createElement('br'));
warnLabel.appendChild(document.createTextNode('Internal filename: ' + aFileName));
warnLabel.style.color = 'red';
warnLabel.style.fontWeight = '';
}
var fileEnext = fileE.nextSibling;
fileE.parentNode.insertBefore(warnLabel, fileEnext);
}
var fileE = document.getElementById('_p_attach_file');
if (fileE.attachEvent) {
fileE.attachEvent('onchange', checkUploadFile);
} else {
fileE.addEventListener('change', checkUploadFile, false);
}
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment