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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

Сustom Buttons » Custom Buttons » 16-06-2019 16:51:14

Alex_one пишет:

Возможно подкорректировать?

Вроде получалось
[spoiler][code]if (this.type != "menu") {
    this.type = "menu";
    if (!this.hasAttribute("is")) return;
}
(popup => {
    var columns = [
        "¤ ¦ § © « » ¬ ® ° ± µ ¶ — ‘ ’ “ ” • ‰ ‹ › ™",
        "… ≈ ≠ × ✓ ✗ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞",
        "\uD83E\uDD8A \uD83D\uDE0E ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞"
    ];
    var css = //0&&
    `
        #${_id} menuitem > .menu-text {
            font-size: 22px;
            font-family: Consolas, Rockwell, Verdana;
            text-align: center;
            -moz-appearance: none;
            margin: 0;
            padding: 0 14px;
        }
        #${_id} menuitem > :not(.menu-text) {
            display: none;
        }
        #${_id} > menupopup > arrowscrollbox {
            background-color: menu;
        }
    `.replace(/;/g, " !important;");

    var inserter = {
        get docShell() {
            delete this.docShell;
            return this.docShell = "docShell" in document
 

Сustom Buttons » Custom Buttons » 14-06-2019 23:44:55

Garalf пишет:

копирование в clipboard, и запуск файла ярлыка

Ничего необычного

Выделить код

Код:

gClipboard.write(gContextMenu.linkURL);
FileUtils.File("C:\\Folder\\Sub\\ярлык.lnk").launch();

Во, кстати, можно проверить, будет ли работать без .ps1 и без ярлыка.
Просто запуск PowerShell, а скрипт как аргумент.
Вначале нужно прописать актуальные пути до приложений.
[spoiler]

Выделить код

Код:

(popup => addEventListener("popupshowing", {
    oncommand() {
        var ps = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
        var pot = "C:\\PotPlayer\\PotPlayerMini.exe";
        var ytdl = "C:\\YouTube\\youtube-dl.exe";

        var script = `
            $uUrl = "${gContextMenu.linkURL}"
            $YtDl = "${ytdl}"
            &$YtDl -F $uUrl
            if (-Not $?) { exit }
            $Choice = Read-Host -Prompt "Choose quality"
            if ($Choice -eq "") { $Choice = "best" }
            $uUrl = &$YtDl -g -f $Choice $uUrl
            if (-Not $?) { exit }
            &"

Сustom Buttons » Custom Buttons » 08-06-2019 15:27:29

leex пишет:

Единственное пожелание, можно ли убрать из стандартного пункта поиска название движка по умолчанию и реакцию на эту кнопку?

Если для русской локали и название пункту
устанавливает только лиса, то вот вариант

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

Выделить код

Код:

(ss => {
    ss.setAttribute("closemenu", "none");
    ss.BrowserSearch = {loadSearchFromContext() {}};
    Object.defineProperty(ss, "label", {
        configurable: true, enumerable: true,
        get: () => ss.getAttribute("label"),
        set(val) {
            var {length} = Services.search.defaultEngine.name;
            ss.setAttribute("label", val = val.slice(0, -length));
            return val;
        }
    });
    addDestructor(() => {
        delete ss.label;
        delete ss.BrowserSearch;
        ss.removeAttribute("closemenu");
    });
})(document.getElementById("context-searchselect"));


ifln пишет:

Нужна кнопка, а лучше пункт в меню вкладок, "Обновить другие вкладки".

Ну да, в FF 60 же нет multise

Сustom Buttons » Custom Buttons » 07-06-2019 11:39:17

leex пишет:

код будет подтягивать движки в контекст в раскрытом виде из Contextsearch Web Ext -  это будет супер!

Можно попытаться сделать для них типа зеркало,
а заказанные им у лисы скрывать. В CSS я тоже дуб, но у меня на NT 6.1
отображается вроде вполне сносно, а как будет на NT 6.3 — неизвестно.
[spoiler][code](popup => {
    var id = "cswem-menugroup";
    var mid = "_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu";
    var css = `
        #${id} {
            padding-left: 30px;

            display: grid;
            grid-template-columns: repeat(auto-fill, 32px);
            grid-auto-rows: 26px;
        }
        #${id} > menuitem {
            -moz-box-pack: center;
        }
        #${mid},
        #${id}:empty,
        #${id} > menuitem > :not(.menu-iconic-left) {
            display: none;
        }

    `.replace(/;/g, " !important;");
    var url = "data:text/css," + encodeUR

Сustom Buttons » Custom Buttons » 29-05-2019 22:51:56

Andrey_Krropotkin пишет:

обновилась утром ночнушка 69 и перестала работать CB, проверь пожалуйста

Это совершенно естественно. На ночнучшке невозможно чем-то таким пользоваться.
Только пытаться протащить до конца цикла, затем собирать под бету b3.
Но здесь, если я правильно понял, этот баг и в бету собираются засунуть, поэтому

custom_buttons-0.0.7.0.0.5a2-fx-paxmod.xpi
dom_inspector-7.0.3a1-fx-paxmod.xpi

Andrey_Krropotkin пишет:

и еще маленький вопрос по 67

Похоже addon.getResourceURI() сразу nsIJARURI стал отдавать, значит, наверно, так
[spoiler][code]    if (uri.schemeIs("jar"))
        uri = uri.spec
    else {
        var file = uri.QueryInterface(Ci.nsIFileURL).file;
        uri = file.isDirectory() ? uri.spec : "jar:" + uri.spec + "!/";
 

Сustom Buttons » Custom Buttons » 28-05-2019 13:11:29

Andrey_Krropotkin пишет:

опять поменяли SelectionCopyHelper и опять у меня возникли проблемы вот с этим кодом
[spoiler][code]function readFromClipboard() {
  var string;
  try {
      var clipboard = Cc["@mozilla.org/widget/clipboard;1"].
                      getService(Ci.nsIClipboard);
      var trans = Cc["@mozilla.org/widget/transferable;1"].
                  createInstance(Ci.nsITransferable);
      trans.addDataFlavor("text/unicode");
      if (clipboard.supportsSelectionClipboard()) {
        clipboard.getData(trans, clipboard.kSelectionClipboard);
      } else {
        clipboard.getData(trans, clipboard.kGlobalClipboard);
      }
      var data = {};
      var dataLen = {};
      trans.getTransferData("text/unicode", data, dataLen);
      if (data) {
        data = data.value.QueryInterface(Ci.nsISupportsString);
        string = trans.getTransferData.length == 2
          ? data.data : data.data.substring(0, da

Сustom Buttons » Custom Buttons » 26-05-2019 19:23:12

anywho пишет:

Что это за кнопка?

Без понятия.

anywho пишет:

И где тут поганка завернута?

Здесь (#l1.12) и здесь (#l5.12).

Andrey_Krropotkin пишет:

если забить ваш костыль browser.tabs.remote.autostart, то потом надо еще и в настройках его отключить

Да, в этом и смысл, чтобы настройкой переключать.
Иначе можно сразу "1" поставить, без проверки настройки.

Andrey_Krropotkin пишет:

но почему то, после того   домашняя страница становится пустая

Откуда я знаю какая страница у тебя домашняя?
А если ты об этом, — так «RESOLVED WONTFIX».

Andrey_Krropotkin пишет:

пишет URLBarInput is undefined

Так [url=https://bugzilla.mozil

Сustom Buttons » Custom Buttons » 26-05-2019 08:18:09

Andrey_Krropotkin пишет:

Не понятно пока с алертами для кнопок - alertsService.showAlertNotification(image, filename, notification);, не хотят пока работать.

Я запустил
Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
    .showAlertNotification("about:logo", "Title", "Message");
и алерт появился.

Andrey_Krropotkin пишет:

не понятно почему вот такая конструкция не работает
function $C( name, attr) {
        var el = document.createXULElement( name );
        if (attr) Object.keys(attr).forEach(function(n){ el.setAttribute(n, attr[n])});
        return el;
    };

Конструкция работает, здесь дело в другом.
menuitem тоже Custom Element уже с Firefox 68.

В этой функции элемент создаётся документом браузера,
а затем добавляется в другой документ, документ about:addons
При этом, местная CE-машинерия воротит от чужеродного элемента нос.

Будет лучше, если элемент будет создаваться тем же докумен

Сustom Buttons » Custom Buttons » 25-05-2019 19:23:36

Andrey_Krropotkin пишет:

На 69 у CB  в редакторе пропала кнопка сохранить

Вроде не должна пропасть, может галка в настройках слетела.
И Ctrl+S должно работать.

Andrey_Krropotkin пишет:

Ваша кнопка "Консоль браузера" последняя убивает броузер в один миг.

У меня сейчас такая
[spoiler][code]({
    title: "Консоль браузера",
    url: "chrome://devtools/content/webconsole/index.html",
    icon: "chrome://devtools/skin/images/tool-webconsole.svg",
    init() {
        var trg = document.getElementById("browser");
        trg && addEventListener("DOMContentLoaded", this, false, trg);
        var id = "viewBrowserConsoleSidebar";

        var menuitem = this.element("menuitem", {
            type: "checkbox",
            label: this.title,
            id: "menu_browserConsoleSidebar",
            oncommand: `SidebarUI.toggle("${id}");`
        }, document.getElementById("viewSidebarMenu"));

        var btn = this.element("toolbarbutton", {
            type: "checkbox",
       

Сustom Buttons » Custom Buttons » 25-05-2019 08:46:14

Andrey_Krropotkin пишет:

та же ошибка осталась

Ну тогда не знаю. Разве что может закрыть браузер и удалить
содержимое папки startupCache. Или можно перезапустить с очисткой кодом:

Services.appinfo.invalidateCachesOnRestart();
BrowserUtils.restartApplication();

Andrey_Krropotkin пишет:

Где можно почитать про изменения?

На багзилле, в коде самого Firefox, может ещё где-то, я не в курсе.
Могу попробовать рассказать в общих чертах, как мне кажется.
[spoiler]Первое.
Уже со второго билда взяли и переключили адрес браузера с browser.xul на browser.xhtml
А это значит, что метод document.createElement() стал возвращать не XUL элементы, а HTML элементы.
Это делает их не только бесполезными, но и корёжащими интерфейс.
А для любителей попросить элемент у XUL документа заботливо предусмотрен краш приложения.

Таким образом, чтобы получить XUL элемент, н

Сustom Buttons » Custom Buttons » 24-05-2019 21:39:16

Andrey_Krropotkin пишет:

пункт удалить кнопку, в консоли пишет TypeError: this.getElementsByAttribute is not a function

Да, есть такое. Не представляю откуда там this прописался.
Замени его на document

Ну или вот, свежак. Понятно, что считай ничто, но просто 69-я
так весело стартовала, что может интересно посмотреть.
Оценить масштаб отвала, чуток попрактиковаться в правке кнопок.
На специально созданом профиле, конечно же.

custom_buttons-0.0.7.0.0.5a1-fx-paxmod.xpi
custom_buttons-0.0.7.0.0.5a1-fx-bootstrap.xpi

Andrey_Krropotkin пишет:

на 67 перестал работать ваш исправленный инспектор Dom

Какое там исправленный. Так, затолкал кой-что обратно, как смог.

dom_inspector-7.0.2-fx-paxmod.xpi
[url=https://anonfile.com/hdL5H3sd

Сustom Buttons » Custom Buttons » 18-05-2019 18:09:33

Garalf пишет:

Проверьте, пожалуйста.

Видел в своё время, но да, теперь и на b1 полюбовался.
Однако, собирать накануне Merge Date не слишком хорошая идея.
Будет обидно, если за оставшиеся два дня в Firefox 68 успеют ещё какой-нибудь порчи завезти.
Но если так уж прям невтерпёж...

custom_buttons-0.0.7.0.0.4-fx-paxmod.xpi
custom_buttons-0.0.7.0.0.4-fx-bootstrap.xpi

Конфигурация, надеюсь, остаётся прежней.

bunda1 пишет:

обрати внимание на это

Да, это я видел. Но там написано то, чего не может быть.
[spoiler]Хотя бы потому, что слэши не экранированы, то есть одинарные, а не двойные.
Таким образом ошибка никак не может быть такой, как указано.

К тому же, текст ошибки содержит адрес файла в котором дважды упоминается Pale Moon.
Не

Сustom Buttons » Custom Buttons » 18-05-2019 05:26:58

Garalf пишет:

Походу из-за отключения однопроцессорного режима.

Ну, если есть стойкое предпочтение однопроцессного Firefox и не требуется переключать,
то можно просто создать соответствующую переменную среды.
Требуется пере-запуск: выход из Firefox, запуск Firefox (не рестарт).

У меня более капризные требования, хочется чтобы состояние процессности
следовало за настойкой и подхватывалось после рестарта, поэтому,
пока конфигурационный файл ещё не уничтожен, добавил в него

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

Выделить код

Код:

//
try {
    Components.interfaces.nsIUDPSocketChild ||
    Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment).set(
        "MOZ_FORCE_DISABLE_E10S",
        Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch)
            .getBoolPref("browser.tabs.remote.autostart", true) ? "" : "1"
    );
} catch(ex) {}


Autocopy посмотрел, там Services схомячили.
А вот глюки Custom Elements что-то не соображу как разрулить,
пришлось отказаться от концепции

Сustom Buttons » [CB]Открыть всё из папки закладок в новых вкладках не загружая страниц » 24-03-2019 20:04:16

Andrey_Krropotkin
Не, с findbar'ом я давно решил не связываться, слишком сложно для меня.
Ну, так, поверхностно, подкрутил кое-что немного
[spoiler][code]((bar, button = true, insertAtTop = false, ctrlFcloseFinbar = false) => ({
    init(parent) {
        var has = bar = parent.querySelector("#appcontent > findbar");
        has || this.initFinbar(parent);
        var lo = bar.linkedObject;
        lo.listenCtrlF = ctrlFcloseFinbar
            ? listen => listen
                ? addEventListener("keydown", lo, true)
                : removeEventListener("keydown", lo, true)
            : () => {};
        has && !bar.hidden && lo.listenCtrlF(true);
        if (button) self._handleClick = () => bar.hidden
            ? bar.startFind(bar.FIND_NORMAL)
            : bar.collapsed || bar.close();
        addDestructor(lo.destroy, lo);
    },
    destructors: [],
    destroy(reason) {
        if (reason[5] != "e") return;
        bar.close();
        bar._browser = {};
        bar.re

Сustom Buttons » [CB]Открыть всё из папки закладок в новых вкладках не загружая страниц » 23-03-2019 21:27:14

Andrey_Krropotkin пишет:

под 66

Давай попробую что-нибудь набросать тебе для правки.
[spoiler][code]((g, id) => {
    addDestructor(r => r[5] == "e" && id in g && (g.PlacesUIUtils[id] = g[id]) && delete g[id]);
    if (id in g) return;

    g[id] = g.PlacesUIUtils[id];
    var func = g => PlacesUIUtils.openMultipleLinksInTabs = async function(nodeOrNodes, event, view) {

        var where, win = getBrowserWindow(view.ownerWindow);
        var newWin = !win || (where = win.whereToOpenLink(event, false, true)) == "window";

        var items = PlacesUtils.nodeIsContainer(nodeOrNodes)
            ? PlacesUtils.getURLsForContainerNode(nodeOrNodes)
            : Array.from(nodeOrNodes).filter(PlacesUtils.nodeIsURI);

        if (newWin) {
            var args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
            args.appendElement(PlacesUtils.toISupportsString(items.shift().uri));
            win = Services.ww.openWindow(
                win || null, AppConsta

Сustom Buttons » Custom Buttons » 19-03-2019 23:30:41

Infocatcher пишет:

ошибку такую я встречал

А я никогда не встречал, поэтому, сделав допущение,
что все страницы об ошибках примерно одинаковы,
экспериментировал со всегда доступной «Автономный режим».

Сейчас набрал bla.me, дождался этого «Firefox находится в автономном режиме»,
запускаю alert(gBrowser.selectedBrowser.currentURI.spec);
алертится http://bla.me/
Так что, возможно, не подходит.

Вобще, на ночнушке, правильно алертится и работает browser.documentURI.spec
Но, глядя на UA спрашивающего, пришлось проверить на соответствующей версии.
FF50 нет, но есть 48 и 52, так вот там, если спокойно сделать проверку,
тоже алертится правильно about:neterror?e=netOffline&u=http%3A//bla.me/&…

Но непосредственно в коде, browser.documentURI.spec там не работает,
пока не поднимешь таймаут до каких-то неприемлимых величин.
А frame script работает быстро и чётко.

Это всё я сейчас о многопроцессном режиме говорил.

Новости » Вышел Firefox 65.0.1 и Tor Browser 8.0.6 » 19-03-2019 21:25:48

Dufresne пишет:

сломалось

Не подтверждаю.
Работает и на релизном Firefox 66.0 и на Firefox Nightly 68.0a1 (2019-03-19).
С удалённым атрибутом extends, разумеется.

Сustom Buttons » Custom Buttons » 19-03-2019 00:37:17

leex пишет:

Можно ли сделать одну загрузку без Сtrl+F5 если  "Ошибка искажения содержимого" не обнаружена?

Если «Ошибка искажения содержимого» это лисья страница,
то можно попробовать как-то так, а если нет, то вопрос, увы, не ко мне.
[spoiler][code](frameScript => {
    this._handleClick = () => addTab("http://mail.google.com/mail/#i");
    this.oncontextmenu = e => e.ctrlKey || e.shiftKey || addTab("https://mail.google.com/mail/u/0/#sent") || false;
    var addTab = url => {
        var tab = gBrowser.selectedTab = gBrowser.addTab(url, {
            triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
        });
        var browser = tab.linkedBrowser;
        setTimeout(function wait() {
            if(browser.currentURI.spec == "about:blank" || browser.webProgress.isLoadingDocument)
                setTimeout(wait, 25);
            else
                browser.messageManager.loadFrameScript(frameScript, false);
        }, 0);
    }
})(
    "data:,conten

Сustom Buttons » Custom Buttons » 18-03-2019 16:58:50

«Merge Date»

custom_buttons-0.0.7.0.0.3-fx-paxmod.xpi
[spoiler=config.js][code]//
try {(nsvo => {
    var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o;
    o.freeze = obj => {
        if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm")
            return freeze(obj);
        obj.MOZ_REQUIRE_SIGNING = false;
        obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true;
        return (o.freeze = freeze)(obj);
    }
    lockPref("extensions.legacy.enabled", true);
    lockPref("xpinstall.signatures.required", false);
    lockPref("extensions.langpacks.signatures.required", false);

    nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {});
    var shouldVerify = nsvo.shouldVerifySignedState;
    nsvo.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);
   
})(Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}));}
catch(ex) {Cu.reportError(

Сustom Buttons » Custom Buttons » 17-03-2019 20:39:39

Dobrov пишет:

Подскажите, как заменить/запретить стандартный MiddleClick мыши на urlbar-go-button.

Вариант

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

Выделить код

Код:

addEventListener("click", e => {
    if (e.button == 1 && e.target.id == "urlbar-go-button") {
        e.stopPropagation();

        custombuttons.editButton(self);
    }
}, true, gURLBar);


leex пишет:

Ребята, помогите пожалуйста назначить на ПКМ открытие ссылки https://mail.google.com/mail/u/0/#sent  (с Ctrl+F5)
Но так чтобы остался этот код на ЛКМ

В Инициализацию попробуй
[spoiler]

Выделить код

Код:

(addTab => {
    this._handleClick = () => addTab("http://mail.google.com/mail/#i");
    this.oncontextmenu = e => e.ctrlKey || e.shiftKey || !!addTab("https://mail.google.com/mail/u/0/#sent");
})(url => {
    var tab = gBrowser.selectedTab = gBrowser.addTab(url, {
        triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
    });
    var browser = tab.linkedBrowser;
    setTimeout(function wait() {
        if(browser.currentUR

Сustom Buttons » [CB]Cookies Permissions » 04-03-2019 22:00:43

Infocatcher пишет:

Добавил открытие странного окошка chrome://browser/content/preferences/siteDataSettings.xul.

По-моему, как не работало без SiteDataManager.updateSites(),
так и не работает, если ни разу не посещалась страница about:preferences

Вроде так чуть получше
[spoiler][code]        //if(this.app.name == "Firefox" && parseFloat(this.app.version) >= 62) { //~ todo: check versions
        //    this.showSiteDate(host);
        if(this.app.name == "Firefox" && parseFloat(this.app.version) >= 61) {
            this.showSiteData(host);
            return;
        }
...
    //showSiteDate: function(host) {
    //    var win = this.wm.getMostRecentWindow("Browser:Cookies");
    showSiteData: function(host) {
        var win = this.wm.getMostRecentWindow("Browser:SiteDataSettings");
        var _this = this;
        var setFilter = function setFilter(e) {
            e && win.removeEventListener("load", setFilter, false);
            _this.setTextboxValue(win.document.getEleme

Сustom Buttons » Custom Buttons » 21-02-2019 23:04:17

func4ptch4
Зачем закомментировал css?
Если css не нужен, то лучше убрать две косые перед нулём.

Вообще, я, иногда, приглядываю за ней в ночнушке, на интерес.
Если хочешь попробовать — могу процитировать
[spoiler][code]this.type != "menu" ? this.type = "menu" : (popup => {

    var columns = [
        "¤ ¦ § © « » ¬ ® ° ± µ ¶ — ‘ ’ “ ” • ‰ ‹ › ™",
        "… ≈ ≠ × ✓ ✗ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞",
        "\uD83E\uDD8A \uD83D\uDE0E ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞"
    ];
    var css = //0&&
    `
        #${_id} menuitem > .menu-text {
            font-size: 22px;
            font-family: Consolas, Rockwell, Verdana;
            text-align: center;
            -moz-appearance: none;
            margin: 0;
            padding: 0 14px;
        }
        #${_id} menuitem > :not(.menu-text) {
            display: none;
        }
        #${_id} > menupopup > arrowscrollbox {
            background-color: menu;
        }
    `.replace(/;/g, " !important;");

    var inserter = {
        get docShell() {
   

Сustom Buttons » Custom Buttons » 20-02-2019 17:55:12

func4ptch4 пишет:

Dumby
https://i.imgur.com/W7RdlAY.png
У всех так? и вообще у меня все время удаляются еще 10 расширений, может кастыли не
правильно поставил на [firefox] 65.0.1? ну которые дают работать с bootstrap и CB...

На чистом профиле тоже самое, CB пашет, зато расширения отваливаются.
Причина только в костылях config.js но что я не так сделал?

Да, подтверждаю, удалось воспроизвести.
Например:
Textmarker — устанавливается (есть id в манифесте),
а Sticky Notes — не устанавливается (нет id в манифесте).

Пока, на скорую руку, добавил такое. Спасибо.

Выделить код

Код:

    Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {})
        .shouldVerifySignedState = addon => !addon.id;

Новости » Вышел Firefox 65.0.1 и Tor Browser 8.0.6 » 16-02-2019 07:05:40

Dufresne
В этой строке extends видишь?

<binding id="tabs-scroll" extends="chrome://global/content/bindings/scrollbox.xml#scrollbox">

Так вот, такого биндинга в Firefox 66+ больше нет (#l6.12), extends'ить нечего.
Если удалить, то, вроде, должно работать.

Board footer

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