aboutsummaryrefslogtreecommitdiffstats
path: root/notifier/observer_growl.js
AgeCommit message (Collapse)Author
2008-12-22licensesuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27241 d0d07461-0603-4401-acd4-de1884942a52
2008-12-22 * XPath を修正しました。drry
* ほか。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27220 d0d07461-0603-4401-acd4-de1884942a52
2008-12-21* shutdown 時の timer cleanup.suVene
* document.unload 時の interval cleanup. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27175 d0d07461-0603-4401-acd4-de1884942a52
2008-12-20add <updateURL> for pluginManager.js [27131]suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27132 d0d07461-0603-4401-acd4-de1884942a52
2008-12-19* bugfix.(無駄なtimer)suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27111 d0d07461-0603-4401-acd4-de1884942a52
2008-12-18* observer_growl. EventListener の登録失敗回避.[close all]追加.suVene
* subject_weather_yahoo.js url の設定読込み. * growl.css className modify. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27040 d0d07461-0603-4401-acd4-de1884942a52
2008-12-182008-12-15* growl.css - add head link style.suVene
* observer_growl.js - add hyperlink.mod default life 10 seconds. * subject_hatelabo_bottle.js - parse permalink. * notifier.js - follow pluginManager.etc. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26822 d0d07461-0603-4401-acd4-de1884942a52
2008-12-09* _libly.js ver.0.1.4 にあわせた修正. [26222]suVene
* event 追加. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26230 d0d07461-0603-4401-acd4-de1884942a52
2008-12-09 * もしバグったらごめんなさい。drry
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26163 d0d07461-0603-4401-acd4-de1884942a52
2008-12-08*SubjectHttp定義.suVene
*registerするときに下位クラスから基底クラスを指定するように変更. *notifier/observer/subject の PLUGIN_INFO対応 @see http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/pluginManager.js *ほか. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26152 d0d07461-0603-4401-acd4-de1884942a52
2008-12-07 * removed an unused variable.drry
* et cetera. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26088 d0d07461-0603-4401-acd4-de1884942a52
2008-12-07*libty.js bug fix.suVene
*それに伴うmulti_requester.jsの修正 *subject_test.js rename to subject_hatelabo_bottle.js(途中) *etc. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26085 d0d07461-0603-4401-acd4-de1884942a52
2008-12-06jquery.jgrowl.css > growl.csssuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26021 d0d07461-0603-4401-acd4-de1884942a52
2008-12-06変更通知framework.& それを利用したGrowl風plugin(途中)suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26017 d0d07461-0603-4401-acd4-de1884942a52
pan> "(?:" + stripTags.join("|") + ")" : String(stripTags); exp += "|<" + stripTags + "(?:\\s[^>]*|/)?>|</" + 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, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;'); if (c[n].nodeName.toUpperCase() == 'A') text += ' '; } statuses.push({ user : { profile_image_url : img, name : name, screen_name : name }, text : text }); }); var html = <style type="text/css"><![CDATA[ span.twitter.entry-content a { text-decoration: none; } img.twitter.photo { border; 0px; width: 16px; height: 16px; vertical-align: baseline; } ]]></style>.toSource() .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + statuses.map(function(status) <> <img src={status.user.profile_image_url} alt={status.user.screen_name} title={status.user.screen_name} class="twitter photo"/> <strong>{status.user.name}&#x202C;</strong> </>.toSource() .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + sprintf(': <span class="twitter entry-content">%s&#x202C;</span>', status.text)) .join("<br/>"); //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 } ); })();