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

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

№1290108-10-2018 20:14:01

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

Re: Custom Buttons

Из за технических проблем скрина нет и я проверял это только на FF60.

Отсутствует

 

№1290208-10-2018 20:23:38

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 56.0

Re: Custom Buttons

drage2 пишет

Странно, не замечал ....Скрина нема?

На более старых версиях [firefox], при загрузке страницы, на вкладке отображалось слово "Соединение…":
tab_01.png
Начиная с пятьдесят каких-то версий [firefox], при загрузке страницы, на вкладке стал отображаться URL загружаемой страницы:
tab_02.png
Это выглядит особенно убого, если в URL присутствует кириллица.


ADD:
В версиях [firefox] 60+ это можно решить стилем:

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

Выделить код

Код:

/* Код Vitaliy V. */
#TabsToolbar .tabbrowser-tab .tab-content .tab-label-container::before {
    content: "Соединение…" !important;
    display: -moz-box !important;
    visibility: collapse !important;
    font-size: inherit !important;
    font-weight: inherit !important;
    white-space: nowrap !important;
    line-height: 1.7em !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    pointer-events: none !important;
    color: inherit !important;
    text-shadow: inherit !important;
}
#TabsToolbar .tabbrowser-tab[busy="true"]:not([progress="true"]) .tab-content .tab-label-container::before {
    visibility: visible !important;
}
#TabsToolbar .tabbrowser-tab[busy="true"]:not([progress="true"]) .tab-content .tab-text.tab-label {
    visibility: collapse !important;
}


Или так:
скрытый текст

Выделить код

Код:

/* Код Vitaliy V. */
#TabsToolbar .tabbrowser-tab .tab-content .tab-label-container::before {
    content: "" !important;
    display: -moz-box !important;
    visibility: collapse !important;
    font-size: inherit !important;
    font-weight: inherit !important;
    white-space: nowrap !important;
    line-height: 1.7em !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    pointer-events: none !important;
    color: inherit !important;
    text-shadow: inherit !important;
}
#TabsToolbar .tabbrowser-tab[busy="true"]:not([progress="true"]) .tab-content .tab-label-container::before {
    content: "Соединение…" !important;
    visibility: visible !important;
}
#TabsToolbar .tabbrowser-tab[progress="true"] .tab-content .tab-label-container::before {
    content: "Соединение…" !important;
    visibility: visible !important;
}
#TabsToolbar .tabbrowser-tab:-moz-any([busy="true"],[progress="true"]) .tab-content .tab-text.tab-label {
    visibility: collapse !important;
}


Но на версиях [firefox] 55-56 и на последних версиях Waterfox этот стиль подглючивает на некоторых страницах, где есть комментарии от Disqus'а.

Отредактировано unter_officer (08-10-2018 21:50:00)


«The Truth Is Out There»

Отсутствует

 

№1290309-10-2018 00:10:21

drage2
Забанен
 
Группа: Members
Откуда: Донецк
Зарегистрирован: 23-11-2017
Сообщений: 392
UA: Firefox 62.0

Re: Custom Buttons

unter_officer

unter_officer пишет

Это выглядит особенно убого, если в URL присутствует кириллица.

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

Отсутствует

 

№1290409-10-2018 01:01:44

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 47.0

Re: Custom Buttons

drage2 пишет

смотреть на надпись "соединение", тоже большого энтузиазма не вызывает...

Каждый вправе выбирать...
Вам не нравится смотреть на слово "Соединение…", мне не нравится смотреть на URL.
И если кто-то мне подскажет решение, как с помощью СВ вернуть старое состояние, что бы при загрузке страницы на вкладке снова отображалось слово "Соединение…", Вы вправе этим решением не пользоваться.


«The Truth Is Out There»

Отсутствует

 

№1290512-10-2018 05:39:04

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 52.0

Re: Custom Buttons

Подскажите, как сохранить все изображения со страницы в папку загрузки? Есть готовые кнопки или код?
Желательно сохранять не все картинки, а например, размером более 200 пикселей, как это делает расширение Pick Images.

Есть код сохранения одной картинки, параметр: перетаскиваемая картинка или контекстное меню изображения

Выделить код

Код:

