Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№115-12-2013 22:55:50

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

[CB]Редактировать сохранённые логины и пароли

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

Скриншоты:
ruu0.jpg  s5n0.jpg  kpow.jpg

Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Редактировать сохранённые логины и пароли, от 11.01.2014. ................................
(function() {
   
   // добавить новый пункт "Показать пароли" в меню "Инструменты" ....
   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("label", "Показать пароли");     
   var devToolsSep = document.getElementById("devToolsSeparator"); 
   devToolsSep.parentNode.insertBefore( menuitem, devToolsSep );   
   addDestructor(function() { devToolsSep.parentNode.removeChild( menuitem ) });
   
   // по клику на пункте открыть менеджер паролей с паролями для текущего сайта если они есть .... 
   addEventListener("click", function(e) {
      var loc = content.location;
      var host = !loc.protocol.indexOf("http") ? loc.host : '';

      var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); 
      var login = loginManager.findLogins({}, loc.protocol + "//" + host, "", "");
      var host = login == '' ? '' : host;
      
      var win = Services.wm.getMostRecentWindow("Toolkit:PasswordManager");
      if ( win ) win.setFilter(host), win.focus();
      else 
           openDialog("chrome://passwordmgr/content/passwordManager.xul", "Password", "centerscreen, resizable=1", { filterString: host } );    
   }, false, menuitem );
  

   // наблюдатель следит за открытием всех окон .... 
   function winObs(subject) {      

      subject.addEventListener("load", function c(e) { 
         this.removeEventListener( e.type, c ); 
          
          var doc = subject.document;
          var win = subject.document.defaultView;
          
          // если открыт окошко редактирования пароля клик на чекбоксе показывает / скрывает пароль ....
          if ( subject.opener.name == 'Password') {           
               
               addEventListener("click", function(e) { 
                  var pass = e.target.hasAttribute("checked") ? false : "password"; 
                  doc.getElementById('password1Textbox').setAttribute("type", pass );     
               }, false, doc.getElementById('checkbox') );               
               }
               
          // если менеджер паролей добавить кнопку "Изменить" и обработчики ....          
          if ( subject.name == 'Password' && !doc.getElementById("changePassword") ) {

               // обработчик закрывает менеджер паролей по клику на странице .... 
               gBrowser.addEventListener("click", function f() {
                  this.removeEventListener("click", f ); 
                  try { win.close() } catch(e) {}; // закрыть окно 
               });
                              
               var buttons = doc.getElementsByTagName("button");
               var tree = doc.getElementById("signonsTree");
               
               // кнопка "Отобразить пароли" работает без запроса ....
               addEventListener("click", function(e) {
                  e.preventDefault();
                  doc.getElementById('passwordCol').hidden = !doc.getElementById('passwordCol').hidden;
               }, false, buttons[2] );                
               
               // добавить кнопку "Изменить" ....
               var changePassBut = document.createElement("button");
               changePassBut.setAttribute("label", "Изменить");
               changePassBut.setAttribute("id", "changePassword");
               changePassBut.setAttribute("disabled", true );   
               buttons[0].parentNode.insertBefore( changePassBut, buttons[2] );               

               // наблюдатель делает кнопку активной при выделении логина 
               addEventListener("select", function() {
                  win.signonsTreeView.selection.count == 1
                  ? changePassBut.removeAttribute("disabled")
                  : changePassBut.setAttribute("disabled", "true");        
               }, false, tree ); 
               
               // клик на кнопке запускает редактирование ....
               changePassBut.setAttribute("oncommand", "this.change();");
               changePassBut.change = function() {                 

                  // поличить выделений хост, логин и пароль                  
                  function getSelLogin(column) { return tree.view.getCellText( tree.currentIndex, tree.columns.getColumnAt(column) ) };                        
             
                  // получить новый логин и пароль
                  var prompt = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService( Ci.nsIPromptService );   
                  var username = {value: getSelLogin(1)}, password = {value: getSelLogin(2)};                  
                  
                  if ( !prompt.promptUsernameAndPassword(null, "Изменить имя пользователя и пароль",
                       getSelLogin(0), username, password, "Показывать пароль", {}
                       )) return;                                
             
                  // найти нужный логин, клонировать и переписать с измененными данными
                  var login = win.passwordmanager.findLogins({}, hostname, "", "")[0];    

                  var newLogin = login.clone();
                  newLogin.username = username.value;
                  newLogin.password = password.value;
                  win.passwordmanager.modifyLogin( login, newLogin );     
               }
               }      
          });
   }
   Services.ww.registerNotification(winObs);
   addDestructor(function() { Services.ww.unregisterNotification(winObs) });
})();

