рд╣рдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдЙрдирдХреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЖрдк рдШреБрдЯрдиреЗ рдкрд░ рдПрдлрдПрдл 4 рдХреЛ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдирд╛ рдХрдИ рдмрд╛рд░ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реБрдЦрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд▓реЗрдЦрди рд╣рдореЗрд╢рд╛ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдПрдордбреАрдПрди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреЛрдиреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ, рдореИрдВ рдпрд╛ рддреЛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдирд╣реАрдВ рдкрд╛ рд╕рдХрд╛ ... рд╕рднреА рдЙрддреНрдкрдиреНрди (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдореЗрдВ) рдкреНрд░рдзрд╛рди - рдиреЗ рдЗрд╕ рдорд┐рдердХ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╢реНрд░рдорд╕рд╛рдзреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдЧреБрд░реБ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИред рдпрд╣ рдорд┐рдердХ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рдо рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдХреЛ рд╕рд╣реА рдХрд░реЗрдЧрд╛, рдорджрдж рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлрд░ рд╕реЗрд╡рд╛ рдХреА рдУрд░ред



рдХрдо рд╢реБрд░реБрдЖрдд


рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рдПрдлрдПрдл 4 рдореЗрдВ рд╣реА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдлреЙрд░реНрдо appversion>=4.0 рдХреЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдиреВрдбрд▓реНрд╕ рд▓рд┐рдЦрдирд╛ред
So.
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдХрдВрдХрд╛рд▓ рдмрдирд╛рдПрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдорд╛рд░рд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрд╛, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдорджрдж рдорд╛рдБрдЧреЗрдВ ред рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЛрд▓реНрдб рдореЗрдВ рднрд░рддреЗ рд╣реИрдВ - рдФрд░ рд╕рдорд╛рдкреНрдд рдХрдВрдХрд╛рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕реЗрдЯрдЕрдк рдбрд╛рдпрд▓реЙрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЪреБрдирд╛, рдЯреВрд▓рдмрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рдеред рдпрд╣рд╛рдБ рдЬрдирд░реЗрдЯрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ:

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдкреЗрдбрд╝

рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдЗрдХрди рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╕реЗ рдЙрдзрд╛рд░ рд▓реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рдо рдХрд░реЗрдЧреА (рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА skin рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ)ред рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдмрдЯрди рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдФрд░ /chrome/locale/en-US/overlay.dtd рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреВрд▓рдЯрд┐рдк рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ:
 <!ENTITY typographToolbarButton.label "Typo!"> <!ENTITY typographToolbarButton.tooltip "Proceed typography of selected text against Lebedev's tool"> 

рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдЖрдЗрдХрди рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реЛрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 pushd chrome/skin && mv favicon.png toolbar-button.png && popd 

рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рджрдмрд╛рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред

рдХреБрдЫ рдХреЛрдб


рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдпрджрд┐ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ ( textarea ) рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╛рда рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╡рд╣рд╛рдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЯрд╛рдЗрдк textarea ред рдпрджрд┐ рдкрд╛рда рдЪрдпрдирд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреА рд╕рд╛рдордЧреНрд░реА рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдзреНрдпрд╛рди рдХрд╣реАрдВ рдФрд░ рд╣реИ - рд╣рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ :-)ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╣ рд╕рдмрд╕реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ)ред
рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд╕рднреА рд╕рдВрдкрд╛рджрди /chrome/content/overlay.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред
рдореИрдВрдиреЗ рдЗрд╕ рдЬрд╛рджреВ рдХреЛ рдХрд╣реАрдВ рдХрд╣реАрдВ MDN рдХреЗ рдХрдЯреЛрд░реЗ рдореЗрдВ рдЦреЛрджрд╛:
 var getClipboard = function (flavor) { if (!flavor || flavor == "") flavor = "text/unicode"; var trans = Components.classes["@mozilla.org/widget/transferable;1"] .createInstance(Components.interfaces.nsITransferable); var clip = Components.classes["@mozilla.org/widget/clipboard;1"] .getService(Components.interfaces.nsIClipboard); if (!clip || !trans) return ''; trans.addDataFlavor(flavor); clip.getData(trans, clip.kGlobalClipboard); var str = new Object(); var strLength = new Object(); try { trans.getTransferData(flavor, str, strLength); if (str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString); } catch (e) { // it's OK, skipping str = null; } return str ? str.data.substring(0, strLength.value / 2) : ''; } 

рд╣рдо рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреА рд╕рд╛рдордЧреНрд░реА, рдпрд╛ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд▓рдЧрддрд╛ рд╣реИ рдпрд╣рд╛рдБ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рдЗрдирдкреБрдЯ рдлрд╝реЛрдХрд╕ рдХреЛ рднреА рдкрдХрдбрд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ (рдпрд╣ рдХреЛрдб, рдЗрд╕рдХреА рддреБрдЪреНрдЫрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛)ред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкрд╛рда рдХреЛ рдореБрджреНрд░рдг рд╕реЗрд╡рд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 typo : function () { var focused = document.commandDispatcher.focusedElement; if (!focused || focused.tagName.toLowerCase() != 'textarea') { return; } if (focused.selectionStart != focused.selectionEnd ) { text = focused.value.substring(focused.selectionStart, focused.selectionEnd); } else { text = getClipboard(); } text = text.replace (/&/g, '&'); text = text.replace (/</g, '<'); text = text.replace (/>/g, '>'); var xmlRequest = '<?xml version="1.0" encoding="UTF-8"?>' + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' + 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' + 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + '<soap:Body>' + '<ProcessText xmlns="http://typograf.artlebedev.ru/webservices/">' + '<text>' + text + '</text>' + '<entityType>' + 3 + '</entityType>' + '<useBr>' + 0 + '</useBr>' + '<useP>' + 0 + '</useP>' + '</ProcessText>' + '</soap:Body>' + '</soap:Envelope>'; var req = new XMLHttpRequest(); req.open('POST', 'http://typograf.artlebedev.ru/webservices/typograf.asmx', true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if (req.status == 200) { var response = req.responseText; var re = /<ProcessTextResult>\s*((.|\n)*?)\s*<\/ProcessTextResult>/m; response = re.exec (response); response = RegExp.$1; response = response.replace (/>/g, '>'); response = response.replace (/</g, '<'); response = response.replace (/&/g, '&'); insertText(response, focused); } else { // smth went wrong тАФ just skip it } } }; req.send(xmlRequest); } 

рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдпрд╣ рдмрдЯрди рджрдмрд╛рдП рдЧрдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ typo рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
 onToolbarButtonCommand: function(e) { typograph.typo(); } 

рдФрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрдмрд╛рдбрд╝ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд░реЗрдВ:
 #!/bin/bash if [ -e build ]; then rm -rf build; fi mkdir -p build cp -r install.rdf chrome.manifest chrome defaults build pushd build/chrome >/dev/null && zip -r typograph.jar content/* skin/* locale/* && popd >/dev/null || echo 'Unable to produce jar :-(\n' pushd build && zip -r typograph-4.0.xpi install.rdf chrome.manifest chrome/* defaults/* && popd >/dev/null || echo 'Unable to produce .xpi :-(\n' if [ -e dist ]; then rm -rf dist; fi mkdir -p dist cp build/typograph-4.0.xpi dist/ 


рд╕рдВрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╡рд┐рд╕реНрддрд╛рд░ рд▓реЛрдЧреЛрдВ рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред XPI рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЬрд╝рд┐рдк рд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рд╕реНрд╡рдпрдВ рдЕрдВрджрд░ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In114754/


All Articles