var PLUGIN_INFO =
  {NAME}
  notification using nsIAlertService
  nsIAlertServiceを使用したnotifier用通知プラグイン
  teramako
  0.1
  MPL 1.1/GPL 2.0/LGPL 2.1
  2.0pre
  2.0pre
  http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/notifier/observer_nsIAlertService.js
  ||
    :js Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("alert:alert").close()
    ||<
  ]]>
;
//}}}
(function(){
var notifier = liberator.plugins.notifier;
if (!notifier){
    return;
}
var libly = notifier.libly;
var $U = libly.$U;
var logger = $U.getLogger("observer_alert");
const alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
const ICON_URL = "chrome://vimperator/skin/icon.png";
var observer = {
    observe: function(aSubject, aTopic, aData){
        if (aTopic == "alertclickcallback" && aData){
            liberator.open(aData, liberator.NEW_TAB);
        }
    }
};
function getAlertWindows(){
    return Cc["@mozilla.org/appshell/window-mediator;1"]
            .getService(Ci.nsIWindowMediator)
            .getXULWindowEnumerator("alert:alert");
}
function alertNotify(count, message){
    alertService.showAlertNotification(
        ICON_URL,
        count + ": " + message.title,
        "",
        message.link ? true : false,
        message.link,
        observer
    );
    (function(){
        var fixed = false;
        var winEnum = getAlertWindows();
        var win;
        while (winEnum.hasMoreElements()){
            win = winEnum.getNext()
                    .QueryInterface(Ci.nsIXULWindow).docShell
                    .QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIDOMWindow);
            if (win.arguments[1] == count + ": " + message.title){
                let box = win.document.getElementById("alertTextBox");
                let t = box.firstChild;
                if (box.lastChild.hasAttribute("clickable")){
                    t.style.cursor = "pointer";
                    t.style.color = "#1455D6";
                    t.style.textDecoration = "underline";
                }
                t.setAttribute("onclick", "onAlertClick();");
                box.removeChild(box.lastChild);
                box.appendChild($U.xmlToDom(new XMLList(
                    '
' + message.message + "
"),
                    document
                ));
                win.onAlertLoad();
                fixed = true;
            }
        }
        if (!fixed) setTimeout(arguments.callee, 10);
    })();
}
notifier.observer.register(notifier.Observer, {
    initialize: function (){
        this.count = 1;
    },
    update: function(message){
        alertNotify(this.count, message);
        this.count++;
    }
});
})();
// vim: set fdm=marker sw=4 ts=4 sts=0 et: