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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.
  • Форумы
  •  » Сustom Buttons
  •  » [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

№113-12-2013 15:34:05

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

[CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Показывать иконки сайтов, у которых их нет, в табах и адресной строке (Firefox 25)
Автор: difabor
Версия: от 12.12.2013
Основана на [CB]Вернуть иконки сайтов в адресной строке (автор - bunda1, огромное ему спасибо)
Описание: Код заменяет унылую стандартную (пустую) иконку сайтов у которых нет иконок, различными иконками в табах и адресной строке
Использование: либо создайте новую Custom Buttons кнопку и положите код в инициализацию, либо можно использовать уже существующую, добавив код туда.

В Инициализацию:

Выделить код

Код:

// Вернуть иконки сайтов в адресной строке и в табах - огромное спасибо Bunda1
Icons = this.Help.split("data:image");
(function() {
  function IconsP(host) {
    var hv = host.split(''), sum=0,sum1=0,ad=0;
    for (var i=0;i<hv.length;i++) {
      ad = (parseInt(hv[i], 36) <= 36) ?  parseInt(hv[i],36):36;
      sum = sum + ad*(i+1);
    }// for (var i=0;i<hv.length;i++)
    while (sum>0) {
      ad=sum%(Icons.length-2);
      sum = (sum-ad)/(Icons.length-2);
      sum1 = sum1+ad; 
    }// while (sum>0) 
    return "data:image"+Icons[sum1%(Icons.length-2)+1]; 
  }//function IconP(host)      
  // исправить проблемы с 'about:home' и 'about:blank' при старте браузера ....
  if (!gProxyFavIcon) gProxyFavIcon = document.getElementById("page-proxy-favicon");
  gProxyFavIcon.setAttribute("pageproxystate", "valid");
                                          
  
  // обработчик следит за извинениями табов и меняет иконки сайтов в адресной строке ....
  addEventListener("TabAttrModified", function(event) {
    gProxyFavIcon.setAttribute("pageproxystate", "valid");
    
    gProxyFavIcon.src = (gBrowser.mCurrentTab.image)? 
                         gBrowser.mCurrentTab.image : IconsP(content.location.host);
    for (var i=0;i<gBrowser.tabs.length;i++) { 
      var mTab = gBrowser.mTabs[i];
      if (!mTab.image ) mTab.image =
         IconsP(Array.slice(gBrowser.tabs)[i].linkedBrowser.currentURI.host)+"#-moz-resolution=16,16";   
    }// for (var i=0;i<Array.slice(gBrowser.tabs).length;i++)                                                   
  }, true, gBrowser.tabContainer);
})();


В Справку:

Выделить код

Код:

data:image/x-icon;base64,AAABAAEADAwAAAEAGAArAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAfJJREFUKJFlkE9IkwEchn/VscAOepFK1AqsIIw8aBJC4UWLNlPK8lKHQOiQYYei/WFY1LJQDHWaFUV0SbH8F8k+b1IJanPU9imsjW06tr6tr9ycbE+XCNIXntv7HN5XRESYmclNe1X1Z08fsZZWtNtWIhMKtpuD2O+O890XXQyH9TwREcHjydUd/Uqo/DiBPXv/ESyrYPT+a05U2mlq6GN4aNYiIiLR5uaSSH0jEWMDkbpzBI9WECjYR6jsGH7nR4w1XVQcacNmerficvmLJZv6zdrcMOuqAt6RItLp5rXZOXdy4oM7k8m6G886kuWlbVxuekrng8kDknaPEL+zH826m+TUQ7dsSF3t44Xy0jYu1DtQPUtdog8Y0cz5aNZdrPumNwmd7ZML5429POt3kopdQTRbIZo5n9VxExvLIiIQLyI1UMuvq/AjB0nYDxO/d5BUyMUlpd3c6x4167qeB0ouMbuZ2I0VlstgeSskqpHV0VvoT87waLqPnQMGKgdb8OsRFV9NSfbbIbJft8GSQCAHUk4kE/UtJpV2rjntSE810l2NYczKe5etNuM5SXZ+O6iFkOiIgL9YdD2cl9ECFiXw2VL1tpUtf6Wqoeu8+dJBItQN2gsLrFdtGvhKnTpl+vScgpcX2dF/GsOYFW88+N8ZfwBrxU/9nHzNmgAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAoAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAe9JREFUKJFljt9rUnEchj/sIv+BdpdN21nDYy36uck8HqYMk7mt7SKctayLvOiwFYYZNjgdWg6JIVsOgtguouhqayB440AozoUiCn13UlJo9IOmo4woqoW9XSWrnuvn4X3JbDbvGjvlip09PdLwuSyV5VFuDxG10N+02Gw2PcdxOho7aZnJzPnRKKyiHjZAHTe9eDx8QL/TjsViAYfD4REEoZW8g/btn8lpfLvnxqewAevn90M7w/F/5EqlslooFLRm7XFafn2easNXuQ21oBHM19kMEonE7mKxWE6n08jlcgoREXn7e+8+vWDC28vtYL5OPPEc3I4OHDEREamqKpdKJWQyGSiKcpOIiCZcnM7b3xv3O3sgDZzAnPdQwybaXmalveY3y0r1kiSBMVYRBKG1ectqtd4oyT0NdpXD7MhhVINGfFE6kF8MgzEGxhhUVV1IJpM6IiISRbHv/dLF2ocpA5bGu3Br8CheSe24PXwcqVQK+XwemqYhFArFmyvPA9z6tdFjqN73oShb8DG8D6/DJtRmujExOYlsNotoNDrUDERRfPBO7oLm57EVNKIe6Ub9uh7PzpnQZ7d/d7vdEv3L2sM7C1tri9hcmcfmyjw2HkUxOy3D6XT+LxMRoVzWAT94ADwA/kogEI9EIkM7nd9dJ/o4ETgftAAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGADxAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAbhJREFUKJFdkk9oDQAAh783ic0U5k857LILlhzEIs1mCc30JGSaaVlJykFjafRkw5TSi8O0NZ6FnmnNNra1Gdt6bKyW4oBamXKTZdlTb+9zWHbY7/r7Xb5fH8yJBazyKCe9xmFDLJzbz2S1aeSZ7hZSDVJlNRN28Mko69xImkdYbpgFM+NMl7LdS5R7M1JSuNYKeuxg2hhfrSXfQ1RZQ7dR9ikB2OwOSv3JA+MFTV2ltvDMUSbtJ2olNwwz6QB//cA5Q6TAHoNc9w9DxhcNThQnWik0RqX3ybeemG9IOsyow+QKAQiaRa1P6bJ5ZfhLltvIdD8ZhljmE644SoMfKfA98///ksIa17PVU3nljY2G6PUWUcNsMJt0c8i3nMuJOxz7fpsM2GQ2Qes57XhudVvSu2iEaSM0eYa9XmDEKFOJ14He351kw04jhIxTZ3J3Q68+RFtJ2smYLdyzjykHmZyOUTEeJRWOe57HjjHorwPdQ3FfkLQHHeGHw5y1nxo7KbaPJTMIZS7mojk0WnLiZXuNA3z2LQnf8c0hdhkl3bpZ4FkhAhx0XltdUZrNFNnOI19x1eesmCvFPwut/xjIthsCAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGABmAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAS1JREFUKJF9kTFLw1AQx89spo++VpekuDqkhULfix2kuukoTuLaxUEcXF2k+AUEF1EHwUGouOvqkC/QIWLeCwmKVh1KEIeALX8nwWib4Tfd/bj73xGIpqJawQoEc+IJBII5Ua1gdYgMimoFS4mSF7p8qN0SxhG6fKhEyfOlaVMgmJPXnJEarEqxYM7vwvP2Oh43F6Hq01CSZ6T/wsIMkstjvOxuIFyeQ7QyD+3yfGFwfoi3gx183F7jdX8rM2XsSkn3BF/vfaRBD/FaHUoU84Qyku4p0oceUn2Pp/YqlMwTmmUkV2fo77XxeXeDwcURtPwTOnNWyRG2KtDNWYQtG+FSBfong+Qj1WBV8qVpa7foaclHk//Ah0oUvViaNnWIDF+atmqwah6+NO0OkfENU9Ma+s2Ia0gAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGACQAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAldJREFUKJEBTAKz/QAkbKHLGmacUBJkmxwYYZIVGGGSFRNolxsQY5wfEmSbHA9alhEAAAAAAAAAAAAAAAAAha7Mly10qfMhbqjWIW+ovyFvqL8ib6rTIm+t3yJurNchbae0GmmcWhVVlQwAAAAAAN3u9x6SuNKpMXiq9Cl5uv8nd7f/J3a1/yRzr/8mdbT/LHu//yVzrvAfbJ99AFWqBgAAAAAApcXaME+Rus9MjbvnZpzB03+uy7+mxtqrh7HOuz2Ftu0ofLr/Jniw8yJ0oUQAAAAAACZ4qmYogb32LoO8+W2jxpOGtdBdTJG6iW+mxXO71OJxRY287SmBvf8sfbC+AACAqgYlfK+SK4nE/jiHtN+Jt9FOJ36zzCmEvfkogbjtMoSzTY261IkphLz/KH6x+gBbpMgOOIu4rCqLwf9HkrvCVJrASWunyMQsib39KovC/0GQuaFQmr8wLoq9/CmDs/8Ai7nRC0OVvqEpkcf/MYq30om60zRsqsqZMoy6+jiSwPeFutR3KYW0SyqNwP8yi7n6AP///wFaocV3MZXF+yyRwfNAlLxryuHtgZzH3si31+agqsvYJzGOutUqksT/VKDG4QAAAAAAqtHkQkScxeUomsr/LZPB7DGOvH6PwtpLTp/IWDGQvdErlsX/M5fE+5/I3oIAAAAAAP///wqjzeKFSaPL7yubyP8qmsf/LJjE/yuZxf8rmsf/NJvH+3m61rm/3+cgAAAAAAAAAAAA////Dcbh7YF6u9fYOZvF+zOZw/83msT8WqvO6LjY6bDe7PY2////AnxENPStcfyrAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGADoAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAa9JREFUKJF90t9LWnEYBvAXul3Q/pBdFkGb7GJdRAQRCDGIYMHG0VYmYT8IwotYptW2aDVPK5I4kWWSUmlRW5vDikhcjRgN2qlGJ4wyz9FMO9+niyVBuB743D1X7/uQUVjgWycDcqszgGxME19mDSPuPMrEJKzIdl8SvD+VlXXmAHUO3yet05lDRESG0WXYppX/srpiaBpbl2oGXEVERMTxPri/y4gnVdzNlcogHqfQ5tjHK/u8oO13PqAXfV7wcxH4N6KIKunb8hXD1l4cn8MxNPIidANBqapnqoyed7vgCUZwGEnCsXiEk/MUACC0K2Np8xQXlyq4d7/w8m0YldapVaroEOAOSGCM4ecfGY6FQyxtRjDoFSEn0mCModoSRlXnGso7hFUqbR/FxPIBtvei2BFj+P1XwbcfJ4gqKYR2z6Ak0tCagyg3e6QS81AZFTfzaPoYwo54DlVlYOzWaewS01/3UdriR3GLfbzIZMkljfEDnjX47jGPp8Zh6Ymh699ZC1+/j2v0Hmj03qwe146jsL57hLQ3j8vnLMMFut54ga4X2eRztrlH3JuHmWVcA50wjUOqX/lSAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGADTAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAZpJREFUKJF9y72K4lAAhuHcjlaro42ilanUyrkFA/aKhfdg4w+ICiEERAhqkStQploCWZaQQj1yTkJOOCAhJFZx/bZYWBiY3eJpXnilXq/3NpvNfuz3exwOhy/tdjtMp1Or2+1+kyaTyc8oipBlGZ7P55eyLMP9fsd4PP6QDMN4CSGQpikopbAsC/V6HbVaDZZlgVKKNE0RhiF0XQ8kwzCQJAniOMbj8UCSJHh/f0en0/nU4zj+M2y3WwghwBhDFEUQQqDdbqPVan3qnHNomhZIm80GjDEIIeA4DhhjkGUZjUYDjDE4jgMhBG63G1RVDSRd18E5h+/7CMMQnHNUq1VUKhVwzhGGIXzfh+/7WK/XgaRpGgghcF0XnueBEIJisYhCoQBCCDzPg+u6uFwuWC6XgaSqKlzXBSEEtm2DUop8Po9cLgdKKWzbBiEEjuNgsVgE0mq1el2vVxBCQAiBaZool8solUowTfNvP5/PmM/ngTQajZzT6QTbtv/reDxiOBx+SM1m801RFKvf778GgwH+4ZeiKN9lWS79BnUAvf5gB4boAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGAANAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAdRJREFUKJF90s9LVFEUB/CvUi0iiP6CNu2mjHrv3SsUZLhrkxVGGkG0mMig3r23gpLoQTOJNosQXERB64TK9+6NUdDJgewHZGAglZvSBqFEJxrRec83c1zYUAPRgbM438MHzuIAAPZdfLKTieAhk3rCdv1bVnJwO0ANlvTbmdRFLvSkfenpbgCAlby/mQvdw6WJuTLEpF6z5dARK6m3cmkecWWIKRPaMnB/gz+LWjvus7OJ9sEtTAb9XBniUpdsNzgDAECLt8kRuocpXeHKUGv3MJ3sfUFt6dwEk0GKK73Elfm6VwQJeF4jAIArYzGhPx24+pwejHymKK7Q1JdFOpYaW+XSxEyZkEn92nH949hzwexwhM4waRZbrmdp5H2BiIiWSmU6P/CK6k6V+h1sEQzVguYrhu750xSuxTQ9V6TDN7J1gCtD+Hto7R6m9OMp+rkcUnayQCfu5Kj5fyD3YZ5+rURUqVapHMU0+6NE5/pf1gPH9W9yZQpH06Mx/aOCt3PElA6Z0DOO0JcBz2t0RHCoM5Of/7awTOVow8WVKn0vrpL/ZpYcV/v7hb8LQAMAINE1sO3gNdN1qm9cn87kP3bczUcdfeMLnZn8aFtq7HZT7S0ArAP2xkk3ON5KFwAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAD7AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAcJJREFUKJFV0MFLk3Ecx/H9Fx2CnE/UoYuBl0wa7vGnaQmbLXKiMNBGhU90iQ1GHXJk5Xbdc5A6zuhWbOBF73UoNCwsgmfL5+lJN7Y2N3Lbs9+7g7jZ5/T9Hl584OOSUlKv1yiXizSbDY4jpaTZaFAqFahW/+A4DgAuKSXr62/RtEl0fZGvXz7hOA7b2x9JpZ6wsOAnsRxhb8/qgmxmFVV14/X2MD9/lc3N9wQC/QwP9zI4eApdX+y0H4HsKkIoCKFw/doF4nENj+c0Pl8fNwP9xON3ODz82wWZTBohehFCYWzsPOHwOENDZ9C0Sfz+iyQTEVqtVhesrb1BVd0IoTA6eo6pW5eYnr5MLDbHiFDY2HiHlPIIAFhmjvDtcbzeHoRQUFU30WiI2VkP9+5OcHBQ6aznOj7y+R/EYnP4fX2MiLMEgwM8fhTGML5xMq6Tz87OFktPH/Dq5TLJZJSc8Z12u/0/kFLSbDaoVErY9i7pdApdj5NMRDBNg2LxN/V6rQNdjtPi89YHVlaeEY2GCIVUglMDzMxc4b52gxfPH5LNvqZaLXcbarUqhYKNbf/EsnKYpoFl5bHtXfb3f1EuFzuz/gPR/bnsPdMAvgAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAlAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAexJREFUKJE9kL1PU2Echd/BUahxYBFiKBgpRltEWj8SBxIn48Yf4NBidOhVEyXGycGoXSQxLiYmJn6QKCbQSm+LGBwcSEShvb181gjhI6mAFWupxfv+HodLGM5whnPynKPqe9J4jCS1RhJP1MQTNakxhvBEk9TfSPNqbBlBIwiCRu2NmqjuOCoSR0UGUZcSqHCCmivv6B3Js1V1EHEQ0WgR1D4jiYokUN0JNxAeRF18S9udj3xZ+IWI7Egj4qBqDdNtDyfYExmguec9D4fzLKyVeZDKM18oISLoyhYbr/t3AuE4B66lud5nYS1v4jiCIw7zhRL3Ut+YXCyy/vQZ0yfPojxRk87YJ74uFl1eBIRdlNXCT950XSZ35Dh2IIjabyS5b+bR4qBFqGy740QEcf6xFuvFrmsg423Bbguh6owUj0YX0KJZ+f2XAatApeq+Up6YwG4/RabRR6aplZw/hGq4OkT/+CrlbYfk1AZLxS20FnS5zNLNW2QbW8h6W8l6fUz5O1D+26OMfS9izq3zo1TdRfnzeRz7aAdZr49J72Emm1uxAiFU+IXF2OImKzN5NodHWH/ZR+HxE+YudJE5eIhMk4+s15V17ATq+YcZZu/GmD13Hqv9NHZbCNsfxPZ3kAsEyQWCrg8EmT7TyX9ES6TdDpzxSQAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAB5AAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAEBJREFUKJHl0LsNACAMQ8GMlsniLO6YCiQaPhIdll55jc3MdNmnICJUVSOSawBAkiZ0BEjegb4tcHdl5gjAu5caK0vLyFdw0xEAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGABRAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAhhJREFUKJFNyUtI03EAwPEfJBl/QxwK/sPHlETTfBw8DBOpdMaySGGp87kQy1XLQKxYoDMiZaLhJdTSRdjBDDMWYkoPRCSJaqPIArFtZm2+8gHTQ7Rvh0Q6fE4fsV+/UJ9iXPKmXlomxbhMinGJuCoPUSVOYircJJxbIMmwRGLNoje23HNFHKyZ3zQM+bj4zIfhqY+Kh2uozV9oG/iG6f4sh5tm0Xauktf+izj93KZIqJqhom+DEus6RXfXyGhw0zrwGL//Hi6vlbTzE2Q1LJJhWkRZ8hWh1DnQtK6Qc2uZzAYPqZdd6Cw2PjvrsY51kGqcJrHmJ/HVP5Dz7Qj51BvS67yk1XpQlo1j6mrH3GPB3GPB0N5NdOkHokvniNS5CdVMIhS5r4nVz6Ms/46sncTcdYP1+eOwks3oq2pidBNEFLsIy5sk+MgwIvjoKHLBR0I14wRnD1Nad42NqRD89kC6O/MJPTbErqSbiLirSBn9iL1ZNvak3yEguZnA9A5abuv545D4bQ/iessFdm9fQHIzQZmDiJDsMSSVFUnVyz5NP7bB0zATxcaneCpNrUiH+pBUvUiqXkLULxBhJ6ZQqEdQqEdILHvJu/dn8a9q8LoKyal9giJ3dOfDTr5FyNrprfACO+H5dqKLHJyxPKdtoI+mB484UGlH3r7wAgeydnpLyIUzjRHFTl+kzsU/7v+4dkQUOX1y4WzjX5vBWYa/h00UAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGADOAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAZVJREFUKJFNkM9L03Ecxp8v+QNlmBBKuUDplOKpa4cg8g/oJvQHyFcPO4nHgaBexZsUlcWaBKmU0zl/MoZNkU0Pn619ZXip7ZBB36/CwqJXh88mveG5vZ8Xz/MIgCsfgiIExuriPwWGX77hyw9D4dwgrnzIjcHHVkgIUoItwbZgU5AUpRXRPS9Cc0IERfucFOwJMoKs4ECwL0gLb0OE34iOeSECY8m74vpKA3AiqEYB8HxD+L3oeNkwbNTJAH9/Q7kfCuKyEqFSOyNznuLOigi9FeLC2MxZWXK5H7wWJnPCPe7kaa6Ph5976EqI9njDsFPPfCIoiqmceHYsHufF4KEIZ8TNddF6bdisF6xGuaxEiOQ7GcqLEe8Rs9+ijJ+O0pYQN2KNDkm7BkC1dsbwUR8PDsTcV1u6EBialoXzumFYtbuXfUP2e4on+z3cS4sJb5RCYJgpTeMsCj0XwjewJFgTg3Fxf0n0fhJdCRFaFc3LwlkUzivhpl3ETwNxwQdx94W4vSBuxUTonWiOCWfBkt20S+1PjX8VjYtLGdc6wAAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAbAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAeJJREFUKJFNys1PknEAwPHfH5IHBvPgQR9bjyjQxJecNWdNRceSjTbIZIodOjhvrXIYT4Dog0/GA/Hi9HmQjnXItezg3GptXT0gXcqmk5a1Njx8O+SBz/kjZsu2S3Pb1q25sq0+s2UloFsIZi3MlW2Et23czVoI6pbzezmLGdq0Nokps20rVJIIFlvxLDXjS7UwbUpMmxK+VAuepWaCxVZCJYmpUpshAoar7s93cft5B9WjA/L7UQKGi8kXdvT3EapHBwQMF/68A1/aXheTuQHGUz1MaL0AvPpSYELrZXyth9KnlwA0HjGiDjGmDeMtjAJQ2M0x+KiPoacDbO4XARhRhxi9OGJY9eLJ+fHk7wBwenZK5XuFwx+H1H7XABhWvYxdHHErO8vNzAzXkwEAfv4942vtiOrJN2p/fgHQeMSN9DzXkvfpj4UB2Pi8w+DaA/pjYXJ7rwFoPMIdW6Bbmacv9RCA7N4O3co87tgCuY+7ADQe4Xy2WL+ajOLWlqkcn6C8fYNTeYJbWyb+4R2V4xMc0cf8P8m66FJ1w5nK0JnQkCNxOqIrOFQdh6pjV1aQI3E6ExrOVIYuVTeErGaaLitZU1pcP2+PpJFXDORVk/ZIGmlxnSuJDeRVsy6vGoasbjb9AyCDcL6gPJOKAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGABQAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAhdJREFUKJE9zs1LkwEAwOG3iE5B0KHMaZNN5jaXdOmDVqtpTtJ0fqGNzaWrTTHMQRhobnOJNZEiY7g1p9vcpps5MdDMUdZBMvOUEEGHDhFUSGFGRqdfh6I/4IFHeJ3sZd6lZ6hBQ8B8guilk8RsGhLNp4jaNCTsWiY7dMTtOgJWLcKTnhKSFildh/fgNxwh0V7ORKuOZNtZ4pdLSXXpCVkLuFcpor9EjJB2FvGgWUn3sb2kXBdZf/+GrY11vn/5wNbGV35tfmN1fABvWQZefQ7CU1cRkxYFbnUGt9S7WAq4AHDmCPQd2smr6ABrM0MMVezHXy1FSHdpiZtl9J7OZrA0g5dhNwB9qm2krlay0Gci2XaUUYOUkfpchLkODVFjLm6NiNvF+3gx2gPAx7UVfqx/Zsl3jeHaTMImORFTHsKio5Apq5KbRdn4KzJZCd8AYN5j5t3zaZYDnQxXiQielzNuUSI8cxQSM8nwFIsJ1GT9B/3HtxNr0TB7/RxjDbmEG+QkrCqExe5CQnVSPGey8Op2sxz8W7qj3oG/6gBxi4LYBSUR0z+w0KklYpThqxIz56jj09tVfv/cZDnYSdhUQNSsJNakZNQgZ7xRgTBzRc3DVhWP2/OZtpcw627ikdNI2mMlbFAwXCNlwqJizCgnZJAhRBsLSLUcZMqWj7c8m8EyEb7yLIJ1OdyvleCvlhAxyxkx5HFXL+EP+1VcQYe+HaIAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGABfAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAiZJREFUKJFjCA1dxZxaMqu8b+7RLat33C4/cPGR7cmLDxR3HHss1NDQwMSADhwcGlg8Qyo7a3q3/dt05OH/G88//3769uujJ68+rpi1YJP2vA1nE9duu2aBosnUIUEipXiKa23nooKalukLFq068OnXn793mztnBuw+fefh8RsfN6FoiMqcJrhg/WXl/RefyOzceZE7taBr98+fv2/mFDX7nbnx9NW5Rz+vrVp1jBOuISZzYtHqvY9fnr//+dqlB6+j80pbys5ffnA5MqHQ9/j1N2/2XPh1f/ORZ3JwDeHp/UXrD737dfnZ/3/XX/6YMn3pDrOqlllHw2IKAnadfvt++e53z+dtuGWOcFJaX87ibU9+HLj8+//J2z/27TlxTzw6oXRKQnJJ1Modjz9NXHLtXdusI35wDQk5EzMmL7n0fcWuV/+3Hfv8bO+ZD8r9M9dKRiWVJPcvOPW1smf3t/K2dalwDRkF05MaJ+792r/wwv8Zq279nbHmphcDAwNDfFpVdmn7hh9JJYv+RmVNr4VryC2bFZ1dvfJTeef2/zV9e/9PXnL6WPv0fQvqejaeTy5Z8Dcouf9/RPqE6ZMmbWNnYGBgYMgpXRAclTX9Q1Lxwv+pZUv+JxUv/B+bN/tfTNa0rzFZkx9HZU48l1E+szWrYRUPAwMDA0NixmSn2PSefSmFU5Ym5k5qjsnsS4zJ6HcITezRSsmZrJhTNlcqrXwmPwMDAyMAIsceb7IxyVsAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGADYAAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAJ9JREFUKJGt0DEKxCAUBFBJQJIDpFUwguQX8Q42OVZyGT2GF9nFJocQq0kVWAjuWuzU84oZxv6Vrut2IcSutZ6aQN/3kFKCiF7VEhG9pZQL53wxxsA5B2stvgHM84xxHJFSQs4ZIYQ6iDE+AIA6AIBSCs7zxL0hxlgH3vsHIKI6sNZi2zas6wrGGAkh6OdL94Zq6TNa60kpdQzDcDSBllxIq1h1HZYwMgAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAALAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAdJJREFUKJF1kU1rGlEYhe/v0F8SaneCFKwNFrOo1HaEmHFmLGRRQmsXpSHYUDempM0EijHG8eMHuJN0l2IHxjo0HwRL20wcJgW5iY6S8Y6nGy3pIgfO8j3neTmETBX/9McT2zwXEju0s7R7yRI7lHGy1QlnDoXQ+rGH3BS/d3VHKPY1SbEhlYdIVUaQykOIpQES+R6iG79bkeyJ719ystjXpMpokqqMcNNSeQhRsbGY700Wsh0tmG55SeyjKUmKjVRlBACo62N0qQuTuqjrYwCAsNdH7MM5/CsHKbJUoMYMo66PkWtco6o6qKkOco1r1PUxRMUGJ1u4/6ZtEH73ks0QutRFVXXQNhjaBkNVddClLiTFRnz7AvNr3xlJFCibNZjURW16oBsMNdWBSV0IpQGebpl4sNpmhJMtQywNIJWHtyLxBYroxi/ce/X1jDx8eygm8j2Iin3r05xsIZw5gu/ZvkhC68ee6PszbTHfmySLVxAVG5JiQygNwBcoONlC5N3pJPCyqc3xDS8hhJBI9sS3kD1tPd40wMkW4tsXeLJl4lHuJ8KZIwReNFv+lS++/9YOplte//ODZPD1t878ms5Cq20WSDd/3E19Ts4tT5MJIX8BjZaCJs1LMS4AAAAASUVORK5CYII=
data:image/x-icon;base64,R0lGODlhDwAPAPcAAAAAAP///83Ky/Pv8e3p6/n2+O/q7/n3+Xt6e4iHiOXh5qCcotjT2+7s8Oro7OTj5aSjp+ro8eTj6Ojn8QsLDe7u+tra5SgoKvT0/+Li7WlpbqamraWlrJ2dpJyco+zs9Z6epHx8gVFRVDQ0NvLy+rm5v7W1u7Gxt1NTVvT0++7u9a6us4aGioWFiWpqbWNjZqGhpXFxdFFRUykpKigoKfn5/uDg5dvb4NnZ3rm5vYmJjGBgYl5eYFlZW1ZWWDIyMyoqK97e4rq6va2tsKurrnx8fmlpa2dnaTo6O6enqZ2dn4+PkUxMTf39/+fn6ebm6MXFx66usKqqrGpqa2RkZWJiY2FhYlhYWVdXWMDAwa2troWFhs3O3+Lj7+bn8J2epZ2epO/w9b3D1sbO5srR5KaxzLG81brI5MTQ6ay+36q83LPE4oqkzDqC12mf4ZK46Ims2JTB8jKU+EKY8Uad+SiT+DSf/0ak/1Wd4Vew9SsrKklJSC4sLPr09OXi4np6enh4eHFxcWVlZVlZWVFRURMTE////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIYALAAAAAAPAA8AAAi9AA0JHEhQ4J6CCA1V8aEkoaEfVYYYyYFiREFAR2CsYKKhEMIWRliIoOBQoIsYgrD0mCLjj4xAVqgQEjhoixQiCQQggKIjSZQlRQZqefJATBkcfmzcCOLkysAsTQqgifNmTJ8DYQJQGSgkxYA1dO7McUOmQY0qA02oIJBGjp06bcw4ILFj4AkvCtTkwcOGgQQLH3gMLFEhwhk4XAxM6JIBw4uBITh88bAAApgOIDpsQEIQCA09fC7QGE1jhsCAADs=
data:image/x-icon;base64,AAABAAEADAwAAAEAGABhAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAShJREFUKJF1yz+KwkAYh+GpzEVsZi5gFZuk+YgQIoQUwSISGBgdCIjB/xgFK0ERxcV7KOtdlLV00Tv8tli3cZnibR542XQalvJM8exVnimutbZMzvJM8V5X47Cb47Cbo9fV6HSkMDlTKuX7TYHn7Yzn7Yz9poCWiXj3j5czlTb4djXG4+sTj9sZ29UYUibi3XerCeTf0FZNrJcDrJcDtFUTUsbC5IyILJnEInklk1hoIsvkLAzDUhQFPAg8HgQej6KAE5FlchZFHm/EdSyKDIsiQyOuIwx9YXLmeS6fjVq4X0/4vp4wG7XgkyP++fjXmetW+aQvcb8ccb8cMelLkGMLkzPPrXK/5mKYpxjmKfyaCyJbmJwRlS1ybOHYFeHYFUGOLYjKlsl/AEmOBrYhmuoBAAAAAElFTkSuQmCC
data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAARCAYAAADZsVyDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHxSURBVDhPtdPPa9NgHMfx7+4DDzsIO4iwm4or2yFhA6dCBw68OClO2A7qpbupB9GDoHR14MYmspbVucMYCq6M4S82CruITEHBLW0Tmv5K05a2B/+Fz56kaUyeRBjiDi/aPk++b/KkLTWbTRwHajQaOA5Ur9fhpxqdhX6q72hGxzzzVKvVwNMfPPIP/M2Fy54GVatV/AsjZkYHRejlsmefdF1Hx/3tHGh+HzTHLEg4cS+FM8EYhIEohP4ZTN5YNq9r3AmjYkUrpZI970SapsEQ/qi0owYWPT3xBkPnnkIIzEBkhEAE339I6Fm5hundRTRvh1EuFMxZP1Rmx+DtftiD2B8xg68TKXv91bctUDwIigWx9vOTa4ZHJXYU3sR4zIyuLKc8e7G9pBk/u37Ls+dExWIRPCNqMN6rhTxOrl5v36mly3rl55won8+D1wn/UiR0J666ok5+sx2kqip4N61HkVja8ewdFeVyOfCSm1/tLy/+8rO9nohv46I4C1lWXdf7IUVR4JLJQJ+cwpPIezveMTryHBnpAK1nAfx+3GvT3951NxiSZZndgSWdRmVAaP/4Wfxd8ov9WK5cmkf6YB+t6HlXtLLx8M+8A2WzWZgkCRqLGn9TbXikvcZpzbFopBetF4JrPcNO6fxsIDEUwv8XwiEgQX9IbBYHcwAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAYAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAd9JREFUKJEtzLtPU2Ech/EzSeLf4OiEif4BFITEuBiJ0cXJRLxNbA7ixOSiItGWwUUTw2R0wARMkIT2YAoRiiZc1EObcKDYc+nb64Fze3+PQ8k3n/H7GBe2OTO0orKDpstQwWPY7LlsegwW/FMuGdPPnZ+3+oxM3s1eWfG4VvS5XvS5teZzc83nxqri7g+bB+sVRosOI2adjOlnjbENxf2S4tGm4uGmYqykuFdqMFf+Sq02jVd7yYY9y+Nf+9xZb2A83W4wsd3kyVaTyd0mU1ZA/nAVabwgqWeJ/Ryiptk6+sTElsKYsto8/9vm42HAv5OEWAuiu6THP4lbX0jaC8SNDwRqlneVKsZo0ePNXgc/TJHTIYJIiugTRIekx+ukrc/MWDbG2bkqt9d8VKTRWpMkCWmaEscxWmtEBB3ZlOy3nFsoYwybLpVugoiQpim2bROGIZZlEYYhIIhoDoIOIysuRrbcQUR6Ja2JogitNUEQEMfx6aFnptLBePanhYpSRIQoitjd2aGhFN8WF3EcBwARoZtoXpfbGFe/+7lXex2WvZBmrHGabayDKkf1Os1Y04o1y17I+/0uk79bOWN83uq7lPez/UsOAwWXjOmSMT0ypstAoad/yeFi3s+NW1bff+i35oeacidcAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAWAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAd1JREFUKJF1zt9LU3EcxvEPlBx2sz7fcXLjuLWlOzg7njZptqnEHHkhUzeScBUVzMgoA6E/oKK2QBIEO0omSQT+CBQrpAPGGJRCkCJaQhdeJIZLbyK9EOzi6UKSonrgffmCh3RdFw0NalljY8XFeNxvpFLVH69eieBM0t9/oSVstl2uRvJs9Fs0EsiEQl4nxarE5GDahYk+F3JDMjaWFGyvOLEwreB+phLD2YcYnR7HpfYTSDQpk5Q4VoD8M8bngd1+vGdgifF2pAi1sSrUNcdRd6oJ+nEd11tLQBG9AO+6GWtDjI2swM6cAOYZK69s8Gsu2IvdcJaWQNVUPEq7QTW+fUZP8gAWbzFWh2V8zxViZ1bG6hSjo8WDk/VBROuDOBcrxpvHRSAikoJCMjK1CswEY/E2Iz8usJ61I/fEg3sdB3HjtAOvuwXWngvQrx2W9r9IhTwYDNsw1cxYuGvD8tghfHqpYNlUsG4yvv4OiIg0thjtATsMTeBpJcM8b8N82o4vEy5szjC2Zgr/BEQkBdhi3CyXYfgYvRpjoIJhJhgf7jDyo+IvsHevs9yKBz5GT6lA3xGBkbDAWA3/GxARBaxS7zVVRqfqQJd3t/6j8v8BEUma1WK0lrn3QJfXgZ9yDej/YEJe2AAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGAA8AgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAgNJREFUKJFdy01I0wEcxvHfCAkP0VJiUBQU68UXmNGCNHaKDkHhNic5bU6d29xGrjadOGXO9h453YvQn73FTMxGraU5xiaOGUyoXEypICgoj4U3r0+HdTAf+N6eD9G+AWAFFt7yb5u8aYHGlrY+ifN1zmDtdZ2zlmGYKjo4kzfCv2H0luoMr1AtDeGEaLgk0NozjX22zOW7RuF/Z/nDYENTt3nn4vAKDvVlQbIUqI3BKXUUVRIvWtSTy+vl8jEiItY12Ri/sXt8h2fJg3pyIHm6AqQLoDsxkGgGAo3jXSq3waGR4JymXuEunTGsQOQtgGvMgLoSoM7n4KgXIZ9dA4l9OCkZ3TX4ng5Rs8qyd/reS7C6XmC+8BUD4Q2UfvzBx++/YZwrIlH8huO9DEjsx4XO0T1SOWaTNUIz2D1xRFa/QB8rwvX6E255MsiVf2K+8BkNg2HUtA5BaHQkSWabrmtSP4bQ8wZTS2Xoo+tY2/qFUHYL3qVNDIZzuB/Jgqd0otfqr68AlQfVHQFEV7ehj+ThTn7AWW0MbFkQvuX3ODcQPAD6nSChB8/y29AyWfQG0iDRIxyWuBHLbYLd4QKv314B7Q9c3POyyV0STaFlLAGuLg5q84PEPnAUIdy0p0CtLlzSTFeAKRI5Ih33LTYrrbiisPxrYl8WXFVOoN08kxxhmKN/AUIaJg/7Td4BAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGADEAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAYtJREFUKJF1zE9Ik3Ecx/Hvz6mhDsO8LDEjmOaD0qGY0cHTIMSECi8yEMSTl7qlIIbXQKxDECaKdIhAhA6RoJtOCEWEHUpFnRFkPv/m3LOmog8m7w4Wg7UOH76Hz/f1EZBiEA33TxDtICnaavz8YohGMtsJiHZ8pMg4iowjJBKKV7Eq+jZu8PrLVeJjJaRni8ikFaeuQnBF+5lSWLpizxAisVL82x1UDt/GP9rMePdl9qIeLEs4PswBti7E4x7uzQWoCbcxEazgW7AMe6MA839ga9vDu0UvvW+u8THk4/Gzm0SWS9jPB8wfBXSGGwgs3efOTAvaSjve9S7GZstJ5wPGjoe2T02MDDYw0nOFB9EA/dPVmN8FW1f/AksX3s5fZCp0iYEn13ke9eHogm0ozFzg2MLUcjn++bvUTQapDD+kc66RxO7fsRyQtITI51IePa2n/UUtQwtVxNaKsA3JD5yE8H7GS+hlI60fbmF+FVJW9jkLEO3UVbiukFovZHfzAnq6GPdIcZKTs1+K38hUbbXF03EqAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGADoAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAa9JREFUKJFjYEACq86dE83YvmWl/YJ55ybt26e/atUqZgZ8oGzHDjPTWTO+CLe3/Q9bvHjBzosXFXEqfvbsGVfDxo1SZhOnbFfr6LrXsmN3wcFr11T////PiKLw07o9wi87lwU8XbAl+dP1J8Iw8f///zPev3+fY9q261UWtXvuJ008mnvmzH9WhuclExc8cMp9ez20YeP/Z8+4kA27fO+luHPVrpuKqRv+2RVvOTh9+3kFhuu2eXcvKkX9P2lbcPvu44+qd56+lf3//z/zmTNnWC/d/6QR27Z/uU7CylcpnQfm7Tv3RJ/hyaSN3ue9ylfenbjBK6vn0LHwul0fOpecc+5aci4puHrnt45lFzqvXr3KdurCc+1z556LQoITGnxTVp20DCpfey+mbsOR8Mp116PqNu6btOSEDNSFqJ6HaLzKFl61qsUqaeYP25TZ76um7A7DCCVkMHfjEV7XzJkLdMJ7v2iFdv/wKZrb0LBqFRtODZkdq6JU/FveBhXN7zeO7rmhFdJ2t6xvowlWxTdv3hQxj+u5YJXYdzq3a4VydsfqCI2glmdh5fMWI6sDACeT1SsN0bcFAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGAD0AAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAALtJREFUKJHN0jEKg1AMBmD3DH1PcVAHERdBpS7qFTyIgw6lJ4ir7w6FXsato2d52xP+ToXqg7o2kC1fEkgcIrpKKVbXlfiVUoqViCrnWJxkHro+QNcHSDJvh4S4vJxjp64PMC8p5iVF1wfHKZsF8tbH7RHj/oyRt761mgXKsgAzY5oYZVmcA2aGMQbGGDDzOVBK4RNKqX8HUorNOtw4DtBaQ2uNcRzswxFR9Y2iKETT1GiaGlEU7l5DCKre9e/kaSUg5v0AAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGABbAAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAACJJREFUKJFj+I8DGJVcwIoZRqQGBgaG/9jw5UuXsOIRqQEAs4uIaJ3sXTMAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGABTAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAhpJREFUKJEFwX9PEmEAB/B7e72C2jJsjDkKEhWtGXKzLf+QFJZm6BIRFQEhEFA0lDhBoQhJPTwBBcSQX97d84Av4Nvnw7ChyydspCCw4UtiDPFkIpQnE0GesKE8eR/kif3kmixyJcLuXpUnd/LPGGPwvPhhrwQ2nIcxxGPxqARO+Ie/5SZOyw1c3bVQbTzAmqxgIsjfMeP+bNewfY53vlN8ilzg9r4FWRLRlUW0Ox10Hjogkojs9T0M/lyXeevJkHFfFkPONDaOBRBJRLPVhi3Ow/j9D7ypAqr1Jsz7Fxjz/KaMfuOEjLnT0K0nYY2egcoihGodWkcCb9YS+BjIYCqQwchmCnrnCWV0q0dkZCMJ3epPjK5zSF1W8Ehl+NMChhxxDK5y0DniGF5PYHgtThmt7YDo7DFol6PQLEehWzlAIMWjRyQc8zcYccSgtR1g0B6DxnZImddLu0S9tAf9ShQGZwyqr2H0z4eQESroEQnWyC+oFsLQfNvHq6UIZVTz22TU/gNnxSrc8RwGvgQxuRlD+a6ORyrDw+WgsPihtu5gYGGbMkqLj0azAnpERrPVRq3egCSKoLKERquNKfch+s1eqOYCUH72dRnF7NbtpPMQpVodN7V75AoVnBWr4HIFWPwclBYvlBYvVHN+9Js9LUZh2nr63OQqs2sRag0nqMK0SZUzbqowOWnftJP2TbuowuSiL2e3ai9mXOr/0iu0DPipkwwAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAWAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAd1JREFUKJF9zM1PkgEAgPH3H2lLk6GgaUsmvoLAK0gg3yDEpyQihAyj4XCCzILN1qHWsQ7d2lpHt7rY7GJa6Vy5FlvNsWKzJuVa/gFPBzZOrcPv+DyCTBOwKQxhBkwz/6WUIvRo/HZBYQijCxexpKpYUlVurD/m0bNNJhOrWNM1rOkaU9drSDMl5LoAwoAphjm5hjl5C1d2nY2tPU5+/WHI4MWSut0ZWVNV+qQQQr8xhnF2FdNshacvtjk++U3r9IxC5S7lB09wZGqdYZ8UROg3RpFmVpDiJepHTX602sFh/Yit7X2ssTymRAVTokKv/iqCciKKLlJEH10muXKPT1++0To9Q3JEMIeyqB0JpHiJiXgJeTuIoAkW0AYLeLI1Pn7+yvH3nyhFK7pIsUMfXUau8yMopAiiP48YyONMr7H/vk6j0WTcFmLyWokriTLa0BLa0BKy8WkEhRRmxJtD7csxNVfm9bsPNBpNdt8esLN3SK5yHzGQRwzcRKb1tQOVewGVewFxepHinYdsvtph980BG89fYvcnGPHlUPsW6RnzIvTqggxa57jszDDsyjDsTDNkjmLwzXNR8jNoDKLyZLlkm6d71I3Qpfbaz6uddIvuf/BwYayta9TFObXD8Rc9pzyKACKksAAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGADtAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAbRJREFUKJF9x99rEgEAwPH7g/o/eu5pvfTSexCNMapVxCwMyWEoWDlrZ0lTByYJ4o9Nt1DbzWHmbXnY4bybO/BuO0849F6+vUUh9PCB71eQ1RHVVo/y4cmC0l9dbfWQ1RFCqdnFtC6ZzWb/cK4snPH5nzetS0rNLkJ2V8K2bTzPw/M85vM50+kUI/sUs/KG+XyO53nYtk12V0JIFepYloXruriuiz020FP30V8tcXGU58oY4roulmWRKtQRErkqhmHgOA6TyYSLcozzj6ucxe+iv76NqfVxHAfDMEjkqgixdBFN0zBNk/F4jL7zjF9ShbPla4z6MoPBAF3XGQ6HbGaKCJFkDlVV0XWdyn6Dva9N9h9eZy/+hIZ0zPPoNo9DIsftDpFkDiH4LoOiKKiqSjCeYS0k8mDjPSuBOOEPn2l3fnDjjp+tTJ5gPI3gjyaRZZl+v0/9sMWt1SBL9wLcXA4Q2/7CyosYj0Ii36Qj/NEkgi8soigK7U6Xg4ZEuVZfMBgMUBQFXziBsB7eQj455UD6zqd8jc2d4gJN0zj92WM9IiKkCzV8YZG1l2//I4YvIpIu1PgN7bHWcyKDyawAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGAB0AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAATtJREFUKJFt0C/LwlAUx/GrKMLAZFm0CYMF24LBqLjsK1gWg1GDVfBlGOyrmmQYFZFhVIZswabg5t2+pmc8Vz3wa+fD+SP4qDRNud1unE4nNpsN+/2eMAx5vV4AiP/NSZLgui62baPrOpqmUavVaLVaLJdLkiRRwW63o16vI4RQUiqVGI/HxHGsgvl8njdVq1VGoxGdTgfDMDgej98rLRYLyuUyQgg0TWM2m3G9Xlmv16Rp+g2iKKLX6+VTdF3H8zzlKTmQUvJ8PjkcDpimmaN+v/8beJ7HdDolDENc16VYLCKEwLIsFUgpWa1WGIZBpVLBsiy63W4+YTgcquDxeDAYDPJj/1IoFDBNE9/3VZBlGZfLhclkQrvdptFo0Gw2cRyH7XaLlPL3DXEcE0UR5/OZIAi43+9kWcZnvQFVz6cBvtyD+AAAAABJRU5ErkJggg==
data:image/x-icon;base64,AAABAAEADAwAAAEAGACpAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAXBJREFUKJGVkTFLAnEAxf0U9Q0Kh4OcI9xqqUHIycnFpatBqARHlxoKhPRQrDwK0UFQqEwoqMEQBwMdJLN/UGCXLXoVeH+NX0NQRDU0vPH3Hu892/BtyH9k+zdwVDhCVVUODg/o9rpsbmyytr7G3f0dpYsSq4FVxK0gl8+xvLKMrfPUwePxEIlGsKRFOp1GURTq9Tr5XB5d1+lbfTKZDNs729gsaREOh3E6nYgbQbPZZGZ6Br/fj6ZpGI8GL68vZLNZjEfjo0OtXsMx4UBPfrglEglGR0ZJpVJY0qJ13ULXdbq97lfppcUl3PNu2u024lYwNTlFLBZDDiRn52ecnJ58X6lSqTA+Nk6xWKRcLjM3O4fX66Xz1CEaiSKE+DmruqDi8/nY39uncFzA5XKxFdlCi2rIgfwJJHeTKIpCPB7HfDYJBoPY7XYajcbvxz0YD4RCIa6aVwzfhlQvqwQCgb+flgOJaZqf8X2rT8/sfQPeAV8a4pELCPRDAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGACMAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAlNJREFUKJEFwV9IE3EcAPAfIcuHX0izhyjYHqJud0hgmDkKSpjaH3px/ordQqFESdAlUR7sxvkQgRCEfx7adIMgmN3YKoyLlUGWa0lxc+1Oms7t4eYeckX+qVtt+u3zQSohhmxzM7VsNtMFl8ukTRFj7vY+y/ItTGtTxPhlnpgi04h+9YKiRJEY0ObN69Qvtl0vtp2F7OXWhe2nLUM/xs2V7w8OV3L3LFw61RhfmMfw4e0hPTpzzILg6gkaSD0A1wHp5iMqTFYLMFkNpSgDaR4JK0qVsrq0F5KfMUjPEYPA6zLB8KVPMGZXC2MuHyTsXfAGJ8v5psXCrONaca0joGWqVC3XGJfldjNiX7L76Sf0XTSOBMdrh8MZi53EwSCPg0HeGYuddLvXHA0NaYGQ7J3BQc2IrDmrpT5TX2YUBnAAJ5o2Nvi6YnHn6OrqDg6FeLe7LA8MlIBl18s22zKN8BymDe8NFWadATyNk1hRPHtSqd26ra1dLEme3l5Y7OsD4LifFUJWGEQ0YrSoFo75zQj2uL2L5PNWnMl4Tum6h8iyNRSCzpEREERxm5uYyNeimZ6C6XFTNv6wdkmRevJelZ11ztUEEnM1gYTKzjp9Pt+j7u5uhef5j16v14QKNqA1G0DhIoD/QFqF1r8CtJZAb1mH1MFnQjgcViKRCIyOjkJ/fz+Dvp0GKn0cdL0N4N2ZbBw6Nzk4v1X5N1iq5K58HQqHwwuiKEI0Gv3j9/sppBIwFM6BBS4As3Qja4b7UAtOYGAEaG1YM8qybJYkiUkmk5Qoiob/2fBKAIHo+6sAAAAASUVORK5CYII=
data:image/x-icon;base64,AAABAAEADAwAAAEAGAASAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAdlJREFUKJFtkk1IE3Achv/Qtaiuedkg5k6jiARLkFYYaNtqbJKj5qlmS2gLKo1J1gzdQMrR3MjmLGyzQWbRRCxkotVaDjE3KFMLxRjpQZijr21PBxFa9sB7fHj5fYimR0tdncMr6dVMlr+ZXVjB0jFOc+hr2OL/vENs0BRcTI8k1/idzRcID59PYnG9oW3gG1cefPHpQ2wRQghxyf+J1x/S5POFQrP7Jab2KI29S1z0zaXqPYmDQgghrN5pJufX+Berc4haRxSzd45znhlMrqmA2Z3cKupux5iaT28S6ttj6OxxDM4EBsc0htaJVE3LmEoYb0aYmFnd3HDrLRWXx6myxaiyxThmi6K5+iIqtI1hxt4vA/DjZ5Zcbn2WFl+cA+Zhyq0Ryq0RDllHqLA8jQrl+T6evVok8/0XDn+Md8kUuVyewNBH9tT2U1I3SIkpTOnZx6kyU0Al9p3qorM/wTX3KHJtN0cvDDAaXyAxu4yipheFMYTidJC9hrvBYrVjm5Cf6KD0TB9y3T1k1T3IqnvYrfNxsuEJ+433ken9yLV3UsVq5/papZVtGanGi/R4YSQaLxK1B4nKhaSy1S/0ofXD7VJe7y46bM8UHbHz3yhvDG4va9i58Rl/AJOneYhRYB5LAAAAAElFTkSuQmCC
data:image/x-icon;base64,AAABAAEADAwAAAEAGAAjAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAMAAAADAgGAAAAVnVc5wAAAepJREFUKJGF0O9LE3EcwPFPS1AoKnoQ9LieGGOMMahnPUgtrjlZW0Gh90CJHShaMCdjIxS64m4PoiFGTzLOHuiGhWljNeRqOFkb/Vjagzjvvt/zznNnZER/wKcHuwx80ufhh8+LN3wAAAARD4IziNiCiC5EPICILmfnymazzRtRtE91d1N+KmN3GPdXT9PLS2nz+uuEcWN5zLwpcw2pfojjrNsXOyk/Odk4C6nU9hTL6mvhK9pnK/k+tNH5gtBLi8a3C88b5GrhkzW04g8E9HW2j9QHBmgeBgfN7NMnJO71arqdrIRVX06wx2uiHnv3gHhzgpkoR3p6yOqrl1ZfgPn6Fnp7zSWG0apn2rXfdrISVv05weZrojG6kia+ecFMlSNdXfpafz95VCrteoBljUUuqrzxeMjPv+C7A1RfTjBT5QjD0Ho8ro5NT5M24DhzTpLILY9bpfsBcUAwSMuzs+QcAABEo/8Bif1gr6D9AxMfRGO0lCb+ecGMlxygNAHHbc7NzJARt3uD2ndqzS/xNdFIOIU94BTu3rPTCwubwVCILG+L1fPatXxs5/GXoa2H1ZgeLozYmY8dw8PGs2LRagcAgELh13FFwVaepyeVTL6VjMvHUN45vFtUj/7IVI6gTNokqXFClrEFAOAPTfRDz53ne2UAAAAASUVORK5CYII=
data:image/png;base64,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
data:image/end


Для тех, кто хочет видеть все about'ы у которых нет собственной иконки (напр. у about:addons - есть) с пустой унылой стандартной иконкой - см. пост №8
Поскольку у некоторых участников возник вопрос - как (по какому принципу) безликим сайтам назначаются иконки, даю небольшое разъяснение.
1. Сначала такие сайты детектируются. Если сайт уличён в безликости то:
2. Берётся его host. Это строка (обычно корневая директория сайта/страницы без http://), но иногда чуть по-другому. Это - не суть важно.
3. Берётся каждый символ этого hostа, преобразуется в число от 0 до 36 (цифры 0-9 -> 0-9, буквы a-z -> 10-35, остальные символы ->36.
4. Это число нелинейно накапливается в sum: sum = sum + ad*(i+1); (ad - это и есть числовой эквивалент символа из п.3). Нелинейность нужна для того, чтобы "анаграммные" хосты не давали одной и той же суммы (т.е. чтобы lenta.ru и nalet.ru (если есть такой сайт :)) давали бы разные суммы).
5. В рез-те мы получаем некое число (порядка 3тыс - 20тыс) которое нам должно выбрать одну из К иконок, которые мы имеем в "Справке". Для этого мы это число должны "сжать".
6. Сжатие происходит простым и тупым образом.
Мы накапливаем в sum1 остатки по модулю К этого большого числа  sum:  sum1 = sum1+sum%K; sum = (sum - sum%K)/K до тех пор пока sum не станет равным нулю.
Если, например, sum равно 20000, а иконок у нас 30, то потребуется не более 3 итераций.
7. Теперь sum1%K - это число от 0 до К-1 которое и определяет порядковый номер иконки, которая выбирается.
8. Чтобы позволить пользователю использовать Справку и для других целей использован трюк, дающий вместо К - К+2, где первый и последний элемент - не иконки, поэтому в качестве индекса используется не sum1%K, а sum1%K + 1, но это не суть важно, просто те, кто будут разбирать код, должны эту мелочь учесть.
Можно было, конечно, использовать фильтрацию, как предлагал bunda1, но я предпочёл этот трюк - мне это проще.
Остальные предложения bunda1 внесены.
Ещё один момент: у нас число иконок, где-то 37, а в коде фигурирует цифра 36 - эти цифры никак не связаны
36 - это число цифр и букв - 10 + 26 и к числу иконок в Справке (37) это никакого отношения не имеет, просто случайно они оказались близкими :)
----------------------------------------------------------
Это - вкратце описание принципа - он позволяет назначать иконки безликим сайтам - консистентно, то есть они за ними закрепляются.
Теперь - несколько практических предложений.
1. Что делать, если два "безликих" сайта получили одну и ту же иконку?
Если у Вас открыто в табах более чем К безликих сайтов то всегда будут некоторые из них с одинаковыми иконками и всё, что можно сделать - это добавить иконки, увеличив К.
Но у нас К где-то 37 и вряд ли у Вас будет открыто столько безликих сайтов сразу...
Но если у Вас открыто 2-3 безликих сайта, то вероятность получения одинаковых иконок - мала и обидно, если такое произошло.
Исправить ситуацию просто - надо просто модифицировать накопитель: вместо sum = sum + ad*(i+1) сделайте sum = sum + ad*(i+2 ) или sum = sum + ad*(i+1) + 1 - можно добавлять любые цифры - вы просто "перетасуете" иконки :)
2. Что делать, если мой излюбленный,но безликий сайт получил иконку, которая мне не нравится?
а) Можно сделать то же, что в п.1 несколько раз, до тех пор пока Вас не устроит иконка.
б) Можно определить все иконки и на каком они месте, определить место иконки, которая назначена Вашему любимому сайту, но Вас не устраивает, место иконки, которая Вам нравится и переставить их местами.
Короче, вариантов много :)
----------------------------------------------------------------------------------------------------------------------
23.12.2013 - Немного изменил код кнопки - ещё раз спасибо bunda1.
Теперь все безликие about'ы, кроме about:config получают иконку в виде синего кружка с буквой i внутри (что должно символизировать - информация)
about:config получает иконку в виде жёлтого квадратика с "полицейским" внутри (что должно символизировать - "будьте осторожны").
Консистентность раздачи иконок остальным безликим сайтам сохранена, т.е. те безликие сайты, к иконкам которых вы привыкли сохранят свои иконки.
То, что в "Справке" - (см. начальный пост) остаётся неизменным.
Изменённый код - смотрите в №16
Те, кто предпочитает аскетический прямоугольник для about'ов не должны копировать приведённый там код

