aboutsummaryrefslogtreecommitdiffstats
path: root/notifier.js
diff options
context:
space:
mode:
Diffstat (limited to 'notifier.js')
-rw-r--r--notifier.js135
1 files changed, 70 insertions, 65 deletions
diff --git a/notifier.js b/notifier.js
index 2b084ba..6bc6277 100644
--- a/notifier.js
+++ b/notifier.js
@@ -1,110 +1,113 @@
// PLUGIN_INFO//{{{
var PLUGIN_INFO =
<VimperatorPlugin>
- <name>{name}</name>
+ <name>{NAME}</name>
<description>notice of change framework.</description>
<description lang="ja">変更通知フレームワーク。</description>
<author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author>
- <version>0.1.1</version>
+ <version>0.1.2</version>
<minVersion>2.0pre</minVersion>
<maxVersion>2.0pre</maxVersion>
<detail><![CDATA[
== NEEDS LIBLARY ==
-_libly.js(ver.0.1.4)
+- _libly.js(ver.0.1.9)
@see http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/_libly.js
-== Command ==
+== Commands ==
:notifierstart:
- 変更通知をスタートします。
+ 変更通知をスタートします。
:notifierrestart:
- 変更通知をリスタートします。
+ 変更通知をリスタートします。
:notifierstop:
- 変更通知をストップします。
+ 変更通知をストップします。
== Observer ==
-* 通知された変更を扱うオブジェクトを定義します。
+=== 概要 ===
+通知された変更を扱うオブジェクトを定義します
Subject からの Message オブジェクトを解析し、何らかの動作を行います。
Observer ⇒ Subject への依存は高くて OK です。
-* 命名規約
-prefix に 'observer_' を付け、'rumtimepath/notifier' の下にインストールして下さい。
-ex.)'${rumtimepath}/notifier/observer_XXX.js'
+=== 命名規約 ===
+prefix に 'observer_' を付け、'rumtimepath/plugin/notifier' の下にインストールして下さい。
+e.g.)'${rumtimepath}/notifier/observer_XXX.js'
-* 登録方法
+=== 登録方法 ===
liberator.plugins.notifier.observer.register(baseClass, extendsMethods)
baseClass:
- 基底クラスとなります。現在以下の基底クラスが存在します。
- - liberator.plugins.notifier.Observer
+ 基底クラスとなります。現在以下の基底クラスが存在します。
+ - liberator.plugins.notifier.Observer
extendsMethosd:
- 基底クラスの拡張となるメソッドをハッシュ形式で渡します。
- 実装するメソッドは基底クラスのルールに従って下さい。
+ 基底クラスの拡張となるメソッドをハッシュ形式で渡します。
+ 実装するメソッドは基底クラスのルールに従って下さい。
-* 基底クラスの説明
-** librator.plugins.notifier.Observer
+=== 基底クラスの説明 ===
+==== librator.plugins.notifier.Observer ====
Observerの基本クラスです。
initialize():
- 必要の無い場合、実装しなくても OK です。
- インスタンス生成時に1度だけフレームワークによって呼び出されます。
- 初期化処理など必要な処理を実装して下さい。
+ 必要の無い場合、実装しなくても OK です。
+ インスタンス生成時に1度だけフレームワークによって呼び出されます。
+ 初期化処理など必要な処理を実装して下さい。
update(liberator.plugins.notifier.Message):
- 必ず実装して下さい。
- Subject からの変更通知がなされた場合、引数 Message と共にフレームワークより呼び出されます。
+ 必ず実装して下さい。
+ Subject からの変更通知がなされた場合、引数 Message と共にフレームワークより呼び出されます。
== Subject ==
-* 変更を検知し Observer に通知します。
+=== 概要 ===
+変更を検知し Observer に通知します。
原則、observer との依存を少なくして下さい。
(Message の解析の役割は Observer にある)
-* 命名規約
-prefix に 'subject_' を付け、'rumtimepath/notifier' の下にインストールして下さい。
-ex.)'${rumtimepath}/notifier/subject_XXX.js'
+=== 命名規約 ===
+prefix に 'subject_' を付け、'rumtimepath/plugin/notifier' の下にインストールして下さい。
+e.g.)'${rumtimepath}/notifier/subject_XXX.js'
-* 登録方法
+=== 登録方法 ===
liberator.plugins.notifier.subject.register(baseClass, extendsMethods)
baseClass:
- 基底クラスとなります。現在以下の基底クラスが存在します。
- - liberator.plugins.notifier.Subject
- - liberator.plugins.notifier.SubjectHttp
+ 基底クラスとなります。現在以下の基底クラスが存在します。
+ - liberator.plugins.notifier.Subject
+ - liberator.plugins.notifier.SubjectHttp
extendsMethosd:
- 基底クラスへの拡張をハッシュ形式で渡します。
+ 基底クラスへの拡張をハッシュ形式で渡します。
-* 基底クラスの説明
-** librator.plugins.notifier.Subject
+=== 基底クラスの説明 ===
+==== librator.plugins.notifier.Subject ====
Subject の基本クラスです。
interval:
- 秒で変更チェックするインターバルを指定します。デフォルトは 60 です。
+ 秒で変更チェックするインターバルを指定します。デフォルトは 60 です。
initialize():
- 必要の無い場合、実装しなくても OK です。
- インスタンス生成時に1度だけフレームワークによって呼び出されます。
- 初期化処理など必要な処理を実装して下さい。
+ 必要の無い場合、実装しなくても OK です。
+ インスタンス生成時に1度だけフレームワークによって呼び出されます。
+ 初期化処理など必要な処理を実装して下さい。
check():
- 必ず実装して下さい。
- 指定したインターバルごとにフレームワークによって呼び出されます。
- 変更を検知した場合、liberator.plugins.notifier.Message のインスタンスを引数に
- this.notify(message) を呼び出してください。
+ 必ず実装して下さい。
+ 指定したインターバルごとにフレームワークによって呼び出されます。
+ 変更を検知した場合、liberator.plugins.notifier.Message のインスタンスを引数に
+ this.notify(message) を呼び出してください。
-** librator.plugins.notifier.SubjectHttp
+==== librator.plugins.notifier.SubjectHttp ====
Httpを利用した変更検知の基底クラスです。
リクエスト内容をキャッシュします。
options{}:
- url:
- URL を指定します。
- headers{}:
- リクエストに header が必要な場合ハッシュで指定します。
- extra{}:
- リクエストのオプションです。ハッシュで指定します。
- 以下の key が有効です。
- asynchronose (false), encoding(default utf-8)
+ url:
+ URL を指定します。
+ headers{}:
+ リクエストに header が必要な場合ハッシュで指定します。
+ extra{}:
+ リクエストのオプションです。ハッシュで指定します。
+ 以下の key が有効です。
+ asynchronous (false), encoding(default utf-8)
parse(liberator.pluginsnotifier.Request):
- 必ず実装して下さい。
- リクエストを解析した結果を返却して下さい。
+ 必ず実装して下さい。
+ リクエストを解析した結果を返却して下さい。
diff(cache, parsed):
- 必ず実装して下さい。
- this.parse() による解析結果と、そのキャッシュとの差分を抽出して返却して下さい。
+ 必要の無い場合、実装しなくても OK です。
+ デフォルトの実装は cache を返却します。
+ this.parse() による解析結果と、そのキャッシュとの差分を抽出して返却して下さい。
buildMessages(diff):
- 必ず実装して下さい。
- this.diff() により抽出されたオブジェクトを元に、liberator.plugins.notifier.Message のインスタンス、
- または、その配列を返却して下さい。
+ 必ず実装して下さい。
+ this.diff() により抽出されたオブジェクトを元に、liberator.plugins.notifier.Message のインスタンス、
+ または、その配列を返却して下さい。
]]></detail>
</VimperatorPlugin>;
//}}}
@@ -167,12 +170,13 @@ function bootstrap() {
this.initialize.apply(this, arguments);
};
Message.prototype = {
- initialize: function(title, message, options) {
+ initialize: function(title, message, link, options) {
try {
if (typeof title == 'undefined' || title == null) throw 'title is undefined.';
if (typeof message == 'undefined' || message == null) throw 'message is undefined.';
this.title = title;
this.message = message;
+ this.link = link;
this.options = options;
} catch (e) {
logger.log('Message.initialize error: ' + e);
@@ -232,7 +236,7 @@ function bootstrap() {
var req = new libly.Request(
this.options.url,
this.options.headers,
- this.options.extra
+ $U.extend({ asynchronous: true }, this.options.extra)
);
req.addEventListener('onSuccess', $U.bind(this, function(res) {
logger.log('initialized');
@@ -249,7 +253,7 @@ function bootstrap() {
var req = new libly.Request(
this.options.url,
this.options.headers,
- this.options.extra
+ $U.extend({ asynchronous: false }, this.options.extra)
);
req.addEventListener('onSuccess', $U.bind(this, function(res) {
var parsed, diff;
@@ -258,7 +262,7 @@ function bootstrap() {
if (diff && (typeof diff.length != 'undefined' && diff.length > 0)) {
this.cache = parsed;
if (typeof this.buildMessages == 'function') {
- let messages = this.buildMessages([].concat(diff));
+ let messages = this.buildMessages(diff);
[].concat(messages).forEach($U.bind(this, function(m) {
this.notify(m);
liberator.sleep(1500);
@@ -267,7 +271,8 @@ function bootstrap() {
}
}));
req.get();
- }
+ },
+ diff: function(cache, parsed) cache
});//}}}
var Notifier = function() {//{{{
@@ -337,11 +342,11 @@ function bootstrap() {
liberator.dump('window:' + window.content.window);
this.subjects.getPlugins().forEach(function(s) {
let now = new Date();
- if (!s.__nextTime) s.nexttime = now;
+ if (!s.__nextTime) s.__nextTime = now;
if (s.interval > 0 && !s.isActive && s.__nextTime <= now) {
+ s.isActive = true;
setTimeout(function() {
let start = (new Date()).getTime();
- s.isActive = true;
if (typeof s.check == 'function')
try { s.check(); } catch (e) { logger.log('subject.check error: ' + e) }
let stop = (new Date()).getTime();