window.SavePic = function( image ) {
    try { var Upload = Services.downloads.userDownloadsDirectory.path } // каталог загрузок
    catch(e) { var Upload = Services.downloads.defaultDownloadsDirectory.path }; // ограничить длину имени
    var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).replace(/[:\\\/<>?*|"]+/g,' ').replace(/\s+/g,' ').replace(/  /g,' ').slice(0,88);
    var path = Upload + '/_Images/' + docTitle; // новый путь записи
    var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
    file.initWithPath(path);
    if ( !file.exists() || !file.isDirectory() ) file.create(Ci.nsIFile.DIRECTORY_TYPE, 0777); // если нет папки
    cbu.setPrefs("browser.download.dir", window.convertFromUnicode("UTF-8", path));
    saveImageURL(image, 0, 0, 0, 1, null, content.document);
    cbu.setPrefs("browser.download.dir", window.convertFromUnicode("UTF-8", Upload)); // вернуть старый путь
    XULBrowserWindow.statusTextField.label = '… '+ docTitle;
    setTimeout(()=> XULBrowserWindow.statusTextField.label = '', 3000);
    return path; // путь записи
};

window.convertFromUnicode = function (charset, str) { // Конвертировать текст в юникод
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    converter.charset = charset;
    str = converter.ConvertFromUnicode(str);
    return str + converter.Finish();
};

Отредактировано Dobrov (12-10-2018 08:56:04)

Отсутствует

 

№1290613-10-2018 20:44:17

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 56.0

Re: Custom Buttons

Есть код позволяющий написать нужный текст в statubar?
Я имею в виду внизу, где отображается url ссылки.

Отсутствует

 

№1290714-10-2018 03:46:34

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 52.0

Re: Custom Buttons

toxa

Выделить код

Код:

window.statusTextField = function (text, time) {    // Показ сообщения в строке статуса
    XULBrowserWindow.statusTextField.label = text;
    time = time || 3000; // аргумент функции не указан
    setTimeout(()=> XULBrowserWindow.statusTextField.label = "", time);
};
window.statusTextField("Сообщение в строке статуса");

Отсутствует

 

№1290815-10-2018 09:41:48

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 52.0

Re: Custom Buttons

Посоветуйте, как на кнопке-меню открыть .appendChild меню правым кликом мыши, а не левым? (на него нужно более часто используемое действие)
если убрать: setAttribute('onclick', 'getDocEncoding();'), всё равно меню открывается, а это нужно только по правой кнопке.

Сменить кодировку

Выделить код

Код:

var ddMenu =
'<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
       oncommand="this.parentNode.setDocEncoding(event)">\n\
    <menuitem type="radio" charset="KOI8-R" label="Кириллица (KOI8-R)"/>\n\
    <menuitem type="radio" charset="windows-1251" label="Кириллица (Windows-1251)"/>\n\
    <menuitem type="radio" charset="UTF-8" label="Unicode (UTF-8)"/>\n\
</menupopup>';
ddMenu = new DOMParser().parseFromString(ddMenu,"application/xml").documentElement;
this.type = "menu"; this.orient = "horizontal";
document.getAnonymousElementByAttribute(this, "class", "toolbarbutton-menu-dropmarker").hidden = true;
this.appendChild(ddMenu);
this.setDocEncoding = function(evt) {
    var _charset = evt.target.getAttribute("charset");
    try { SetForcedCharset(_charset);
    } catch(e) { BrowserSetForcedCharacterSet(_charset);
    }
}
getDocEncoding = function() {
    var docCharset = getBrowser().docShell.QueryInterface(Components.interfaces.nsIDocCharset);
    var curChar = docCharset.charset;
    switch (curChar) {
        case "KOI8-R": ddMenu.childNodes[1].setAttribute("checked", "true"); break;
        case "windows-1251": ddMenu.childNodes[3].setAttribute("checked", "true"); break;
        case "IBM866": ddMenu.childNodes[5].setAttribute("checked", "true"); break;
        case "UTF-8": ddMenu.childNodes[7].setAttribute("checked", "true"); break;
        default: ddMenu.childNodes[1].removeAttribute("checked"); ddMenu.childNodes[3].removeAttribute("checked"); ddMenu.childNodes[5].removeAttribute("checked"); ddMenu.childNodes[7].removeAttribute("checked");
    }
}
this.setAttribute('onclick', "getDocEncoding();");

Отредактировано Dobrov (15-10-2018 09:44:30)

Отсутствует

 

№1290917-10-2018 13:22:53

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

Re: Custom Buttons

Dobrov пишет

Посоветуйте, как на кнопке-меню открыть .appendChild меню правым кликом мыши, а не левым? (на него нужно более часто используемое действие)

Выделить код

Код:

this.onclick =e=> {
   if ( e.button == 0 ) alert(e.button);
          
   if ( e.button == 1 ) alert(e.button);
   
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
        };
};
this.oncontextmenu =e=> e.detail == 2 && !menuPopup.hidePopup()
             || e.ctrlKey || !!menuPopup.openPopup(this, "after_start");