Отредактировано bunda1 (12-01-2014 01:13:21)

Отсутствует

 

№215-12-2013 23:38:56

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1
А чтобы пароль отображался, можно сделать? А так прикольно, спасибо.

Отсутствует

 

№316-12-2013 00:02:29

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

voqabuhe пишет

bunda1
А чтобы пароль отображался, можно сделать? А так прикольно, спасибо.

Наверно можно но я не знаю как. Буду думать.

Отсутствует

 

№416-12-2013 00:35:03

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 25.0
Веб-сайт

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет
voqabuhe пишет

bunda1
А чтобы пароль отображался, можно сделать? А так прикольно, спасибо.

Наверно можно но я не знаю как. Буду думать.

Я, конечно, в этом мало что смыслю (как и во многом остальном :( ), но есть такой аддон Show My Password 2.0
И я буду очень рад, если это Вам поможет добавить то, что Вы посчитаете нужным.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№516-12-2013 00:56:53

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

difabor
Нет это не то :/

Отсутствует

 

№616-12-2013 01:03:11

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

difabor пишет

Я, конечно, в этом мало что смыслю (как и во многом остальном :( ), но есть такой аддон Show My Password 2.0
И я буду очень рад, если это Вам поможет добавить то, что Вы посчитаете нужным.

Это совсем не то, кнопку попробуйте и сами всё поймёте.

Отредактировано voqabuhe (16-12-2013 01:04:13)

Отсутствует

 

№716-12-2013 01:51:15

dennius
Участник
 
Группа: Members
Зарегистрирован: 29-09-2010
Сообщений: 36
UA: Firefox 28.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1
Кнопка супер! Еще бы интегрировать в неё такую функцию - http://forum.mozilla-russia.org/viewtopic.php?pid=616520#p616520

Отсутствует

 

№816-12-2013 01:59:04

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

dennius пишет

bunda1
Кнопка супер! Еще бы интегрировать в неё такую функцию - http://forum.mozilla-russia.org/viewtopic.php?pid=616520#p616520

Это можно. Нужно что бы пункт меню открывал редактор паролем сайта, чтобы не искать, так что ли?

Добавлено 16-12-2013 02:19:42
dennius
Попробуй через пункт "Показать пароли сайта" в меню "Инструменты":

Выделить код

Код:

// Редактировать сохранённые логини и пароли, от 16.12.2013. ................................
(function() {
   
   // добавить новый пункт "Показать пароли сайта" в меню "Инструменты" ....
   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("label", "Показать пароли сайта");     
   var devToolsSep = document.getElementById("devToolsSeparator"); 
   devToolsSep.parentNode.insertBefore( menuitem, devToolsSep );   
   addDestructor(function() { devToolsSep.parentNode.removeChild( menuitem ) });
   
   addEventListener("click", function(e) {
      var loc = content.location;
      var str = !loc.protocol.indexOf("http") ? loc.host : '';
      var win = Services.wm.getMostRecentWindow("Toolkit:PasswordManager");
      if ( win ) win.setFilter(str), win.focus();
      else 
           openDialog("chrome://passwordmgr/content/passwordManager.xul", "Password", "centerscreen, resizable=1", { filterString: str } );    
   }, false, menuitem );
  
   // наблюдатель следит за открытием всех окон .... 
   var observer = {  
       observe: function(subject, topic, data) {
          subject.addEventListener("load", this, false);
          },
      
       handleEvent: function(e) {
          var doc = e.target;
          var win = doc.defaultView;
          var href = doc.location.href.slice(0,60);
          win.removeEventListener("load", this, false);

          // если менеджер паролей добавить кнопку "Изменить" и обработчики ....          
          if ( href == "chrome://passwordmgr/content/passwordManager.xul") {

               // обработчик закрывает менеджер паролей по клику на странице .... 
               gBrowser.addEventListener("click", function f() {
                  this.removeEventListener("click", f ); 
                  try { win.close() } catch(e) {}; // закрыть окно 
               });              
              
               var buttons = doc.getElementsByTagName("button");

               // кнопка "Отобразить пароли" работает без запроса ....
               addEventListener("click", function(e) {
                  e.preventDefault();
                  doc.getElementById('passwordCol').hidden = false;
               }, false, buttons[2] );               
               
               // добавить кнопку "Изменить" ....
               var changePassBut = document.createElement("button");
               changePassBut.setAttribute("label", "Изменить");
               changePassBut.setAttribute("id", "changePassword");
               changePassBut.setAttribute("disabled", true );   
               buttons[0].parentNode.insertBefore( changePassBut, buttons[2] );               

               // наблюдатель делает кнопку активной при выделении логина 
               var setHiddenMenu = new MutationObserver(function() {
                   changePassBut.setAttribute("disabled", buttons[0].disabled );          
               });
               setHiddenMenu.observe( buttons[0], { attributes: true, attributeFilter: ["disabled"] } ); 
               
               // клик на кнопке запускает редактирование
               addEventListener("click", function() {            
                  
                  // поличить выделений хост, логин и пароль
                  var tree = doc.getElementById('signonsTree');                     
                  function getSelectedItemFromTree(column) { return tree.view.getCellText( tree.currentIndex, tree.columns.getColumnAt(column) ) };                        
                  
                  var hostname = getSelectedItemFromTree(0);
                  var currUsername = getSelectedItemFromTree(1);
                  var currPassword = getSelectedItemFromTree(2);
             
                  // получить новый логин и пароль
                  var prompt = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService( Ci.nsIPromptService );   
                  var username = {value: currUsername};         
                  var password = {value: currPassword}; 
                  var result = prompt.promptUsernameAndPassword( null, "Изменить имя пользователя и пароль", hostname,
                                                                 username, password, "", {value:false} );                                                                             
                  if ( !result ) return;    
             
                  // найти нужный логин и переписать с измененными данными
                  var myLoginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); 
                  var logins = myLoginManager.findLogins({}, hostname, "", "");                               
                  logins.forEach(function( login ) {      
                     if ( login.password !== currPassword ) return;               
                   
                     var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init");                    
                     var newLogin = new nsLoginInfo( hostname,
                                                     login.formSubmitURL,
                                                     !login.aHttpRealm ? null : login.aHttpRealm,
                                                     username.value,
                                                     password.value,
                                                     login.usernameField,
                                                     login.passwordField);                   
                     
                     myLoginManager.modifyLogin( login, newLogin );
                  });              

               }, false, changePassBut );
               }
       }
   };
   Services.obs.addObserver( observer, "domwindowopened", false);
   addDestructor(function() { Services.obs.removeObserver(observer, "domwindowopened", false) });

})();

Отредактировано bunda1 (16-12-2013 02:19:42)

Отсутствует

 

№916-12-2013 02:20:30

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

dennius пишет

Кнопка супер! Еще бы интегрировать в неё такую функцию - http://forum.mozilla-russia.org/viewtopic.php?pid=616520#p616520

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

Отсутствует

 

№1016-12-2013 07:51:10

dennius
Участник
 
Группа: Members
Зарегистрирован: 29-09-2010
Сообщений: 36
UA: Firefox 28.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет

Попробуй через пункт "Показать пароли сайта" в меню "Инструменты":

На английской версии это нелегко сделать. Долго искал, но так и не нашёл как это сделать, даже на русской версии
Кстати, только в конце заметил, как мило смотрится пункт кнопки "Изменить" среди "Remove all" и "Show passwords", так и оставлю)