Отредактировано difabor (23-12-2013 12:12:09)


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

Отсутствует

 

№213-12-2013 17:39:58

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Спасибо, okkamas_knife.
Я пока вожусь с информерами - как с ними расправлюсь - посмотрю, что могу реализовать из предложенного Вами


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

Отсутствует

 

№313-12-2013 17:57:32

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

difabor, а можно добавить возможность не назначать иконку новой пустой странице и about: config и прочим about'ам? Поддерживаю мысль  okkamas_knife о конвертере. Желательно поточный (обрабатывать сразу несколько файлов). Ну и всё остальное, но думаю это потребует серьёзных временных затрат на реализацию. Но мы подождём. :)

Отредактировано PEAKTOP (13-12-2013 18:04:48)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№413-12-2013 18:08:30

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

PEAKTOP пишет

difabor, а можно добавить возможность не назначать иконку новой пустой странице и about: config и прочим about'ам? Поддерживаю мысль  okkamas_knife о конвертере. Желательно поточный (обрабатывать сразу несколько файлов). Ну и всё остальное, но думаю это потребует серьёзных временных затрат на реализацию. Но мы подождём. :)

Насчёт about'ов - постараюсь, с конвертируемостью - позже.


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

Отсутствует

 

№513-12-2013 18:44:41

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