var array = [
   "Кириллица (KOI8-R),KOI8-R",
   "Unicode (UTF-8),UTF-8",
   "Кириллица (Windows-1251),windows-1251",
];


var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach(str=> { 
   var menuItem = menuPopup.appendChild(document.createElement("menuitem"));
   var label = str.split(",")[0], charset = str.split(",")[1]; 
   menuItem.setAttribute("label", label);
   menuItem.setAttribute("type", "radio");
   menuItem.setAttribute('checked', charset == gBrowser.docShell.charset);
   menuItem.onclick =()=> { try { SetForcedCharset(charset) } catch(e) { BrowserSetForcedCharacterSet(charset) } };
 
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");

Отсутствует

 

№1291017-10-2018 22:00:52

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 56.0

Re: Custom Buttons

Dobrov
Спасибо за код! :rock:

Отсутствует

 

№1291121-10-2018 00:37:13

Smitis
Участник
 
Группа: Members
Зарегистрирован: 29-01-2016
Сообщений: 10
UA: unknown 0.0

Re: Custom Buttons

Подскажите, есть такой код, позволяющий открывать предыдущую вкладку, после закрытия текущей https://forum.mozilla-russia.org/viewtopic.php?pid=759770#p759770
и здесь https://forum.mozilla-russia.org/viewtopic.php?pid=761644#p761644
А можно ли как-то переделать код, что бы открывалась вкладка слева от закрытой?

Отсутствует

 

№1291221-10-2018 19:17:11

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

Smitis
Упс, там closing должно быть вместо closed
А переделать, ну можно попробовать.

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

Выделить код

Код:

(blurTab => {
    var find = (t, key = "previousSibling") => {
        while((t = t[key])) if (!t.hidden && !t.closing) return t;
    }
    gBrowser._blurTab = tab => {
        if (!tab.selected) return;
        var tabToSelect = find(tab) || find(tab, "nextSibling");
        if (tabToSelect) gBrowser.selectedTab = tabToSelect;
        else blurTab.call(gBrowser, tab);
    }
    addDestructor(() => gBrowser._blurTab = blurTab);
})(gBrowser._blurTab);

Отсутствует

 

№1291322-10-2018 15:03:49

Smitis
Участник
 
Группа: Members
Зарегистрирован: 29-01-2016
Сообщений: 10
UA: unknown 0.0

Re: Custom Buttons

Dumby
Вы просто шаман, спасибо!
А ещё такой вопрос, можно ли подобным образом сделать так, что бы ссылки при клике на странице открывались сразу справа от вкладки, а не где-то в конце непонятного списка? Настройки типа insertAfterCurrent помогают, как я понял, при открытии только новых страниц, например, через CtrlT и т.п.

Отсутствует

 

№1291422-10-2018 18:02:13

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 52.0

Re: Custom Buttons

Подскажите, а на 63 релизе CB работает?
--------------------------------------------
Сам спросил - сам ответил:
CB работает с последними костылями.

Отредактировано Garalf (22-10-2018 23:59:34)

Отсутствует

 

№1291523-10-2018 02:06:20

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

Garalf пишет

Подскажите, а на 63 релизе CB работает?

У меня работает.
И на релизе 63.0, и на бете 64.0b3

Подведу для себя черту:

custom_buttons-0.0.5.9.0.4-fx.xpi
Конфигурация, надеюсь, всё ещё эта.

Разумный диапазон: Firefox 61 - Firefox 64
На Firefox 65 всё будет немного иначе.
Если вообще будет, конечно.

Отсутствует

 

№1291623-10-2018 16:35:22

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3972
UA: Firefox 63.0

Re: Custom Buttons

Dumby пишет

custom_buttons-0.0.5.9.0.4-fx.xpi
Конфигурация, надеюсь, всё ещё эта.

Часть кнопок не работает. Например

Выделить код

Код:

gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org');

У меня косяк или всё-таки они не работает?

Отсутствует

 

№1291723-10-2018 17:00:29

Yeesha
Участник
 
Группа: Members
Зарегистрирован: 23-08-2008
Сообщений: 356
UA: Firefox 63.0

Re: Custom Buttons

Coroner
gBrowser.AddWebTab() должно работать.

Отсутствует

 

№1291823-10-2018 17:38:16

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

Coroner
Они изгадили gBrowser.addTab и не только его.
Можно попробовать сделать как здесь, при этом заменив

в «Обратно совместимом»   getSystemPrincipal()   на   createNullPrincipal({})

в «Обратно несовместимом»   addTrustedTab   на   addWebTab

Сразу скажу — я не знаю что может плохого произойти,
если для вэб-страницы использовать системный triggeringPrincipal
Не знаю в прямом смысле слова, типа без понятия.

Отредактировано Dumby (23-10-2018 18:00:38)

Отсутствует

 

№1291923-10-2018 21:36:53

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3972
UA: Firefox 63.0

Re: Custom Buttons

Yeesha пишет

Browser.AddWebTab() должно работать.

Не-а. :(

Dumby пишет

Можно попробовать сделать как здесь,

И «Обратно совместимое», и «Обратно несовместимое» — работают.

Ох, но кнопок где это встречается много...
Буду потихоньку переделывать.
Спасибо :beer:

P.S. Ещё не работает «рестарт». Мне он не нужен, просто проверял что работает, а что нет.
Видимо и правда изгадили всё подряд.

Отсутствует

 

№1292024-10-2018 05:55:28

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 52.0

Re: Custom Buttons

есть кнопка  Quick toggle for about:config, там в отдельном подменю открываются только пункты типа "radio", и сделано это как-то неправильно…

Вопрос: как сгруппировать строки меню в отдельное подменю, где будут настройки одной категории, т.е. подменю для прокси, media…
например, по тэгу SUBMENU должно создаваться подменю, но сейчас в коде этого нет…

{nodeName:"menu", name:"Куки",  = обычный пункт основного меню…

{nodeName:"SUBMENU", name:"PROXY"…
ПЕРЕКЛЮЧАТЕЛИ
{nodeName:"menu", name:"Прокси сервис" …………… "0,,,отключен,,,0|||2,,,Автонастройка,,,2|||5,,,Системный,,,5"},
ПЕРЕКЛЮЧАТЕЛИ
{nodeName:"menu", name:"URL автонастройки", pref:"network.proxy.autoconfig_url", refresh:"", userChoice:"file:///etc/proxy.pac", strValues:"………
ЧЕКБОКС
{nodeName:"menuitem", name:"режим 'Без прокси' при выходе", pref:"CB.Proxy.reset", userChoice:"false"},
{nodeName:"CLOSE-SUBMENU"……

продолжается основное меню

Отредактировано Dobrov (24-10-2018 06:03:36)

Отсутствует

 

№1292125-10-2018 13:52:57

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 63.0

Re: Custom Buttons

В 63-й версии не открывается в боковой панели. Что здесь сломалось?

Выделить код

Код:

var bar = document.getElementById("sidebar-box");
    setToolbarVisibility(bar, bar.collapsed);
    openWebPanel("Декодер", "http://www.artlebedev.ru/tools/decoder/");

Отсутствует

 

№1292225-10-2018 13:57:03

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3972
UA: unknown 0.0

Re: Custom Buttons

xrun1, может сломалось не в кнопке, а в браузере?

Удалена функция открытия отдельных закладок в боковой панели ("Open in Sidebar" в "Library");

Вышел Firefox 63.0

Если они там с панелью колдуют, то могли и отломать.

Отредактировано Coroner (25-10-2018 13:57:37)

Отсутствует

 

№1292325-10-2018 14:06:32

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 63.0

Re: Custom Buttons

Coroner
Да уж...
Как я понимаю, выпилили модификаторы поиска для адресной строки и кнопка теперь не работает.

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

Выделить код

Код:

// Пункт для контекстного меню адресной строки, подставляющий модификаторы поиска
// Исходный вариант здесь https://forum.mozilla-russia.org/viewtopic.php?pid=714095#p714095
(()=> {
   if ( document.getElementById("lbc") ) return;
    var urlbar = window.document.getElementById("urlbar"),
        textBox = window.document.getAnonymousElementByAttribute(urlbar, "anonid", "textbox-input-box"),
        cxmenu = window.document.getAnonymousElementByAttribute(textBox, "anonid", "input-box-contextmenu"),
        separator = document.createElement("menuseparator"),
        menu = document.createElement("menu"),
        popup = document.createElement("menupopup"),
        i,
        labelArray = [
        "^ История",
        "* Закладки",
        "+ Страницы с метками",
        "% Текущие открытые вкладки",
        "~ Набранные",
        "# Названия",
        "@ Веб-адреса (URLs)"
        ],
        insertCharacters = function(sym) {
            var urlbar = window.document.getElementById("urlbar"),
                urlbarText = urlbar.value,
                pos,
                urlbarFocus = window.document.getElementById("Browser:OpenLocation");
 
            urlbarFocus.doCommand();
 
            if (urlbarText.length === 0) {
                urlbarText = sym + " ";
            } else if (urlbarText.slice(-1) === " ") {
                urlbarText = urlbarText + sym + " ";
            } else {
                urlbarText = urlbarText + " " + sym + " ";
            }
            urlbar.value = urlbarText;
 
            pos = urlbarText.length;
            urlbar.setSelectionRange(pos, pos);
            urlbar.editor.deleteSelection(0, 0);
        },
        makeMenuItem = function(label) {
            var sym = label.slice(0, 1),
                node = document.createElement("menuitem");
            node.setAttribute("label", label);
            node.addEventListener("command", function() { insertCharacters(sym); }, false);
            popup.appendChild(node);
        };
 
    menu.setAttribute("label", "Вставить ^ * + % ~ # @" );
        menu.id = "lbc";
    menu.appendChild(popup);
    for (i = 0; i < labelArray.length; i += 1) {
        makeMenuItem(labelArray[i]);
    }
    cxmenu.appendChild(separator);
    cxmenu.appendChild(menu);
})();

Отсутствует

 

№1292426-10-2018 17:21:40

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

xrun1 пишет

Как я понимаю, выпилили модификаторы поиска для адресной строки и кнопка теперь не работает.

Кнопка не работает из-за этого.
Может так попробуй

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

Выделить код

Код:

addEventListener("popupshowing", {
    handleEvent(e) {
        if (e.originalTarget != this.popup) return;
        removeEventListener("popupshowing", this, false, gURLBar);

        var sep = this.append("menuseparator", this.popup);
        var menu = this.append("menu", this.popup, {label: "Вставить ^ * + % ~ # @"});
        var popup = this.append("menupopup", menu, {oncommand: "insert(event);"});
        addDestructor(() => sep.remove(menu.remove()));

        this.handleEvent = e => {
            removeEventListener("popupshowing", this, false, popup);
            var df = document.createDocumentFragment();
            for(var label of [
                "^ История",
                "* Закладки",
                "+ Страницы с метками",
                "% Текущие открытые вкладки",
                "~ Набранные",
                "# Названия",
                "@ Веб-адреса (URLs)"
            ])
                this.append("menuitem", df, {label});
            popup.append(df);

            popup.insert = e => {
                var str = e.target.label[0] + " ";
                var val = gURLBar.value;
                if (val && !val.endsWith(" ")) str = " " + str;
                gURLBar.editor.endOfDocument();
                gURLBar.editor.insertText(str);
            }
        }
        addEventListener("popupshowing", this, false, popup);
    },
    get popup() {
        delete this.popup;
        return this.popup = gURLBar.inputField.parentNode.menupopup;
    },
    append(name, parent, attrs) {
        var elm = document.createElement(name);
        if (attrs) for(var a in attrs) elm.setAttribute(a, attrs[a]);
        return parent.appendChild(elm);
    }
}, false, gURLBar);

Отсутствует

 

№1292526-10-2018 17:41:13

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 63.0

Re: Custom Buttons

Dumby
Попробовал, так работает. :) Спасибо.

Отсутствует

 

Board footer

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