Всё-таки остановлюсь на версии кнопки из моей ссылки с добавлением вашего кода. Ведь та кнопка не только позволяет не искать пароль среди других, она еще и моментально выводит его прямо с панелей браузера, без лишних движений ака поиски во всяких меню.

И да, спасибо огромное за ваши кнопки! Без них на голом файрфоксе уже неуютно :beer:

voqabuhe пишет

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

ну если бы я думал только о себе, то не писал бы сюда вообще, т.к. сделал то же самое в первую очередь
просто показалось, что многим может пригодиться. имхо очистить поле поиска по логинам/паролям проще, чем вбивать нужные

Отсутствует

 

№1116-12-2013 11:47:47

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1
После рестарта [nightly] пропадает пункт меню "Показать пароли" в меню "Инструменты", если открыть редактор кнопки и нажать ОК то он появляется вновь до следующего рестарта.
После ПКМ - настроить, "Показать пароли" и кнопка "Изменить" дублируются.

Добавлено 16-12-2013 11:52:55

dennius пишет

ну если бы я думал только о себе, то не писал бы сюда вообще, т.к. сделал то же самое в первую очередь
просто показалось, что многим может пригодиться. имхо очистить поле поиска по логинам/паролям проще, чем вбивать нужные

А я и не сомневался, что ты "сделал то же самое в первую очередь", но думая о других, я тоже решил продолжить тему и подсказать, что кнопки можно совместить уже сейчас, не дожидаясь "интеграции". :)

Отредактировано voqabuhe (16-12-2013 11:52:55)

Отсутствует

 

№1216-12-2013 14:42:46

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

dennius пишет
bunda1 пишет

Попробуй через пункт "Показать пароли сайта" в меню "Инструменты":

На английской версии это нелегко сделать. Долго искал, но так и не нашёл как это сделать, даже на русской версии
Кстати, только в конце заметил, как мило смотрится пункт кнопки "Изменить" среди "Remove all" и "Show passwords", так и оставлю)

Ну вот же - в меню "Инструменты" на панели меню:
8ucw.jpg
В коде легко поменять название кнопки на английский.

Отредактировано bunda1 (16-12-2013 14:57:04)

Отсутствует

 

№1316-12-2013 15:32:22

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

voqabuhe пишет

После рестарта [nightly] пропадает пункт меню "Показать пароли" в меню "Инструменты", если открыть редактор кнопки и нажать ОК то он появляется вновь до следующего рестарта.
После ПКМ - настроить, "Показать пароли" и кнопка "Изменить" дублируются.

Не наблюдаю и мне кажется тебе пора менять профиль на [nightly] а то всё время непонятные проблемы. Кстати Сustom Buttons у тебя последний http://custombuttons.mozdev.org/devbuilds.html

Отсутствует

 

№1416-12-2013 15:40:16

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет

Не наблюдаю и мне кажется тебе пора менять профиль на [nightly] а то всё время непонятные проблемы.

Да вроде он у меня довольно свежий, а ты в [nightly] проверял? Попробую с новым профилем.

bunda1 пишет

Кстати Сustom Buttons у тебя последний http://custombuttons.mozdev.org/devbuilds.html

Да.

Отсутствует

 

№1516-12-2013 15:49:38

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

Да я на последнем [nightly] 29.0a1 (2013-12-14) проверял, скачал полчаса назад.

Отредактировано bunda1 (16-12-2013 15:51:13)

Отсутствует

 

№1616-12-2013 16:15:37

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1
Всё понял, это она так глючит только в этой новой PanelUI-menu-button, если переместить на любую панель, то всё ОК. Тогда получается что это баг Сustombuttons ?

Отсутствует

 

№1716-12-2013 17:03:16

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

voqabuhe пишет

bunda1
Всё понял, это она так глючит только в этой новой PanelUI-menu-button, если переместить на любую панель, то всё ОК. Тогда получается что это баг Сustombuttons ?

Кажется был какой то код от этого, но где не помню точно.

Отсутствует

 

№1816-12-2013 17:33:35

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет

Кажется был какой то код от этого, но где не помню точно.

Я думал это в custombuttons-0.0.5.7pre3-2013 1124 уже исправили.

Отсутствует

 

№1917-12-2013 10:00:22

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет

Версия: от 17.12.2013.

Ну теперь просто всё очень замечательно, спасибо.

Отсутствует

 

№2017-12-2013 11:31:54

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 5285
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

:offtopic:
Я конечно извиняюсь, но может не логини, а логины?
Или в русском языке произошли изменения, раз никто внимания не обращает?


Do you feel lucky, punk?

Отсутствует

 

№2117-12-2013 15:27:47

littleleshy
________
 
Группа: Members
Откуда: Москва
Зарегистрирован: 13-12-2008
Сообщений: 2504
UA: Firefox 29.0

Re: [CB]Редактировать сохранённые логины и пароли

:offtopic:
banbot
То же самое вчера хотел написать…

Отсутствует

 

№2217-12-2013 16:27:26

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

banbot пишет

Я конечно извиняюсь, но может не логини, а логины?
Или в русском языке произошли изменения, раз никто внимания не обращает?

Я исправил :). Извините но русский язык для меня иностранный.

Отсутствует

 

№2320-12-2013 07:25:40

LBra
Участник
 
Группа: Members
Зарегистрирован: 20-10-2011
Сообщений: 40
UA: unknown 0.0

Re: [CB]Редактировать сохранённые логины и пароли

bunda1 пишет

// по клику на пункте открыть менеджер паролей с паролями для текущего сайта если они есть ....

Я открываю менеджер паролей в табе или в сайдбаре. Как добавить фильтр для текущего сайта в этом случае? :)

Отсутствует

 

№2420-12-2013 18:49:43

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Редактировать сохранённые логины и пароли

LBra пишет

Я открываю менеджер паролей в табе или в сайдбаре. Как добавить фильтр для текущего сайта в этом случае?

Выделить код

Код:

var loc = content.location;
var host = !loc.protocol.indexOf("http") ? loc.host : '';
var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); 
var login = loginManager.findLogins({}, loc.protocol + "//" + host, "", "");
var host = login == '' ? '' : host;

 
var passwordManager = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("chrome://passwordmgr/content/passwordManager.xul") );    
passwordManager.addEventListener("pageshow", function c(e) {         
   this.removeEventListener( e.type, c );           

   setTimeout(function() {              
      var filter = e.originalTarget.getElementById('filter');
      filter.value = host;
      filter.doCommand();
   }, 0);      
});

Отсутствует

 

№2521-12-2013 00:25:13

LBra
Участник
 
Группа: Members
Зарегистрирован: 20-10-2011
Сообщений: 40
UA: unknown 0.0

Re: [CB]Редактировать сохранённые логины и пароли

Спасибо большое, bunda1! Работает!
Теперь еще надо бы добавить кнопку "Изменить" и в таб... :) ну, да ладно, не столь интересно... уже.  Интереснее другое: у меня почему-то на некоторых страницах браузер не предлагает сохранить пароль... А возможно ли создать кроме кнопки "Изменить" и кнопку "Добавить"? :)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]