okkamas_knife, а какие есть софтины выполняющие требующееся?


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№613-12-2013 19:43:49

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

PEAKTOP пишет

difabor, а можно добавить возможность не назначать иконку новой пустой странице и about: config и прочим about'ам? Поддерживаю мысль  okkamas_knife о конвертере. Желательно поточный (обрабатывать сразу несколько файлов). Ну и всё остальное, но думаю это потребует серьёзных временных затрат на реализацию. Но мы подождём. :)

Для тех, кто хочет видеть все about'ы у которых нет собственной иконки (напр. у about:addons - есть) с пустой унылой стандартной иконкой:

В Инициализацию:

Выделить код

Код:

// Вернуть иконки сайтов в адресной строке и в табах, огромное спасибо Bunda1
Icons = this.Help.split("data:image");
(function() {
  function IconsP(host) {
    if (/^about:/i.test(host) || host=='')  return "chrome://global/skin/icons/Portrait.png";
    var hv = host.split(''), sum=0,sum1=0,ad=0;
    for (var i=0;i<hv.length;i++) {
      ad = (parseInt(hv[i], 36) <= 36) ?  parseInt(hv[i],36):36;
      sum = sum + ad*(i+1);
    }// for (var i=0;i<hv.length;i++)
    while (sum>0) {
      ad=sum%(Icons.length-2);
      sum = (sum-ad)/(Icons.length-2);
      sum1 = sum1+ad; 
    }// while (sum>0) 
    return "data:image"+Icons[sum1%(Icons.length-2)+1]; 
  }//function IconP(host)      
  // исправить проблемы с 'about:home' и 'about:blank' при старте браузера ....
  if (!gProxyFavIcon) gProxyFavIcon = document.getElementById("page-proxy-favicon");
  gProxyFavIcon.setAttribute("pageproxystate", "valid");
                                          
  
  // обработчик следит за извинениями табов и меняет иконки сайтов в адресной строке ....
  addEventListener("TabAttrModified", function(event) {
    gProxyFavIcon.setAttribute("pageproxystate", "valid");
    
    gProxyFavIcon.src = (gBrowser.mCurrentTab.image)? 
                         gBrowser.mCurrentTab.image : IconsP(content.location.host);
    for (var i=0;i<gBrowser.tabs.length;i++) { 
      var mTab = gBrowser.mTabs[i];
      if (!mTab.image ) mTab.image =
         IconsP(Array.slice(gBrowser.tabs)[i].linkedBrowser.currentURI.host)+"#-moz-resolution=16,16";   
    }// for (var i=0;i<Array.slice(gBrowser.tabs).length;i++)                                                   
  }, true, gBrowser.tabContainer);
})();


