Показать или спрятать пароль в окошке вода двойным кликом мыши ( Firefox 17+ )
Автор: bunda1
Версия: от 11.01.2014.
Описание: код даёт возможность двойным кликом мыши показать или спрятать пароль в полях вода пароля на страницах и окошках аутентификации входа на страницу или в других подобных окошках.
Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Показать или спрятать пароль в окошке вода двойным кликом мыши, от 11.01.2014. ................................
(function () {
 
   // Наблюдатель следит за открытием всех окон ....
   function winObs( subject ) {   
   
      subject.addEventListener("load", function l(e) {
         this.removeEventListener( e.type, l );   
      
         var passTextbox = subject.document.getElementById('password1Textbox');      
         if ( !passTextbox ) return;

         // добавлять и удалять обработчик двойного клика для окошка аутентификации входа на страницу
         passTextbox.addEventListener("dblclick", handleDblClick, false );          
         this.addEventListener("unload", function u(e) {
             this.removeEventListener(e.type, u );
             passTextbox.removeEventListener("dblclick", handleDblClick, false );
         })  
      })
   };
   Services.ww.registerNotification(winObs);
   addDestructor(function() { Services.ww.unregisterNotification(winObs) });


   // Показать или спрятать пароль в окошке вода ....
   function handleDblClick(e) {
     if ( e.button ) return;
     
     var node = e.target;
      
     if ( node.hasAttribute("typechanged") ) {
          node.type = "password";
          node.removeAttribute("typechanged");
          return; 
          }
     if ( node.hasAttribute("type") && node.getAttribute("type").toLowerCase() == "password" ) {
          node.type = "text";
          node.setAttribute("typechanged", true);              
          }      
   };
   addEventListener("dblclick", handleDblClick, false, gBrowser ); // обработчик двойного клика для страницы
   
})();

Долго работала :) , но перестала на 60. Можно попросить отремонтировать? :angel:

Ну, я попробовал процитировать контентскую часть
под многопроцессность, вроде работает.

скрытый текст

Выделить код

Код:

((script, ID, NSVO) => {
    var nsvo = eval(NSVO), u = code => "data:," + encodeURIComponent(code);
    if (!(ID in nsvo)) {
        var processURL = u(script.replace(/%ID%/g, ID).replace("%NSVO%", NSVO));
        Services.ppmm.loadProcessScript(processURL, true);
        nsvo[ID].processURL = processURL;
        Services.mm.loadFrameScript(nsvo[ID].frameURL = u(`${NSVO}["${ID}"].init(this);`), true);
    }
    addDestructor(reason => {
        if (reason[5] != "e" || !(ID in nsvo)) return;
        Services.mm.removeDelayedFrameScript(nsvo[ID].frameURL);
        Services.mm.loadFrameScript(u(`${NSVO}["${ID}"].destroy(this);`), false);
        Services.ppmm.removeDelayedProcessScript(nsvo[ID].processURL);
        Services.ppmm.loadProcessScript(u(`${NSVO}["${ID}"].forget();`), false);
    });
})(`\
    (nsvo => nsvo["%ID%"] = {
        dblclick({target}) {
            if (target.hasAttribute("typechanged")) {
                target.type = "password";
                target.removeAttribute("typechanged");
            } else if (
                target.hasAttribute("type") &&
                target.getAttribute("type").toLowerCase() == "password"
            ) {
                target.type = "text";
                target.setAttribute("typechanged", true);
            }
        },
        init(cpmm) {
            cpmm.addEventListener("dblclick", this);
            cpmm.addEventListener("unload", this);
        },
        destroy(cpmm) {
            cpmm.removeEventListener("dblclick", this);
            cpmm.removeEventListener("unload", this);
        },
        handleEvent(e) {this[e.type](e);},
        unload(e) {this.destroy(e.target);},
        forget() {delete nsvo["%ID%"];}

    })(%NSVO%);`,
    `CB${_id.slice(20)}:PasswordTypeToggler`,
    `Components.utils.import("resource://gre/modules/Services.jsm", {})`
);

Dumby пишет

Ну, я попробовал процитировать контентскую часть
под многопроцессность, вроде работает.

Прекрасно работает, огромное вам спасибо! :beer:
Насчёт многопроцессности — не в курсе, отключена. :) Но, думаю, это значения не имеет.