Сдаюсь.
ладно, тогда хочу другой вопрос спросить. На этом форуме для вставки ссылки вида {url="Сайт"}"Название ссылки"{/url} приходится ручками дополнять, можно ли сделать такую кнопку, допустим, в форме ответа есть выделенный текст, при клике на кнопку появляется окно с двумя текстовыми полями - в первом из них вписан выделенный текст ("Название ссылки", если ничего не выделено поле остается пустым), во второй вписывается руками "Сайт". И в итоге получается в тегах таким образом -{url="Сайт"}"Название ссылки"{/url}.
Отсутствует
Sergeys
BBCode не удобно, из контекстного меню долго лезть за нужным кодом. Видел кнопки на СВ, использующие функции этого расширения, но зачем устанавливать лишнее расширение, когда это реализуется кнопками СВ.
Отсутствует
Jarichek
this. pasteText = function (desc, url) { var doc = new XPCNativeWrapper (gBrowser. contentDocument). wrappedJSObject; var theBox = doc. forms ["post"] ["req_message"]; var startPos = theBox.selectionStart; var endPos = theBox. selectionEnd; var oPosition = theBox. scrollTop; var oHeight = theBox. scrollHeight; var text = theBox. value. substring (0, startPos); text += "[url= + url + ]" + desc + "[/url]"; text += theBox. value. substring (endPos, theBox. value. length); theBox. value = text; theBox. selectionStart = startPos; theBox. selectionEnd = startPos + 6 + url. length + desc. length + 6; var nHeight = theBox. scrollHeight - oHeight; theBox. scrollTop = oPosition + nHeight; }; this. showURLDialog = function (callback, url) { XML. ignoreProcessingInstructions = false; var dialog = <> <?xml-stylesheet href="chrome://global/skin/"?> <?xml-stylesheet href="resource://gre/res/html.css"?> <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="dlg02" title="Custom Buttons" onload="windowController.init()" ondialogaccept="return windowController.accept();"> <script type="application/x-javascript"> <![CDATA[ var windowController = { init: function () { var stb = document. getElementById ("texttb"); stb. value = window. arguments [1]; window. sizeToContent (); }, accept: function () { var text = document. getElementById ("texttb"). value; var url = document. getElementById ("sitetb"). value; window. arguments [0] (text, url); } }; ]]> </script> <vbox flex="1"> <grid> <columns> <column/> <column flex="1"/> </columns> <rows> <row align="center"> <label value="Название ссылки"/> <textbox id="texttb" flex="1"/> </row> <row align="center"> <label value="Сайт"/> <textbox id="sitetb" flex="1"/> </row> </rows> </grid> </vbox> </dialog> </>; window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog. toXMLString (), "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback, url); }; var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); this. showURLDialog (this. pasteText, text);
Отредактировано Anton (01-09-2009 20:19:04)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
text += "" + desc + "";
Все работает как надо, опять тебе спасибо
Добавлено:
так, почему-то на forum.ru-board.com не хочет вставлять в форму ответа, жмешь на ОК а окно не закрывается (textarea id="post", name="post").
И еще, как сделать, чтобы выделенное воспринималось не только на странице а и в самой форме? Встречал на подобных кнопках такую запись:
Не получается сделать, чтобы или на странице или в форме выделение бралось
Добавлено:
По второй части вопроса вроде решил, сделал вот так:
var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); if (!text) { var theBox1 = document.commandDispatcher.focusedElement; var startPos1 = theBox1.selectionStart; var endPos1 = theBox1.selectionEnd; text= theBox1.value.substring(startPos1, endPos1); }
Остается не понятным первый вопрос
Отредактировано Jarichek (01-09-2009 16:46:43)
Отсутствует
Anton
Ты уж извини, вопросов много что-то задаю Еще один появился. Пытаюсь сделать кнопку с выпадающем меню, делаю свою на основе кнопки Favorite Applications. Исправил под себя меню, все появляется как надо. Вот например:
var nMItem = function(label,img,args) { var m = document.createElement('menuitem'); m.setAttribute('label',label); //m.f = obj.startProcess.bind(obj); //m.setAttribute('oncommand','this.f("'+path+'","'+args+'")'); m.setAttribute('class','menuitem-iconic'); m.setAttribute('image',img); m.tooltipText = label; return m; }
Закомментировал старую запись в кнопке. args выше в коде кнопки указаны для каждого элемента меню, и являются цифрами. Как определить атрибут oncommand, если нужно выполнить функцию (она для всех элементов меню одинаковая), которая принимает один агрумент (args)?
Отсутствует
Anton
text += "" + desc + "";
Конечно. Просто форум "отрезает" кавычки.
так, почему-то на forum.ru-board.com не хочет вставлять в форму ответа, жмешь на ОК а окно не закрывается (textarea id="post", name="post").
Кнопка сделана только для forum.mozilla-russia.org
Для ru-board, наверное, будет работать
var theBox = doc. getElementById ("post");
вместо
var theBox = doc. forms...
Добавлено 01-09-2009 20:32:29
Jarichek
Как определить атрибут oncommand, если нужно выполнить функцию (она для всех элементов меню одинаковая), которая принимает один агрумент (args)?
А какой там есть ?
Прошу прощения, в указанном коде он есть.
Наверное, так:
ps.:
Кстати, когда первый раз когда пробовал эту кнопку, стояла версия 0.0.4.3 - так в ней показывалась правильно "Строка: 115" в ошибке. Установил новую версию, номер строки стал каким-то большим
Спасибо за багрепорт.
Отредактировано Anton (01-09-2009 21:02:40)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Наверное, так:
m.setAttribute('oncommand','this.f('+args+')');
Ладно, вот приведу что у меня получилось:
var apps = new Array; Red='data:image/x-icon;base64, ...; Green='data:image/png;base64, ...; Blue='data:image/png;base64, ...; // ------ Menu Items ------ apps.push(['Red', Red, '#FF0000']); apps.push(['Green', Green, '#00FF00']); apps.push(['Blue', Blue, '#0000FF']); // ------------------------ var nMItem = function(label,img,args) { var m = document.createElement('menuitem'); m.setAttribute('label',label); //m.f = obj.startProcess.bind(obj); //m.setAttribute('oncommand','this.f("'+path+'","'+args+'")'); m.setAttribute('oncommand','this.onCl("'+args+'")'); m.setAttribute('class','menuitem-iconic'); m.setAttribute('image',img); m.tooltipText = label; return m; } this.onCl=function(args) { var open="[color= + args + ]"; var close="[/color]"; var theBox = document.commandDispatcher.focusedElement; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var pastetext= theBox.value.substring(startPos, endPos); var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; var text=theBox.value.substring(0,startPos); text +=open+pastetext+close; text +=theBox.value.substring(endPos, theBox.value.length); theBox.value = text; theBox.selectionStart = startPos; theBox.selectionEnd = startPos + open.length + pastetext.length + close.length; var nHeight = theBox.scrollHeight - oHeight; theBox.scrollTop = oPosition + nHeight; } var mP = document.createElement('menupopup'); for (var i=0; i<apps.length; i++) { if (!apps[i] [3]) apps[i] [3]=''; mP.appendChild(nMItem(apps[i] [0], apps[i] [1], apps[i] [2], apps[i] [3], this)); } this.appendChild(mP); this.type = "menu"; this.orient = "vertical";
А вот кнопка оригинальная, которую я переделывал:
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%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACvUlEQVR4nO2Uz2tcVRTHP+ecN3ltM2kwEESiGbSx6EawIkK7aUAQoSi4cu0/4EYYCykONLSMdOF/4dKN4F5adKEL3bTVbNog2TlpJ5nM3PfuPS7e/LImcWxc9guXe9/l3e/n3nPOvfBM/yJxdwA2N29+FmNsA3pCz2RmzY2Nq7cAcHfcnVbregwh+EkVQvBW63oc+WZTZFU13vz4K3a7/afa+tLZ0/z89adMR2EaQBkTj/f6XHznDcyEzHTYJuPj9M13P/5jLjvkP8qYcAQRwdRBFBcBqUACOFV4cSf5cHyIDgUkdzI1VBU1Q9QwVdQE1clJ3J00jHVKswIE1CbmajpuFaQC9UPk0f6A/X5B76Bg7yDMegIBmZjK2NQQUwYx8sefA7q9QHInxURMjprNHiLRCiIiqBqmRpmcTm/AICQcOJXXiMmJMRFjpNQ0O8AdokOIEIn0iirpqkqeG+AT8zJSyqHeRwP6ZSISqdWEGkaWKbXMqgpSwZNTxkQpcbyhNEsVZaacref8+tMvR2/pGC0tnjkeYKZ8e+ujpzI/StOAVBSFrqysnsiwKAqAccbHADNr3rjR/t9e09GHHHXFR7rZ3vT8VM7c3NwTrcbvv21xtblxTA0NASJi7S/bW6q69NrrawtqKmZGjJH/0heh8Ht3t7oxps7nzeaau5fWarVweHt5efmTK1fef+7x3q5kWcbc6Rr1+QUw54XnVwixz7mXX2W/3+WVYT+ar59ZgKx6Hi9dvJTv7OykCxfe+n798uVtBUjJ322sri6mlCiKkhACMTidTof5vM7D7Qf0ugfcu3+XXveA+8P+4fYD5vM6nd0OMVRrU0o0Go3FlPw9GCZZRT5YX1/P8jxn7dz5E+YYXnqxYXdu//Ah8EUGMBgEu3at9UikupXAMHEuUzXwRDL/VhxC9XrLyMNMFeAvxD6eG31AG3sAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20login%20%3D%20%22Administrator%22%3B%20%20%20%20%20%20%20%20%20%20//%20Here%20put%20your%20login%20name%21%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20So%20you%20can%20use%20%22Show%20Desktop%22%20command%21%0A%0A/*%0AIf%20you%20deleted%20%22Show%20Desktop%22%20from%20your%20Quick%20Launch%20toolbar%2C%20just%20enter%20this%20URI%0Ain%20your%20Firefox%20and%20save%20the%20file%20as%20%22Show%20Desktop.scf%22.%20Then%20you%20can%20put%20it%20in%20you%20Quick%20Launch%21%21%0AShowDesktop%3D%22data%3Aapplication/x-unknown-content-type%3Bbase64%2CW1NoZWxsXQ0KQ29tbWFuZD0yDQpJY29uRmlsZT1leHBsb3Jlci5leGUsMw0KW1Rhc2tiYXJdDQpDb21tYW5kPVRvZ2dsZURlc2t0b3ANCg%3D%3D%22%3B%0A*/%0A%0Avar%20apps%20%3D%20new%20Array%3B%0ADefault%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4XqXNa2jVZQAG8N//nJ3jmbs4l6XZhSGI0sWhQ9CCpKhcWljOYCLZDZEgsA+RFEQWCcEsF8vsy9yHLiKCGxgsVnZZzLm2BV2kYdgWJ7cyN6Zn7nLO8bwh9KmBX/rB8/F5niiE4H/r2qX+xLPaTu4TPt1mvG2LyfYnjaAYcdcQXS1PxBzOZnh4L0bI/M7oKL+ccD6W1Vt7VB1yKMwauPpcvd6m6+7BcWQxByVkphjKcbbd4cfa7MDUf0dilzM2Dg0gzfRl6e//sG84q7Ww0ExZDVVLyOdsbqn1IlKIAEDfHiH0C6FTSO/ViuW4teEFa3/rrSyEv4WZHuHI1lRI7vwod8u2lqeQQASxzBky3chy8002vVHnelw8OPXJK5svNEcqSMb5NXOnxTXriiZnHCqrb0nfsKV5OxKxfNLuzi9cchGlole3+ybT6UC5P28zXkEBw6xeNGDZYJ/b77s/mn/XqoX5bHYDSiMkv3zG5XvvVqQYU5iLxYhjEEmG0rxz7vn+gQdfW1UqGX1+sp++gY4YcoWk/EiCn0bJ1mAMP+MvXKL7K3q+lW7a/97TUTT8VmpJifLVa2QrylfGEKbH7Ow56nTXcQ2nWl2BoTGGKrGCsYvzfLbmyHlMd9RWN5bk4yZGZ4TxTCoCJFCO4o5dTi99VHnPuy4cG1u3oG7FDxpT+5294wk3zg0SybiRqci5HLraRYAIRYg3r7c15NUeiuq/O7Xs8YbUvMpocnkVySpGUYoJ/NguMXAmbTYJzMeiBRvffq7ykaYPyjYc6PX+YPDmSHCwO/g6hKjuwwKqzSZCEZIoRmXZA417vHwsxHd8PD1n7esNsYeapotW7n4JSyPXFiGOJEr/DVxBwOQ/YMb/YyJTjUkAAAAASUVORK5CYII%3D%27%3B%0AShowDesk%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAioFc/4lLHf9dPCL/Sj8u/zZMRv86Ukv/O1RN/0VhWf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZbEv+tSQT/p0wR/8F4MP/BeDD/wXgw/8F4MP9FOCj/OUc+/ztTTf8+Vk//RmNb/1p+dP8AAAAAAAAAAAAAAAC2WxL/tlsS/7/WzP++8vv/t/D7/7fw+/+37vv/wXgw/8F4MP/BeDD/wXgw/1M3H/8+Qjf/TGpi/wAAAAAAAAAAtlsS/8fQvf/F8/z/xfP8/8x6O//Mejv/zHo7/7fu+/+37vv/t+77//DOpv+1UAH/tVAB/ztUTf8AAAAAAAAAANiBJ//L0bz/yvX7/8r1+//3ozD//+PH///lzP/Mejv/zHo7/8x6O//Q9vz/8M6m/8xnAf87VE3/AAAAAAAAAADYgSf/z9K9/9D2/P/Q9vz/96Mw///lzP//5cz//+XM///lzP/Mejv/0Pb8/9D2/P/MZwH/PldQ/wAAAAAAAAAA2IEn/9Tt7P/U9vz/1Pb8//ejMP//8+f/AQ4U/wEOFP/Zhzf/2Yc3/9mHN//U9vz/zGcB/zZMRv8AAAAAAAAAANiBJ//c+P3/3Pj9/9z4/f/3ozD///Pn///y5f9hhJL//+TJ//XDkP/Zhzf/2Yc3/8xnAf8pOTX/Ql1V/2eShv/YgSf/4fn9/+H5/f/h+f3/96Mw///8+f//8uX///Pn/9mHN///5Mn//+XM//zRpv/Zhzf/ETG5/y9CPf9UeG7/2IEn/+Xi0P/o+v7/6Pr+//ejMP////////r1///y5f//7dz/2Yc3/9mHN///5cz/H1zV/y6G8v8RMbn/bJiL/9iBJ//YgSf/7Pv+/+z7/v/3ozD/+7JB//uyQf//+vX///Ll/8x6O//s+/7/2Yc3/9mHN/8eJJb/AAAAAAAAAADYgSf//+26/9iBJ//0/P7/9Pz+//T8/v/w2L//+7JB//uyQf/Mejv/9Pz+//T8/v/Zhzf/O1RN/wAAAAAAAAAA2IEn/++mRv/vpkb/2IEn//DOpv/w2L///P7///z+///8/v///P7///z+///vpkb/2Yc3/ztUTf8AAAAAAAAAAAAAAACOn4b/oLac/6ilhf/vpkb/76ZG/++mRv/vpkb/8tKf//LRo//vpkb//L12/9mHN/9Sc2n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO+mRv/vpkb/76ZG/++mRv/vpkb/AAAAAAAAAAAAAAAA//9zQQD/c0EAB3NBAANzQQADc0EAA3NBAANzQQADc0EAAHNBAABzQQAAc0EAA3NBAANzQQADc0GAA3NB/wdzQQ%3D%3D%27%3B%0AIExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAgtJREFUOE+NU99LU2EYnvSHdNP0uHUcw7n8RTmNgYKgWESXQexGNAoSIsoiutDhUDbndEmLWo1ayEydgV1FXWi1HINipC1rP9x2cptnJoo8nu+Dc9xxg3XggcP3ve/zvu/zPl8FAMX/fuaVGA0+keMUN9rYCppHCMphZCmI4eWoEHYUS85o8VLJ5FJE15s1dAR2ce62j0KML0kgJplCMRAYV3eg9Weh8nLQvN6C3p2QSIoICtu0hLNo9P2C8r4fpyyfwbiiqHr0B6wriQb3pqwTaYSxLynanuFjHo0zETBd/dC0XsaZi9dRfXMB1Y4YTk/EUf8sW0xQmEwImAeLULb3SvMSAv1wAKw9AZ3zL4Woh0zE1g95sN40Kh8LLdvXwdgiUFkjUFt/g7XGoR3fRMNUBoYnXDHB2SUe7CsOldNRqAe/loWsA5N/A3VzPFSuBJTjGzhpegpd97WykHzQPL+DWu82agSVVfYoGHMY6ksPZcYhOjR5ePQFD3DH//1ohCuC4uzkGq2mf56D1plCjTCvZjRONyBuweDj0Rvah/UbL99C52waLbde0mqUxCGsypmBfkIwztQWml/k0P3uHwZCexhaTtJkEic6UmGc4SQCkaT27ns02dZh9CTRM5fB1dmf9F/UpdD+ih73D9TfeysxXnCsSlWOC1nq3VAfnLcFoBv6BJJc7mUevz8EdJ2boXU7oPQAAAAASUVORK5CYII%3D%27%3B%0AWExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAADNmjT/////AP7+/gD+/v4AOWzSCwAAAPj////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AzJkz///////////////////////Cjyn/AAAAEQAAAAL///8A////AP///wD///8A////AP///wD///8AAcyZM/8zZswAAACaAAAAAAAAAAAAAAAAAAAAZgC+iyUA/f39AP39/QD+/v4A/v7+AP39/QBQg+kLAAAA+P////4E////AAD4kgAA/f0A9fYCAMTVKQD1DjIA/P/nAA87uQAhFAsAJiYXAAAAAAAAAAAAr3wWAAAAAB8AAADhAAAA9gT+/v4AAPT0APPp6QCitxQAIl1DAAkFAwAKAwAANw8AANrd7AC1kFEACPrTAPz8/AAGBgYAs4Aa1urq6gABAQELBP7+/gAA9fUA49fXABE6mQAaFwMA+foAAPn7AADL6gAADxsUAA9AmAA8MBcAAAAAAADngQDq+PgAroeNAAAAAB8E/v7+AP3x8QDn3t4ADScFABYAAAACBgAA8QYAAN/5AAD89gAA/QPxAAAAsQAAAAAA+d/fAN/n5wDq+A8AAADsCgL9/f0A6ODgABUWGAAA9vcAFgAAABEAAAAHAAAACAcAAPn8AAAS/NcAAPj4AAD4+AD39/cA387OAH+j7D4AAAD5Av7+/gDi4uIAIjBLABf/8gDp7/UA8QAAAPkAAAADAQAA4szdAA334AAA7+0AAPT0AODg4AAEBgYAAAAA+QAAAOgE/Pz8AAICAgAMLVMANvDWANnaygDpBDQA9fv7AALy6AAZ8OYA9t7NAAD49gAAHSEA3d3dANvl/AAAAAD9AAAA+AT7+/sAISEhAAD8/AAA68oAJwz1ACcA2AAACAAAAA0AAO4QEAC7vzcACM+3ACf+3QD69/cAeqL2PgAAAPkAAAD+BAUFBQDY2NgA1tZFAP39/QD+/v4A/f39AP39/QD9/f0A/v7+APsIMADICVQABNK7ADgsKgAAAMz5AAAA6AAAAPgERHfdCwAAAB8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAxgCggI3MCPXUAAAAzP0AAAD4/////gEAAAACAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAA/QAAAOH////2Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAgAAAAAAAAA+P////59OFeo8fymrgAAAABJRU5ErkJggg%3D%3D%27%3B%0ACtrlPanel%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAAIuuYjyvIgAAACBjSFJNAACHGwAAi/8AAP/YAAB91AAAgSAAAOmkAAAz8AAAJVC/P0EaAAAEG0lEQVR42mJkTDzG8P/ffwYpEU6Gzz/+8H//9Y+dh4s1+cOn3+zMbMwWf/8wWAAVMOi/nLtX8uet4L+MrAz/GBgYmIHY/ft3BoAAYgHSOYyMjCIfv/2x+Pnnv8WfH/+YPnz4zMsAVMbC+p9BQYCV4dNfNoYvf9j4vn37wvCXkZ3hF9BADyFhBtVv3xgAAoiF4e/fif+//Wb6+ukvAzvrPwYtUVYGSyM+Bl15HgYTLSkGRUkOhty5txkOXP//F+TSv/9+MrCxsjBICggw/H73jgEggFgYvn37HGXEx+9lJMpgqCrEoCTJw8DBycoAAh++vGP4y8TO8O8/IwMj0FaGf38Y2ISUGZgktBlYGR4x/P//nwEggFj+//jBkO2py2BlIAnW9Auo7uMvBoYfP38zvD2aycBr1MPAxsLO8PsvM8PPb58ZhByDGb4x8TAwPL0HNJiJASCAmFhYWRkevvoG1vz9NwPDN5Dm/wwMX57sZPjLrcnAwCfLwMXJzPDr19//X8XNGX5JWzP8/flVjOnLq5lC7G+XAwQQCwsLE8PHL7/BBvwG2v7zL9AVQAO+3V/E8E86juEvkP3/90+GbyzCzJ90wsRUuDhmGqgKO6v/4ufl/HiCASCAWJgYGRlefQBay/Cf4fsfRoZfjEDNTw4x/P5wiYHVyInh/hsGhhc//jEEhwU4OFmo3/vOxMN98Yo8w+p/ir8EX0uvBggAQQC+/wQBAAAA8fkCAPf25ADuzJEABC2AAPnkrgD/FUcA6ujpAMTU2gBKOz4ADgkHBcfU4wXNzbvV8efcyCAD8ZMlFRvSAgBBAL7/BAYFAwDz9vgA+AcnAP8IHAD0vkgAAAUPAPkplQCyqrAAEQDYAKTmJQDhz8HdGv3XbBUE9L8QAQT5BgIBAAP+/QACiAUc8n/+Mvz8DYw6pVyGf68OAWML6CUuBQYG23yGHwxfGMwefmK4/fj2dQbu5zsYhIFpjJmNAehZcLgBBBALIxMTw2dgIH79AQo8YGjrLWb4/fEWw+8/DAyaAowMh9/zMnAy/2L4w8TP+uLjK4a33xkZ+Pn/M8gKAh3K+I8BIIBY/gDN+gNMYT+AGn4AI+M3IzfDT35DsOninAwM8m9+Mxy5+Yrhz5+/zIzAhPPr1x+Gly+/MHz78p/h5x8hBoAAYvnz9x/DT6BrmNiAOoCGfAUmiRcf/jLcuPmU4eS5+wy3rt1g+Pfuyk8VtkefeNk+gxMPCAC9z/CekZkBIIBY/v/5wvL8LQfDtGW3GO49eMXwCpjCvjy7+Ov/99cf2P5/mKvO/eseA/v7E0wsbPc5OHmByfcfAzIACCAW9t9v3t6/+vzP0wub//D+f3pGkPnZaQHmP2t4eTjvMTKzfmZj4wAmbXagRiag7f+BNIp+BoAAAwDAMqTgcw5bNAAAAABJRU5ErkJggg%3D%3D%27%3B%0AMSNotepad%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAoJJREFUOE+lk/tL01EUwO0fy1ely6IUMoi0AoM0Sy1TMDMitZyvfLDNdM5HPle6RNt0mlvz0ebmYzoVN5vO4cQ5yxQFAz/NbxTo9Kcu3Hu4h3s/fM6BcwYI+q91CBBXdGDtjaG88LUQywoK/9yLJEKseaulRnzX/5Sg41tIiKsWaauX0mdxolUr6Btz0NpWh9Ls4ZNugHbbDpklMvKkTQEQAVD4YQmN+yeGzX00qzvUu9aodKwhc25TurhLtnWbuNb10wF5ygUqnD4UTg8Sxwa5Nhc5026eTnpIG18lYWSdBO3B6QCF2krutI838z7ypzdJNS+RZHJz3/idWyNeLvd7iFEfkKYwnFxCl95Mnm2FdPMGj81bxA25uKZfJla3wZXPm4R0exC93yGtdysAIvRAPWSm1rlEvP4H8UM+ogZcRPS5idKsc6HHQ7BymUj5Kum6A15KWo5YCIAeg5ku7xTXtV5itD7CuhcIVzm41LlChNLO2Xoboko7qV1bpFQNHLEQAB/9JUzsWUkaXOVih4tz7dOENU8gejeLqMFGsMyCqGCSpFoHyU32QIBKb8G6byR/fJmLTQ5C60Y5LzchqrYQKflKcNEXIrMNJBaP8ah1jVdVzf/KEAxUOgsLv6ZodM5xtWGe0LIBQkq0RBSPEF48TIjYRLTYRkqd3W+wyL2c0qOADp2ZyT0jet8Md1Quf8OMxCqnSO63kzVuJ2d2huhMKS8KyykqrQ5sYrfBb8AExt1hVOtzlLkHkXtHaVxxIJuZJ7trnhsJz0+fhXqNlc5lO3LTN3I7p3hQMcjNrBZuP6wkOb2EfLH0xM/CJB8eGc+kJGbIeJJTISge1zxpCv/mfgPvVs+ANDa5fgAAAABJRU5ErkJggg%3D%3D%27%3B%0AMSWordpad%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAAIuuYjyvIgAAACBjSFJNAACHGwAAi/8AAP/YAAB91AAAgSAAAOmkAAAz8AAAJVC/P0EaAAAD5ElEQVR42gBBAL7/Af///wDgz3tx+e7eSe7mDMcTHwhq3d3+lhQQ9Tfb4fDGGxEsa+z105z+AkJFDP3M9PEQRo8qKSyz1d3qAFlVRwACiBFkwPKlJz9+e7WVT1hYgOHZGy4GKcHHDM8/mzIoi55kePEzhEGQcRUDi0gSA9OHVQwfGdUYWCXkTa89en+mOsGTASCAWBiAgJFdgkHbyJ5B21Cb4em9lwwS0h4MHz6zMkiIGDJ8+yPM8O9vAQMXDx8D458Yhv5FhxgOv/s9lf/fvyag1q0AAQQxgPMDg7y9IcP7n38ZBLSkGX4xMDFw8P1mePmHgeEX4zOGv6wMDFyMnxhefWdiWPNZkeH9dwmzIL73y4Ba+QECCGzAH6A33v98z/Dz2y8GZkYGBlZGJgZuFi4GFqBBXKxCDMwsPxnOPvrJMO8gK8Ozj2IMfI/3Mbzn+wjU6ccAEEBgA5gYmRlYmTkZ2Ni5GH78+crw+98vhtc/3gK1/2cQ5eZheHLjP8OWQ78YTj1jY+D/eZNB8dcdBk4uoRcgvQABBDbg59/vQL9+ZWD/z8XAAbSZnYmf4c/fnwzsLL8ZDt78yrBk+x8Gpk//GEwYfzJ8//aUQYCf9a20lKgPSC9AAIENYGPmYmADavzx+ycDw78/DD8ZWRiEONkYdlz8x9C7hZXh0Yd/DOrCnAzm0swMHz69ZbA3MXomLCJ8G6QXIIDABvz+/4vhF9DZTEysDH+B4fGb8TvD8Qd/GCbv/M3w4O1vBj0ZDgYPPUEGA4VvDNc+izAY6GkyCAoKgLQyAAQQE4j4C7L132+g5n8M3Bw8DKz/BBiWbPzEcPflLwYjOW4GGxURBluNvwyWSowMjEzMDMxMTAwsoNAGAoAAArsAFIAg20Hh8OfXV4Yv11kZOF/+YHDTlmLQV+Zg0JT9yCAm8Jfhww9ggIOCFuhKIAIDgAACG/D3/1+giZwMLOwcDO8ufWfYsOk5g5ieGIO2Fj+Drsx/BmHebwzffv1i+Pz7L8N/uMMhLgAIIKgBvxk+/3rPwPqXjeEt628GeRceBlmVPwzS/M8YuNnYGf4BY4edGRg+fz8B2f8YkAFAAIENYGbkYmBl4WX48fMzg7DiPwZpNV4GblYOYIz8Yvj+5zvDX6bvDHzs3Ay87OLgNPMf6g4QAAggsAH/WX4w/GcVZBDgE2FgBdrw48d3hj9ffjNw/AI68xcnw9vX7xgefnjG8PPzD2A6YWXg4+F+x8bKCjYAIIDABiiKcq97e/lN2KfHr7/9+AAMxK/fGH7++Al0wC+wk7m4OBl4eLgZ+Hi52a0tjG5xc3NEMUNjASDAAGRtWmcAXa/AAAAAAElFTkSuQmCC%27%3B%0ATimenDate%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqBJREFUOE+Fk2tIk1EAho9F2J8uFF0gol92g6j+WEFGTGrQBYYynGnrYllOwbIx2aJWUEiJoZiFIYSaoJFdSEFrXcwaUZFz4Vrq5mWX+lz25UQpop62SaOLowPn1+F5znvOeU8cIGKN7FcbIosJc3cK24cvQozPF9/erxDXM5PjokxYMNk8+HI9xe5cmkbrqQtcJK9DwdKGvUw55UNdawkhE1xMWNW2nKLegzR+rqM52MQxu5mVjcXEnStHnJrNsfKrEcmkgk1VPlbfSCacwuRI4aSzkNwOWHCtH1EqEEbB4kOpmEymf+OLomHmmxzMuHCGNXcWktSyhM2tXpbU/0CUeBFnQ4Kjgpm7M2ILpu9rR+R3Ma9Ex5zLK5hWqSIsFqfVCIMg/vAsFqnzSU9PR9hbS/l7Omr34yrdDucToWg9WWdXhWIrEAcsTM3IIyF7G2tTDBOCkeeVcD0NKhSgX8ZY8Q6C5XuQm0oYtbfyfegt2Zf2InYdQSgbiVdUosi6wDplDoWFhQh32x1s927x7FEb7a5hbN4RXIExPIHPBIY/IffZOFF1l+kba5inqGdD+iMSd5xDo9FM3MHN1qdYB0Z5EoLtLi+DVguyvZ2gz4Xs6kAe6KTmtoct+5+TpH3A2q1G1Gp1BI48Y1jQ0j3O6/4A3X2DSD1vkD3d+Ls7kboe43c85M07H2k5FSiVSnQ6XRSOCpq7RpAkiaDdyteAB39/D/6BHiRHC0FZYrCvl/x8I2azOdrAP5p494Ubr8/HR3sbX9/eJzj8gUG3E1mWsTo/UXC8InLjv2L/Xv1IE8PHkIYCkRRhyO+XsFieUVZ2hbTduWRmZk4KR6scFjidbqqrGygoMJKaqonsqNfrY4L/fCatVotKpcJgMPwX+v0IPwEurq5/p1hhrwAAAABJRU5ErkJggg%3D%3D%27%3B%0AAddRemove%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAs9JREFUOE+Vk91L02EUx+2q/yII6iJIxRoRRlHdiRBGF0KglFIkpRWKdKEpJlqEkQRR1txsbqY1dM40Naf5sqm/+ba20sxyc75szqHzNTf36fdb2Bh104EvPJznnA/PeXn2COZJov7DZEcP7IkIlwBPhTUemfxUmYPUDoNOVPsomKygrR9g8quHYBCMRiMGgwHRonYVJQGMY+M8GQrwsG8Hee8Wyg4fqhYP6oZ5uno9uN3g9QZJTk4mMTExEiCRJMj73nFyCt9ReE9PWVk7iso+6moERs0TbK24cTkdZGbeiEiWckNP+fLZxo/ZJUyjMywvuHC5PNhnXUw45miyzlPYaueWbpq0q7f/Deju/BAq47YJigQ/d3q3udYZIKlhk5TnNp41O3hrmKe8vIX8fPnfJTyo6+d+ywy53ZDaCte6RDUHKK224HYusuGDqUkYFpvbLPrz8hr/QEIlZNZYOP/Gh8YCLwY2UHVPUakR8LqWpECWl8EiQJMeXqlAoQiQnl4UgoQAjTod+q8b1FvWWddexv80np6qGnzr4PeLEavwzeBD+LhDpQL0Iqi0pIPs7Ozf85QAbrcX/bdV3k2nMKg5xnu1kaER+D4FP2xOKlRtmIUlBLFHg8I2avUQ8fHxYYDD6cFgX+X63AUO6/Yh1/ZjHoBBUWOmOeobTDinV1hb38K3toVa00VsbGwYYHcsMDC7wtmeOPYqo8iRK+hoAWUVtOlgtD3ApljKrl25kodMJgsDRkasfFpc5qB2P/vrDpFe8ZJqcWJKJbzVQoe4wdJGStbTYyUu7kS4B69f12C1fcG3A599DuyrP5F/9FJQYuRN7ab4B2BiAjyeoJhs49Spc8TExISnIDWyuLgYVbWGu3kFpKSkcvrMWY7KjpOQcImMjPvk5Dzm4sWbHDlykujo6Mg92P1ZaWlpJCUlhZ4madcvnXNzc8nKyorwS/e/AIz06Svr2XfUAAAAAElFTkSuQmCC%27%3B%0ACmdPrompt%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAQ1JREFUOE9j/P//PwNFAGQAJZiB17Xrv17m9v+G2bv/G2TtwonN8vf+N83b+9+8YN9/6+wN/yU8W4H2Al0vXHbzv3jPh//iXW9xYrHOt/+jN//677/29//4zT/+T+tb/N8yZuH/4uLi/wwupQv+G0YV/DeOLcOLLePL/lsAMYh2jMv5rxXQAjHAwSsOFIokYxHNQIgBtp7xYM0eHh4gP4EBiI1sKMSzqJYIa0ANsHKNBkvCNMIMgokhyyEbgtUAXF5BNhSmBm4AzAv4XIDNFRgG4AsD5DDC6QJSYwLuAkfvRJKjEGSZqGYQJBqN/ev/K5iG/le2iCIaq1hE/Je3K4EYAIpiEINcTFFOBFkOAK4+5J3cVDxkAAAAAElFTkSuQmCC%27%3B%0AComputers%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZRJREFUOE+NUz1Lw1AUtT/Hn9BVcDDgYDe7iTiFTsFJXCRjcAod5FmhkA6FdCikW7oE4lCIg5AMhdehwxscInTI4HC898XU2tqPwOF93XPeffee1AAcbfueX7K1w08den1Vry05LFBBdFJodBO43RTBMIbox3CHCcRE6vHk1EbzzCJKyVuSecFE5ynQweJVISyAhA7iL8BfAK7CHgG6TWQFnBkgPkpSQODRozXvGxfO7gzEpMBdVgYLurGCM4fev77xdwhQBuFYwnwHLAq2p79gsvlGuE+2C3Ad/H6CRkQ3TX4ITCLw2qD9ZlvuFnDbJDDIYYyhhSrw2hgdIGB3Yy1QHwB1IjDMqNBtNVvl+7e2seqt1ZM4HlLRohx+n2rSimGcBxvkDR9UAs5jgmAk4dGtPOfWrRvoXyNVm5xusSig5oqEUmqdpzOwH8osVt37x4najWRlJud5DjmTiCPOIkTj0j1QgOyslIKcKqSZJF+k8Hoh1cHTQnsz4CysWwF/ENPPlOhRdFhAHF5EFqnatT6uvp/n35Q1zXl/mKThAAAAAElFTkSuQmCC%27%3B%0AMagnifier%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqxJREFUOE+Vkt1L01EYx48vFQRFdwVdVFQ3URFBd0HQjf9AhXWnBGLRMtdUiLLCt8RGbxZoQvaiglhRai03Z9Za5dbUueb2U/emNXx3upkv26ffFrndlRdfznkOz/dznuecJwkQmwsdpK7bIEJLEZEkksUyEbEmOVlEksJiYTFZLIbDYtP6tSKSkiI2igWxR/jF1lS3qFYdSxJRwJZzWnYrdexS6dmp1MfWv/tovCNXx4FCA3sLP3Hospbs6/VsO14kWxExQKXBD0sOAn4rgdE+ZmUFZS3O2CEowZyDcECS4wHmAwNRI+l59+MAdccoBGz4nF2MDJrxeyyM+yyYDB08b3iJtllLt6GT0JiN5ZlB2bhMeu7dOKBM5ycy3kv/dyOSowunzYjmTQfvPlh5YRumsX+KZwYfD6pbcNs/xio4kXM7DijV/iQy3ceA04zXbUHfYaTzq0QoMI7GPUGtbYI3E3PUmMZQ36yVjUFO5dxKALT9gKlehpxf8di/0KjrQTf8g0bzEA02FxqXG63HR1ckzLXqNiSrgQxVQgulOhkwaWHQYaTP9J6mD/08+SbxyGhHM+Dgs9uJZdiFNTRFTXs3LU31nFYltFCmjwJMDNoNOLr11L/tkW/2USdDDJ4hHB4XIyNeRiO/uNfUTuvzx2TlqeMt1PTOysEIhIdZCHnRtJl42jXJx/kg5tlpXLOT8jfPsSBnqfKLCAftZBfciQOOKppJO9/K0TOv6dFUYGytovi2jrfyeIzH3hwWZV26+pjtBzPIqbSyPy0/YQ7UatSymisz4dU+zCVZnEzPpKL8LorcEi4WlJN5OjeWk6iVSYxu8NaB/jDSDQXKs/djibHzf+hPgiSPZfMRrMU5KM/X/Ld5pYKWKiXSrXwuKh6uyrwCiJaruHBl1eYo4DduhgDBD20V8AAAAABJRU5ErkJggg%3D%3D%27%3B%0AOnScrKeyb%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJVJREFUOE9j/P//PwNFAGQAJRismSHz/H9SMLKFDAxtb/6Tg0tLS4HmgLwPNCD62H+SsELPhf8YBvz9+/f/zDNf///79w+FBlkDEgfJb7gPsQirAaS4AqcLGs78///r19//6DTIBTBx2rkAZDLIZpA/Qf4FARANshnkAmQvUj8MQCaSiuHRCEoMIA45GJyQKMkHg8MAACArvHlXxbSqAAAAAElFTkSuQmCC%27%3B%0AWinTskMngr%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJ5JREFUOE+VU9EOgCAIxPXQY7/sp/lnxpFMTEpkYzST4+AwEVFir+yUc5YYMb6LvG5ILqUsvbK1Qr0YDqKGu58AYNDacSP+xwGqzMX40+IaAImabCN/xwCGqgaMogwEAHLOHmKwkvI1g0MWQQ+jEcO1Uv5K58k6sNhZIl02F8Dr3as+DVIZyBY2rT0w+1YMg/0BmuSTGV76HHcHiWSxG7luAcTplZKTAAAAAElFTkSuQmCC%27%3B%0ASystProps%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAiRJREFUOE99kj9o21AQxl82jx67Crpo9FZDlxoyWNDBKhki8BCMBmMyBOGhuF2MmyFoKsKD0VRQh4A8GORNWQLyUFAGgzy4KEOGN3Tw0MGFDl/vnSu5TkgFH/p397vv7t0RAPHc9en7B/4pf2kckizeidSuHh3EK8BjjdYDKPnSgzv34axMGDcaxGWE2mRD4fscTo7mGQ40ixBeJwinKYIvSQmo0rPo5wQyS0gJSBYUfJMiWuasWG753b3bwFtk5CBDZexDXNUghgJG12NICXCXW7IMhOQw/g1E5MJ/70J9d6YS+gw7wGWFXJDsBqy2tetF2VeBo3swxP9BOu3AW20wWAPWZ7I9ocCPLjkQEBekJwCy6izBCQwiwGAFdO6A+jDjASrrnNytQLctGE1j78BfkNVxCKdPU1d3krUAzNu/gH4Kcd6BONOh2QZqzR4ax+b+ODxqozEHA9yXNRoaWKp/NTBxEkO8jVBpuqjbDvQTD2brH4CagzYFy7nOMJpTS/2ErYr2AOI4hHgVQGsFqJ8GXL0cYjnIb3R0MwlvnKF3nqBDUpWqb0K8IIDeitFo07fXFnrd3uEx5g8bJLc58rXkpRoNI3IQ8yIZZ8kukWBF5WIby2Pc/txCSUpJoIw30b2KCJBSNbdMLCo/AeT3OeSDhLpHc7XCIbUSw58k3OvjxAOAenEuHEoIEHyNubp6Lio/l1yuckFTEBWsjkctyf8qFzl/ABIpmnDaTkSAAAAAAElFTkSuQmCC%27%3B%0ACalculator%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAmhJREFUOE91k99PklEYx18vyrXVRbeuu278T7zK1kWtrVbO8qLwoiybM12aLEdz5mqaqUPE3JJUwAQhfwBq4i/wxwSFyECSgZZaJpaSnw5stlq+Z3v3PO+z8/2e7/d5zkkDpIM15VvjaPoRaXPrpxTf/SXF99OkldiGdOp0hnT8xDHpZEa65O1blK5kZab9ASUJkl/PgF8ECO7Bkoifkvk+hEX0/4De2S1GgjDqjye3pTCpww+SDvM8YYEaEYgyTZCrj0Ncrlwmu2SJ86WLnFHGOVsaoK3XdziBxe4nHIFO1zbZynUu1MGl55DXDPltUNAu4otNjIMppf8rsNp9+IXErsk4ReooNTZQdSd4oA1RrvmAShej0fadoemonIIFZgS5/SM0277yrCtEi2019e9cFfXpeUbcXszjXw4nMA94GJ8XzVoAs3uTFmsAy1wCozNAo2OHmO4aa9qiVE22iY4peCtUNOu9uNZBWTuKeU5Y6dhg9mYm1sIs3CkHMlOwjkF/ABRl/SgeTmAUii4qXmL0QJ3pPZpZmPJtyxMYHQlMwoLOEUHnDKOzbxHahYaeEAZnnPo3EQYnYvIEBtse3eIUtcGPTTTvVoUFVesala1Bbj8ao6h2ieGZz/IEr6y7WEUP8pVDXC8epm8Zcu5o6F2E9qFltLYYAxNr8gRa0w76GehwRDG6olRrvQgHKJvm0JhWKW+O4HDJjDF5lZv031IWnrZ5UA9CRYOHnHt91BgS3K1eILfMi2NyRV6BWty8fvGSCp+4KajyU9W5R16JhRvFr/8BHTrGZPFcbj0Fqnco7utlAX+Dk/lvcXcJCTRwbTMAAAAASUVORK5CYII%3D%27%3B%0ANetConnect%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAtxJREFUOE91k2tI01EYh8/SDxVaGpQVVAYV+CEQchRppandEMEP2WXa1Uq7MUShIk2taGWIdr86M0vn0ka1NishHTMj3RKMxtBIa00zoxxUhPH0/09mSnXghXP58Zzf+573KADhG87v3+j80Sxs/QOi5cNYERroFCF+iSL450SxKyJYMSwcOZEBclS6zZR0H+D2p7NoezTkOpJJagxj2vVjBBZ+5NKLz5JsSDsyvIsiZyl77Mu46Mqh/ruZewO1FHcdZb11PlPLNYh8N4qCZHKrn/wF8QLCayLY/HwBxzu2UtpzhcuufCo+NrHB+ppJ2gYUp7MRBQL/LBUWi2UURKj0bgJOGVj+aDZbJMheezTqtvVkt38gygT+F1skiwKRI1DsCyJibfZoQNgJB2MO2gmtnEnE/eksNc9iibmZ+QaYd+0ra27ZyHxgQK2rZsq+MOYlZYxyIeYcsiEy7IzJfcC48ykElYUwvlTJjOI+7tp60bX2Y+gc5NZLD1ctXagOXUKr1Q67EMo8CbCuHrGrFZHpkHLdjygULC5OJ++2g6qWT5idA7R+AWsf1L37xdHz+j+AvLpeRLwekWRCqBoQ22sQBwQxmiwvoOSRi6o2D/cdHkpM7ym4001S6n70+iGIkAHTUk0oosoRcdWIVbWMSw/GLzkFZcoNih52U946QL6uE31LH82ub+zIPDJcB+8zypAZqfWExOqYvOIyczdmERB1gwmRpShVRoqMbvL1XewuuInWbONZzyB36p4POfB1lQxZuLWM8J3NxO18TKJUk8gtTSiTDShX7iE2fjXR0dFoNBqqrG+50uDGZJLSHtmWMkQWhK/aRnjcJhbFJJKwNo1N6dlUGF/wtL0fa6eHe85BTta0k5CQ8Hdv+4B11lfUtn3B+AZ0dg+VNimk/3DG2EHeGZ3XUVpa2v8BZZZezjV6SD98wWvdF/KtarXa63RUDf7102SxL+9/nct7vwFQw5ZrKBhJFQAAAABJRU5ErkJggg%3D%3D%27%3B%0APowOptions%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAetJREFUOE+lk99rklEYx9e/0VU3QfdB/0JMyEaoF17JZNlg8cqsi8naClSaiBk2jOY71BbOC3/UunBBGkHEgkZu5KiGroiRWxJa6rrp03sOOHS+FNGBL5zDc57PeZ7vwzkGDP3XEoBexdQIR3X0Tu9ZN7m2W+Pzq2eUc3HUxA6j9qtaTv9D3fMAoLWdo7G/xutHyyRv3OH+1GPsdh+BQEAXIgFLiTjpdEaW3infhY9uWr6TPDkxROSUmUvjQSZdk/qARTVK6FYQj8cjAV+rT+GTn4b/NPkzx4nZgsQSL5jzRw/V54HT6SQyP4/b7ZaA2n6dTusbb9deknnwnMzDLyjKLAaDgYmJywMQ2YKAdFWv12m3D3izWSGd3SSb29U8mNLkIJFIkUplJURRFNlSn4kCsre3R6fTplR6Ty5XIhwWKrCxUWVrq0E+v8PY2Aw226g+oNlsaoFflMtVVlbe4fUWKRYrVCo/WV//QaHQYnX1Ow7H9UGAKEl4cWjYXFxzP43PG+d2KEkoVCKqftBUZXo6Kdvua6HrrghYrVZMJjMXRi7KsbqUa8zMbsv9orqkVRDDYrHoA3rHpC5EZNJy2MTw8Ljc37vp4pzxCmaz+e8AARPJQmKUC76zWEbOYzSa9D3408fRi+l68C+Q35MrucWVT9wHAAAAAElFTkSuQmCC%27%3B%0AMSPaint%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZZJREFUOE+NkjFowkAUhnVzdMxYoYubdhM6uTWbgQ7tJodDkQwiTuIimUJwEHEKHYRkKMShoFtcCnYoOGY8x4zt1m5/711MjEZbDw6O4973vvfe5QHkaG21G/xcfclzecTz8nDJIgBt3qjCuysi6JTAWkxcRffpbZh+5j55sNAZ7EoR9m11D/jIwerVkiACsJZzADnI0O9N0NYtqPfd6FEKQMHWLABr2OcBk7kPzQwSwKfLEgMC+FM7U96BAQEexxxqx5NZ/FFhX0JTkeV5D/uS5ADSTXLcANpgA2MsNIW+NyrDWoUIXQuo5CSAdjomY1A3F5HmDtCdcYS6hvBaAHoWqE9nAcbrGvWXMpRmAYEbTYB6QiMmCDX4X4D97oDNGPiyhoVQ91ZrcFPF91ycXR/d4R8GpEYW6lQTHS9hLUCBCISuINxupMHx58r+th3AGRbRf27L7KRPEzrOnpmCNHA30sB4UqQBBiXZPAq+CEAQ6oFm1iOA0D9Ve1xKpgRpsTRAvfDfuPx9VPup7CdLiMmx8jn1+N0vr+ulS/dQUwwAAAAASUVORK5CYII%3D%27%3B%0A%0A%0Avar%20directoryService%20%3D%20Components.classes%5B%27@mozilla.org/file/directory_service%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIProperties%29%3B%0Avar%20profileFolder%20%3D%20directoryService.get%28%27ProfD%27%2C%20Components.interfaces.nsIFile%29%3B%0Avar%20profilePath%20%3D%20profileFolder.QueryInterface%28Components.interfaces.nsILocalFile%29.path%3B%0A%20%20%20%20profilePath%20%3D%20profilePath.replace%28/%5C%5C/g%2C%27/%27%29%3B%0A%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Show%20Desktop%27%2C%20%20%20%20%20%20%20%20ShowDesk%2C%20%20%27C%3A/Documents%20and%20Settings/%27+login+%27/Application%20Data/Microsoft/Internet%20Explorer/Quick%20Launch/Show%20Desktop.scf%27%5D%29%3B%0Aapps.push%28%5B%27Open%20My%20Computer%27%2C%20%20%20%20Computers%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27%3A%3A%7B20D04FE0-3AEA-1069-A2D8-08002B30309D%7D%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Open%20Drive%20C%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27C%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Drive%20D%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27D%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Profile%20Folder%27%2C%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20profilePath%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Internet%20Explorer%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%5D%29%3B%0Aapps.push%28%5B%27Notepad%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20MSNotepad%2C%20%27C%3A/WINDOWS/notepad.exe%27%5D%29%3B%0Aapps.push%28%5B%27WordPad%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20MSWordpad%2C%20%27C%3A/Program%20Files/Windows%20NT/Accessories/wordpad.exe%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Control%20Panel%27%2C%20%20%20%20%20%20%20CtrlPanel%2C%20%27C%3A/WINDOWS/system32/control.exe%27%5D%29%3B%0Aapps.push%28%5B%27Add/Remove%20Programs%27%2C%20AddRemove%2C%20%27C%3A/WINDOWS/system32/control.exe%27%2C%20%27C%3A/WINDOWS/system32/Appwiz.cpl%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Magnifier%27%2C%20%20%20%20%20%20%20%20%20%20%20Magnifier%2C%20%27C%3A/WINDOWS/system32/magnify.exe%27%5D%29%3B%0Aapps.push%28%5B%27On-Screen%20Keyboard%27%2C%20%20OnScrKeyb%2C%20%27C%3A/WINDOWS/system32/osk.exe%27%5D%29%3B%0Aapps.push%28%5B%27Task%20Manager%27%2C%20%20%20%20%20%20%20%20WinTskMngr%2C%27C%3A/WINDOWS/system32/taskmgr.exe%27%5D%29%3B%0Aapps.push%28%5B%27Calculator%27%2C%20%20%20%20%20%20%20%20%20%20Calculator%2C%27C%3A/WINDOWS/system32/calc.exe%27%5D%29%3B%0Aapps.push%28%5B%27Paint%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MSPaint%2C%20%20%20%27C%3A/WINDOWS/system32/mspaint.exe%27%5D%29%0Aapps.push%28%5B%27Command%20Prompt%27%2C%20%20%20%20%20%20CmdPrompt%2C%20%27C%3A/WINDOWS/system32/cmd.exe%27%5D%29%3B%0A//%20------------------------%0A%0A%0Avar%20nMItem%20%3D%20function%28label%2Cimg%2Cpath%2Cargs%2Cobj%29%20%7B%0A%20%20var%20m%20%3D%20document.createElement%28%27menuitem%27%29%3B%0A%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20m.f%20%3D%20obj.startProcess.bind%28obj%29%3B%0A%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%29%27%29%3B%0A%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20if%20%28%21img%29%20img%20%3D%20Default%3B%0A%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20m.tooltipText%20%3D%20label%3B%0A%20%20return%20m%3B%0A%7D%0A%0Athis.startProcess%20%3D%20function%28path%2Cargs%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%27@mozilla.org/file/local%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%27@mozilla.org/process/util%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIProcess%29%3B%0A%20%20file.initWithPath%28path.replace%28/%5C//g%2C%27%5C%5C%5C%5C%27%29%29%3B%0A%20%20args%20%3D%20args.replace%28/%5C//g%2C%27%5C%5C%27%29%3B%0A%20%20if%20%28args%3D%3D%27%27%29%20%7B%20file.launch%28%29%3B%20return%3B%20%7D%20%0A%20%20process.init%28file%29%3B%0A%20%20process.run%28false%2C%5Bargs%5D%2C1%29%3B%20%0A%7D%0A%0Avar%20mP%20%3D%20document.createElement%28%27menupopup%27%29%3B%0Afor%20%28var%20i%3D0%3B%20i%3Capps.length%3B%20i++%29%20%7B%0A%20%20if%20%28apps%5Bi%5D%20%3D%3D%20%27separator%27%29%20%7B%0A%20%20%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20if%20%28%21apps%5Bi%5D%20%5B3%5D%29%20apps%5Bi%5D%20%5B3%5D%3D%27%27%3B%0A%20%20%20%20mP.appendChild%28nMItem%28apps%5Bi%5D%20%5B0%5D%2C%20apps%5Bi%5D%20%5B1%5D%2C%20apps%5Bi%5D%20%5B2%5D%2C%20apps%5Bi%5D%20%5B3%5D%2C%20this%29%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.appendChild%28mP%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22vertical%22%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E
Моя кнопка должна была заключать выделенный текст в форме ответа в теги цвета, соответственно выбираемого из меню кнопки. (Хочу себе полностью сделать панель ВВ-кодов ). Соответственно, там где в моей кнопке закомментированы 2 строчки должно быть что-то другое, я правильно полагаю?
Для ru-board, наверное, будет работать
var theBox = doc. getElementById ("post");
вместо
var theBox = doc. forms...
Ну да, так работает ... а нельзя ли это совместить? Или как-нибудь универсально написать, чтобы всем подходило? Нашел у себя такую кнопку для вставки цитаты, причем она работает и тут и на ру-борде:
this.onclickFunction=function(event){ switch (event.button){ case 0: loadURI("javascript:{ta = window.document.getElementsByTagName('textarea'); ta[ta.length-1].value += '[quote]'+document.getSelection()+'[/quote] \n'; ta[ta.length-1].focus();}"); break; case 1: loadURI("javascript:{ta = window.document.getElementsByTagName('textarea'); ta[ta.length-1].value += '[b]'+document.getSelection()+'[/b]\n'; ta[ta.length-1].focus();}"); break; } } this.setAttribute('onclick','this.onclickFunction(event);');
Попробовал прикрутить в кнопку var theBox = window.document.getElementsByTagName('textarea'); ничего не вышло
Кстати, а можно ли в этой кнопке (Обрамление выделенного текста в ссылку) сохранять ENTER-ы в тексте, а то сейчас этот код заменяет их я так понял на пробелы
Добавлено:
А есть ли какая-нибудь возможность изменять размер текста в выпадающем меню?
Отредактировано Jarichek (02-09-2009 18:35:01)
Отсутствует
Соответственно, там где в моей кнопке закомментированы 2 строчки должно быть что-то другое, я правильно полагаю?
"Что-то другое" должно быть не только в тех строчках. Сравни: http://pastebin.mozilla-russia.org/past … iff=101174
Или как-нибудь универсально написать, чтобы всем подходило?
Так не написать, чтобы всем абсолютно подходило.
Нашел у себя такую кнопку для вставки цитаты, причем она работает и тут и на ру-борде:
Ну, тогда, наверное
var tbs = doc. getElementsByTagName ("textarea"); var theBox = tbs [tbs. length - 1];
вместо
будет работать здесь и на ру-борде и ещё где-нибудь.
Кстати, а можно ли в этой кнопке (Обрамление выделенного текста в ссылку) сохранять ENTER-ы в тексте, а то сейчас этот код заменяет их я так понял на пробелы
Замени
на
А есть ли какая-нибудь возможность изменять размер текста в выпадающем меню?
Попробуй
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
здорово!
А как можно убрать пустое место в выпадающем меню кнопки, которое отводится под label, если этот атрибут не определен? Т.е. уменьшить ширину меню до размеров самой кнопки ну или наоборот, растянуть это меню по ширине иконки в выпадающем списке (все иконки будут одинаковой ширины)?
Да, Custom Buttons - это конечно не заменимое расширение! С твоей помощью, Anton, и помощью Infocatcher уже отпали за не надобностью с десяток расширений. Кстати, хотелось бы еще удалить и расширение UrlCorrector Пришла в голову идея насчет такой кнопки - по ЛКМ делается преобразование имеющегося текста в адресной строке с кириллицы на латиницу (можно в принципе и наоборот преобразование тоже сделать если это не сильно будет сложно), по ПКМ - выделенного текста в форме ответа (можно в принципе и во всех полях, где можно набирать текст, опять же если это реализуемо) ну а здесь конечно желательно и с кириллицы и с латиницы.
Отсутствует
А как можно убрать пустое место в выпадающем меню кнопки, которое отводится под label, если этот атрибут не определен?
userChrome.css:
menuitem:not([label]) > .menu-iconic-text, menuitem:not([label]) > .menu-accel-container { display: none !important; }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Благодарю!
Есть опять вопрос Написал следующую кнопку (вернее собрал по кусочкам из разных мест), не знаю как сделать следующее:
1) Если активным является поле для ответа но нет выделенного текста, или же если поле ответа не активно и на самой странице нет выделения - при вставке кода курсор находился между открывающими и закрывающими тэгами.
2) Если выделить текст на странице и кликнуть на кнопку с зажатой клавишей Shift, не происходит выделения в форме ответа. Вернее видно как снимается выделение, если кликнуть в форму, но оно почему-то оказывается не активным и например в другой ВВ-код сразу нельзя применить к уже получившемуся.
Отсутствует
Кстати, хотелось бы еще удалить и расширение UrlCorrector
Вообще говоря, некоторые вещи «прямее» делать расширениями, так что не нужно пытаться реализовывать все подряд кнопками. Но это так, к слову.
Кнопка для перевода выделенного текста в другую раскладку
Код:
Инициализация:
this.noSelUseFullText = true; this.convTableForward = { "\"": "@", ":": "^", ";": "$", "?": "&", ",": "?", "/": "|", ".": "/", "э": "'", "б": ",", "ю": ".", "Ж": ":", "ж": ";", "Б": "<", "Ю": ">", "Э": "\"", "х": "[", "ъ": "]", "ё": "`", "Х": "{", "Ъ": "}", "Ё": "~", "№": "#", "Ф": "A", "ф": "a", "И": "B", "и": "b", "С": "C", "с": "c", "В": "D", "в": "d", "У": "E", "у": "e", "А": "F", "а": "f", "П": "G", "п": "g", "Р": "H", "р": "h", "Ш": "I", "ш": "i", "О": "J", "о": "j", "Л": "K", "л": "k", "Д": "L", "д": "l", "Ь": "M", "ь": "m", "Т": "N", "т": "n", "Щ": "O", "щ": "o", "З": "P", "з": "p", "Й": "Q", "й": "q", "К": "R", "к": "r", "Ы": "S", "ы": "s", "Е": "T", "е": "t", "Г": "U", "г": "u", "М": "V", "м": "v", "Ц": "W", "ц": "w", "Ч": "X", "ч": "x", "Н": "Y", "н": "y", "Я": "Z", "я": "z", __proto__: null }; this.convTableBackward = { __proto__: null }; for(var c in this.convTableForward) this.convTableBackward[this.convTableForward[c]] = c; this.insertText = function(ta, text, noFocus) { var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement) .editor .QueryInterface(Components.interfaces.nsIPlaintextEditor); if(editor.flags & editor.eEditorReadonlyMask) return; var sTop = ta.scrollTop; var sHeight = ta.scrollHeight; var sLeft = ta.scrollLeft; // var sWidth = ta.scrollWidth; if(noFocus) { var val = ta.value; var ss = ta.selectionStart; ta.value = val.substring(0, ss) + text + val.substring(ta.selectionEnd); var se = ss + text.length; ta.selectionStart = se; ta.selectionEnd = se; } else { if(text) editor.insertText(text); else editor.deleteSelection(0); } ta.scrollTop = sTop + (ta.scrollHeight - sHeight); ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth); }; this.inPrimaryLayout = function(s) { var c; for(var i = 0, l = s.length; i < l; i++) { c = s.charAt(i); if(c in this.convTableForward) return true; if(c in this.convTableBackward) return false; } return false; }; this.switchKeybLayout = function(convTable, s) { var r = "", c; for(var i = 0, l = s.length; i < l; i++) { c = s.charAt(i); r += c in convTable ? convTable[c] : c; } return r; }; this.switchSelKeybLayout = function(s) { try { var ta = document.commandDispatcher.focusedElement; var val = ta.value; var sel = val.substring(ta.selectionStart, ta.selectionEnd); } catch(e) { return; } if(this.noSelUseFullText && !sel) { ta.selectionStart = 0; ta.selectionEnd = val.length; sel = val; } if(!sel) return; sel = this.switchKeybLayout( this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward, sel ); this.insertText(ta, sel); };
Отредактировано Infocatcher (04-09-2009 19:37:08)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Можно было вставлять текст в readonly-поля – исправил.
Только не понял, как вызывать editor.canPaste() – на MDC написано только
А где брать aSelectionType, я не понял.
Если будет глючить – удалить или закомментировать
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
...
1) ...
2) ...
http://pastebin.mozilla-russia.org/101198
?
Infocatcher
А где брать aSelectionType, я не понял.
Я предполагаю, что скорее всего из nsIClipboard
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Я предполагаю, что скорее всего из nsIClipboard
Да, похоже на то.
И я как-то забыл, что есть и другая сторона вставки текста – если в буфере нет данных в нужном формате, сanPaste() вернет false.
А нужно было определить, что в данное текстовое поле можно вставлять текст – то, что сейчас делается через
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Сдаюсь.
У меня есть только один маленький вопрос, там в коде скрипта есть такой фрагмент:
var n=''; var u=''; var c=navigator.lastClicked; if(location.hostname=='forum.ru-board.com'){ while(c.className!='tpc' && c.parentNode){c=c.parentNode}; if(c.className!='tpc')return; var tn=c.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[1]; n='[b]'+c.parentNode.firstChild.innerText.replace(/\n.*/g,'')+'[/b] '; u='[url=+tn.childNodes[5].href+][color=#007777][size=1][u]'+ tn.childNodes[7].innerText.replace(/^ +/,'').replace(/ +$/,'')+'[/u][/size][/color][/url] '; };
Тут, если выделять что-либо в ответе пользователя, то переменной "n" присваивается имя пользователя, а переменной "u" - ссылка на пост с временем этого поста. Как такой код правильно в кнопке сделать?
Отсутствует
Jarichek
Если добавить в раздел "Инициализация"
var THIS = this; window. addEventListener ( 'mouseup', function (e) { if (e. target == THIS) return; navigator ["lastClicked"] = e. target; }, true );
то, скорее всего, будет работать указанный тобою код. Только надо заменить
на
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Jarichek
Ну, попробуй так:
var THIS = this; window. addEventListener ( 'mouseup', function (e) { if (e. originalTarget == THIS) return; navigator ["lastClicked"] = e. originalTarget; }, true );
var n=''; var u=''; var c=navigator.lastClicked; if(gBrowser. contentDocument.location.hostname=='forum.ru-board.com'){ while(c.className!='tpc' && c.parentNode){c=c.parentNode}; if(c.className!='tpc')return; var tn=c.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[1]; n='[b]'+c.parentNode.firstChild.textContent.replace(/\n.*/g,'')+'[/b] '; u='[url=+tn.childNodes[5].href+][color=#007777][size=1][u]'+ tn.childNodes[7].textContent.replace(/^ +/,'').replace(/ +$/,'')+'[/u][/size][/color][/url] '; };
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Jarichek
Обработчик 'mouseup' не на месте
http://pastebin.mozilla-russia.org/101239
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Обработчик 'mouseup' не на месте
Да, спасибо, единственное что пришлось добавить:
n = '' + c.parentNode.firstChild.firstChild.textContent.replace(/\n.*/g, '') + ' ';
чтобы лишнее не появлялось в имени пользователя и все заработало как надо.
Отсутствует