Лично мне это не совсем по вкусу, поэтому - это будет "вариант РЕАКТОРа" :beer:
То, что надо помещать в "Справку" не меняется.

Отредактировано difabor (13-12-2013 22:38:05)


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

Отсутствует

 

№713-12-2013 20:14:06

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

difabor, с вариантом кода для меня пропали иконки у всех сайтов. Кнопка перестала работать. :( Код в инициализации надо было полностью заменять?

Отредактировано PEAKTOP (13-12-2013 20:16:06)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№813-12-2013 22:41:03

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Я исправил.
Видимо при редактировании я что-то зацепил и код был вообще с неверным синтаксисом. (В первом постинге - тоже.)
Наверное при копировании я что-то запорол и не заметил.
Сейчас исправил - скопировал со своего :)


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

Отсутствует

 

№913-12-2013 22:58:43

Mishania
Участник
 
Группа: Members
Зарегистрирован: 22-10-2011
Сообщений: 356
UA: Firefox 25.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Отличная кнопка, как-то и не замечал что кнопка от bunda1 показывает не все иконки. Но поставил вашу, посмотрел десяток сайтов - красота! Спасибо и вам и тем кто помогал. Буду ждать ещё полезностей. :)

Отсутствует

 

№1014-12-2013 07:06:56

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

difabor, а сложно реализовать, чтобы для сайта можно было назначить определённую иконку?


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№1114-12-2013 13:15:15

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

PEAKTOP пишет

difabor, а сложно реализовать, чтобы для сайта можно было назначить определённую иконку?

В принципе - нет. Имеется в виду, как я понял, безликий сайт.
Но пока что это можно будет сделать только жёстко, т.е. в коде.
Когда я освобожусь от информеров - могу придумать и юзер интерфейс, чтобы кликами.
Сообщите мне список сайтов и иконки (в base64 или через chrome://mozapps/skin/extensions/<имя иконки> или chrome://global/skin/icons/<имя иконки> и я постараюсь.
Если же Вы хотите определённую иконку из тех, что в "Справке" для определённого сайта - то Вы это можете сделать сами (как см. старттопик, будут вопросы - отвечу).
В дальнейшем я подумаю как это реализовать динамически.

Отредактировано difabor (14-12-2013 13:37:22)


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

Отсутствует

 

№1214-12-2013 16:07:19

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

okkamas_knife пишет

difabor
можно сделать так
в коде в самом начале сделать список доменов (без хттп и прочего только lulz.ololo.com)
и соответствующих им иконок
а потом проверять адрес на совпадение перед сменой иконки, если домен в списке то подставлять соответствующую иконку

для динамического изменения
можно сделать так
список доменов хранить в конфиге в параметре custombuttons.button.название твоей кнопки.domains - через запятую или ещё какой разделитель
а иконки для них хранить тоже в конфиге в параметрах вида
custombuttons.button.название твоей кнопки.lulz_ololo_com.icon
соответственно при проверке на наличие домена в списке получаемом из custombuttons.button.название твоей кнопки.domains  иконку получаем из параметра custombuttons.button.название твоей кнопки.+преобразованное имя домена(заменить . на _) +".icon"
не забывай проверять существование параметра в конфиге перед операциями чтоб ошибки е вылезали.
примеры есть в сниппетах.

Спасибо, я понимаю - примерно так я "отфильтровал" about'ы :)
Под динамическим я понимал дать возможность юзеру, находясь на каком-то сайте, сказать: "Я хочу не эту иконку, а другую" - т.е. дать ему некое меню со списком иконок и иметь возможность как накопления хостов, так и их удаления из этого списка. В общем случае - даже не хостов, а семейств хостов типа test.(/^kuku/) или даже test.(/kuku/) - просто я сейчас вожусь с информерами а "избранные иконки для избранных хостов" - не столь первоочередная задача имхо.


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

Отсутствует

 

№1323-12-2013 12:02:21

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Немного изменил код кнопки - ещё раз спасибо bunda1.
Теперь все безликие about'ы, кроме about:config получают иконку в виде синего кружка с буквой i внутри (что должно символизировать - информация)
about:config получает иконку в виде жёлтого квадратика с "полицейским" внутри (что должно символизировать - "будьте осторожны").
Консистентность раздачи иконок остальным безликим сайтам сохранена, т.е. те безликие сайты, к иконкам которых вы привыкли сохранят свои иконки.
То, что в "Справке" - (см. начальный пост) остаётся неизменным.
Те, кто предпочитает аскетический прямоугольник для about'ов не должны копировать приведённый ниже код.

В Инициализацию

Выделить код

Код:

// Вернуть иконки сайтов в адресной строке и в табах (Bunda1).......................
Icons = this.Help.split("data:image");
(function() {
  function IconsP(host) {  
   if ((/^about:config/i.test(host)) ) return "chrome://global/skin/icons/sslWarning.png";
   else if (/^about:/i.test(host))  return "chrome://global/skin/icons/information-16.png";
    var hv = host.split(''), sum=0,sum1=0,ad=0;
    for (var i=0;i<hv.length;i++) {
      ad = (parseInt(hv[i], 36) <= 36) ?  parseInt(hv[i],36):36;
      sum = sum + ad*(i+1);
    }// for (var i=0;i<hv.length;i++)
    while (sum>0) {
      ad=sum%(Icons.length-2);
      sum = (sum-ad)/(Icons.length-2);
      sum1 = sum1+ad; 
    }// while (sum>0) 
    return "data:image"+Icons[sum1%(Icons.length-2)+1]; 
  }//function IconP(host)      
  // исправить проблемы с 'about:home' и 'about:blank' при старте браузера ....
  if (!gProxyFavIcon) gProxyFavIcon = document.getElementById("page-proxy-favicon");
  gProxyFavIcon.setAttribute("pageproxystate", "valid");
                                          
  
  // обработчик следит за изменениями табов и меняет иконки сайтов в адресной строке ....
  addEventListener("TabAttrModified", function(event) {
    gProxyFavIcon.setAttribute("pageproxystate", "valid");
    
    gProxyFavIcon.src = (gBrowser.mCurrentTab.image)? gBrowser.mCurrentTab.image :
      (content.location.host=='')? IconsP(content.location):IconsP(content.location.host);
    Array.slice( gBrowser.tabs ).forEach(function(tab) {
      if (!tab.image) {
        var loc = tab.linkedBrowser.contentDocument.location;
        tab.image=(loc.host == '') ? IconsP(loc)+"#-moz-resolution=16,16" : 
                                     IconsP(loc.host)+"#-moz-resolution=16,16";
      }
    });                                                
  }, true, gBrowser.tabContainer);
})();

Отредактировано difabor (23-12-2013 12:10:45)


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

Отсутствует

 

№1418-12-2015 14:29:43

emlen
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 201
UA: Seamonkey 2.39

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

difabor, а во вкладках осталась стандартная унылая иконка и в закладках тоже, это так должно быть? Меняется только в адресной строке. Будет ли совершенствоваться, чтобы во вкладках и закладках тоже не было "стандартных унылых иконок?"

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

Отредактировано emlen (18-12-2015 14:34:33)


SeaMonkey 2.39 forever

Отсутствует

 

№1522-12-2015 03:17:30

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

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

emlen пишет

difabor, а во вкладках осталась стандартная унылая иконка и в закладках тоже, это так должно быть? Меняется только в адресной строке. Будет ли совершенствоваться, чтобы во вкладках и закладках тоже не было "стандартных унылых иконок?"

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

Оппс... Извините, что пропустил Ваш коммент - он почему-то не был болдом...
1. У меня во вкладках тоже меняется ([firefox] 28). Проверьте, если Вы просто перейдёте на другую вкладку без релоада - тоже остаётся унылая вкладка? У меня были такие "капризные" сайты, но как-то со временем это устаканилось.
2. С фавиконами в закладках - дело обстоит похуже.
а) Иногда у закладки есть фавикон, а когда вызывается сайт, он не доходит. В этом случае будет путаница...
б) Имхо есть СВ, которые занимаются восстановлением фавиконов
3. Я спрошу у bunda1 - может он что присоветует насчёт закладок

Отредактировано difabor (22-12-2015 03:19:29)


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

Отсутствует

 

№1622-12-2015 12:37:38

emlen
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 201
UA: unknown 0.0

Re: [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

difabor, я так понял тут вся кутерьма начинается т.к. это симанка.. спасибо за ответ;)


SeaMonkey 2.39 forever

Отсутствует

 
  • Форумы
  •  » Сustom Buttons
  •  » [CB] Показывать иконки сайтов, у которых их нет, в табах и адр. строке

Board footer

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