aboutsummaryrefslogtreecommitdiffstats
path: root/_libly.js
AgeCommit message (Collapse)Author
2010-10-23Removed execution flags.thinca
2010-05-06Fix a typoanekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@37393 d0d07461-0603-4401-acd4-de1884942a52
2010-04-07オリジナルの関数を参照しやすいようにしたanekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@37169 d0d07461-0603-4401-acd4-de1884942a52
2010-03-15version++snaka
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@37032 d0d07461-0603-4401-acd4-de1884942a52
2010-03-13createDocumentにDocTypeを明示的に渡すことでHTML文書を生成す ↵snaka
るようにした git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@37008 d0d07461-0603-4401-acd4-de1884942a52
2010-03-01プラグインパスが見つからない場合は、echoerr ↵anekos
した上で続行するようにした git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36890 d0d07461-0603-4401-acd4-de1884942a52
2009-12-29$U.around に二重包み込み防止機能をつけたanekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36303 d0d07461-0603-4401-acd4-de1884942a52
2009-12-22around の返値を強化anekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36238 d0d07461-0603-4401-acd4-de1884942a52
2009-12-10fix a typoanekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36116 d0d07461-0603-4401-acd4-de1884942a52
2009-12-10around を拡張anekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36114 d0d07461-0603-4401-acd4-de1884942a52
2009-11-25Fix a typoanekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@35991 d0d07461-0603-4401-acd4-de1884942a52
2009-11-02Follow HEAD (2.3pre)anekos
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@35833 d0d07461-0603-4401-acd4-de1884942a52
2009-07-24wedata の plugin-info 追記。suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@34597 d0d07461-0603-4401-acd4-de1884942a52
2009-06-18security fix: Components.util.Sandbox(window) can use xpconnectteramako
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@34032 d0d07461-0603-4401-acd4-de1884942a52
2009-06-14delete executablesuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33973 d0d07461-0603-4401-acd4-de1884942a52
2009-06-14version 上げ忘れsuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33964 d0d07461-0603-4401-acd4-de1884942a52
2009-06-14xmlSerialize時、タグ名のみ小文字化。suVene
問題ありそうなら revert の方向で。 - multi_requester.js の結果バッファ内のURLが小文字になる - 永遠に未完成 http://d.hatena.ne.jp/thinca/20090515/1242326884 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33963 d0d07461-0603-4401-acd4-de1884942a52
2009-05-24PLUGIN_INFOのdescriptionにRequestとResponseの記述を追加snaka
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33540 d0d07461-0603-4401-acd4-de1884942a52
2009-02-08_libly.jsのcreateHTMLDocumentのアルゴリズムを変更teramako
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@29731 d0d07461-0603-4401-acd4-de1884942a52
2009-01-19* getHTMLFragment の 改行trim ↵suVene
を削除してみた。不具合なければ他で対応のかんじで。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28668 d0d07461-0603-4401-acd4-de1884942a52
2009-01-08add toStyleText(style)anekos
関数名がアレでしたら変更してください。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28166 d0d07461-0603-4401-acd4-de1884942a52
2009-01-06* wedata 取得失敗時に cache を返す。suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28008 d0d07461-0603-4401-acd4-de1884942a52
2009-01-04 * (and whitespace changes)drry
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27926 d0d07461-0603-4401-acd4-de1884942a52
2009-01-04 * fixed missing `var` statements.drry
* fixed a regex. * removed subversion props. * et cetera. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27924 d0d07461-0603-4401-acd4-de1884942a52
2009-01-04- remove判定整理。suVene
- sticky_keyword → sticky_keywords 変更。 - liberator.echomsg の filter 実装。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27851 d0d07461-0603-4401-acd4-de1884942a52
2008-12-29add subject_twitter.scraper.jssuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27570 d0d07461-0603-4401-acd4-de1884942a52
2008-12-28add notifier/subject_wassr.jssuVene
mod libly.js bugfix. etc. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27534 d0d07461-0603-4401-acd4-de1884942a52
2008-12-26wedata local cache.suVene
etc. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27459 d0d07461-0603-4401-acd4-de1884942a52
2008-12-26mod store keysuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27457 d0d07461-0603-4401-acd4-de1884942a52
2008-12-26add wedata class.suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27455 d0d07461-0603-4401-acd4-de1884942a52
2008-12-22licensesuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27241 d0d07461-0603-4401-acd4-de1884942a52
2008-12-22add $U.runnable(generator)suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27232 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-21Fix typo.anekos
Add around. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27151 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* get absolute path of <a>, <img>.suVene
* mod $U.pathToURL git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27108 d0d07461-0603-4401-acd4-de1884942a52
2008-12-15* add $U.getFirstNodeFromXPath(xpath, context)suVene
* PLUGIN_INFO 整形. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26826 d0d07461-0603-4401-acd4-de1884942a52
2008-12-13* nextlink.js - 1.2対応suVene
* _libly.js - add $U.xmlToDom(xml, doc, nodes) git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26642 d0d07461-0603-4401-acd4-de1884942a52
2008-12-13 * fixed the CSS.drry
* et cetera. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26607 d0d07461-0603-4401-acd4-de1884942a52
2008-12-12擬似 AutopagerizesuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26594 d0d07461-0603-4401-acd4-de1884942a52
2008-12-11O.osuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26426 d0d07461-0603-4401-acd4-de1884942a52
2008-12-11bugfix, etc.suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26416 d0d07461-0603-4401-acd4-de1884942a52
2008-12-10* bugfix.(Request tranceport status)suVene
* mod $U.A() for arguments. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26326 d0d07461-0603-4401-acd4-de1884942a52
2008-12-09* _libly.js ver.0.1.4にあわせた修正 [26222]suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26225 d0d07461-0603-4401-acd4-de1884942a52
2008-12-09$U整理。Request の getNodesFromXPath などを $U に移動など。suVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26222 d0d07461-0603-4401-acd4-de1884942a52
2008-12-09 * ↵drry
調べたところこのコンテキストでは「`--`」許容でありました。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26161 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-08*PLUGIN_INFO対応(@see ↵suVene
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@26143 d0d07461-0603-4401-acd4-de1884942a52
2008-12-08PLUGIN_INFO対応 @see ↵suVene
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@26139 d0d07461-0603-4401-acd4-de1884942a52
2008-12-08yappari rename _libly.jssuVene
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@26135 d0d07461-0603-4401-acd4-de1884942a52
ipter == you can access to the sandbox of Greasemonkey !!! liberator.plugins.gmperator: allItem: return object of key: {panalID} value: {GmContainer} {panelID}: @see gBrowser.mTags[].linkedPanel currentPanel: currentContainer : return the current {GmContainer} object currentSandbox : return the current sandbox object gmScripts : return array of {userScripts} {userScripts} => (: - filename : {String} - name : {String} - namespace : {String} - description: {String} - enabled : {Boolean} - includes : {String[]} - encludes : {String[]} ) ]]></detail> </VimperatorPlugin>; (function(){ const Cc = Components.classes; const Ci = Components.interfaces; const gmID = '@greasemonkey.mozdev.org/greasemonkey-service;1'; if (!Cc[gmID]){ liberator.log('Greasemonkey is not installed',0); return; } liberator.plugins.gmperator = (function(){ //{{{ // ----------------------- // PUBLIC section // ----------------------- // {{{ var manager = { register: function (uri,sandbox,script){ var panelID = getPanelID(sandbox.window); if (!panelID) return; var gmCon; if (containers[panelID] && containers[panelID].uri == uri){ gmCon = containers[panelID]; } else { gmCon = new GmContainer(uri,sandbox); containers[panelID] = gmCon; this.__defineGetter__(panelID,function() gmCon); //liberator.log('gmpeartor: Registered: ' + panelID + ' - ' + uri,8); } gmCon.sandbox = sandbox; gmCon.addScript(script); gmCon.uri = uri; triggerGMEvent('GMInjectedScript',uri,script._filename); if (panelID == this.currentPanel){ triggerGMEvent('GMActiveScript',uri,script._filename); } }, get gmScripts() GM_getConfig().scripts, get allItem() containers, get currentPanel() getBrowser().mCurrentTab.linkedPanel, get currentContainer() containers[this.currentPanel] || null, get currentSandbox(){ var id = this.currentPanel; return containers[id] ? containers[id].sandbox : null; }, getSandboxFromWindow: function(win){ for each (let c in containers){ if (c.sandbox.window == win) return sandbox; } return null; }, getContainersFromURI: function(uri){ var list = []; for each (let c in containers){ if (c.uri == uri) list.push(c); } return list.length > 0 ? list : null; } }; // }}} // ----------------------- // PRIVATE section // ----------------------- // {{{ var containers = {}; var gmSvc = Cc[gmID].getService().wrappedJSObject; function appendCode(target,name,func){ var original = target[name]; target[name] = function(){ var tmp = original.apply(target,arguments); func.apply(this,arguments); return tmp; }; } appendCode(gmSvc,'evalInSandbox',function(code,uri,sandbox,script){ liberator.plugins.gmperator.register(uri,sandbox,script); }); function getPanelID(win){ var tabs = getBrowser().mTabs; for (let i=0,l=tabs.length; i<l; i++){ let tab = tabs.item(i); if (tab.linkedBrowser.contentWindow == win){ return tab.linkedPanel; } } } function updateGmContainerList(event){ var t = event.target; if (t && t.localName == 'tab' && t.linkedPanel){ delete containers[t.linkedPanel]; delete liberator.plugins.gmperator[t.linkedPanel]; } } function dispatchGMTabSelect(event){ var panelID = event.originalTarget.linkedPanel; var container; if (container = containers[panelID]){ liberator.log(panelID + '\n' + container.uri +'\n'+ container.scripts.length,8); container.scripts.forEach(function(script){ triggerGMEvent('GMActiveScript',container.uri,script._filename); }); } } /** * trigger autocommand * @param {String} name Event name * @param {String} uri * @param {String} filename script filename */ function triggerGMEvent(name,uri,filename){ autocommands.trigger(name,uri+'\n'+filename); liberator.log('gmpeartor: '+ name + ' ' + uri+'\n'+filename,8); } getBrowser().mTabContainer.addEventListener('TabClose',updateGmContainerList,false); getBrowser().mTabBox.addEventListener('TabSelect',dispatchGMTabSelect,false); config.autocommands.push(['GMInjectedScript','Triggered when UserScript is injected']); config.autocommands.push(['GMActiveScript','Triggered when location is changed and injected UserScripts are exist']); config.dialogs.push(['userscriptmanager','Greasemonkey Manager',function(){GM_openUserScriptManager();}]); // }}} return manager; })(); //}}} // --------------------------- // User Command // --------------------------- commands.addUserCommand(['gmli[st]','lsgm'],'list Greasemonkey scripts', //{{{ function(args){ var xml = <></>; var scripts = GM_getConfig().scripts; var reg; if (args.bang || args.string == 'full'){ reg = new RegExp(); } else if (args.string){ reg = new RegExp(args.string,'i'); } if (reg){ for each (let s in scripts){ if (reg.test(s.name) || reg.test(s._filename)){ xml += scriptToString(s); } } } else { let table = <table/>; let tr; for each (let script in scripts){ tr = <tr/>; if (script.enabled){ tr.* += <td style="font-weight:bold;">{script.name}</td>; } else { tr.* += <td>{script.name}</td>; } tr.* += <td>({script._filename})</td>; table.* += tr; } xml += table; } liberator.echo(xml,true); function scriptToString(script){ var table = <table> <caption class="hl-Title" style="text-align:left">{script.name}</caption> </table>; [['FileName','_filename'],['NameSpace','namespace'],['Description','description'], ['Includes','includes'],['Excludes','excludes'],['Enabled','enabled']].forEach(function(prop){ let tr = <tr> <th style="font-weight:bold;text-align:left;vertical-align:top">{prop[0]}</th> </tr>; let contents = script[prop[1]]; if (typeof contents == 'string' || typeof contents == 'boolean'){ tr.* += <td>{contents}</td>; } else { let td = <td/>; for (let i=0,l=contents.length; i<l; i++){ td.* += contents[i]; if (contents[i+1]) td.* += <br/>; } tr.* += td; } table.* += tr; }); return table; } },{ bang:true } ); //}}} commands.addUserCommand(['gmlo[ad]'],'load Greasemonkey scripts', //{{{ function(args){ if (!args.string){ liberator.echoerr('Usage: :gmlo[ad][!] {name|filename}'); return; } var scripts = GM_getConfig().scripts; var script; for (let i=0,l=scripts.length; i<l; i++){ if (scripts[i]._filename == args.string || scripts[i].name == args.string){ script = scripts[i]; break; } } if (!script){ liberator.echoerr('no such a user script'); return; } else if (liberator.plugins.gmperator.currentContainer.hasScript(script._filename) && !args.bang){ liberator.echoerr(script._filename + ' is already loaded!'); return; } else { liberator.echo('loading: ' +script._filename); } var href,unsafewin; try { href = buffer.URL; unsafewin = window.content.document.defaultView.wrappedJSObject; GM_BrowserUI.gmSvc.wrappedJSObject.injectScripts([script],href,unsafewin,window); } catch (e){ liberator.log(e); liberator.echoerr(e); } /* // do you have idea how to dispatch load event to only the script ? window.setTimeout(function(){ var loadEvent = document.createEvent('Event'); loadEvent.initEvent('load',true,true,window.content.document,1); window.content.document.dispatchEvent(loadEvent); },100); */ },{ completer: function(context) scriptsCompleter(context.filter,true) } ); //}}} commands.addUserCommand(['gmset'],'change settings for Greasemonkey scripts', //{{{ function(args){ if (args.length == 0){ if (args.bang) GM_setEnabled(!GM_getEnabled()); // toggle enable/disable Greasemonkey return; } var filename = args[0]; var config = GM_getConfig(); var script; for (let i=0,l=config.scripts.length; i<l; i++){ if (config.scripts[i]._filename == filename){ script = config.scripts[i]; break; } } if (!script) return; if (args.bang){ // toggle enable/disable the script if {filename} is exist script.enabled = !script.enabled; } if (args['-name']) script.name = args['-name']; if (args['-include']) script.include = args['-include']; if (args['-exclude']) script.exclude = args['-exclude']; config._save(); },{ completer: function(context) scriptsCompleter(context.filter,false), options: [ [['-name','-n'], commands.OPTION_STRING], [['-include','-i'], commands.OPTION_LIST], [['-exclude','-e'], commands.OPTION_LIST] ], bang:true } ); //}}} commands.addUserCommand(['gmcommand','gmcmd'],'run Greasemonkey Command', //{{{ function(args,special){ var commander = GM_BrowserUI.getCommander(content); var commandName = args[0]; for (let i=0,l=commander.menuItems.length; i<l; i++){ let menuItem = commander.menuItems[i]; if (menuItem.getAttribute('label') == commandName){ menuItem._commandFunc(); return; } } liberator.echoerr(commandName + ' is not defined userscript command.'); }, { completer: function(context){ var items = GM_BrowserUI.getCommander(content).menuItems; var completions = []; var exp = new RegExp(context.filter,'i'); context.title = ["UserScript's Commands"]; context.completions = [[items[i].getAttribute('label'),'-'] for (i in items)].filter(function(item){ return this.test(item[0]); },exp); }, argCount: "1" } ); //}}} // --------------------------- // Utils // --------------------------- /** Grasemonkey sandbox container {{{ * @param {String} uri * @param {Sandbox} sandbox * @param {Array} scripts */ function GmContainer(uri,sandbox){ this.uri = uri; this.sandbox = sandbox; this.scripts = []; } GmContainer.prototype = { addScript : function(script){ if (!this.hasScript(script)){ return this.scripts.push(script); } return false; }, hasScript : function(script){ var filename; switch (typeof script){ case 'object': filename = script._filename; break; case 'string': filename = script; break; default: return null; } return this.scripts.some(function(s) s._filename == filename); } }; // }}} function scriptsCompleter(filter,flag){ //{{{ var candidates = []; var scripts = GM_getConfig().scripts; var isAll = false; if (!filter) isAll=true; if (flag){ for each (let s in scripts){ if (isAll || s.name.toLowerCase().indexOf(filter) == 0 || s._filename.indexOf(filter) == 0) { candidates.push([s.name,s.description]); candidates.push([s._filename,s.description]); } } } else { for each (let s in scripts){ if (isAll || s._filename.indexOf(filter) == 0) { candidates.push([s._filename,s.description]); } } } return [0,candidates]; } //}}} })(); // vim: fdm=marker sw=4 ts=4 et: