diff options
author | suVene | 2008-12-08 18:04:17 +0000 |
---|---|---|
committer | suVene | 2008-12-08 18:04:17 +0000 |
commit | 4012d388f4e4698ac13e30f0d8d3c310cdfe55d5 (patch) | |
tree | a5759baaed32f98fefc96af30d3b930d4675e9e8 /notifier | |
parent | a9eaeea1f3d7fdff871a94801d7b278b5def26ba (diff) | |
download | vimperator-plugins-4012d388f4e4698ac13e30f0d8d3c310cdfe55d5.tar.bz2 |
*SubjectHttp定義.
*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
Diffstat (limited to 'notifier')
-rw-r--r-- | notifier/observer_growl.js | 60 | ||||
-rw-r--r-- | notifier/subject_hatelabo_bottle.js | 89 |
2 files changed, 76 insertions, 73 deletions
diff --git a/notifier/observer_growl.js b/notifier/observer_growl.js index e8d61e5..0a3d1d3 100644 --- a/notifier/observer_growl.js +++ b/notifier/observer_growl.js @@ -1,17 +1,17 @@ -/** - * notifier.js plugin observer - * @name observer_growl.js - * @description growl when notified. - * @description-ja Growl風通知。 - * @author suVene suvene@zeromemory.info - * @version 0.1.0 - * Last Change: 07-Dec-2008. - * - * use jQuery - * http://jquery.com/ - * use JGrowl - * http://stanlemon.net/projects/jgrowl.html - */ +// PLUGIN_INFO//{{{ +var PLUGIN_INFO = +<VimperatorPlugin> + <name>{name}</name> + <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.0</version> + <minVersion>2.0pre</minVersion> + <maxVersion>2.0pre</maxVersion> + <detail><![CDATA[ + ]]></detail> +</VimperatorPlugin>; +//}}} (function() { var notifier = liberator.plugins.notifier; @@ -28,22 +28,23 @@ Growl.prototype = { defaults: { life: 5000 }, - initialize: function(dom, container) { + initialize: function(dom, container, options) { this.dom = dom; this.container = container; this.created = new Date(); - this.life = this.defaults.life; + this.options = $U.extend(this.defaults, (options || {})); + this.life = this.options.life; dom.childNodes[0].addEventListener("click", $U.bind(this, this.remove), false); }, remove: function() { + // TODO: animation!!!! this.container.removeChild(this.dom); }, }//}}} -notifier.observer.register({ +notifier.observer.register(notifier.Observer, { initialize: function () { - logger.log('initialize'); this.count = 1; io.getRuntimeDirectories('').forEach(function(dir) { @@ -59,7 +60,6 @@ notifier.observer.register({ }); }, update: function(message) { - logger.log('update:' + this.count); var doc = window.content.document; var container = doc.getElementById("observer_growl"); @@ -68,8 +68,9 @@ notifier.observer.register({ container = doc.getElementById("observer_growl"); } - this.createPopup(doc, message, container); - container.appendChild(this.createPopup(doc, message, container)); + var notification = this.createPopup(message, doc, container); + // TODO: animation!!! + container.appendChild(notification); if (container.childNodes.length == 1) { let interval = setInterval($U.bind(this, this.checkStatus), 1000); @@ -78,17 +79,16 @@ notifier.observer.register({ this.count++; }, - createPopup: function(doc, message, nodes) { + createPopup: function(message, doc, nodes) { var dom; var html = - <div class="observer_growl_notification" style="display: block;"> - <div class="close">×</div> - <div class="header">{util.escapeHTML(this.count + ': ' + message.title)}</div> - <div class="message">{util.escapeHTML(message.message)}</div> - </div>; + <div class="observer_growl_notification" style="display: block;"> + <div class="close">×</div> + <div class="header">{new XMLList(this.count + ': ' + message.title)}</div> + <div class="message">{new XMLList(message.message || '')}</div> + </div>; dom = util.xmlToDom(html, doc, nodes); - dom.__data__ = new Growl(dom, nodes); - + dom.__data__ = new Growl(dom, nodes, message.options.growl); return dom; }, checkStatus: function() { @@ -106,7 +106,7 @@ notifier.observer.register({ removeNodes.push(item); } } - removeNodes.forEach(function(n) container.removeChild(n)); + removeNodes.forEach(function(element) element.__data__.remove()); if (container.childNodes.length == 0) clearInterval(container.__interval__); diff --git a/notifier/subject_hatelabo_bottle.js b/notifier/subject_hatelabo_bottle.js index 9c4914d..6c4a330 100644 --- a/notifier/subject_hatelabo_bottle.js +++ b/notifier/subject_hatelabo_bottle.js @@ -1,12 +1,17 @@ -/** - * notifier.js plugin subject - * @name subject_hatena_bottle.js - * @description notify if hatena bottle changed. - * @description-ja はてなボトルの変更通知。 - * @author suVene suvene@zeromemory.info - * @version 0.1.0 - * Last Change: 08-Dec-2008. - */ +// PLUGIN_INFO//{{{ +var PLUGIN_INFO = +<VimperatorPlugin> + <name>{name}</name> + <description>notifies if hatena bottle was changed.</description> + <description lang="ja">はてなボトルの変更通知。</description> + <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> + <version>0.1.0</version> + <minVersion>2.0pre</minVersion> + <maxVersion>2.0pre</maxVersion> + <detail><![CDATA[ + ]]></detail> +</VimperatorPlugin>; +//}}} (function() { var notifier = liberator.plugins.notifier; @@ -17,22 +22,14 @@ var $U = libly.$U; var logger = $U.getLogger('subject_hatelabo_bottle'); var URL = 'http://bottle.hatelabo.jp'; +//var URL = 'http://localhost/index.html?a'; -notifier.subject.register({ - interval: 30, - initialize: function() { - this.count = 0; - this.initialized = false; - this.cache; - - var req = new libly.Request(URL); - req.addEventListener('onSuccess', $U.bind(this, function(res) { - logger.log('initialized'); - this.cache = this.parse(res); - if (this.cache) - this.initialized = true; - })); - req.get(); +notifier.subject.register(notifier.SubjectHttp, { + interval: 40, + options: { + url: URL, + headers: null, + extra: null }, parse: function(res) { @@ -44,31 +41,37 @@ notifier.subject.register({ if (!dom) return ret; ret = []; - for (let i = 0, len < dom.childNodes.length; i < len; i++) { + for (let i = 0, len = dom.childNodes.length; i < len; i++) { ret.push(dom.childNodes[i]); } return ret; }, - check: function() { - - if (!this.initialized) return; - - this.count++; - logger.log('check'); - var req = new libly.Request(URL); - req.addEventListener('onSuccess', $U.bind(this, function(res) { - var text = res.responseText; - logger.log('success!! '); - var message = new notifier.Message('TEST', text); - this.notify(message); + diff: function(cache, parsed) { + var ret = []; + parsed.forEach(function(element) { + if (!cache.some(function(c) { if (c.toString() == element.toString()) return true })) + ret.push(element); + }); - if (this.count == 5) { - notifier.subject.unregister(this); - this.count = 0; - } - })); - req.get(); + return ret; + var text = (new XMLSerializer()).serializeToString(parsed[0]) + .replace(/<[^>]+>/g, function(all) all.toLowerCase()) + .replace(/<!--(?:[^-]|-(?!->))*-->/g, ''); // actually + return text; + }, + buildMessages: function(diff) { + var ret = []; + diff.forEach(function(d) { + ret.push( + new notifier.Message('Hatelab bottle', $U.xmlSerialize(d), { + growl: { + life: 7000 + } + }) + ); + }); + return ret; } }); |