diff options
author | suVene | 2009-01-04 00:53:27 +0000 |
---|---|---|
committer | suVene | 2009-01-04 00:53:27 +0000 |
commit | 9e6e587e50efa8edff91307f4b6ebaa4cd6233db (patch) | |
tree | 8eeb6c8059954f1a5287d382153322654a736ea2 /notifier | |
parent | 1cb3e00c80a10947c821f47e162280c75295efcf (diff) | |
download | vimperator-plugins-9e6e587e50efa8edff91307f4b6ebaa4cd6233db.tar.bz2 |
- remove判定整理。
- 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
Diffstat (limited to 'notifier')
-rw-r--r-- | notifier/observer_growl.js | 56 | ||||
-rwxr-xr-x | notifier/subject_liberator_echomsg.js | 14 |
2 files changed, 44 insertions, 26 deletions
diff --git a/notifier/observer_growl.js b/notifier/observer_growl.js index 8142122..1c54db3 100644 --- a/notifier/observer_growl.js +++ b/notifier/observer_growl.js @@ -11,7 +11,7 @@ var PLUGIN_INFO = <description>notification from the subjects is notified to you by the Growl style.</description> <description lang="ja">Growl風通知。</description> <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> - <version>0.1.5</version> + <version>0.1.6</version> <license>MIT</license> <minVersion>2.0pre</minVersion> <maxVersion>2.0pre</maxVersion> @@ -23,7 +23,7 @@ liberator.globalVariables.observer_growl_settings = { 'message title': { life: number, // sec (10 sec by default) sticky: bool, // true or false (false by default) - sticky_keyword: [ // keyword ary + sticky_keywords: [ // keyword ary 'keyword1', 'keyword2' ], @@ -36,14 +36,13 @@ e.g.) >|| javascript <<EOM liberator.globalVariables.observer_growl_settings = { - 'Hatelabo bottle': { life: 20, sticky_keyword: 'はてな' }, + 'Hatelabo bottle': { life: 20, sticky_keywords: ['はてな'] }, 'Weather forecast by Yahoo!': { sticky: true } }; EOM ||< -== Todo == -- sticky_keyword +== ToDo == - hide ]]></detail> </VimperatorPlugin>; @@ -61,16 +60,17 @@ var Growl = function() {//{{{ this.initialize.apply(this, arguments); }; Growl.prototype = { - initialize: function(node, options) { + initialize: function(node, options, message) { this.defaults = { life: 10, sticky: false, - sticky_keyword: [], + sticky_keywords: [], hide: false }; this.node = node; this.created = new Date(); this.options = $U.extend(this.defaults, (options || {})); + this.message = message; var div = node.getElementsByTagName('div'); div[0].addEventListener("click", $U.bind(this, this.remove), false); }, @@ -149,7 +149,7 @@ notifier.observer.register(notifier.Observer, { <div class="message">{new XMLList(message.message || '')}</div> </div>; node = $U.xmlToDom(html, doc); - node.__data__ = new Growl(node, this.settings[message.title]); + node.__data__ = new Growl(node, this.settings[message.title], message); return node; }, checkStatus: function(force) { @@ -163,23 +163,15 @@ notifier.observer.register(notifier.Observer, { for (let i = 0, len = container.childNodes.length; i < len; i++) { let item = container.childNodes[i]; let growl = item.__data__; - if (force || - (growl && - !(growl.options.sticky || - growl.options.sticky_keyword.some(function(keyword) this.indexOf(keyword) > -1, item.childNodes[2].textContent)) && - growl.created && - growl.created.getTime() + (growl.options.life * 1000) < (new Date()).getTime() - ) - ) { - if (item.id != 'observer_growl_closer') - removeNodes.push(item); - } - if (len == 1) { - let elem = container.childNodes[0]; - if (elem.id == 'observer_growl_closer') - elem.parentNode.removeChild(elem); + 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()); @@ -189,10 +181,26 @@ notifier.observer.register(notifier.Observer, { } }, + canRemove: function(growl) { + var ret = false; + + if (!growl || !growl.created) return ret; + if (growl.options.sticky) return ret; + + var text = growl.message.title + ' ' + growl.message.message.replace(/<.*?>/g, ''); + if (growl.options.sticky_keywords.some(function(k) text.indexOf(k) > -1)) return ret; + + if (growl.created.getTime() + (growl.options.life * 1000) > (new Date()).getTime()) + return ret; + + ret = true; + return ret; + }, removeAll: function(a) { this.checkStatus('EVENT_REMOVE_ALL'); var closer = window.content.document.getElementById("observer_growl_closer"); - closer.parentNode.removeChild(closer); + if (closer) + closer.parentNode.removeChild(closer); }, shutdown: function() { for (let [id, flg] in Iterator(this.intervalIDs)) { diff --git a/notifier/subject_liberator_echomsg.js b/notifier/subject_liberator_echomsg.js index c435474..5c963ef 100755 --- a/notifier/subject_liberator_echomsg.js +++ b/notifier/subject_liberator_echomsg.js @@ -11,11 +11,20 @@ var PLUGIN_INFO = <description>liberator.echomsg notice.</description> <description lang="ja">liberator.echomsg 通知。</description> <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> - <version>0.1.0</version> + <version>0.1.1</version> <license>MIT</license> <minVersion>2.0pre</minVersion> <maxVersion>2.0pre</maxVersion> <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/notifier/subject_liberator_echomsg.js</updateURL> + <detail><![CDATA[ +== Settings == +>|| +liberator.globalVariables.subject_liberator_echomsg_filter = [ + 'Auto commands for', + '^autocommand' +]; +||< + ]]></detail> </VimperatorPlugin>; //}}} (function() { @@ -33,6 +42,7 @@ notifier.subject.register(notifier.Subject, { this.original = liberator.echomsg; this.__updating__ = false; this.messages = []; + this.filter = liberator.globalVariables.subject_liberator_echomsg_filter || []; var self = this; @@ -40,7 +50,6 @@ notifier.subject.register(notifier.Subject, { while (self.waiting) liberator.sleep(100); - logger.log('message: ' + message); self.messages.push(message); return self.original.apply(null, arguments); }; @@ -48,6 +57,7 @@ notifier.subject.register(notifier.Subject, { check: function() { try { this.__updating__ = true; + this.messages = this.messages.filter(function(m) !this.filter.some(function(f) (m.indexOf(f) > -1 || m.match(f))), this); if (!this.messages.length) return; var msg = '<ul><li>' + this.messages.join('</li><li>') + '</li></ul>'; |