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

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

№265105-06-2011 11:57:56

Barsick14
Участник
 
Группа: Members
Откуда: Украина, Львов
Зарегистрирован: 01-10-2009
Сообщений: 42
UA: Firefox 4.0

Re: Custom Buttons

Anton пишет

Barsick14 пишет: Повторю свою просьбу. Может кто-то сделать кнопку для переключения словарей?Вот, вроде работает:Выделить кодКод:var fe = document. commandDispatcher. focusedElement;
if (!(fe instanceof Ci. nsIDOMNSEditableElement))
    return;
var isc = fe. editor. getInlineSpellChecker (true);
isc. spellChecker. SetCurrentDictionary ("en-GB");

Благодарю конечно, но дописал туда

Выделить код

Код:

isc. spellChecker. SetCurrentDictionary ("ua-UA");
isc. spellChecker. SetCurrentDictionary ("ru-RU");

и все равно не работает :(

Добавлено 05-06-2011 12:02:32

iDev.Pi пишет

по-моему, проще совместить все словари в 1 файл, чтобы ничего не переключать никогда.

По некоторым причинам мне это не удобно..

Отредактировано Barsick14 (05-06-2011 12:02:32)

Отсутствует

 

№265205-06-2011 12:38:40

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 4.0
Веб-сайт

Re: Custom Buttons

Barsick14 пишет


Благодарю конечно, но дописал туда

Выделить код

Код:

isc. spellChecker. SetCurrentDictionary ("ua-UA");
isc. spellChecker. SetCurrentDictionary ("ru-RU");

и все равно не работает :(

У меня работает ("ru") и ("en-GB").

Добавлено 05-06-2011 12:40:44

vv07 пишет

Anton
Может попробуете помочь нам

№2970

Может быть, попробую. Когда догадаюсь, о чем меня просят, конечно.

Отредактировано Anton (05-06-2011 12:40:44)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№265305-06-2011 14:47:09

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Anton
Извини!Подразумевался пост под этим номером,на предыдущей странице.

В соседнем топике о готовых кнопках,есть очень обалденная кнопка Bookmarks Stack от iDev.Pi.Я даже планировал,использовать несколько кнопок вместо Fast Dial,но увы обнаружился косяк и довольно серьезный.Некоторые сайты,почему то отоброжаются в названиях с кракозябрами
При добавлении,нормально показывает название,но потом....Прощу :blush: ,поправьте гуру.

Отредактировано vv07 (05-06-2011 14:47:51)

Отсутствует

 

№265405-06-2011 16:41:17

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 4.0
Веб-сайт

Re: Custom Buttons

vv07

Попробуй заменить

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

Выделить код

Код:

function writeFile( sFilePath, sFileContent ){
    try{
        sFilePath = (sFilePath.indexOf(':\\') > -1 )? sFilePath.replace(/\//g,'\\') : sFilePath;
        let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        file.QueryInterface(Components.interfaces.nsIFile);
        file.initWithPath( sFilePath );
        if( file.exists() == true ) file.remove( false );
        let strm = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
        strm.QueryInterface(Components.interfaces.nsIOutputStream);
        strm.QueryInterface(Components.interfaces.nsISeekableStream);
        strm.init( file, 0x04 | 0x08, 420, 0 );
        strm.write( sFileContent, sFileContent.length );
        strm.flush();
        strm.close();
    }catch(ex){
        window.alert(ex.message+'nnn');
    }
}

function readFile(sFilePath) {
    let file = null;
    sFilePath = (sFilePath.indexOf(':\\') > -1 )? sFilePath.replace(/\//g,'\\') : sFilePath;
    // sFilePath=sFilePath.replace(/\//g,'\\');
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
        alert("Permission to read file was denied.");
    }
    try {
        file = Components.classes["@mozilla.org/file/local;1"]
            .createInstance(Components.interfaces.nsILocalFile);
        file.initWithPath( sFilePath);
    }
        catch(e){
        alert(e);
    }
    if ( file.exists() == false ) {
        writeFile(sFilePath,"");
    }
    let is = Components.classes["@mozilla.org/network/file-input-stream;1"]
        .createInstance( Components.interfaces.nsIFileInputStream );
    is.init( file,0x01, 00004, null);
    let sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
        .createInstance( Components.interfaces.nsIScriptableInputStream );
    sis.init( is );
    let output = sis.read( sis.available() );
    return output;
}


на
скрытый текст

Выделить код

Код:

function writeFile (sFilePath, sFileContent)
{
    var suc = Cc ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Ci. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    cbu. writeFile (sFilePath, suc. ConvertFromUnicode (sFileContent));
}

function readFile (sFilePath)
{
    var suc = Cc ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Ci. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    return suc. ConvertToUnicode (cbu. readFile (sFilePath));
}


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№265505-06-2011 17:35:16

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

Anton
кракозябры вроде (вроде!) не появляются, а вот записи - после перезапуска пропадают.


mzfx

Отсутствует

 

№265605-06-2011 18:11:08

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 4.0
Веб-сайт

Re: Custom Buttons

iDev.Pi пишет

Anton
кракозябры вроде (вроде!) не появляются, а вот записи - после перезапуска пропадают.

А у меня не пропадают.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№265705-06-2011 18:23:26

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

Anton
пропадает причём верхняя запись вроде всегда.
было 5 записей, рестарт - 4 записи.


mzfx

Отсутствует

 

№265805-06-2011 18:37:02

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 4.0
Веб-сайт

Re: Custom Buttons

iDev.Pi пишет

Anton
пропадает причём верхняя запись вроде всегда.
было 5 записей, рестарт - 4 записи.

Не всегда, а если добавлялась новая запись. Замени

Выделить код

Код:

for(let i=1

на

Выделить код

Код:

for(let i=0

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№265905-06-2011 19:40:12

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

Anton
спасибо за фиксы, теперь кнопкой можно нормально пользоваться.
Было бы отлично добавить туда мелкие удобности вроде: при ПКМ клике по элементу списка - показывается контекстное меню, в котором единственный пункт "удалить?" при выборе которого удаляется выбранный элемент, но ещё и зачем-то закрывается весь список. Удалить 20 закладок из такой кнопки - обернётся болью в заднице.
Ещё было б удобно, чтоб при наведении на кнопку, в попапе вылезало не название кнопки (как это сейчас), а тайтлы всех закладок.

Отредактировано iDev.Pi (05-06-2011 19:47:08)


mzfx

Отсутствует

 

№266005-06-2011 23:10:40

Tiger.711
‌
 
Группа: Extensions
Откуда: из Лесу
Зарегистрирован: 30-07-2010
Сообщений: 7975
UA: Nightly 7.0

Re: Custom Buttons

Может кто-нибудь сделать кнопку, которая бы восстанавливала предидущую сессию. Аналогичную той, что в about:home
Чтобы скрывалась, если сессию не стали восстанавливать / нельзя восстановить.
И чтобы была длинной надписью. Хочу такое в панель вкладок добавить перед всеми вкладками.
Тогда можно лисе при запуске указать другую домашнюю страницу / пустую страницу будет...


Большой кот... Пуфыстый... Полосатый... Зубастый (:

Отсутствует

 

№266106-06-2011 00:04:02

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

Re: Custom Buttons

Tiger.711 пишет

Может кто-нибудь сделать кнопку, которая бы восстанавливала предидущую сессию. Аналогичную той, что в about:home

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0440%u0435%u0434%u044B%u0434%u0443%u0449%u0430%u044F%20%u0441%u0435%u0441%u0441%u0438%u044F%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAABiPhYTbUkfPmxIHzxsSB88bEgfPGxIHzxsSB88bEgfPGxIHzxsSB88bEgfPGxIHzxsSB88a0cfPGtHHzxrRx88a0cfPG1JHz5iPhYTkmcxjcCLQv+6hT79u4Y//7uGP/+7hj//uoU+/7yHPv++iED/vohA/76IQP+8hz7/uoU+/7+JP//Aij//wIo//7+JPv3Bi0L/kmcxjY5bGKusbBbOoWMRcaNlEnyjZRJ7omQRe6psFn6gZRR7lFsPcJZbD2yUWw9woGQUeqxtFn6GUg97fEwPe35ND3x+TQ9xqWoWzo5bGKuLVxSwmGYmVLOFRwCzhEMDsoNDALyMSgCKXSUAYz4SAXRQJix3UydKc1AmLGI9EgGOYScAbUgeAEwsCwBUMw8DTC0NAHlMFVSRXBewjFcVsJVoLVTBl2AAvZJZCMaaYAeUbTsAdlIoPbeJTd3AjEfsu4Y+1cSQSe65i03fe1csPlk2DwBZNg4HWjcOCFMyDQByRxNUk14asI5ZF7GYai5Tv5ZbAMOXWgWqgEgAdFAkLcOQS/arcyeKrHUqCbmCOQCaZR4DmmUfgcaSTfd1UCUtUzAKAFo3DwVSMAwAdUkVU5ZgHLGQXBmxmWswU8KXXgDKnF8FkGo5AKt8PrepcCadqHtBAMmcYQOEXjAAbkohIXNOIxelbSOVtoVFulg2EQBZNQ0FUjANAHVKFVOYYx6xkl4bsZttMlPEmWEAyZxhAJ52RBKvdivmnm8yM8+kagCheEMAfVcqWLqMT9ClfEgnmmwxKrh+MudjQBgTVjMMAFIxDAB2SxdTmmUhsZRgHbGdbzNTxpxiAMygZACddD0brXMm54tiLiXQpWgAoXlGCLaDQNKicjE8v5RaAI1kMCS1eiznYj0SHFc0DgBRMAwAeEwYU5xnI7GWYh6xn3A1U8idZQDOoWcBnnRAAryBMdqFXClZpn5KALaLUxCaZBy4w5VaDqd+SwCCWSdXxYk43F46EARXNA4BUTAMAHhNGFOeaSSxmGMgsaBxNlPLoGYAzJ9kBr+VXQCsdS57xJBL5WxKIhR9VygAi1wgL2tGGgBsSSERxZBM5KNtKHxUMg0AWjYPBlEwDAB5ThlToGomsZlkIrGkdTlVzaFpAMqcYgXNoWgBvo1OAcGFNq7JmFnxk2s8f39aLlKSajt/x5dY78iLO7BvRhYBUzEMAFs3DwVQLwsAe08bVaJsKLGcZySwmGowT9ClagDVp2oD06ZpANapbQDIk04Ax4s7YtmgVMXcpVvX2aBUxcaKO2PMl1EAc08jAFIvCABaNg8DTy4KAHVKFk+kbimwpW8qsJ5wNn1wTSUAeVQpEHhTKA54UygPeVQqDnNMHQBwRhQCcUcWCXBGFAJzSxwAe1YrDmA9FQ5XNQ8OXDgRF1Q0EAKfcDeApW8qsKBqJ6TfpVj/w5RZ4cGRVeTCklbkwpJW5MKSVeTDlFjnxJVZ5sSUWeTElVnmxJRY58KSVeTIl1noyJda4r6PVcvFl1vV3KJW/aBqJ6ShbCmj2pY9/9iVQPzal0H/2pdB/9qXQf/al0H/2ZdB/9mXQf/Zl0H/2ZdB/9mXQf7cmEL/u4I3x7V9NbmIWyRSsHo1mLl/NqOjbSmrm2goedSSPP/NjDn8zo05/c6NOf3OjTn9zo05/c6NOf3OjTn9zo05/c6NOf3OjTn9zo04/dCUR/zMkkf1wpBR2MqTTOrSmlHwm2cmegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BrestoreLastSession%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Не скрывается.

Отредактировано bunda1 (06-06-2011 00:06:29)

Отсутствует

 

№266206-06-2011 00:23:12

Tiger.711
‌
 
Группа: Extensions
Откуда: из Лесу
Зарегистрирован: 30-07-2010
Сообщений: 7975
UA: Nightly 7.0

Re: Custom Buttons

А disabled делается?


Большой кот... Пуфыстый... Полосатый... Зубастый (:

Отсутствует

 

№266306-06-2011 00:40:53

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

Re: Custom Buttons

Tiger.711 пишет

А disabled делается?

Наверно, хотя я не понял вопроса.

Отсутствует

 

№266406-06-2011 01:05:53

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Anton
У меня кнопка с обновленным кодом,перестала вообще работать почему то,хотя версия FF 4.0,как и у вас тоже.Вкладки не добавляются вообще.

Отредактировано vv07 (06-06-2011 01:06:30)

Отсутствует

 

№266506-06-2011 16:49:18

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Firefox 4.0

Re: Custom Buttons

Anton
Кракозябры из кнопки Stacked Bookmarks пропали, но теперь обнаружилась др. проблема. Из кнопки невозможно удалить закладки.  Удаляем, перезапускаем Firefox, и удалённые закладки возникают в кнопке вновь.

Отредактировано mserv (06-06-2011 16:49:41)

Отсутствует

 

№266606-06-2011 21:36:06

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 4.0
Веб-сайт

Re: Custom Buttons

vv07 пишет

Anton
У меня кнопка с обновленным кодом,перестала вообще работать почему то,хотя версия FF 4.0,как и у вас тоже.Вкладки не добавляются вообще.

А у меня почему-то работает — вкладки добавляются.

Добавлено 06-06-2011 21:38:17

mserv пишет

Anton
Кракозябры из кнопки Stacked Bookmarks пропали, но теперь обнаружилась др. проблема. Из кнопки невозможно удалить закладки.  Удаляем, перезапускаем Firefox, и удалённые закладки возникают в кнопке вновь.

Судя по коду, проблема была и до устранения кракозябров.

Меняем

Выделить код

Код:

this.removeNode = function( aNode ){
    closeMenus( aNode );
    mp.removeChild( aNode );
    //reAssignId();
};

на

Выделить код

Код:

this.removeNode = function( aNode ){
    closeMenus( aNode );
    mp.removeChild( aNode );save();
    //reAssignId();
};

Отредактировано Anton (06-06-2011 21:38:17)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№266706-06-2011 22:56:13

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Firefox 4.0

Re: Custom Buttons

Anton пишет

Судя по коду, проблема была и до устранения кракозябров.

Я не имел в виду, что эта проблема возникла после ваших исправлений, просто я это обнаружил, во время тестирования на предмет появления кракозябров. Спасибо, теперь всё вроде ОК.  И ещё один вопрос, а можно сделать очистку кнопки, что бы сразу удалять все закладки?

Отсутствует

 

№266806-06-2011 23:26:36

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

Anton
спасибо, кнопку в теме "готовые кнопки" обновил


mzfx

Отсутствует

 

№266907-06-2011 03:24:27

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Снова установил обновленную кнопку,но так нихрена и не работает.Вкладки при клике на колесико,не добавляются:whiteflag:

Отсутствует

 

№267007-06-2011 19:51:38

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

Re: Custom Buttons

Save(Firefox 3.6-4.0) http://forum.mozilla-russia.org/viewtop … 40#p493040
Добавил в меню кнопки дополнительные пункты;
Bookmark to Desktop сохраняет закладку текущей страницы на рабочий стол,
Favicon copied to base64 сохраняет иконку сайта в буфере обмена как код base64.

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

Выделить код

Код:

/*Initialization Code*/
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="
       label="Bookmark to Desktop"
       onclick={"document.getElementById('" + this.id + "').BooktoDesk (event)"}/>
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg=="
       label="Save Favicon"
       onclick={"document.getElementById('" + this.id + "').SaveFavicon (event)"}/>
        
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ=="
       label="Favicon copied to base64"
       onclick={"document.getElementById('" + this.id + "').openFaviconData(event)"}/>
       
       <menuseparator/>
         
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Capture a region on a page as PNG"
        onclick={"document.getElementById('" + this.id + "').WebScreenShotByClipping.init(event)"}/>

       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save entire frame as PNG"
       onclick={"document.getElementById('" + this.id + "').WebScreenShotByClick.init(event)"}/>
        
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save visible portion as PNG"
       onclick={"document.getElementById('" + this.id + "').capturePage.init(event)"}/>
             
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save page as PNG"
       onclick={"document.getElementById('" + this.id + "').captureAll.init (event)"}/>
       
       <menuseparator/>  
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUw4pJt3V/+Rb1D8lnFP/55zTf+VcVH/lXJS/5VyUv+VclL/lXJS/5VyUv+VclL/k3BR/J56Wv9cRzSkAAAAAJNvUKTto2L/4ppe/uehZf/Pmmr/noZv/9Scav/Wl17/1plh/9eZYf/XmWH/15lh/9eZYf/WmGD/2Jlg/suRXP9mRiuk8rWA/397dP1akKn/rqqi/3LF3f8Mntj/4dLJ///+9f/48u3/9e7n//bt5v/47+f/+O/n//jv5//rvZP/1ZJX/a9/VP9+lrD8AIvz/xOt+f8Douv/ALb6/wC28/9tmar/z8jJ//Lq5/////7//v////n9///6/P3//////+Ta0P/PjVP/pnpT/IWds/+aiXj/5efl/8Px//951/3/LMz//wCx8/8GltL/NIu3/4ycqf/l29L////+//n6+//8/v//3tXM/8+OVP+oe1P/6K57/86QWP/r6Ob////////++v/r9/z/oOb9/zDL//8Arf//AI/r/ydysv+hpqr//PTr///////d1Mz/0I5U/6h7U//osH//wo5g/+fm5P/7/f//9vf5//z7+////vv/9/r8/5Dc/P8Oqv7/AJf//wF02v9ffZ7/8Ojh/+Ha1P/NjFL/qHtT/+ewf//Ej1//7O3r///////+/v7//v7+//f5+v/6+vv////8/8Tq/f8hp/7/AJH//wB18/8/bqj/1MGu/9mXXv+leVH/569+/8iSYv+/tKn/wLew/8O5sf/P0M////////7+/v/3+fv////7/9Hv/v8hoP3/AIn//wB4/v84ZqL/w4NH/619VP/nsYD/x45c/9W5of/bv6j/0Jxt/6J/YP+spqD/2N3i//7////6+/3///76/8vr/v8Slv7/AIb+/wBz//83VH7/nW1B/+ewfv/Fjl7/7Ozr///////9+/r/9d7K/9Ghdv+jd1D/pJ6Y/+jt8f/9///////7/6fb/v8Ahv7/AYD//wRp6f95YlT/57B//8SOXv/n5uT//v7///r7/P/8/v////////XRsv/DhEv/loBu/9DX3P/9/v/////7/2O6/f8Afv//FnTU/5JtTf/nsH//xY9e/+jn5f/+/f//+fj5//n4+P/5+Pn/+/////Xbxf/Wj1D/nX1h/+Ll6P////7/3+/3/w+V//8tcbP/qHJB/+WuffzCjV7/5efn///////+/v7//////////////v7///////XRsP/TnW3/8fT3//////////z/ddD//0Nxl/+zdkH88LmH/9CRWP2+qJT/0M7N/8/Jxv/Pysf/z8rH/8/Kxv/Py8n/zsO6/7+pmP/PzMv/zsnG/9bNyP+nsK7/h4R3/b2BT/+Sb1Ck7qxw/9GSW/69hlb/wYhX/8CIV//AiFf/wIhX/8CIVv/BiVj/xI1d/8CIVv/BiFf/vYZW/9STW/7ppmv/bE80pAAAAACUd16k+sui/+7AmPzwwpr/8MKa//DCmv/wwpr/8MKa//DCmf/vwZj/8MKa//DCmv/uwJj8+cui/5N3XaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save web page as PDF"
       onclick={"document.getElementById('" + this.id + "').SavePDF (event)"}/>  
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAQE6AAAAZAAAAGgAAAJmAAACZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAaQABAmYAAQEjAAAAADlVkOdVcKHxVXKi8kdklPJLZpfyU3Cg8lJvn/JRbZ7yUW+g8lFun/JRbp/yUG6e8lVyofFVdKjzLkV45wAAAFABAQEAaIzF/3y34v9wsuL/cJe0/0lpgv9bjLP/dLLh/2+v3v9sq9v/cK3d/3Gv3v9sqtv/b7Df/4G77P9VcqT2AAAAVAMDAQBnir/+ZqfU/pDB4/7a3uD+j46N/kxYXv6To6/+1er4/tXp+P7J3/D+1ej4/svg8v6Gut/9aqzd/lhxnvAAAABSAwIBAGaIvv9pptX/ocfj//f4/P/P0tX/g4CA/1xZWf+Woqr/2uz8/9Hl+f/W5fT/2Of3/5fC4v5tq93/Vm+e8QAAAFIDAgEAaYm+/3mw2/+iyeX/9Pn8/+z0+//IzNL/d3h5/0tMTv+Mkpn/xdvs/9Hp/f/O4PL/msXk/nmz4/9XcJ/xAAAAUgMDAQBti7//k7/h/6fL5v/v9fn/4u73/9Dk9P+8wMT/YGpx/zJJWv94iJf/ztzo/9Pp/P+ZwuD+gLfk/1dwnvEAAABSAwMBAHOPwf+myub/sNHp//j7/P/6/P3/8fr///r39P+sxdP/IXWq/xJJcv+NjZD/0+Lu/6TN7f6Ft+L/WXGf8QAAAFIDAwEAd5LD/7PR6/+ZxOP/0ePx/97r9f/Y5/L/3e32/8Tc7f9gseT/CHK3/zBYdv+HiY7/lL/f/pLE7/9bcJ3xAAAAUgMDAQB4k8P/xNvx/5/F5f+kyOX/qMrn/6TH5f+kyOX/sM/q/5e51P9Mm83/GHm3/xxIav9fdYf+pMvs/1x1pfIAAABTAwMBAHmSxf/O4/T/y9/y/8Hb9P/C3PX/wNv0/7vW7/+93ff/utDm/42fsf9Gjbn/EXS2/ytSbv6Fj5r/WnGc8gAAAFICAwEBepPE/tHk9f/S5PX/vMjV/7fCzP+3w8//uMPP/7XBzP+6ytf/qa+4/3h/hv9Ghaz/JoO+/jNXdP82PVnyAAAAVgACAgCBmcb/2+r3/dHh8fyPkpX/kI6N/5yam/+dnJ3/paWk/6enpf+sr6//mpSR/3Bubf9SjbD8H4C+/QsrSvcCAAB/AAAAA3yVx//j8///3u/7/52gpf6pqKf+uLm5/rq7u/7Ly8v+ycnI/paWlf6LjY/+np2f/Xh+g/5gnL7/MX+y/xcgJ80BAgNNN1OUs6W84fDA1O73mJyj/ainpv+2trb/t7e4/8fHyP/Fxsb/kZGQ/4eGhP+vucT/j6G+/W53k/NlkbnwNoOv/AgiNb8CCBsQDRo/YwsaO3B0d33arKyp9q2trfWvr6/2u7u79ru7vPawr7H1sbCt9nJ2gOQIGD6bFCFEYB0qPE1Bf6SpEz9cggAAAAMCAQEBAQAAADIyMmlDQ0ONQUFBhUFBQYVCQkGFQkJBhUhISIRNTU2OKysrZAEAAAUBAQAAAgEAAAkEAAEDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save the selection to a txt file"
       onclick={"document.getElementById('" + this.id + "').Saveselectiontxt (event)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAJEidOGitTvh8tU80cK1HIHCtSyRwqUskcKlLJGypSyRsqUskbKlLJGypSyRsqUskbKlLJHCpRyCAtU8oaK1PLCRInpBorU4F1n9PydajY/HSk0/p2pdX7dqXU+3am1ft3ptX7d6bV+3em1ft4p9X7eKfV+3mn1ft1pNP6dKjY+3Sf0/caK1PHIC5ThXWn1/Zcpdf/yeLy/u/5///l8v3/4/H8/+Hx/P/e8Pz/3O/8/9zt+//X6/v/3/D9/8Pe8f5eptj/dKfX+yAuU8odLFGEdabT9l6i0//b6fP89fn9/uHs9/7f6/f+2uj2/tTm9v7Q4vb+zOH0/sPd8/7R5fn+zeDx/WOk0/50pNP7HSxRyRwrUYV7qtj2aKnY/9np8/7y9vz/3ev3/9vq9//X5/f/0eP1/83h9f/J4PX/wNvz/8zi+f/K4PL+bavY/3up1/scK1HJHCtRhYCs2fZsq9n/2ujz/vb5/f/k7vj/4Oz4/93r+P/Y6ff/0+b2/9Dj9v/H3/X/0ub5/8vh8f5yrtr/f6vY+xsrUckZKVCFjrTc9ny03f/b6fP+8fb6/+Ds9v/c6/X/2ej2/9bm9v/R5PX/zeH1/8Xe8//Q5ff/zeHy/nix3P+Ertn7GylQyRcoUIWgvuH2kL/j/9vq9P76/P3/7PP5/+fw+v/l7vr/4ez5/9vq+P/V5/f/zuL3/9Xo+f/M4vL+gLbe/4203PsbKVDJFyhQhazF5faVweT/3Onz/v/////9/v7/+/z///j6/v/0+f3/8ff+/+70/P/p8vv/7/b//9Pl8/5/t97/l7rg+xsqUckXKFCFscnn9qHJ5/+szeX+xdvu/8Tc7//B2+7/wdvv/8Hb7//A2u7/vNju/7vY7/+82O//o8jk/oS64v+bvOL7GypRyRgpUIWzyuj2w97x/6bK6P6ky+z/pcvr/6PJ6f+iyOn/ocjp/5/H5/+axOX/lsLl/5TB5v+UwOP+qc7r/6LA4/saKlHJGSlRhbPJ5vbb7P3/zNnn/rzG0P+7xM7/vMbQ/7rFz/+5xM//ucXP/73K1P+6xtL/tcHO/8TV5P7Q5/v/qcTk+xgpUMgZKU+Dt8nl9dzx//+otsH+iYmK/5SSkv+cnZ3/np+e/6empv+rqqn/oaKi/6Khn/+npqb/pLK//tPs//+vxuP6GSpQyRorU4m/0uv26vv//rS/x/ygn6D/sbCw/7y8vP+/v7//z8/P/9LR0f+ZmZr/lJSS/87Pz/+uu8X94fb//bjN6/sbLFXOFCRPdKO64fPy////vMbM/pqbnP+rqan/tba2/7e2t//Gxsf/yMjI/4+PkP+Hh4X/xcXG/7jEzP/o////k63Z+BEhSaICCh8HL0eAm2qBsuFwfJfqnJ2c+7Kxr/+1tbb/urq6/8jIyP/Nzc3/nJ2e/6Cfnf/HyMj7bXqV6mWAr+AoPG6hAAENGgAAAQAEBAUKAAAAACkpKWKKiorsmpqa/5OTk/ubm5v/np6e/6Ojo/+hoaH7sLCw/52dnewoKChiAAAAAAQDAwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       label="Save all to a txt file"
       onclick={"document.getElementById('" + this.id + "').Savealltxt (event)"}/>
       
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAyMjIzwyMjFeLi0tVS8vLlcuLy9XLS4uVywsLFUuLi5aKSkpUggICBMAAAAAAgICAQAAAAAAAAAAAAAAABQTEyOgoJ/yysvL/s3Pz/7Z293/4OPk/+bp6f/t7u7/5eXl/LOysv97e3vLFRUWJQAAAAACAgIDAAAAAAAAAAA8PDxSz9HT/83Qz/fLx8T8z7+5/M/AsPzez8n89e3r/PDx8fyusLL43dzc/52dndMWFhY2AAAAAAICAgIAAAAAODg5T8bEv/+9o476vIR1/7WDcv+uj3v/spCA/8Wqk//Gtab/rqyq/+Pk5fn19fX+np6e4BQUFCgAAAAAAAAAAC4uJU29oYj/wLao+tLDqf/Mv7P/yLik/7zEvP/F0cr/v62Y/6+Kef/Z2NP/6Ors+d3c3P97e3vNBAQEDgIDAAZhRCuYxaSb/8Gvqfu2inL/vIF0/7FmUv+ygG//waaX/8m8tP/CoIn/vqOF/9zg3//l5ef7ycnJ/zY2Nm0hFw08rGJD/6BlYf2mWUD/rW9g/7aNff+ZRyL/pmxR/7RyWv+qaEz/uYR0/69kSf/k1tD//////Ozs6/1iYmK4WTMck61mVv+Yemj8hjsg/51bQ/+wem//n084/6+pq/+3p6H/l0Ux/4lFOf+gWDr/zq2X//b7/fzo6Oj/YWBgsXpXSbnMsp//wNC8/I9jWv+WX1X/tn5w/7iKfv/Tzc7/ztXc/513bf+MSjH/rWJG/7iRd//o7Oz85OPl/2BgYLN1aFqu2tO+/7ejnvyohYD/ybGb/7q1ov/HwrX/7/Lr//T19v/Hzs3/p4V0/6hvW/+6gHf/4uDh/N3e3v9hYWC0dWNPuaVXRP6cfWv8w7Gz/8vHsv/U2dP/4OHf//b08//9/Pv/3drZ/7rBw/+0ppv/wZ2F/9zc3PzW1tj/ZWRktE1HPW2oa1f/lX1t/cTP0v/Ew8T/3Nvd/9LR0//W1tf/5OXl/+/t6v/i6vD/wK+i/8y2o//b3t/81NTU/2FhYbMMDAsPsZ2a1tDX2P++vL390c/P/+Dh4P/b29r/09PS/9rY1//6+Pf/8PP3/8Kqlf/c0sv/3N7g/NTU1P9iYmKyAAAAAEY6MmXozcP/5ezt+OHk6Pzt7Oz9+Pj4/urq6/zs7/T8+f///NXGsPzey8P87vDy/OXm5vnf39//ZWVlrgAAAAAGBQQQdFdHy8Wfhv/d18797e7w/+3t7P/y8u7/7N/G/7unff+/uqT/4+Tl/97d3v/c3Nz/sLCw+h8fH0IBAQABAAEBABEVFx8vJB1cWy8ciZNrU8itknHrkWdIxUsqFnEnJSBRMjQ3WS8uL1csLCtVMjIyXiIiIj4BAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
       label="Add URL and Save Page as"
       onclick={"document.getElementById('" + this.id + "').savePage(event)"}/>

</menupopup>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";
this.menuClick = function(event) {
  event.preventDefault();
  event.stopPropagation();
  this.open = false;
}

this.setAttribute("onclick", "this.buttonClick(event)");

//Save PNG......................................
var WebScreenShot= {
    capture : function(win, x, y, width, height, isCopy){
        var mainWindow = document.getElementById('main-window');
        var scrollbox = document.createElement('scrollbox');
        scrollbox.width = '1';
        scrollbox.height = '1';
        mainWindow.appendChild(scrollbox);
        var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
        canvas.style.display = 'inline';
        canvas.width = width;
        canvas.height = height;
        scrollbox.appendChild(canvas);

        var ctx = canvas.getContext("2d");
        ctx.clearRect(0, 0, width, height);
        ctx.save();
        ctx.scale(1.0, 1.0);
        ctx.drawWindow(win, x, y, width, height, "rgb(255,255,255)");
        ctx.restore();

        var url = canvas.toDataURL("image/png");
        const IO_SERVICE = Components.classes['@mozilla.org/network/io-service;1']
           .getService(Components.interfaces.nsIIOService);
        url = IO_SERVICE.newURI(url, null, null);

        var fp = Components.classes['@mozilla.org/filepicker;1']
           .createInstance(Components.interfaces.nsIFilePicker);
        fp.init(window, "Save Screenshot As", fp.modeSave);
        fp.appendFilters(fp.filterImages);
        fp.defaultExtension = "png";
        fp.defaultString = win.document.title + ".png";
        if ( fp.show() == fp.returnCancel || !fp.file ) return;

        var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
           .createInstance(Components.interfaces.nsIWebBrowserPersist);
        wbp.saveURI(url, null, null, null, null, fp.file);
        
        mainWindow.removeChild(scrollbox);
    },
        
    init : function(){
        document.getElementById('contentAreaContextMenu').addEventListener('popupshowing', this, false);
    },
};

//Save captureAll
this.captureAll ={
            init : function(){
        var win = content;
        WebScreenShot.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY);
    }};

//Save capturePage
this. capturePage ={
        init :function(){
        var win = content, doc = win.document, body = doc.body, html = doc.documentElement;
        var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft;
        var scrY = (body.scrollTop || html.scrollTop) - html.clientTop;
        WebScreenShot.capture(win, scrX, scrY, win.innerWidth, win.innerHeight);
    }
      },

//Save WebScreenShotByClipping
this. WebScreenShotByClipping ={
    capture : WebScreenShot.capture,
    handleEvent : function(event){
        if (event.button != 0) return false;
        event.preventDefault();
        event.stopPropagation();
        switch(event.type){
            case 'mousedown':
                this.downX = event.pageX;
                this.downY = event.pageY;
                this.bs.left = this.downX + 'px';
                this.bs.top  = this.downY + 'px';
                this.body.appendChild(this.box);
                this.flag = true;
                break;
            case 'mousemove':
                if (!this.flag) return;
                this.moveX = event.pageX;
                this.moveY = event.pageY;
                if (this.downX > this.moveX) this.bs.left = this.moveX + 'px';
                if (this.downY > this.moveY) this.bs.top  = this.moveY + 'px';
                this.bs.width  = Math.abs(this.moveX - this.downX) + 'px';
                this.bs.height = Math.abs(this.moveY - this.downY) + 'px';
                break;
            case 'mouseup':
                this.uninit();
                break;
        }
    },
    init : function(){
        this.win = document.commandDispatcher.focusedWindow;
        if (this.win == window) this.win = content;
        this.doc = this.win.document;
        this.body = this.doc.body;
        if (!this.body instanceof HTMLBodyElement){
            alert("Can not capture.");
            return false;
        }
        this.flag = null;
        this.box = this.doc.createElement('div');
        this.bs = this.box.style;
        this.bs.border = '#0f0 dashed 2px';
        this.bs.position = 'absolute';
        this.bs.zIndex = '2147483647';
        this.defaultCursor = getComputedStyle(this.body, '').cursor;
        this.body.style.cursor = 'crosshair';
        this.doc.addEventListener('mousedown', this, true);
        this.doc.addEventListener('mousemove', this ,true);
        this.doc.addEventListener('mouseup', this ,true);
        this.doc.addEventListener('click', this, true);
    },
    uninit : function(){
        var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)];
        this.doc.removeEventListener('mousedown', this, true);
        this.doc.removeEventListener('mousemove', this, true);
        this.doc.removeEventListener('mouseup', this, true);
        this.doc.removeEventListener('click', this, true);
        this.body.style.cursor = this.defaultCursor;
        this.body.removeChild(this.box);
        this.capture.apply(this, pos);
    },
}
//Save WebScreenShotByClick
this.WebScreenShotByClick = {
    capture : WebScreenShot.capture,
    getPosition : function(){
        var html = this.doc.documentElement;
        var body = this.doc.body;
        var rect = this.target.getBoundingClientRect();
        return [
            this.win
            , Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft
            , Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop
            , parseInt(rect.width)
            , parseInt(rect.height)
        ];
    },
    highlight : function(){
        this.orgStyle = this.target.hasAttribute('style')? this.target.style.cssText : false;
        this.target.style.cssText += 'outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;';
    },
    lowlight : function(){
        if (this.orgStyle) this.target.style.cssText = this.orgStyle;
        else this.target.removeAttribute('style'); 
    },
    handleEvent : function(event){
        switch(event.type){
            case 'click':
                if (event.button != 0) return;
                event.preventDefault();
                event.stopPropagation();
                this.lowlight();
                var pos = this.getPosition();
                this.capture.apply(this, pos);
                this.uninit();
                break;
            case 'mouseover':
                if (this.target) this.lowlight();
                this.target = event.target;
                this.highlight();
                break;
        }
    },
    init : function(){
        this.win = content;
        this.doc = content.document;
        this.doc.addEventListener('mouseover', this, true);
        this.doc.addEventListener('click', this, true);
    },
    uninit : function(){
        this.doc.removeEventListener('mouseover', this, true);
        this.doc.removeEventListener('click', this, true);
    },
}

WebScreenShot.init();
 
//Bookmark to Desktop......................................
this.BooktoDesk = function(event) {
var protocol = content.document.location.protocol;
if (protocol == "chrome:" || protocol == "data:") return;
var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("Desk", Components.interfaces.nsIFile); // desktop folder
var fileName = content.document.title || content.document.domain || protocol;
fileName = fileName.
  replace(/"/g,  " ").
  replace(/\*/g, " ").
  replace(/\//g, " ").
  replace(/:/g,  " ").
  replace(/</g,  " ").
  replace(/>/g,  " ").
  replace(/\?/g, " ").
  replace(/\\/g, " ").
  replace(/\|/g, " "); // replace invalid characters
fileName = fileName.replace(/\s\s+/g, " "); // remove extra white space characters
fileName = fileName.substring(0, 100); // limit length
file.append(fileName + ".url"); // desktop file
// file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666);
// 0666 read and write permission for owner, group, others
// example.url example-1.url example-2.url example-3.url et cetera
var fileOutputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].
  createInstance(Components.interfaces.nsIFileOutputStream);
fileOutputStream.init(file, 0x02|0x08|0x20, 0666, 0);
// 0x02|0x08|0x20 write, create, truncate
// 0666 read and write permission for owner, group, others
var converterOutputStream = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
  createInstance(Components.interfaces.nsIConverterOutputStream);
converterOutputStream.init(fileOutputStream, "UTF-8", 0, 65533);
// unicode 65533 - replacement character
var data = new Array();
data.push("[InternetShortcut]");
data.push("URL=" + content.document.location.href);
// data.push("IconFile=C:\\Program Files\\Mozilla Firefox\\firefox.exe");
// data.push("IconIndex=0");
data.push("IconFile=C:\\WINDOWS\\system32\\shell32.dll");
data.push("IconIndex=13");
// if the icon does not change then it may have something to do with the icon cache file
// icon index 13
// 13 divide 4 equal 3 thus the icon is in column 3 in the change icon window
// 13    mod 4 equal 1 thus the icon is in    row 1 in the change icon window
converterOutputStream.writeString(data.join("\r\n") + "\r\n");
converterOutputStream.close();
fileOutputStream.close();

// Title of the sliding alert
var cbTitle = "Bookmark"; 
var cbDesc = "Bookmark to Desktop"; 
custombuttons.alertSlide(cbTitle, cbDesc);
}



//Save Page......................................
this.savePage = function(event) {
(function(){
var sURL = gURLBar.value;
content.document.body.innerHTML = "<table width=100%><tr><td align=left><small><a target=_blank href=" + sURL + ">"+ sURL + "</a></small>\n</td></tr></table>" + content.document.body.innerHTML;
})();
saveDocument(window.content.document);
}


//Save Favicon...........................
this.SaveFavicon = function(aEvent) {
  this.img=document.getElementById("page-proxy-favicon").src;
            openUILinkIn(this.img,"save");}


 //Favicon copied to base64...........................
this.openFaviconData = function(event) {
  var ios = Components.classes["@mozilla.org/network/io-service;1"].
    getService(Components.interfaces.nsIIOService);
  var fis = Components.classes["@mozilla.org/browser/favicon-service;1"].
    getService(Components.interfaces.nsIFaviconService);
  var url = document.getElementById("page-proxy-favicon").src
  url = fis.getFaviconDataAsDataURL(ios.newURI(url, null, null));
  if (url && event.button == 0) gBrowser.selectedTab = gBrowser.addTab(url);
  var sURL = gURLBar.value;
  gClipboard.write(gURLBar.value);
  if (event.button == 0)
  var cbTitle = "Favicon";
  var cbDesc = " Copied to Clipboard "; 
  custombuttons.alertSlide(cbTitle, cbDesc);} 
  
//Save the selection to a txt file.......................
this.Saveselectiontxt = function(aEvent) {
  saveURL("data:text/plain," + encodeURIComponent(getBrowser().currentURI.spec + ("\r\n\r\n" + document.commandDispatcher.focusedWindow.getSelection())), getBrowser().selectedTab.label + ".txt");
}


//Save all to a txt file..............................................
this.Savealltxt = function(aEvent) {
document.getElementById("cmd_selectAll").doCommand();
saveURL("data:text/plain," + encodeURIComponent(getBrowser().currentURI.spec + ("\r\n\r\n" + document.commandDispatcher.focusedWindow.getSelection())), getBrowser().selectedTab.label + ".txt");
goDoCommand("cmd_selectNone");}




//Save web page as PDF.....................................................................
this.SavePDF = function(aEvent) {
var uri = <![CDATA[javascript:pdf_url=location.href;location.href='http://pdfmyurl.com?url='+escape(pdf_url)]]>;
if(!("noscriptUtil" in window) || !noscriptUtil.service.handleBookmark(uri))
    loadURI(uri);}   



    
//Image copied to base64.............................................. 
this.init = function(x) {
  nsContextMenu.prototype.viewImageClick = function(aNode, aEvent) {
    switch(aEvent.button) {
      case 0: //load image in a new tab on middle click
        event.preventDefault();
        event.stopPropagation();
        gContextMenu.saveMedia(gContextMenu.imageURL);
        break;
      case 2://Image copied to base64
        aEvent.stopPropagation();
        var ioService = Components.classes["@mozilla.org/network/io-service;1"].
  getService(Components.interfaces.nsIIOService);
var mimeService = Components.classes["@mozilla.org/mime;1"].
  getService(Components.interfaces.nsIMIMEService);
var binaryInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].
  createInstance(Components.interfaces.nsIBinaryInputStream);
//var uri = ioService.newURI(content.document.location.href, null, null);//test responseStatus
var uri = ioService.newURI(gContextMenu.imageURL, null, null); 
var channel = ioService.newChannelFromURI(uri);
binaryInputStream.setInputStream(channel.open());
if (channel instanceof Components.interfaces.nsIHttpChannel && channel.responseStatus != 200) {
  alert("response status code " + channel.responseStatus);
} else {
  var binaryData = "";
  var readLength = binaryInputStream.available();
  while (readLength != 0) {
    binaryData = binaryData + binaryInputStream.readBytes(readLength);
    readLength = binaryInputStream.available();
  }
  try {
    var contentType = mimeService.getTypeFromURI(uri);
  } catch(e) {
    contentType = "text/plain"; //default contentType
  }
  var encodeData = btoa(binaryData);
  gClipboard.write("data:" + contentType + ";base64," + encodeData);
  custombuttons.alertSlide("Image copied to base64",
    "data:" + contentType + ";base64," + encodeData.substring(0, 8));
}
binaryInputStream.close();
           
    }
    closeMenus(aEvent.target);
  }

  var contextViewimage = document.getElementById("context-saveimage");
  contextViewimage.setAttribute("onclick", "gContextMenu.viewImageClick(this, event)");

}
this.init(this);

Отредактировано bunda1 (24-08-2011 15:53:04)

Отсутствует

 

№267108-06-2011 00:13:15

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

vv07 пишет

Снова установил обновленную кнопку,но так нихрена и не работает.Вкладки при клике на колесико,не добавляются:whiteflag:

странно, у меня всё ок.


mzfx

Отсутствует

 

№267208-06-2011 01:07:59

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Firefox 4.0

Re: Custom Buttons

vv07 пишет

Вкладки при клике на колесико,не добавляются:whiteflag:

А куда ты им кликаешь, надеюсь на кнопку?grin.gif

Отсутствует

 

№267308-06-2011 03:00:51

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

странно, у меня всё ок.

Вот и я думаю также,что странно,но никак работать не хочет.Старый вариант нормально добавлял,но был сброс на кракозябры.Новая вообще не реагирует на добавление.:angry:

Отсутствует

 

№267408-06-2011 09:58:58

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Firefox 4.0

Re: Custom Buttons

iDev.Pi пишет

так на кнопку колесом кликать и надо. Вот только у меня работает, а у него - нет.

А я что возражал? Я просто уточнил, куда он тыркает? Вдруг не на кнопку, а ещё куда-нибудь, всякое бывает.grin.gif
А если по существу, то кнопка удобная, если бы её ещё немного доработать, что бы после каждого открытия ссылки список  закладок не закрывался и сделать возможность удаления нескольких закладок сразу.

Отредактировано mserv (08-06-2011 10:02:55)

Отсутствует

 

№267508-06-2011 13:23:50

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Nightly 7.0

Re: Custom Buttons

mserv :offtopic:

скрытый текст
ой, я криво твоё сообщение прочитал, прочитал как "... надеюсь НЕ на кнопку?"


mzfx

Отсутствует

 

Board footer

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