diff options
| author | suVene | 2008-12-18 17:27:37 +0000 | 
|---|---|---|
| committer | suVene | 2008-12-18 17:27:37 +0000 | 
| commit | 7e2df6a0694f18c9569744d5707045fbc934f0c1 (patch) | |
| tree | a9a68631640739558845577bf9b60f5150501e60 /notifier | |
| parent | c3edf91140e9f8bef88bc2375f0cea4f2a753541 (diff) | |
| download | vimperator-plugins-7e2df6a0694f18c9569744d5707045fbc934f0c1.tar.bz2 | |
* observer_growl. EventListener の登録失敗回避.[close all]追加.
* subject_weather_yahoo.js url の設定読込み.
* growl.css className modify.
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27040 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'notifier')
| -rw-r--r-- | notifier/growl.css | 4 | ||||
| -rw-r--r-- | notifier/observer_growl.js | 60 | ||||
| -rw-r--r-- | notifier/subject_hatelabo_bottle.js | 3 | ||||
| -rwxr-xr-x | notifier/subject_weather_yahoo.js | 13 | 
4 files changed, 52 insertions, 28 deletions
diff --git a/notifier/growl.css b/notifier/growl.css index d67b681..ab172e0 100644 --- a/notifier/growl.css +++ b/notifier/growl.css @@ -36,12 +36,12 @@ body > div.observer_growl.center {  }  /** Cross Browser Styling **/ -div.center div.observer_growl_notification, div.center div.observer_growl-closer { +div.center div.observer_growl_notification, div.center div.observer_growl_closer {      margin-left: auto;      margin-right: auto;  } -div.observer_growl div.observer_growl_notification, div.observer_growl div.observer_growl-closer { +div.observer_growl div.observer_growl_notification, div.observer_growl div.observer_growl_closer {      background-color: #000;      color: #fff;      opacity: .85; diff --git a/notifier/observer_growl.js b/notifier/observer_growl.js index f26c850..473800a 100644 --- a/notifier/observer_growl.js +++ b/notifier/observer_growl.js @@ -5,7 +5,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.1</version> +    <version>0.1.2</version>      <minVersion>2.0pre</minVersion>      <maxVersion>2.0pre</maxVersion>      <detail><![CDATA[ @@ -28,7 +28,7 @@ e.g.)  >||  javascript <<EOM  liberator.globalVariables.observer_growl_settings = { -    'Hatelabo bottle': { life: 20, keyword: 'はてな' }, +    'Hatelabo bottle': { life: 20, sticky_keyword: 'はてな' },      'Weather forecast by Yahoo!': { sticky: true }  };  EOM @@ -37,7 +37,6 @@ EOM  == Todo ==  - sticky_keyword  - hide -- close all      ]]></detail>  </VimperatorPlugin>;  //}}} @@ -54,22 +53,22 @@ var Growl = function() {//{{{      this.initialize.apply(this, arguments);  };  Growl.prototype = { -    defaults: { -        life: 10, -        sticky: false, -        suticky_keyword: [], -        hide: false, -    }, -    initialize: function(node, container, options) { +    initialize: function(node, options) { +        this.defaults = { +            life: 10, +            sticky: false, +            suticky_keyword: [], +            hide: false +        };          this.node = node; -        this.container = container;          this.created = new Date();          this.options = $U.extend(this.defaults, (options || {})); -        node.childNodes[0].addEventListener("click", $U.bind(this, this.remove), false); +        var div = node.getElementsByTagName('div'); +        div[0].addEventListener("click", $U.bind(this, this.remove), false);      },      remove: function() {          // TODO: animation!!!! -        this.container.removeChild(this.node); +        this.node.parentNode.removeChild(this.node);      },  };//}}} @@ -101,6 +100,7 @@ notifier.observer.register(notifier.Observer, {              doc.body.appendChild($U.xmlToDom(<div id="observer_growl" class="observer_growl top-right"/>, doc));              container = doc.getElementById("observer_growl");          } +        var closer = doc.getElementById("observer_growl_closer");          var notification = this.createPopup(message, doc, container);          // TODO: animation!!! @@ -110,6 +110,12 @@ notifier.observer.register(notifier.Observer, {          if (container.childNodes.length == 1) {              let interval = setInterval($U.bind(this, this.checkStatus), 1000);              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++; @@ -127,10 +133,11 @@ notifier.observer.register(notifier.Observer, {                  <div class="message">{new XMLList(message.message || '')}</div>              </div>;          node = $U.xmlToDom(html, doc); -        node.__data__ = new Growl(node, container, this.settings[message.title]); +        node.__data__ = new Growl(node, this.settings[message.title]);          return node;      }, -    checkStatus: function() { +    checkStatus: function(force) { +        force = force == 'EVENT_REMOVE_ALL' ? true : false;          var doc = window.content.document;          var container = doc.getElementById("observer_growl"); @@ -140,18 +147,31 @@ 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 (growl && growl.created && -                !growl.options.sticky && -                growl.created.getTime() + (growl.options.life * 1000) < (new Date()).getTime()) { -                removeNodes.push(item); +            if (force || +                (growl && growl.created && !growl.options.sticky && +                 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);              }          }          removeNodes.forEach(function(element) element.__data__.remove()); -        if (container.childNodes.length == 0) +        if (force || container.childNodes.length == 0)              clearInterval(container.__interval__); +    }, +    removeAll: function(a) { +        this.checkStatus('EVENT_REMOVE_ALL'); +        var closer = window.content.document.getElementById("observer_growl_closer"); +        closer.parentNode.removeChild(closer);      } +  });  })(); diff --git a/notifier/subject_hatelabo_bottle.js b/notifier/subject_hatelabo_bottle.js index a21f22f..0cf31ef 100644 --- a/notifier/subject_hatelabo_bottle.js +++ b/notifier/subject_hatelabo_bottle.js @@ -28,9 +28,6 @@ notifier.subject.register(notifier.SubjectHttp, {          headers: null,          extra: null      }, -    preInitialize: function() { -        logger.log('preInitialize: '); -    },      parse: function(res) {          // if (this.count == 0) return []; // for debug          var doc = res.getHTMLDocument('id("body")//div[contains(concat(" ", @class, " "), " entry ")]'); diff --git a/notifier/subject_weather_yahoo.js b/notifier/subject_weather_yahoo.js index 96f23d0..0445bed 100755 --- a/notifier/subject_weather_yahoo.js +++ b/notifier/subject_weather_yahoo.js @@ -5,9 +5,16 @@ var PLUGIN_INFO =      <description>yahoo weather forecast notice.</description>      <description lang="ja">ヤフー天気予報通知。</description>      <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> -    <version>0.1.0</version> +    <version>0.1.1</version>      <minVersion>2.0pre</minVersion>      <maxVersion>2.0pre</maxVersion> +    <detail><![CDATA[ +== Options == +>|| +liberator.globalVariables.subject_weather_yahoo_urls =  [url1, url2,…] +||< +- @see http://weather.yahoo.co.jp/weather/ +    ]]></detail>  </VimperatorPlugin>;  //}}}  (function() { @@ -19,8 +26,7 @@ var libly = notifier.libly;  var $U = libly.$U;  var logger = $U.getLogger('subject_weather_yahoo'); -// @see http://weather.yahoo.co.jp/weather/ -var URLs = [ +var URLs = liberator.globalVariables.subject_weather_yahoo_urls || [      'http://weather.yahoo.co.jp/weather/jp/27/6200/27127/5300001.html',      'http://weather.yahoo.co.jp/weather/jp/13/4410/13113/1500001.html'  ]; @@ -55,6 +61,7 @@ URLs.forEach(function(url) {              var table = $U.getFirstNodeFromXPath('descendant::table', source);              table.style.width = '95%'; +            table.style.color = '#222';              var cloneTable = table.cloneNode(false);              this.cloneTable(cloneTable, table, start, start + 3, true);  | 
