// Vimperator plugin: "Update mixi echo" // Last Change: 21-Oct-2008. Jan 2008 // License: Creative Commons // Maintainer: mattn - http://mattn.kaoriya.net/ (function(){ var ucnv = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); ucnv.charset = "EUC-JP"; function sprintf(format){ var i = 1, re = /%s/, result = "" + format; while (re.test(result) && i < arguments.length) result = result.replace(re, arguments[i++]); return result; } function parseHTML(str, ignoreTags) { var exp = "^[\\s\\S]*?]*)?>|[\\S\\s]*$"; if (ignoreTags) { if (typeof ignoreTags == "string") ignoreTags = [ignoreTags]; var stripTags = []; ignoreTags = ignoreTags.filter(function(tag) tag[tag.length - 1] == "/" || !stripTags.push(tag)) .map(function(tag) tag.replace(/\/$/, "")); if (stripTags.length > 0) { stripTags = stripTags.length > 1 ? "(?:" + stripTags.join("|") + ")" : String(stripTags); exp += "|<" + stripTags + "(?:\\s[^>]*|/)?>|"; } } str = str.replace(new RegExp(exp, "ig"), ""); var res = document.implementation.createDocument(null, "html", null); var range = document.createRange(); range.setStartAfter(window.content.document.body); res.documentElement.appendChild(res.importNode(range.createContextualFragment(str), true)); if (ignoreTags) ignoreTags.forEach(function(tag) { var elements = res.getElementsByTagName(tag); for (var i = elements.length, el; el = elements.item(--i); el.parentNode.removeChild(el)); }); return res; } function getElementsByXPath(xpath, node){ node = node || document; var nodesSnapshot = (node.ownerDocument || node).evaluate(xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var data = []; for(var i = 0, l = nodesSnapshot.snapshotLength; i < l; data.push(nodesSnapshot.snapshotItem(i++))); return (data.length > 0) ? data : null; } function getFirstElementByXPath(xpath, node){ node = node || document; var result = (node.ownerDocument || node).evaluate(xpath, node, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return result.singleNodeValue ? result.singleNodeValue : null; } function showFollowersStatus(){ var xhr = new XMLHttpRequest(); xhr.open("GET", "http://mixi.jp/recent_echo.pl", false); xhr.send(null); var nodes = getElementsByXPath('id("echo")//div[@class="archiveList"]//tr', parseHTML(xhr.responseText, ['script'])); var statuses = []; if (nodes && nodes.length) nodes.forEach(function(node) { var img = getFirstElementByXPath('.//img', node).src; var name = getFirstElementByXPath('.//*[@class="nickname"]', node).textContent.replace(/(?:\r?\n|\r)[ \t]*/g, ""); var c = getFirstElementByXPath('.//*[@class="comment"]', node).childNodes; var text = ''; for (var n = 0; n < c.length; n++) { if (c[n].nodeName.toUpperCase() == 'SPAN') break; text += c[n].textContent.replace(/^\s+|\s+$/g, '').replace(/&/g, '&').replace(/>/g, '>').replace(/.toSource() .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + statuses.map(function(status) <> {status.user.name}‬ .toSource() .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + sprintf(': ', status.text)) .join("
"); //liberator.log(html); liberator.echo(html, true); } function sayEcho(text){ var xhr = new XMLHttpRequest(); xhr.open("GET", "http://mixi.jp/recent_echo.pl", false); xhr.send(null); var form = getFirstElementByXPath('//form[@action="add_echo.pl"]', parseHTML(xhr.responseText, ['script'])); var input = getFirstElementByXPath('.//textarea', form); input.value = text; var params = []; var inputs = getElementsByXPath('.//*[contains(" INPUT TEXTAREA SELECT ", concat(" ", local-name(), " "))]', form); inputs.forEach(function(input) { if (input.name.length) params.push(input.name + '=' + escape(ucnv.ConvertFromUnicode(input.value))); }); xhr.open("POST", "http://mixi.jp/add_echo.pl", false); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(params.join('&')); } commands.addUserCommand(["mixiecho"], "Change mixi echo", function(arg, special){ arg = arg.string; if (special || arg.length == 0) showFollowersStatus() else sayEcho(arg); },{ bang: true } ); })(); 9'>49 50 51 52 53 54 55 56 57 58 59 60 61
/*
 * ==VimperatorPlugin==
 * @name            yslow.js
 * @description     optimize the indicator of YSlow add-on.
 * @description-ja  YSlow アドオンの表示をいい感じにする。
 * @author          janus_wel <janus_wel@fb3.so-net.ne.jp>
 * @version         0.10
 * @minversion      2.0pre
 * @maxversion      2.0pre
 * ==/VimperatorPlugin==
 *
 * LICENSE
 *  New BSD License
 *
 * USAGE
 *  this plugin change YSlow indicators to non-display.
 *  you can use value 'y' in option 'pageinfo'.
 *  it will display performances of current page.
 *
 * EXAMPLE
 *  default + YSlow
 *      :set pageinfo=gfmy
 *
 * */

( function () {

// add-on check
const doc = window.document;
if (!doc.getElementById('yslowStatusBar')) {
    liberator.log('yslow.js is need YSlow add-on: https://addons.mozilla.org/firefox/addon/5369', 0);
    return;
}

// register pageinfo
let grade = doc.getElementById('yslowStatusGrade');
let size  = doc.getElementById('yslowStatusSize');
let time  = doc.getElementById('yslowStatusTime');
liberator.modules.buffer.addPageInfoSection(
    'y',
    'YSlow Status',
    function (verbose) {
        if(verbose) {
            if (grade.value && grade.value !== 'YSlow') yield ['Grade', grade.value];
            if (size.value) yield ['Size', size.value];
            if (time.value) yield ['Time', time.value];
        }
        return;
    }
);

// hide elements
[
    grade,
    size,
    time,
].forEach(function (n) {
    n.setAttribute('style', 'display: none !important;');
});

} )();