aboutsummaryrefslogtreecommitdiffstats
path: root/stella.js
AgeCommit message (Expand)Author
2010-01-22ニコニコ動画でフルスクリーンから復帰したときに、ス...anekos
2010-01-22上手く動いていないフルスクリーン化機能を削除anekos
2010-01-03ニコニコ動画の変更に対応anekos
2009-11-03XPath 修正anekos
2009-11-02Follow HEAD (2.3pre)anekos
2009-08-29初期状態で時間表示パネルが隠れていなかったのを修正anekos
2009-08-27Follow HEADanekos
2009-07-08XPath の修正anekos
2009-04-06メニューキャンセル用のボタン追加anekos
2009-04-03ニコニコ動画の変更に対応anekos
2009-03-21コメント追加anekos
2009-03-21OooOOOooOoOoopsanekos
2009-03-21自動フルスクリーンの修正と微妙な仕様変更anekos
2009-03-04警告が大量にでていたので改善anekos
2009-02-07時間のところでホイールでシークできるようにした。anekos
2009-02-06オススメ動画の API 取得に失敗したときは、キャッシュに...anekos
2009-02-04ニコニコ動画でフルスクリーン復帰後にプレイヤーサイ...anekos
2009-02-04PLUGIN_INFO 追記anekos
2009-02-04PLUGIN_INFO 追記anekos
2009-02-04クリックによるシークのバグ修正anekos
2009-02-04タブを切り替えたときにも自動フルスクリーンしてしま...anekos
2009-02-04自動フルスクリーンanekos
2009-02-04コメント欄関連動画タイトルの文字列長の最大を設定するanekos
2009-02-04ニコニコ動画のコメント動画からリンクを抽出して、関...anekos
2009-01-25起動時にエラーを吐くバグを修正anekos
2009-01-20関連動画のメニューが開くたびに増えていたのを修正anekos
2009-01-12Relations メニューを実装anekos
2008-12-24add updateURL for pluginManager.jssuVene
2008-12-22 * added some semicolons.drry
2008-12-18フルスクリーン時にウインドウのリサイズが起こると馬...anekos
2008-12-18高さが戻らないバグが修正されてなかったので修正。anekos
2008-12-18raise の書き換え忘れを修正anekos
2008-12-17Utils 関数を U オブジェクトに突っ込んだ。anekos
2008-12-17 * fixed a regex.drry
2008-12-17コメントの修正などanekos
2008-12-17対応していない機能を利用しようとしたときに、エラー...anekos
2008-12-17YouTube の関連動画機能を実装anekos
2008-12-17コメント機能追加anekos
2008-12-17コメント機能の未完成品anekos
2008-12-16 * fixed regexes.drry
2008-12-16es鯖に対応(なにこれ?)anekos
2008-12-16ライセンスの変更。anekos
2008-12-14ドキュメント更新anekos
2008-12-14関数などの並び順を修正anekos
2008-12-13 * fixed regexes.drry
2008-12-13fromTimeCode に数値が入ると失敗するのを修正anekos
2008-12-13Thanks を追加anekos
2008-12-13:stlarge 追加anekos
2008-12-08ようつべのフルスクリーンをマシにしたanekos
2008-12-07 * fixed regexes.drry
life: 20, sticky_keywords: ['はてな'] }, 'Weather forecast by Yahoo!': { sticky: true } }; EOM ||< == ToDo == - hide ]]></detail> </VimperatorPlugin>; //}}} (function() { var notifier = liberator.plugins.notifier; if (!notifier) return; var libly = notifier.libly; var $U = libly.$U; var logger = $U.getLogger('observer_growl'); var Growl = function() {//{{{ this.initialize.apply(this, arguments); }; Growl.prototype = { initialize: function(node, options, message) { this.defaults = { life: 10, sticky: false, sticky_keywords: [], hide: false }; this.node = node; this.created = new Date(); this.options = $U.extend(this.defaults, (options || {})); this.sticky_keywords_exp = this.options.sticky_keywords.map(function(k) new RegExp(k, 'i')); this.message = message; var div = node.getElementsByTagName('div'); div[0].addEventListener('click', $U.bind(this, this.remove), false); }, remove: function() { // TODO: animation!!!! this.node.parentNode.removeChild(this.node); }, };//}}} notifier.observer.register(notifier.Observer, { initialize: function () { this.count = 1; this.settings; this.intervalIDs = {}; io.getRuntimeDirectories('').forEach(function(dir) { var path = io.expandPath(dir.path + '/plugin/notifier'); $U.readDirectory(path, '^growl', function(f) { try { io.source(f.path, true); logger.log('load success: ' + f.leafName); } catch (e) { logger.log('load failed: ' + f.leafName); } }); }); this.settings = liberator.globalVariables.observer_growl_settings || {}; }, update: function(message) { var doc = window.content.document; var container = doc.getElementById('observer_growl'); if (!container) { doc.body.appendChild($U.xmlToDom(<div id="observer_growl" class="observer_growl top-right"/>, doc)); container = doc.getElementById('observer_growl'); window.content.addEventListener('unload', $U.bind(this, function() { if (container.__interval__) { clearInterval(container.__interval__); this.intervalIDs[container.__interval__] = false; } }), false); } var closer = doc.getElementById('observer_growl_closer'); var notification = this.createPopup(message, doc, container); // TODO: animation!!! //container.appendChild(doc.importNode(notification, true)); container.appendChild(notification); if (container.childNodes.length == 1 && !container.__interval__) { let interval = setInterval($U.bind(this, this.checkStatus), 1000); this.intervalIDs[interval] = true; container.__interval__ = interval; } else if (container.childNodes.length >= 2) { if (!closer) { closer = $U.xmlToDom(<div id="observer_growl_closer" class="observer_growl_closer center" style="display: block;">[close all]</div>, doc); container.insertBefore(closer, container.firstChild); closer.addEventListener('click', $U.bind(this, this.removeAll, 'test'), false); } } this.count++; }, createPopup: function(message, doc, container) { var node; var html = <div class="observer_growl_notification" style="display: block;"> <div class="close">&#215;</div> <div class="header">{new XMLList( (message.link ? '<a href="' + message.link + '">' : '') + this.count + ': ' + message.title + (message.link ? '</a>' : '') )}</div> <div class="message">{new XMLList(message.message || '')}</div> </div>; node = $U.xmlToDom(html, doc); node.__data__ = new Growl(node, this.settings[message.title], message); return node; }, checkStatus: function(force) { force = force == 'EVENT_REMOVE_ALL'; var doc = window.content.document; var container = doc.getElementById('observer_growl'); if (!container) return; var removeNodes = []; for (let i = 0, len = container.childNodes.length; i < len; i++) { let item = container.childNodes[i]; let growl = item.__data__; if (item.id == 'observer_growl_closer') { if (len == 1) item.parentNode.removeChild(item); continue; } if (force || this.canRemove(growl)) removeNodes.push(item); } removeNodes.forEach(function(element) element.__data__.remove()); if (force || container.childNodes.length == 0) { clearInterval(container.__interval__); container.__interval__ = 0; } }, canRemove: function(growl) { if (!growl || !growl.created || growl.options.sticky) return false; var text = growl.message.title + ' ' + growl.message.message.replace(/(?:<[^>]*>)+/g, ''); if (growl.sticky_keywords_exp.some(function(k) k.test(text)) || growl.created.getTime() + growl.options.life * 1000 > new Date().getTime()) return false; return true; }, removeAll: function(a) { this.checkStatus('EVENT_REMOVE_ALL'); var closer = window.content.document.getElementById('observer_growl_closer'); if (closer) closer.parentNode.removeChild(closer); }, shutdown: function() { for (let [id, flg] in Iterator(this.intervalIDs)) { if (!flg) return; clearInterval(id); this.intervalIDs[id] = false; } } }); })(); // vim: set fdm=marker sw=4 ts=4 sts=0 et: