рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ Bexf рд╡рд┐рд╖рдп рдореЗрдВ - рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рд░реВрдкрд░реЗрдЦрд╛, рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдПрдХ рдЕрдЧрд▓реА рдХрдбрд╝реА рд▓рд┐рдЦреВрдВрдЧрд╛ред Bexf рдореЗрдВ рд▓рд┐рдЦрд╛ рдореЗрд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рдореНрдорд╛рди рдореЗрдВ рдореИрдВрдиреЗ рдУрдкреЗрд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдереАрдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд▓реЗрдЦ рдореЗрдВ: рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рдмреЗрдХреНрд╕рдл рдкрд░ рд╣рдмрд░рд╛ рдореАрдЯрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдЪрдПрдо) рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ, рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкреНрд░рдХрд╛рд╢рдиред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдПрдХ рджрд░реНрдЬрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдЕрд▓рдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рднреА рдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИ, рдиреАрдЪреЗ рдореИрдВ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг (рдПрдЪрдПрдо рдлрд╝рд╛рдЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░) рджреЗрддрд╛ рд╣реВрдВ:
/ images/ // , font.png icon-18.png icon-64.png includes/ // . , vendors/ // Bexf.js jquery-1.4.4.min.js jquery.flot-0.6.min.js css/ // CSS style.css js/ // JS options.js popup.js Widget.js config.xml // . . index.html // . . options.html // . popup.html //
рдорд╛рдирдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕
рд╢рд╛рдорд┐рд▓ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ .js / .css рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдУрдкреЗрд░рд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдЬреБрдбрд╝рддреА рд╣реИрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ Greasemonkey рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдПрдХ рдпреВрдЬрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред
// ==UserScript==
// @name --
// @namespace --
// @description --
// @author --
// @include mediafire.com*
// @include http://*.mediafire.com/*
// ==/UserScript==
//
HM рдореЗрдВ рдХреЛрдИ рдкреНрд▓рдЧрдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реИред
config.xml - рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧред рдореБрдЭреЗ рдкреНрд░рд╛рд░реВрдк рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ www.opera.com/docs/apis/extensions/configxmlresourceguide
index.html - рд╕реВрдЪрдХрд╛рдВрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ (рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рд╡рд┐рдХрд▓реНрдк.html - рд╡рд┐рдХрд▓реНрдк, рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ, рддреЛ рдУрдкреЗрд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рдкреЙрдкрдЕрдк рдЬреИрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ html рдкреГрд╖реНрда рд╣реИред
рд╡рд░реНрддрдиреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
рдЖрдЧреЗ рдореИрдВ рд╣рд░ рдЫреЛрдЯреА рдмрд╛рдд, рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдХреЛрдб рдЦреБрд▓рд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕рднреА рд╕реНрд╡рдпрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реВрдЪреА
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд░реАрд░ рдореЗрдВ рдХреБрдЫ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдФрд░ CSS рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Bexf.js рдФрд░ Widget.js (рдореБрдЦреНрдп HM рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рд╡рд┐рдЬреЗрдЯ init рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
init: function () { var self = this; this.font = new global.Image(); this.font.src = "images/font.png"; this.icon = new global.Image(); this.icon.src = "images/icon-18.png"; this.icon.onload = function () { self.button = $.createButton(self._buttonInitOptions) .addToPanel(); self.requestUpdates(); self.initTimer(); }; }
рд╡рд┐рдзрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ: рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЧреЗ рдлреЙрдиреНрдЯ (font.png) рдФрд░ рдмрдЯрди рдЯреЗрдореНрдкрд▓реЗрдЯ (рдЖрдЗрдХрди -18.ng)ред рдмрдЯрди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рддреБрд░рдВрдд рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдбреЗрдЯ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдХрд░реНрдо рдФрд░ рд░реЗрдЯрд┐рдВрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдкрд░ рддрд╕реНрд╡реАрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд┐рддреНрд░ рдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рдЪрд┐рддреНрд░ рдЕрдзрд┐рдХрддрдо 18x18 рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдорд╛рдирдХ рдлрд╝реЙрдиреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдардиреАрдп рд╣реЛрдЧрд╛ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЕрдм рдпрд╣ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдордХ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ) - рдореИрдВрдиреЗ рдПрдХ 3x5 рдмрдирд╛рдпрд╛: 0-9 рд╕реНрдкреНрд░рд╛рдЗрдЯ рдлрд╝реЙрдиреНрдЯ, рд╡рд╛рдпреБрд╕реЗрдирд╛ рдФрд░ рдПрдХ рдХреЙрдореЛрдб / рдбреЙрдЯ рдиреЗ рдлреЙрдиреНрдЯрдбреЗрдордиреНрд╕реЗрд╕ рдореЗрдВ рд╕рднреА рдкрддреНрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, index.html рдореЗрдВ рдХреЛрдИ рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреИрдирд╡рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЖрдЗрдХрди рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдХреИрдирд╡рд╛рд╕.toDataURL () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдиреАрдЪреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ 2 рддрд░реАрдХреЗ рд╣реИрдВ:
_drawText: function (ctx, x, y, text) { text = text.split(''); for (var i = 0, c = text.length, g; i < c; i+= 1) { g = this.fontDemensions[text[i]]; ctx.drawImage(this.font, gx, gy, gw, gh, x, y, gw, gh); x += gw; } }, drawIcon: function (karma, rating) { karma += ''; rating += ''; var canvas = document.createElement('canvas'); // Create an empty canvas element canvas.setAttribute('width', '18px'); canvas.setAttribute('height', '18px'); // Copy the image contents to the canvas var ctx = canvas.getContext("2d"), offset; ctx.drawImage(this.icon, 0, 0); // Draw karma offset = 8 - (2 * karma.length) + (karma.indexOf('.') >= 0 ? 2 : 0) + (karma.indexOf(',') >= 0 ? 2 : 0); this._drawText(ctx, offset, 2, karma); // Draw rating offset = 8 - (2 * rating.length) + (rating.indexOf('.') >= 0 ? 2 : 0) + (rating.indexOf(',') >= 0 ? 2 : 0); this._drawText(ctx, offset, 11, rating); return canvas.toDataURL(); }
рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрдЯрди рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдПрдордмреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ)
$.disconnect(function () { Widget.requestUpdates.call(Widget); Widget.initTimer.call(Widget); });
Widget.js рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рд╣рдм-рдпреВрдЬрд░ рдкреЗрдЬ (рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдПрдХреНрд╕рдПрдЪрдЖрд░), рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣, рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣реИред
рд╡рд┐рдХрд▓реНрдк
рд╡рд┐рдХрд▓реНрдк.html - рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд HTML рдлрд╝рд╛рдЗрд▓, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ widget.preferences (Bexf.opt) - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛ред
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рд╕рднреА рдлрд╝реАрд▓реНрдб рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ: рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрдм "рд╕рд╣реЗрдЬреЗрдВ" рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдЬреЗрдЯ.рдкреНрд░рджрд░реНрд╢рдиреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдкреЙрдк рдЕрдк рд╡рд┐рдВрдбреЛ
popup.html - рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА (рд▓реЗрдХрд┐рди рдПрдХ рд╕реАрдорд┐рдд рдЖрдХрд╛рд░ рдХреА) рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рднреА рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдмрдЯрди рдкреЙрдкрдЕрдк рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреЙрдкрдЕрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЬрдм рдЗрд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреЙрдкрдЕрдк рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╕рднреА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдПрдЪрдПрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреЙрдкрдЕрдк рдореЗрдВ рдкрд┐рдЫрд▓реЗ 30 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рдЧреНрд░рд╛рдлрд╝ рдХреЛ jQuery рдХреЗ рдлрд╝реНрд▓реЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ (рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ Google рдЪрд╛рд░реНрдЯ API рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ GC API рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рдирд╣реАрдВ рд╣реВрдВ)ред рдкреЙрдкрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдБрдХрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ widget.preferences рдПрдХ DOMStorage рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) Bexf.opt ('рд╕реНрдЯреЗрдЯ') рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░реАрдореЗрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ jQuery Flot рд╕рдордЭрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рдирд╣реАрдВред
рдкрд░реАрдХреНрд╖рдг
рдУрдкреЗрд░рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдЗрд╕рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ: рд╣рдо config.xml рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣ рдПрдХ рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рддрд░рд╣ рдУрдкреЗрд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореИрдиреЗрдЬрд░ рдореЗрдВ рд░реАрд▓реЛрдб (рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ) / рдЕрдХреНрд╖рдо / рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд▓реБрдЧрд╛рдВрд╕реНрдХ рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ , "рдбреНрд░реИрдЧрдирдлрд╝реНрд▓ рдЕрднреА рдЙрдирдХреЗ (рдПрд░рд░реНрд╕) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдУрдкреЗрд░рд╛.рдкреЛрд╕реНрдЯ рдИрдпрд░рд░реВрдЯ рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рддреНрд░реБрдЯрд┐ рдХрдВрд╕реЛрд▓ (Ctrl + Shift + O) рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреНрд░реИрдЧрдирдлрд╝рд┐рдЧрд░ рдЕрднреА рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ opera.postError рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред
рдкреНрд░рдХрд╛рд╢рди
1. рдЖрдкрдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
2. рдПрдХ рдУрдкреЗрд░рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ (рдпрд╣ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ) - my.opera.com/community/signup
3. рдПрдХ рд╢реАрд░реНрд╖рдХ, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг, рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЖрдУ
4. рдХрдо рд╕реЗ рдХрдо 1 рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрдирд╛рдПрдВ
5. рдЖрдЗрдХрдиреЛрдВ 64x64 (рдЖрд╡рд╢реНрдпрдХ) 18x18 (рдпрджрд┐ рдмрдЯрди рд╣реИрдВ) рдбреНрд░рд╛
6. рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрдУ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1.0
7. рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ .oex - рдирд╛рдорд╛рдВрдХрд┐рдд .zip рдореЗрдВ рдкреИрдХ рдХрд░реЗрдВ
рдПрдХ рдмрд╛рд░ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, addons.opera.com/developer/extensions/loadload рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдореЙрдбрд░реЗрдЯ (1-2 рджрд┐рди) рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЕрджреНрдпрддрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рднреА рдореЙрдбрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (1-2 рджрд┐рди)ред рдФрд░ рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╣реБрдд рд▓рдЧрд╛рддрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордзреНрдпрд╕реНрде рдЖрдкрдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
Addons.opera.com/developer/guidelines рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВ
рдЖрджрд░
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рд╖рдп www.opera.com/addons/extensions/develop
рдкреНрд░рд╛рд░реВрдк config.xml www.opera.com/docs/apis/extensions/configxmlresourceguide
Dev.opera.com/articles/view/opera-extensions-developer-workflow рд╡рд┐рдХрд╛рд╕ рдореЛрдб
рдПрдХреНрд╕рдЯреЗрдВрд╢рди API www.opera.com/docs/apis/extensions
рдмреАрдПрдХреНрд╕рдПрдл - рдПрдЪрдПрдо habrahabr.ru/blogs/opera/111461 рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдврд╛рдВрдЪрд╛
Dev.opera.com/articles/view/hands-on-building-an-opera-exture рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг
рдУрдкреЗрд░рд╛ рдХреЗ рдбреЙрдХ рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕реЛрдирд┐рдХрдЧреИрд╕ рд╣реИрдмрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг: рдореИрд╕реЗрдЬрд┐рдВрдЧ , рд╡рд┐рдВрдбреЛрдЬ , рдпреВрдЬрд░рдЬ , рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдУрдкреЗрд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди , рдмрдЯрди, рдмреИрдЬ рдФрд░ рдкреЙрдк-рдЕрдкреНрд╕
рдПрдЪрдПрдо рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг (рдореЙрдбрд░реЗрдЯ) рдУрдкреЗрд░рд╛ рдРрдбрдСрди рдХреЗ рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редopera.com/addons/extensions/details/habra-meter
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдмреНрд░рд╛рдЙрдЬрд╝рд░- рдХрд╕реНрдЯрдореЗрдВрдЯреНрд╕-framework.googlecode.com/files/habra-meter-1.1.1.oex (рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд╝рд┐рдк)
рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЕрдм, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдм рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
PS рдПрдХ рд╣рд╛рдмрд░рд╛ рдореАрдЯрд░ рдордд рд▓рдЧрд╛рдЗрдП - рдХрд░реНрдо рдХреЗ рдирд┐рд░рдВрддрд░ рдЕрд╡рд▓реЛрдХрди рд╕реЗ рдорд╛рдирд╕рд┐рдХ рдмреАрдорд╛рд░реА рд╣реЛрддреА рд╣реИред рдпрд╣ рдореЗрд░реЗ Bexf рдврд╛рдВрдЪреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИