From 4b1a9203c547c019fc5398082ae19a3f3d4c3efe Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:41:15 -0500 Subject: initial commit --- files/bn/mozilla/add-ons/amo/policy/index.html | 21 +++ files/bn/mozilla/add-ons/code_snippets/index.html | 194 +++++++++++++++++++++ .../add-ons/code_snippets/toolbar/index.html | 59 +++++++ files/bn/mozilla/add-ons/index.html | 95 ++++++++++ .../index.html | 91 ++++++++++ files/bn/mozilla/add-ons/sdk/index.html | 102 +++++++++++ .../adding_a_button_to_the_toolbar/index.html | 64 +++++++ files/bn/mozilla/add-ons/sdk/tutorials/index.html | 175 +++++++++++++++++++ .../add-ons/sdk/tutorials/installation/index.html | 78 +++++++++ .../add-ons/sdk/tutorials/logging/index.html | 38 ++++ .../add-ons/sdk/tutorials/unit_testing/index.html | 114 ++++++++++++ files/bn/mozilla/add-ons/webextensions/index.html | 91 ++++++++++ .../what_are_webextensions/index.html | 95 ++++++++++ .../your_first_webextension/index.html | 143 +++++++++++++++ .../index.html" | 60 +++++++ .../obsolete/index.html" | 9 + 16 files changed, 1429 insertions(+) create mode 100644 files/bn/mozilla/add-ons/amo/policy/index.html create mode 100644 files/bn/mozilla/add-ons/code_snippets/index.html create mode 100644 files/bn/mozilla/add-ons/code_snippets/toolbar/index.html create mode 100644 files/bn/mozilla/add-ons/index.html create mode 100644 files/bn/mozilla/add-ons/performance_best_practices_in_extensions/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/tutorials/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/tutorials/installation/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/tutorials/logging/index.html create mode 100644 files/bn/mozilla/add-ons/sdk/tutorials/unit_testing/index.html create mode 100644 files/bn/mozilla/add-ons/webextensions/index.html create mode 100644 files/bn/mozilla/add-ons/webextensions/what_are_webextensions/index.html create mode 100644 files/bn/mozilla/add-ons/webextensions/your_first_webextension/index.html create mode 100644 "files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/index.html" create mode 100644 "files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/obsolete/index.html" (limited to 'files/bn/mozilla/add-ons') diff --git a/files/bn/mozilla/add-ons/amo/policy/index.html b/files/bn/mozilla/add-ons/amo/policy/index.html new file mode 100644 index 0000000000..5fffee1dc8 --- /dev/null +++ b/files/bn/mozilla/add-ons/amo/policy/index.html @@ -0,0 +1,21 @@ +--- +title: AMO Policies +slug: Mozilla/Add-ons/AMO/Policy +tags: + - NeedsTranslation + - TopicStub +translation_of: Mozilla/Add-ons/AMO/Policy +--- +

{{AddonSidebar}}

+ +

Mozilla is committed to ensuring a great add-ons experience for our users and developers. Please review the policies below before submitting your add-on.

+ +
+
Developer Agreement
+
Effective January 5, 2016
Review Process
+
Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.
Featured Add-ons
+
How up-and-coming add-ons become featured and what's involved in the process.
Contacting us + +

How to get in touch with us regarding these policies or your add-on.

+ +
diff --git a/files/bn/mozilla/add-ons/code_snippets/index.html b/files/bn/mozilla/add-ons/code_snippets/index.html new file mode 100644 index 0000000000..f104d2257b --- /dev/null +++ b/files/bn/mozilla/add-ons/code_snippets/index.html @@ -0,0 +1,194 @@ +--- +title: Code snippets +slug: Mozilla/Add-ons/Code_snippets +tags: + - Add-ons + - Code snippets + - Extensions + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Code_snippets +--- +

এটা বিভিন্ন মোজিলা অ্যাপলিকেশনের এক্সটেনশন ডেভেলপারদের জন্য দরকারি কিছু কোড স্নিপেট (ছোট ছোট কোডের নমুনা) এর তালিকা। এরমদ্ধে অনেক গুলো নমুনা স্বয়ং মোজিলার কোডে তো ব্যবহার হয়-ই আবার XULRunner অ্যাপ্লিকেশনের মধ্যেও ব্যবহার করা যায়।

+

কিভাবে প্রাথমিক কাজগুলো করতে হয়, এই নমুনাগুলো সেটা বর্ণনা করে।

+

সাধারন বিষয়বস্তু

+
+
+ Examples and demos from MDN articles
+
+ A collection of examples and demos from articles.
+
+ Windows code
+
+ Opening and manipulating windows
+
+ Toolbar
+
+ Toolbar related code
+
+ Sidebar
+
+ Sidebar related code
+
+ Forms
+
+ Forms related code
+
+ XML
+
+ Code used to parse, write, manipulate, etc. XML
+
+ File I/O
+
+ Code used to read, write and process files
+
+ Drag & Drop
+
+ Code used to setup and handle drag and drop events
+
+ Dialogs
+
+ Code used to display and process dialog boxes
+
+ Alerts and Notifications
+
+ Modal and non-modal ways to notify users
+
+ Preferences
+
+ Code used to read, write, and modify preferences
+
+ JS XPCOM
+
+ Code used to define and call XPCOM components in JavaScript
+
+ Running applications
+
+ Code used to run other applications
+
+ <canvas> related
+
+ WHAT WG Canvas-related code
+
+ Signing a XPI
+
+ How to sign an XPI with PKI
+
+ Threads
+
+ Performing background operations and delaying execution while background operations complete
+
+ Miscellaneous
+
+ Miscellaneous useful code fragments
+
+ HTML to DOM
+
+ Using a hidden browser element to parse HTML to a window's DOM
+
+

জাভাস্ক্রিপ্ট লাইব্রেরি সমূহ

+

Here are some JavaScript libraries that may come in handy.

+
+
+ StringView
+
+ A library that implements a StringView view for JavaScript typed arrays. This lets you access data in typed arrays using C-like string functions.
+
+

ব্রাউজার-ওরিয়েন্টেড কোড

+
+
+ Tabbed browser code (Firefox/SeaMonkey)
+
+ Basic operations, such as page loading, with the tabbed browser, which is the heart of Mozilla's browser applications
+
+ Cookies
+
+ Reading, writing, modifying, and removing cookies
+
+ Page Loading
+
+ Code used to load pages, reload pages, and listen for page loads
+
+ Interaction between privileged and non-privileged code
+
+ How to communicate from extensions to websites and vice-versa.
+
+ Downloading Files
+
+ Code to download files, images, and to monitor download progress
+
+ Password Manager
+
+ Code used to read and write passwords to/from the integrated password manager
+
+ Bookmarks
+
+ Code used to read and write bookmarks
+
+ JavaScript Debugger Service
+
+ Code used to interact with the JavaScript Debugger Service
+
+

এসভিজি

+
+
+ General
+
+ General information and utilities
+
+ SVG Animation
+
+ Animate SVG using JavaScript and SMIL
+
+ SVG Interacting with Script
+
+ Using JavaScript and DOM events to create interactive SVG
+
+ Embedding SVG in HTML and XUL
+
+ Using SVG to enhance HTML or XUL based markup
+
+

XUL উইজেট সমূহ

+
+
+ HTML in XUL for Rich Tooltips
+
+ Dynamically embed HTML into a XUL element to attain markup in a tooltip
+
+ Label and description
+
+ Special uses and line breaking examples
+
+ Tree
+
+ Setup and manipulation of trees using XUL and JS
+
+ Scrollbar
+
+ Changing style of scrollbars. Applies to scrollbars in browser and iframe as well.
+
+ Autocomplete
+
+ Code used to enable form autocomplete in a browser
+
+ Boxes
+
+ Tips and tricks when using boxes as containers
+
+ Tabbox
+
+ Removing and manipulating tabs in a tabbox
+
+

উইন্ডোজ নির্দিষ্ট

+
+
+ Finding Window Handles (HWND) (Firefox)
+
+ How to use Windows API calls to find various kinds of Mozilla window handles. Window handles can be used for IPC and Accessibility purposes.
+
+ Using the Windows Registry with XPCOM
+
+ How to read, write, modify, delete, enumerate, and watch registry keys and values.
+
+ +

The content at MozillaZine Example Code is slowly being moved here, but you can still find useful examples there for now.

diff --git a/files/bn/mozilla/add-ons/code_snippets/toolbar/index.html b/files/bn/mozilla/add-ons/code_snippets/toolbar/index.html new file mode 100644 index 0000000000..ce7679b8ca --- /dev/null +++ b/files/bn/mozilla/add-ons/code_snippets/toolbar/index.html @@ -0,0 +1,59 @@ +--- +title: টুলবার +slug: Mozilla/Add-ons/Code_snippets/Toolbar +tags: + - NeedsReview +translation_of: Archive/Add-ons/Code_snippets/Toolbar +--- +

টুলবার বাটন সংযোজন

+

এখানে দুইটি টিউটোরিয়াল রয়েছে :

+

একটি টিউটোরিয়াল এর জন্য একটি বিশেষ পদক্ষেপ রয়েছে: কাষ্টম টুলবার বাটন একটি টিউটোরিয়াল বর্ণনা করার জন্য ইতোমধ্যে আপনার উন্নয়ন বুনিয়াদি একটি টুলবার বাটন যুক্ত করা প্রয়োজন: টুলবার বাটন তৈরি করা

+

বাটন যুক্ত করার পদ্ধতি :

+

আপনি যখন আপনার এক্সটেনশন স্থাপন এবং একটি টুলবার বাটন অভেরলেইং দ্বারা যুক্ত করা হয়, এটি ডিফল্ট অবস্থায় পাওয়া যায় না । ব্যবহারকারীকে বাটনটি টুলবারে টেনে আনতে হয়। নিম্নলিখিত কোড টুলবারে আপনার বাটন স্থাপন করবে। This should only be done on the first run of your add-on after installation so that if the user decides to remove your button, it doesn't show up again every time they start the application.

+

নোট

+ +
/**
+ * Installs the toolbar button with the given ID into the given
+ * toolbar, if it is not already present in the document.
+ *
+ * @param {string} toolbarId The ID of the toolbar to install to.
+ * @param {string} id The ID of the button to install.
+ * @param {string} afterId The ID of the element to insert after. @optional
+ */
+function installButton(toolbarId, id, afterId) {
+    if (!document.getElementById(id)) {
+        var toolbar = document.getElementById(toolbarId);
+
+        // If no afterId is given, then append the item to the toolbar
+        var before = null;
+        if (afterId) {
+            let elem = document.getElementById(afterId);
+            if (elem && elem.parentNode == toolbar)
+                before = elem.nextElementSibling;
+        }
+
+        toolbar.insertItem(id, before);
+        toolbar.setAttribute("currentset", toolbar.currentSet);
+        document.persist(toolbar.id, "currentset");
+
+        if (toolbarId == "addon-bar")
+            toolbar.collapsed = false;
+    }
+}
+
+if (firstRun) {
+    installButton("nav-bar", "my-extension-navbar-button");
+    // The "addon-bar" is available since Firefox 4
+    installButton("addon-bar", "my-extension-addon-bar-button");
+}
+
+

আরো দেখুন

+ diff --git a/files/bn/mozilla/add-ons/index.html b/files/bn/mozilla/add-ons/index.html new file mode 100644 index 0000000000..1d0f1b6661 --- /dev/null +++ b/files/bn/mozilla/add-ons/index.html @@ -0,0 +1,95 @@ +--- +title: অ্যাড-অনস +slug: Mozilla/Add-ons +tags: + - Add-ons + - NeedsTranslation + - TopicStub +translation_of: Mozilla/Add-ons +--- +
মোজিলা অ্যাপ্লিকেশান গুলোর পরিবর্তন এবং পরিবর্ধন 
+ +

অ্যাড-অন, গেকো ভিত্তিক অ্যাপ্লিকেশান যেমন: ফায়ারফক্স, সীমাঙ্কী এবং থান্ডারবার্ড এ নতুন কার্যকারিতা যোগ করে। মূলত দুই ধরণের অ্যাড-অন আছে: এক্সটেনশন, অ্যাপ্লিকেশানে নতুন ধরণের ফিচার যুক্ত করে, আর থিম অ্যাপ্লিকেশানের ইউজার ইন্টারফেস পরিবর্তন করে। 

+ +

এক্সটেনশন এবং থিম উভয়ের জন্যই মোজিলা addons.mozilla.org তে একটি রিপোজিটরি পরিচালনা করে যা এএমও  নামে পরিচিত। আপনি যখন এএমও তে অ্যাড-অন জমা দেন , তখন সেগুলোকে পর্যালোচনা করা হয় তারপর সেগুলো পর্যালোচনাতে উত্তীর্ণ হলে ব্যাবহারকারির কাছে পৌঁছে।আপনাকে এএমও তে অ্যাড-অন জমা দিতে হবেনা, কিন্তু আপনি যদি দেন, তাহলে ব্যাবহারকারিরা আত্মবিশ্বাসী হতে পারেন যে, সেগুলো রিভিও (পর্যালোচনা) করা হয়েছে । এবং আপনি দরকারি অ্যাড-অন এর উৎস হিসেবে এএমও এর দৃশ্যমানতা এর সুবিধা নিতে পারেন। 

+ +

যেসকল অ্যাপ্লিকেশান অ্যাড-অন কে হোস্ট করে অ্যাড-অন তাদের আচরণকে প্রবলভাবে প্রভাবিত করতে পারে। আমরা এক ঝাঁক দিকনির্দেশনা তৈরি করেছি যাতে ব্যাবরহারকারিদের ভাল অভিজ্ঞতা দিতে পারি । সকল ধরণের অ্যাড-অনের জন্যই এই দিকনির্দেশনা প্রযোজ্য, তা addons.mozilla.org  তে হোস্ট করা হোক বা অন্য কোথাও হোস্ট করা হোক।

+ +
+

এক্সটেনশন 

+ +

এক্সটেনশন ফায়ারফক্স এবং থান্ডার-বার্ড এর মত মোজিলা অ্যাপ্লিকেশান গুলোতে নতুন কার্যকারিতা যোগ করে। এরা ব্রাউজারে নতুন ফিচার যুক্ত করতে পারে, যেমন: বিভিন্ন উপায়ে ট্যাবগুলোকে পরিচালনা করা। এবং তারা বিশেষ বিশেষ ওয়েবসাইটের ব্যাবহারযোগ্যতা অথবা নিরাপত্তা বাড়াতে ওয়েব কনটেন্টের পরিবর্তন করতে সক্ষম। 

+ +

এক্সটেনশন তৈরি করতে আপনি তিনটি ভিন্ন ভিন্ন কৌশল ব্যাবহার করতে পারেন: অ্যাড-অন এসডিকে ভিত্তিক এক্সটেনশন, ম্যানুয়ালী বুটস্ত্র্যাপড রিস্টার্ট বিহীন এক্সটেনশন এবং ওভারলে এক্সটেনশন।  

+ + + +

আপনি যদি পারেন তবে, অ্যাড-অন এসডিকে  ব্যাবহার করা সমীচীন হবে, যা রি স্টার্ট বিহীন মেকানিজম ব্যাবহার করে কিন্তু নির্দিষ্ট কিছু কাজকে সহজ করে এবং তারপর নিজেকে পরিষ্কার করে। যদি অ্যাড-অন এসডিকে আপনার প্রয়োজনের তুলনায় পর্যাপ্ত না হয় তবে, এর পরিবর্তে ম্যানুয়াল রি স্টার্ট বিহীন এক্সটেনশন ইমপ্লিমেন্ট করতে পারেন। বর্তমানে অধিকাংশ ক্ষেত্রে ওভারলে এক্সটেনশন অপ্রচলিত , যদিও এখনো এগুলোর প্রাচুর্য রয়েছে। 

+ +

কোন কৌশল অবলম্বন করবেন এ সম্পর্কে আরও জানতে পড়ুন তাদের তুলনা। 

+ +
+
+

ভাল চর্চা 

+ +
+
আপনি যেভাবেই এক্সটেনশন ডেভেলপ করুন না কেন, আপনাকে কিছু দিক নির্দেশ মেনে চলতে হবে, যাতে ব্যাবহারকারিরা একটা ভাল অভিজ্ঞতা পান। 
+
পারফরমেন্স 
+
নিশ্চিত করা যে আপনার এক্সটেনশন দ্রুত, প্রতিক্রিয়াশীল এবং মেমরি এফিসিয়েন্ট। 
+
নিরাপত্তা 
+
নিশ্চিত করা যে আপনার এক্সটেনশন ইউজারকে ক্ষতিকারক ওয়েবসাইটে  প্রবেশ করাবে না। 
+
ভদ্রতা 
+
নিশ্চিত করা যে আপনার এক্সটেনশন অপর এক্সটেনশনের সাথে ভালো ভাবে কাজ করতে পারে কিনা। 
+
+
+ +
+

নির্দিষ্ট-অ্যাপ্লিকেশান

+ +

অধিকাংশ ডকুমেন্টেশান ধরে নেয় যে আপনি ফায়ারফক্স ডেক্সটপের জন্য অ্যাড-অন ডেভেলপ করছেন। আপনি যদি গেকো ভিত্তিক অন্য অ্যাপ্লিকেশান এর জন্য ডেভেলপ করতে চান, তাহলে আপনাকে তাদের মধ্যে মুখ্য পার্থক্য গুলো জানতে হবে। 

+ +
+
থান্ডারবার্ড 
+
থান্ডার বার্ড মেইল ক্লায়েন্ট এর জন্য এক্সটেনশন ডেভেলপ করা।  
+
ফায়ারফক্স এন্ড্রয়েড
+
ফায়ারফক্স এন্ড্রয়েডের জন্য এক্সটেনশন ডেভেলপ করা। 
+
সীমাঙ্কী
+
সীমাঙ্কী সফটওয়্যার সুইটের জন্য এক্সটেনশন ডেভেলপ করা। 
+
+
+
+ +
+

থিম 

+ +

থিম হল অ্যাড-অন যারা অ্যাপ্লিকেশানের ইউজার ইন্টারফেস পরিবর্তন করে। দুই ধরণের থিম আছে: লাইটওয়েট এবং সম্পূর্ণ থিম। 

+ +
+
+

লাইটওয়েট থিম গুলো সম্পূর্ণ থিমের চেয়ে সহজে ইমপ্লিমেন্ট করা যায়, কিন্তু খুব সীমিত পরিবর্তন প্রদান করে।    

+
+ +
+

সম্পূর্ণ থিম দ্বারা অ্যাপ্লিকেশান ইউআই তে গভীর পরিবর্তন আনা যায়। সম্পূর্ণ থিমের ডকুমেন্টেশান গুলো অনেক পুরনো, কিন্তু সম্ভাব্য আপডেটের জন্য এখানে লিঙ্ক দেয়া হবে।  

+
+
+ +
+

অন্যান্য ধরণের অ্যাড-অন

+ +

সার্চইঞ্জিন প্লাগইন হল সরল এবং খুব নির্দিষ্ট ধরণের অ্যাড-অন: তারা ব্রাউজারের সার্চবারে নতুন সার্চইঞ্জিন যুক্ত করে । 

+ +

যেসকল কন্টেন্টকে অ্যাপ্লিকেশান স্বাভাবিক ভাবে সাপোর্ট করেনা তাদের বোঝার জন্য প্লাগইনের সাহায্য দরকার হয়। আমরা এসকল প্লাগ ইনের গভীরতা বাড়াতে কাজ করছি, কেননা এদের স্থায়িত্ব, পারফরমেন্স এবং নিরাপত্তার সমস্যাপূর্ণ ইতিহাস রয়েছে।

+ +

{{AddonSidebar}}

+ + + + diff --git a/files/bn/mozilla/add-ons/performance_best_practices_in_extensions/index.html b/files/bn/mozilla/add-ons/performance_best_practices_in_extensions/index.html new file mode 100644 index 0000000000..f9cd7b926e --- /dev/null +++ b/files/bn/mozilla/add-ons/performance_best_practices_in_extensions/index.html @@ -0,0 +1,91 @@ +--- +title: Performance best practices in extensions +slug: Mozilla/Add-ons/Performance_best_practices_in_extensions +translation_of: Archive/Add-ons/Performance_best_practices_in_extensions +--- +

 ফায়ারফক্সের একটি সব চেয়ে বড় সুবিধা হল is its extreme extensibility. Extensions can do almost anything. There is a down side to this: poorly written extensions can have a severe impact on the browsing experience, including on the overall performance of Firefox itself. This article offers some best practices and suggestions that can not only improve the performance and speed of your extension, but also of Firefox itself.

+

Improving startup performance

+

Extensions are loaded and run whenever a new browser window opens. That means every time a window opens, your extension can have an impact on how long it takes the user to see the content they're trying to view. There are several things you can do to reduce the amount of time your extension delays the appearance of the user's desired content.

+

Load only what you need, when you need it

+

Don't load things during startup that are only needed if the user clicks a button, or if a given preference is enabled when it's not. If your extension has features that only work when the user has logged into a service, don't load the resources for those features until the user actually logs in.

+

Use JavaScript code modules

+

You can create your own JavaScript code modules incorporating sets of features that are only needed under specific circumstances. This makes it easy to load chunks of your extension on the fly as needed, instead of loading everything all at once.

+

This has an advantage over XPCOM modules, which are always loaded when your extension starts up.

+

Of course, for extremely simple extensions it may not make sense to modularize your code.

+

Defer everything that you can

+

Most extensions have a load event listener in the main overlay that runs their startup functions. Do as little as possible here. The browser window is blocked while your add-on's load handler runs, so the more it does, the slower Firefox will appear to the user.

+

If there is anything that can be done even a fraction of a second later, you can use an {{ interface("nsITimer") }} or the {{ domxref("window.setTimeout()") }} method to schedule that work for later.  Even a short delay can have a big impact.

+

General Performance Tips

+

Avoid Creating Memory Leaks

+

Memory leaks require the garbage collector and the cycle collector to work harder, which can significantly degrade performance.

+

Zombie compartments are a particular kind of memory leak that you can detect with minimal effort.  See the Zombie compartments page, especially the Proactive checking of add-ons section.

+

See Common causes of memory leaks in extensions for ways to avoid zombie compartments and other kinds of leaks.

+

As well as looking for these specific kinds of leaks, it's worth exercising your extension's functionality and checking the contents of about:memory for any excessive memory usage.  For example, bug 719601 featured a "System Principal" JavaScript compartment containing 100s of MBs of memory, which is much larger than usual.

+

Use JavaScript Modules

+

JavaScript modules are just like any other JavaScript, with the exception that they are singletons and Firefox can cache the compiled code for faster use the next time the browser is started. Any time your add-on loads JavaScript from an {{ HTMLElement("script") }} element you should consider using a JavaScript Module instead. For more on how JavaScript modules work, see the Using JavaScript Code Modules page.

+

Avoid Writing Slow CSS

+ +

Avoid DOM mutation event listeners

+

Adding DOM mutation listeners to a document disables most DOM modification optimizations and profoundly degrades the performance of further DOM modifications to that document. Moreover, removing the listeners does not reverse the damage. For these reasons, the following events should be avoided wherever possible: DOMAttrModified, DOMAttributeNameChanged, DOMCharacterDataModified, DOMElementNameChanged, DOMNodeInserted, DOMNodeInsertedIntoDocument, DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMSubtreeModified

+

For more on these events and their deprecation, see Mutation events. Use Mutation Observers instead if possible.

+

Lazily load services

+

The XPCOMUtils JavaScript module provides two methods for lazily loading things:

+ +

As of Firefox 4.0, many common services are already cached for you in Services.jsm.

+

Reduce file I/O

+

TODO: Give examples below, link to code, bugs, docs.

+ +

Use the right compression level for JAR and XPI files

+

Reading data from compressed archives costs time. The higher the compression level of the archive, the higher also the performance cost of reading the data from it. So any JAR files in your extension should always be packed with compression level 0 (no compression) for better performance. It may seem counter-intuitive, but doing this will increase the JAR file size and actually decrease the XPI file size as it allows for compression between files inside the JAR to be done when compressing the XPI (essentially a poor-man's solid archive effect).

+

If your extension doesn't specify em:unpack then its XPI file will not be unpacked in Firefox 4 and used directly instead. This makes choosing a low compression level preferable; we recommend using compression level 1. It will increase the download size only a small amount, even compared to maximum compression.

+

Use asynchronous I/O

+

This cannot be stressed enough: never do synchronous I/O on the GUI thread.

+ +

Unnecessary onreadystatechange in XHR

+

addEventListener(load/error) and/or xhr.onload/.onerror are usually sufficient for most uses and will only be called once, contrary to onreadystatechange. When using XHR in websites people tend to use onreadystatechange (for compatiblity reasons). Often it is enough to just load the resource or handle errors. load/error event listener are far less often called than onreadystatechange, i.e. only once, and you don't need to check readyState or figure out if it is an error or not. Only use onreadystatechange if you want to process the response while it is still arriving.

+

Removing Event Listeners

+

Remove event listener if they are not needed any more. It is better to actually remove event listener instead of just having some flag to check if the listener is active which is checked every time when an event is propagated. Abandon schemes like: function onMouseOver(evt) { if (is_active) { /* doSomeThing */ } } Also, remove "fire-once" listeners again:

+
 function init() {
+   var largeArray;
+   addEventListener('load', function onLoad() {
+        removeEventListener('load', onLoad, true);
+        largeArray.forEach();
+ }, true);
+
+

Else a lot of closure stuff might be still referenced (largeArray in this example). And the listener will sit idle in some internal table.

+

Populate menus as needed

+

Populate "context" menus (page, tabs, tools) as needed and keep computation to a minimum (UI responsiveness). There is no need to populate the context menu every time something changes. It is enough to populate it once the user actually needs it. Add a listener to the "popupshowing" event and compute there.

+

Avoid mouse movement events

+

Avoid mouse movement events (enter/over/exit) or at least keep computation to a minimum. Mouse movement events, especially the mouseover event, usually happen at high frequency. Best would be to only store the new information and compute "stuff" once the user actually requests it (e.g. in a popupshowing event). Also don't forget to remove the event listeners when no longer needed (see above).

+

Avoid polling

+

Use {{ interface("nsIObserverService") }} functionality instead. Everybody is free to post "custom" notifications via {{ interface("nsIObserverService") }}, but few extensions actually use this. However, a lot of other services also provide observer functionality, such as nsIPrefBranch2.

+

aPNG/aGIF inappropriate in a lot of cases

+

Animations require a lot of time to set up, as a lot of images are decoded (the frames). Animated images may have their cached representations evicted quite often, causing the frames of your animated images to be reloaded lots of times, not just once. {{ interface("nsITree") }} / {{ XULElem("tree") }} seems to be extra special in this regard, as it doesn't seem to cache animations at all under certain circumstances.

+

base64/md5/sha1 implementations

+

Do not ship your own base64/md5/sha1 implementations. Regarding base64 there are the built-in atob/btoa functions that do the job just well and are available in overlay script as well as in in JavaScript modules and components. Hashes can be computed using {{ interface("nsICryptoHash") }}, which accepts either a string or an {{ interface("nsIInputStream") }}.

+

Image sprites

+

You may combine multiple images into one (sprites). See {{ cssxref("-moz-image-region") }}. Most XUL widgets that are used to display some image (incl. {{ XULElem("button") }} and {{ XULElem("toolbarbutton") }}) allow to use {{ cssxref("list-style-image") }}. Avoid the imagesrc/src attributes to define images where possible.

+

Consider using Chrome Workers

+

You can use a {{ domxref("ChromeWorker") }} to execute long running tasks or do data processing.

+

See also

+ diff --git a/files/bn/mozilla/add-ons/sdk/index.html b/files/bn/mozilla/add-ons/sdk/index.html new file mode 100644 index 0000000000..c5dcaf17b9 --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/index.html @@ -0,0 +1,102 @@ +--- +title: এডঅন(Add-on) সফটওয়্যার সম্পাদনা বক্স (SDK) +slug: Mozilla/Add-ons/SDK +tags: + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Add-on_SDK +--- +

এই এডঅন সফটওয়্যার সম্পাদনা বক্স (SDK) ব্যবহার করে আপনিও ফায়ারফক্সের জন্য এডঅন তৈরী করতে পারবেন, তবে আপনার জানা থাকতে হবেঃ জাভাস্ক্রিপ্ট, এইচটিএমএল, সিএসএস। এই সফটওয়্যার সম্পাদনা বক্স (SDK) এর সাথে আছে জাভাস্ক্রিপ্ট এপিআই (API) , যেটা আপনি এডঅন তৈরী, এডঅন টেস্টিং, এডঅন চালু করা ও এডঅন প্যাকেজ করার কাজে ব্যবহার করতে পারবেন।

+
+

পাঠদান

+
+
+
+
+ শুরু করুন
+
+ কিভাবে সফটওয়্যার সম্পাদনা বক্স (SDK)  ইন্সটল করবেন এবং সিএফএক্স  দিয়ে এডঅন সম্পাদনা, টেস্টিং ও প্যাকেজিং করবেন।
+
+ Interact with the browser
+
+ Open web pages, listen for pages loading, and list open pages.
+
+ Development techniques
+
+ Learn about common development techniques, such as unit testing, logging, creating reusable modules, localization, and mobile development.
+
+
+
+
+
+ Create user interface components
+
+ Create user interface components such as toolbar buttons, context menus, menu items, and dialogs.
+
+ Modify web pages
+
+ Modify pages matching a URL pattern or dynamically modify a particular tab.
+
+ Putting it together
+
+ Walkthrough of the Annotator example add-on.
+
+
+
+
+

Guides

+
+
+
+
+ Contributor's guide
+
+ Learn how to start contributing to the SDK, and about the most important idioms used in the SDK code, such as modules, classes and inheritance, private properties, and content processes.
+
+ SDK infrastructure
+
+ Aspects of the SDK's underlying technology: modules, the Program ID, and the rules defining Firefox compatibility.
+
+ Content scripts
+
+ A detailed guide to working with content scripts.
+
+
+
+
+
+ SDK idioms
+
+ The SDK's event framework and the distinction between add-on scripts and content scripts.
+
+ XUL migration
+
+ A guide to porting XUL add-ons to the SDK. This guide includes a comparison of the two toolsets and a working example of porting a XUL add-on.
+
+
+
+
+

Reference

+
+
+
+
+ High-Level APIs
+
+ Reference documentation for the high-level SDK APIs.
+
+ Tools reference
+
+ Reference documentation for the cfx tool used to develop, test, and package add-ons, the console global used for logging, and the package.json file.
+
+
+
+
+
+ Low-Level APIs
+
+ Reference documentation for the low-level SDK APIs.
+
+
+
+

 

diff --git a/files/bn/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html b/files/bn/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html new file mode 100644 index 0000000000..0a33490189 --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html @@ -0,0 +1,64 @@ +--- +title: Adding a Button to the Toolbar +slug: Mozilla/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Adding_a_Button_to_the_Toolbar +--- +
+

এই  টিউটরিআল বুঝতে হলে আপনাকে প্রথমে এস ডি কে ইন্সটল করতে হবে এবং সি এফ এক্স এর প্রাথমিক  জিনিস গুলা শিখতে হবে ।

+

এই টিউটোরিয়াল  এক্সশন বাটন  এ পি আই ব্যাবহার করে, যে শুধু মাত্র ফায়ার ফক্স ২৯ বা এর পরের ভারশন গুলোতে কাজ করে ।

+

 

+
+

কোন বাটন টুলবারের সাথে  সংযুক্ত করতে হলে  এক্সন বাটন বা টগল বাটন মডিউলগুলো ব্যাবহার করুন ।

+

একটি নতুন ডিরেক্টরি তৈরি করুন, তার ভেতরে ডুকুন এবং সিএফএক্স ইনিট চালান ।

+

তার পর নিচের আইকন তিনটি "ডাটা" ডিরেক্টরিতে সেভ করুন ।

+ + + + + + + + + + + + + + + +
icon-16.png
icon-32.png
icon-64.png
+

Then open the file called "main.js" in the "lib" directory and add the following code to it:

+
var buttons = require('sdk/ui/button/action');
+var tabs = require("sdk/tabs");
+
+var button = buttons.ActionButton({
+  id: "mozilla-link",
+  label: "Visit Mozilla",
+  icon: {
+    "16": "./icon-16.png",
+    "32": "./icon-32.png",
+    "64": "./icon-64.png"
+  },
+  onClick: handleClick
+});
+
+function handleClick(state) {
+  tabs.open("https://www.mozilla.org/");
+}
+

Now run the add-on with cfx run. The button is added to the toolbar at the top of the browser window:

+

You can't set the initial location for the button, but the user can move it using the browser's customization feature. The id attribute is mandatory, and is used to remember the position of the button, so you should not change it in subsequent versions of the add-on.

+

Clicking the button loads https://www.mozilla.org/ into a new tab.

+

Specifying the icon

+

The icon property may specify a single icon or a collection of icons in different sizes, as in the example above. If you specify a collection of icons in different sizes the browser will automatically choose the best fit for the screen resolution and the place in the browser UI that hosts the button. Read more about specifying multiple icons.

+

The icon file must be packaged with your add-on: it may not refer to a remote file.

+

You can change the icon at any time by setting the button's icon property. You can change the icon, and the other state attributes, either globally, for a specific window, or for a specific tab. Read more about updating state.

+

Attaching a panel

+

If you need to attach a panel to a button, use the toggle button API. This is just like the action button API except it adds a boolean checked property which is toggled whenever the button is checked. To attach the panel, pass the button to the panel's show() method. For more details on this, see the toggle button's documentation.

+

Displaying richer content

+

To create more complex user interface content than is possible with just a button, use the toolbar API. With the toolbar API you get a complete horizontal strip of user interface real estate. You can add buttons to the toolbar and also frames, that can host HTML, CSS, and JavaScript.

+

Learning more

+ diff --git a/files/bn/mozilla/add-ons/sdk/tutorials/index.html b/files/bn/mozilla/add-ons/sdk/tutorials/index.html new file mode 100644 index 0000000000..25c953da9e --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/tutorials/index.html @@ -0,0 +1,175 @@ +--- +title: Tutorials +slug: Mozilla/Add-ons/SDK/Tutorials +tags: + - টিউটোরিয়াল +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials +--- +

এই পেজ এর তালিকাগুলো নিজ হাতে গড়া অনুচ্ছেদ, কেমনে SDK ব্যবহার করে নির্দিষ্ট কাজসমূহ অর্জন করা যায় এ সম্পর্কে।

+
+

শুরু করা

+
+
+
+
+  স্থাপন করা 
+
+ ডাউনলোড, স্থাপন,এবং SDK চালু করা Windows, OS X এবং Linux এ।
+
+
+
+ সমস্যাসমাধান
+
+ কিছু pointers ব্যবহার করা হয় গতানুগতিক সমস্যাসমূহ সমাধান করার জন্য এবং আরও সাহায্য পাওয়ার জন্য।
+
+
+
+
+
+ শুরু করা
+
+ SDK এর সাথে একটি simple add-ones তৈরি করুন।
+
+
+
+
+

ইউজার ইন্টারফেস তৈরি

+
+ +
+
+
+ পপআপ প্রদর্শন
+
+ পপআাপ dialog প্রদর্শন করা HTML এবং Javascript এর সাথে।
+
+ একটি context menu item যুক্ত করা
+
+        Firefox's context menu এ items যুক্ত করুন।
+
+
+
+
+

ব্রাউজার দিয়ে যোগাযোগ

+
+
+

  একটি web page খোলা   

+

         একটি web page খুলুন একটি নতুন browser tab e অথবা window তে tabs module ব্যবহার করে,এবং ইহার বিষয়বস্তুকে প্রবেশাধিকার দেয়া।

+
+
+  
+
+  
+
+ পৃষ্ঠা লোড শুনুন
+
+ Tabs module ব্যবহার করা অবহিত করার জন্য যখন নতুন web page load হবে, এবং তাদের বিষয়বস্তুকে প্রবেশাধিকার দেয়া হবে।
+
+
+
+
+
+ open tab এর তালিকা পাওয়া
+
+ বর্তমানে খোলা tabs গুলোর মাধ্যমে বারবার,এবং তাদের content access tab module ব্যবহার করুন।
+
+
+
+
+

ওয়েব পেজ পরিবর্তন

+
+
+
+
+ URL এর উপর ভিত্তি করে ওয়েব পেজ পরিবর্তন করা
+
+ URL এর উপর ভিত্তি করে web pages এর জন্য filters তৈরি করাঃযার URL টি ফিল্টার সাথে মিলে একটি ওয়েব পাতা লোড হয়, যখনই এটি একটি নির্দিষ্ট স্ক্রিপ্ট চালায়।
+
+
+
+
+
+ সচল ওয়েব পেজ চালানো
+
+ বর্তমান সক্রিয় ওয়েব পেজ এর মধ্যে পরিবর্তনশীল একটি  স্ক্রিপ্ট লোড করুন।
+
+
+
+
+

উন্নয়ন কৌশল

+
+
+
+
+ লগিং
+
+
+ ডায়গনিস্টিক উদ্দেশ্যে কনসোল থেকে বার্তা লগ ইন
+
+
+ পূর্ণব্যবহারযোগ্য মডিউল নির্মাণ
+
+ আলাদা modules এ আপনার add-on গঠন করুন যাতে এটি উন্নয়ন,ত্রুটি সরানো,এবং রক্ষণাবেক্ষণ করা সহজ হয়।পূর্ণব্যবহারযোগ্য packages তৈরি করুন যেটা আপনার modules এ ধারণ করবে,সুতরাং অন্যান্য add-on developers রাও তাদের ব্যবহার করতে পারবে।
+
+ ইউনিট টেস্টিং
+
+ SDK's test framework ব্যবহার করে writting and running unit tests করুন।
+
+ ক্রোম কর্তৃপক্ষ
+
+ components object এ access পাবেন,আপনার add-on load হওয়ার জন্য সক্রিয় করুন এবং কোন xpcom object ব্যবহার করুন।
+
+ event targets তৈরি করা
+
+ আপনি তাদের নিজস্ব ইভেন্ট থেকে নির্গত নির্ধারণ বস্তু সক্রিয় করুন।
+
+
+
+
+
+ লোড এবং লোড না করার জন্য শুনুন
+
+ যখন আপনার add-on firefox এ load বা unload হবে তখন এর বিজ্ঞপ্তি জানুন এবং আর্গুমেন্ট পাস করান add-on এ command line হতে।
+
+ Third-party modules ব্যবহার করা
+
+ ইনস্টল করুন এবং অতিরিক্ত মডিউল ব্যবহার করুন যা SDK এর সাথে Ship করে না।
+
+ স্থানীয়করণ
+
+ অনুবাদ কোড লেখা।
+
+ মোবাইল উন্নয়ন
+
+ Firefox Mobile এর জন্য android এর উপর add-ons উন্নয়ন করুন।
+
+ Add-on ডিবাগার
+
+ আপনার অ্যাড অন এর জাভাস্ক্রিপ্ট ডিবাগ করুন।
+
+
+
+
+

একসঙ্গে নির্বাণ

+
+
+
+
+ ভাষ্যকার add-on
+
+ একটি অপেক্ষাকৃত জটিল add-on এ walkthrough করা।
+
+
+
+

 

diff --git a/files/bn/mozilla/add-ons/sdk/tutorials/installation/index.html b/files/bn/mozilla/add-ons/sdk/tutorials/installation/index.html new file mode 100644 index 0000000000..496e6df0c2 --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/tutorials/installation/index.html @@ -0,0 +1,78 @@ +--- +title: Installation +slug: Mozilla/Add-ons/SDK/Tutorials/Installation +tags: + - ইন্সটলেশন + - স্থাপন করা +translation_of: Mozilla/Add-ons/SDK/Tools/jpm#Installation +--- +

পূর্বশর্ত

+

Add-on SDK-র মাধ্যমে উন্নয়ন করতে চাইলে আপনের লাগবেঃ

+ +

Git Sources থেকে Extention Building করা AMO এর জন্য

+

শুধুমাত্র addon-sdk sources এর সর্বশেষ git release tag ব্যবহার করা যেতে পারে যদি AMO তে উপস্থাপন করা হয়।

+

The git archive command প্রয়োজন হয়  git clone working directory এর কিছু git attribute placeholders বিশ্লেষণ করার জন্য।

+
1 git checkout 1.16
+2
+3 git archive 1.16 python-lib/cuddlefish/_version.py | tar -xvf -
+
+

FreeBSD/ OS X / Linux এ স্থাপন করা

+

যে স্থানটি আপনি নির্বাচন করেছেন সে স্থানের File Contents Extract করুন, এবং  shell/command prompt এর মাধ্যমে SDK এর root directory navigate করুন। উদাহরণস্বরূপঃ

+
1 tar -xf addon-sdk.tar.gz
+2 cd addon-sdk
+
+

যদি আপনি Bash user হন তবে চালু করুন (অধিকাংশ মানুষ)

+
source bin/activate
+
+

এবং আপনি যদি non-Bash user হন ,আপনার চালু করা উচিতঃ

+
bash bin/activate
+
+

আপনার কমান্ড প্রম্পট এখন SDK এর মূল ডিরেক্টরির নাম ধারণকারী একটি নতুন উপসর্গ থাকতে হবে

+
(addon-sdk)~/mozilla/addon-sdk >
+
+

Homebrew ব্যবহার করে Mac Install করা

+

যদি আপনি Mac user হন তবে SDK install করতে আপনি Homebrew ব্যবহার করতে পারেন, নিম্নোক্ত নির্দেশ ব্যবহার করেঃ

+
brew install mozilla-addon-sdk
+

একবার সফলতার সাথে এটি সম্পূর্ণ হলে, আপনি cfx program আপনার command line এ ব্যবহার করতে পারেন যে কোন সময় । আপনার bin/activate চালু করার প্রয়োজন নেই।

+

Windows এ install করা

+

যে স্থানটি আপনি নির্বাচন করেছেন সে স্থানের File Contents Extract করুন, এবং shell/command prompt এর মাধ্যমে SDK এর root directory navigate করুন। উদাহরণস্বরূপঃ

+
7z.exe x addon-sdk.zip
+cd addon-sdk
+
+

তারপর চালু করুনঃ

+
bin\activate
+
+

আপনার কমান্ড প্রম্পট এখন SDK এর এর রুট ডিরেক্টরি সম্পূর্ণ পাথ ধারণকারী একটি নতুন উপসর্গ থাকতে হবে :

+
(C:\Users\mozilla\sdk\addon-sdk) C:\Users\Work\sdk\addon-sdk>
+
+

 সক্রিয় করা

+

সক্রিয় কমান্ড কিছু environment variables set করে যেটা SDK এর জন্য প্রয়োজন। এটি শুধুমাত্র variables set করে current command prompt এর জন্য। যদি আপনি নতুন command prompt চালু করেন,SDK নতুন prompt এ সক্রিয় হতে পারবে না যতক্ষণ না পর্যন্ত আপনি activate type না করেন।

+

এটা মানে হল আপনার SDK এর অনেক কপি আপনার disk এর বিভিন্ন স্থানে থাকতে পারে এবং তাদের মধ্যে switch থাকতে পারে, অথবা এমনকি তাদের উভয়ে একই সময়ে বিভিন্ন কমান্ড লিখতে সক্রিয় থাকে।

+

সক্রিয়করণ স্থায়ী করা

+

এই variables গুলো আপনার পরিমণ্ডলে set করলে আপনার সকল  নতুন prompt তাদের নির্ণয় করে ফেলবে, আপনি সক্রিয়করণকে স্থায়ী করতে পারবেন। তারপর আপনি একটি নতুন কমান্ড প্রম্পট খুলুন প্রত্যেক সময় সক্রিয় টাইপ করার প্রয়োজন হবে না

+

কারন নতুন মুক্তিপ্রাপ্ত SDK এর সাথে সঠিক variables set পরিবর্তন হতে পারে,activation scripts পড়া উচিত কোন variables set করা প্রয়োজন তা ঠিক করার জন্য।  সক্রিয়করণ ব্যবহার করে বিভিন্ন Scripts এবং sets করে বিভিন্ন variables bash environment এর জন্য (Linux and OS X) এবং Windows environments এর জন্য।

+

Windows

+

Windows এ, bin\activate uses activate.bat, এবং আপনি command line ব্যবহার করে  setx tool or the Control Panel সক্রিয়করণ স্থায়ী করতে পাড়েন।

+

Linux / OS X

+

Linux and OS X এ, source bin/activate  activate bash script ব্যবহার করে, এবং আপনি সক্রিয়করণ স্থায়ী করতে পারবেন ~/.bashrc (on Linux) or ~/.bashprofile (on OS X) ব্যবহার করে।

+

এটির পরিবর্তে আপনার directory তে আপনি cfx program এ সাংকেতিক চিহ্ন তৈরি করতে পারেনঃ

+

 

+
ln -s PATH_TO_SDK/bin/cfx ~/bin/cfx
+
+

SDK install করার করার জন্য যদি আপনি Homebrew ব্যবহার করেন,environment variables আপনার জন্য স্থায়ীভাবে স্থাপন হয়ে থাকবে।

+

বৈধতা পরীক্ষা

+

আপনার shell prompt এর মাধ্যমে চালু করেনঃ

+
cfx
+
+

এটির নির্গমন এমন হতে হবে যে এটির প্রথম লাইন দেখতে এটির মত,অনেক লাইন তথ্য অনুসরণ করেঃ

+
Usage: cfx [options] [command]
+
+

এটি হয় cfx command-line program। এটি আপনার Add-on SDK এর প্রাথমিক interface। Firefox চালাতে আপনি এটি ব্যবহার করেন এবং আপনার add-on পরীক্ষা করেন, আপনার add-on package করুন বিতরণ করার জন্য, দলিল পরিদর্শন করুন এবং unit tests চালু করুন

+

সমস্যাসমূহ ?

+

Troubleshooting page এ চেষ্টা করুন।

+

পরবর্তী পদক্ষেপ

+

পরবর্তীতে Getting Started With cfx tutorial দেখুন,সেখানে ব্যাখ্যা করা আছে যে কেমন করে cfx tool ব্যবহার করে add-ons তৈরি করা যায়।

diff --git a/files/bn/mozilla/add-ons/sdk/tutorials/logging/index.html b/files/bn/mozilla/add-ons/sdk/tutorials/logging/index.html new file mode 100644 index 0000000000..3e67bdd732 --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/tutorials/logging/index.html @@ -0,0 +1,38 @@ +--- +title: লগিং +slug: Mozilla/Add-ons/SDK/Tutorials/Logging +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Logging +--- +
+ To follow this tutorial you'll need to have installed the SDK and learned the basics of cfx.
+

 ডম কনসোল অবজেক্ট  জাভাস্ক্রিপ্ট ডিবাগ করার জন্য ব্যবহৃত হয়। কারণ ডম অবজেক্ট গুলো মেইন অ্যাড-অন কোডে পাওয়া যায় না । SDK এর নিজেস্ব গ্লোবাল কনসোল অবজেক্ট আছে যার অধিকাংশ মেথড ডম কনসোল এর মত , যার মধ্যে আছে লগ এরর, ওয়ার্নিং অথবা ইনফরমেশনাল ম্যাসেজ। কনসোল এ এক্সেস করার জন্য আপনার কোন কিছুর প্রয়োজন()নেই। এটি automatically আপনার জন্য দেয়া আছে ।

+

The console.log() method prints an informational message:

+
console.log("Hello World");
+
+

Try it out:

+ +

Firefox will start, and the following line will appear in the command window you used to execute cfx run:

+
info: Hello World!
+
+

console in Content Scripts

+

You can use the console in content scripts as well as in your main add-on code. The following add-on logs the HTML content of every tab the user loads, by calling console.log() inside a content script:

+
require("sdk/tabs").on("ready", function(tab) {
+  tab.attach({
+    contentScript: "console.log(document.body.innerHTML);"
+  });
+});
+
+

console Output

+

If you are running your add-on from the command line (for example, executing cfx run or cfx test) then the console's messages appear in the command shell you used.

+

If you've installed the add-on in Firefox then the messages appear in Firefox's Browser Console.

+

But note that by default, calls to console.log() will not result in any output in the Error Console for any installed add-ons: this includes add-ons installed using the Add-on Builder or using tools like the Extension Auto-installer.

+

See "Logging Levels" in the console reference documentation for more information on this.

+

Disabling strict mode

+

By default, cfx enables JavaScript strict mode, which will cause a lot of JavaScript warnings to be logged to the console. If this makes it harder to interpret logging output, you can disable strict mode by opening the file at python-lib/cuddlefish/prefs.py  and setting "javascript.options.strict" to False.

+

Learning More

+

For the complete console API, see its API reference.

diff --git a/files/bn/mozilla/add-ons/sdk/tutorials/unit_testing/index.html b/files/bn/mozilla/add-ons/sdk/tutorials/unit_testing/index.html new file mode 100644 index 0000000000..1f7ad87c4d --- /dev/null +++ b/files/bn/mozilla/add-ons/sdk/tutorials/unit_testing/index.html @@ -0,0 +1,114 @@ +--- +title: ইউনিট টেস্টিং +slug: Mozilla/Add-ons/SDK/Tutorials/Unit_testing +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Unit_testing +--- +
+

এই tutorial আপনার থাকতে দরকার হবে অনুসরন করতে installed the SDKজ্ঞানী basics of cfxআর অনুসরন করা tutorial writing reusable modules.

+
+
+

যদি আপনি ব্যবহার করতেন jpm cfx বদলে, cfx থেকে স্থানান্তর করতে গাইড দেখে, in particular সেকশান loading modules from test code.

+
+

sdk দেয় একটি কাঠামো সাহায্য করতে বানায় আর আপনার কোড-এর জন্য অংশ পরীক্ষা দৌড়ায়এটা হাতেকলমে দেখাতে কাজ করে আমরা একটি সাদাসিধে-এর জন্য কিছু অংশ পরীক্ষা লিখব Base64 মডিউল সঙ্কেতাক্ষরে লিখতে.

+

একটি  সাদাসিধে  base64  মডিউল

+

একটি ওয়েব পাতায়, আপনি base64 সম্পাদন করতে পারেন ( -rrb- আর atob -lrb- ) কাজ ব্যব‌হার সঙ্কেতাক্ষরে লিখতে আর btoa ব্যবহার করা সন্কেত উদঘাটন করতে।দুর্ভাগ্যক্রমে এই কাজ ব্যব‌হার জানালা জিনিষে সংযুক্ত করা হয়: যেহেতু এই জিনিষ না উপস্থিত আপনার প্রধান add-on কোডে, atob ( -rrb- আর btoa -lrb- ) নেই উপস্থিত either। তাই আমরা একটি base64 মডিউল বানাবো প্ল্যাটফর্ম থেকে এই কাজ ব্যব‌হার অনাবৃত করতে।

+

শুরুতে, একটি নতুন ডিরেক্টরি বানাতে, এটায় পথ খোঁজতে, আর cfx init দৌড়াতে। Now create a new file in "lib" called "base64.js", and give it the following contents:এখন `` libে '' `` "base64.js" ডাকা একটি নতুন ফাইল বানান।

+
const { atob, btoa } = require("chrome").Cu.import("resource://gre/modules/Services.jsm", {});
+
+exports.atob = a => atob(a);
+exports.btoa = b => btoa(b); 
+

এই কোড দুটো কাজ ব্যব‌হার, যা মাত্র প্ল্যাটফর্ম-এর btoa ডাকে রপ্তানি করে() and atob() functions. ব্যবহারে মডিউল দেখাতে, সম্পাদন করতে "main.js"দাখিল করুন যেহেতু  এটি অনুসরন করে:

+
var base64 = require("./base64");
+
+var button = require("sdk/ui/button/action").ActionButton({
+  id: "base64",
+  label: "base64",
+  icon: "./icon-16.png",
+  onClick: function() {
+    encoded = base64.btoa("hello");
+    console.log(encoded);
+    decoded = base64.atob(encoded);
+    console.log(decoded);
+  }
+});
+

আপনার add-ons `` ডাটা '' ডিরেক্টরিতে বাঁচাতে  উপরন্তু দৃষ্টান্ত  একটি প্রতিমা উল্লেখ করে `` icon-16 দাখিল করে থাকতে হবে। । আপনি এই প্রতিমা ডাউনলোড করতে পারতেন: .

+

এখন "main.js" আমদানি base64 মডিউল আর ডাক এটার দুটো exported কাজ ব্যব‌হার।

+ + + + + + +
যদি আমরা add-on দৌড়াতাম আর বাটন ক্লিক করি, আমরা অনুসরন করা লগ করা আউটপুট দেখা উচিত
+

:

+
info: aGVsbG8=
+info: hello
+
+

পরীক্ষা করে  base64  মডিউল

+

navigate এ্যাডঅন-এর-এর test directory আর delete test-main.js ফাইলএটার জায়গায় বানান একটি ফাইল যা ডাকা হলো test-base64.js অনুসরন করা অভ্যন্তরস্থ বস্তু-এর সাথে:

+
var base64 = require("./base64");
+
+exports["test atob"] = function(assert) {
+      assert.ok(base64.atob("aGVsbG8=") == "hello", "atob works");
+}
+
+exports["test btoa"] = function(assert) {
+  assert.ok(base64.btoa("hello") == "aGVsbG8=", "btoa works");
+}
+
+exports["test empty string"] = function(assert) {
+  assert.throws(function() {
+                  base64.atob();
+                },
+                "empty string check works");
+}
+
+require("sdk/test").run(exports); 
+

এটা দাখিল করেরপ্তানি করে তিন কাজ ব্যব‌হার, যার each একটি একাকী যুক্তি পেতে আশা করে যা হচ্ছে একটি assert জিনিষ. assert যোগান দেয়া হয় test/assert module আর বাস্তবায়িত করেCommonJS Unit Testing specification.

+ +

এই মুহূর্তে আপনার add-on ought এই মত দেখতে:

+
  /base64
+      package.json
+      README.md
+      /doc
+          main.md
+      /lib
+          main.js
+          base64.js
+      /test
+          test-base64.js
+
+

এখন cfx নির্বাহ করুন-- এ্যাডঅন-এর মূল ডিরেক্টরি থেকে verbose পরীক্ষা করুন। আপনি এখন এর মত কিছু দেখা পাবেন:

+
Running tests on Firefox 13.0/Gecko 13.0 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under darwin/x86.
+info: executing 'test-base64.test atob'
+info: pass: atob works
+info: executing 'test-base64.test btoa'
+info: pass: btoa works
+info: executing 'test-base64.test empty string'
+info: pass: empty string check works
+
+3 of 3 tests passed.
+Total time: 5.172589 seconds
+Program terminated successfully.
+
+ + + + + + +
কি ঘটে এখানে হচ্ছে সে cfx পরীক্ষা
+

যোজক চিহ্ন নোট করুন "test" module নামে। cfx testwill অন্তর্ভুক্ত করে একটি মডিউল যা ডাকা হলো "test-myCode.js", কিন্তু, অভিলাষ মডিউল ছাঁটাই করে যা ডাকা হলো "test_myCode.js" or "testMyCode.js".

+ +

স্পষ্টত, আপনার-- verbose অপশন পাশ করতে cfx যদি আপনি চাইতেন না হবে না; এত মাত্র করতে আউটপুট আরো সহজ পড়তে বানায়।

diff --git a/files/bn/mozilla/add-ons/webextensions/index.html b/files/bn/mozilla/add-ons/webextensions/index.html new file mode 100644 index 0000000000..8a47f12413 --- /dev/null +++ b/files/bn/mozilla/add-ons/webextensions/index.html @@ -0,0 +1,91 @@ +--- +title: WebExtensions +slug: Mozilla/Add-ons/WebExtensions +tags: + - NeedsTranslation + - TopicStub +translation_of: Mozilla/Add-ons/WebExtensions +--- +
{{AddonSidebar}}
+ +
+

WebExtensions are currently in an experimental alpha state. From Firefox 46, you can publish WebExtensions to Firefox users, just like any other add-on. We're aiming for a first stable release in Firefox 48.

+
+ +

WebExtensions are a cross-browser system for developing browser add-ons. To a large extent the system is compatible with the extension API supported by Google Chrome and Opera. Extensions written for these browsers will in most cases run in Firefox or Microsoft Edge with just a few changes. The API is also fully compatible with multiprocess Firefox.

+ +

We're also intending to extend the APIs to support the needs of add-on developers, so if you have ideas, we'd love to hear them. You can reach us on the dev-addons mailing list or #webextensions on IRC.

+ +
+ + +
+

Reference

+ + + +

JavaScript APIs

+ +
{{ ListSubpages ("/en-US/Add-ons/WebExtensions/API") }}
+ +

Manifest keys

+ +
{{ ListSubpages ("/en-US/Add-ons/WebExtensions/manifest.json") }}
+
+
diff --git a/files/bn/mozilla/add-ons/webextensions/what_are_webextensions/index.html b/files/bn/mozilla/add-ons/webextensions/what_are_webextensions/index.html new file mode 100644 index 0000000000..f92dc2ad28 --- /dev/null +++ b/files/bn/mozilla/add-ons/webextensions/what_are_webextensions/index.html @@ -0,0 +1,95 @@ +--- +title: What are WebExtensions? +slug: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions +--- +

এই পাতা গেকো ভিত্তিক অ্যাপ্লিকেশনের জন্য উন্নয়নশীল এক্সটেনশন পদ্ধতির যা ব্যবহার ডকুমেন্টেশন লিঙ্ক উপস্থিত রয়েছে
+
+
+  XUL প্রতিস্থাপক ইন্টারফেস করুন </ li> নির্দিষ্ট করার
+  
<লি> যেমন <a href="/en-US/docs/XUL/tabbrowser"> <code> বিশেষ সুবিধাভোগী কোড উপলব্ধ API গুলি, tabbrowser </ code> </a> এবং <একটি href = "/ en-US / ডক্স / মজিলা / JavaScript_code_modules "> জাভাস্ক্রিপ্ট মডিউল </a>, অ্যাপ্লিকেশন এবং কন্টেন্ট সঙ্গে যোগাযোগ করার জন্য. </ li>
+ </ Li>
+
+ <P> ঢাকা ফায়ারফক্স 4, এবং গেকো 2 ইঞ্জিন এটি ক্ষমতা, এই এক্সটেনশন বিকাশ করার একমাত্র উপায় ছিল এর আগে. এই পদ্ধতি মূলত <a href="/en-US/docs/Extensions/Bootstrapped_extensions"> রিস্টার্টবিহীন এক্সটেনশন </a>, এবং <a দ্বারা বাতিল হয়েছে href="/en-US/Add-ons/SDK"> অ্যাড-অন এসডিকে </a>, যা তাদের উপর নির্মিত হয়. সুবিধাভোগী জাভাস্ক্রিপ্ট এপিআই এখানে বর্ণনা এখনও অ্যাড টার্ন এই নতুন ধরনের ব্যবহার করা যেতে পারে. '</ p>
+
+ <H2 & id = "XUL_School"> XUL স্কুল </ h2>
+
+ <পি> <a href="/en-US/Add-ons/Overlay_Extensions/XUL_School"> XUL স্কুল </a> একটি ব্যাপক অ্যাড অন উন্নয়ন টিউটোরিয়াল, কিন্তু বেশিরভাগই অন্যান্য গেকো ভিত্তিক প্রযোজ্য ফায়ারফক্স এক্সটেনশন উন্নয়ন উপর মনোযোগ নিবদ্ধ করে অ্যাপ্লিকেশন. '</ p>
+
+ <H2 & id = "More_resources"> আরো সম্পদ করুন </ h2>
+
+ <Div class = "কলাম-ধারক">
+ <Div class = "কলাম অর্ধ">
+ <DL>
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Setting_up_extension_development_environment"> আপনার পরিবেশ </a> </ DT> সেট আপ
+  
<DD> এক্সটেনশন উন্নয়নের জন্য আবেদন সেট আপ হচ্ছে. </ DD>
+  
<Dt> <a href="/en-US/docs/XUL"> XUL </a> </ DT>
+  
<DD> টিউটোরিয়াল এবং ইউজার ইন্টারফেস XUL ​​এক্সটেনশন. </ DD> দ্বারা ব্যবহৃত ভাষা জন্য রেফারেন্স
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Code_snippets"> কোড স্নিপেট </a> </ DT>
+  
<DD> জিনিষ আপনি করতে চাইবেন. </ DD> অনেক জন্য নমুনা কোড
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Installing_extensions"> এক্সটেনশন </a> </ DT> ইনস্টল
+  
<DD> অ্যাপ্লিকেশনের তালিকা ইনস্টল এক্সটেনশান ফাইল অনুলিপি দ্বারা একটি এক্সটেনশন ইনস্টল করার জন্য কিভাবে. </ DD>
+  
<Dt> <a href="/en-US/Add-ons/Overlay_extensions/Firefox_addons_developer_guide"> ফায়ারফক্স অ্যাড-অন ডেভেলপার নির্দেশিকা </a> </ DT>
+  
<DD> ওভারলে এক্সটেনশন. </ DD> উন্নয়নশীল একটি নির্দেশিকা
+ </ DL>
+ </ Div>
+
+ <Div class = "কলাম অর্ধ">
+ <DL>
+  
<Dt> <a href="/en-US/docs/Mozilla/JavaScript_code_modules"> জাভাস্ক্রিপ্ট কোড মডিউল </a> </ DT>
+  
<DD> জাভাস্ক্রিপ্ট মডিউল এক্সটেনশন ডেভেলপার. </ DD> উপলব্ধ
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Inline_Options"> এক্সটেনশন পছন্দগুলি </a> </ DT>
+  
<DD> কিভাবে আপনার এক্সটেনশন পছন্দগুলি যে অ্যাড-অন ম্যানেজার প্রদর্শিত হবে তা নির্দিষ্ট করার. </ DD>
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Extension_Packaging"> এক্সটেনশন প্যাকেজিং </a> </ DT>
+  
<DD> কিভাবে এক্সটেনশন প্যাকেজ এবং ইনস্টল করা হয়. </ DD>
+  
<Dt> <a href="/en-US/Mozilla/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System"> বাইনারি ফায়ারফক্স এক্সটেনশন </a> </ DT>
+  
<DD> ফায়ারফক্সের জন্য বাইনারি এক্সটেনশন তৈরি. </ DD>
+ </ DL>
+ </ Div>
+ </ Div>
+
+ <পি> & nbsp; </ p>

diff --git a/files/bn/mozilla/add-ons/webextensions/your_first_webextension/index.html b/files/bn/mozilla/add-ons/webextensions/your_first_webextension/index.html new file mode 100644 index 0000000000..c705ed4493 --- /dev/null +++ b/files/bn/mozilla/add-ons/webextensions/your_first_webextension/index.html @@ -0,0 +1,143 @@ +--- +title: আপনার প্রথম WebExtension +slug: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension +translation_of: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension +--- +

{{AddonSidebar}}

+ +

এই অনুচ্ছেদে ফায়ারফক্সের WebExtension তৈরীর আদ্যপন্ত জানব। এই অ্যাড-অন "mozilla.org" অথবা এর সাবডোমেন থেকে আসা সমস্ত পেজে লাল বর্ডার যোগ করবে।

+ +

এই উদাহরণের সোর্স কোড GitHub-এ দেওয়া আছেঃ

+ +

https://github.com/mdn/webextensions-examples/tree/master/borderify.

+ +

প্রথমে দরকার হবে ফায়ারফক্স ৪৫ অথবা তার পরবর্তী ভার্সন।

+ +

WebExtension লিখা

+ +

নতুন একটি ডিরেক্টরী তৈরী করে সেখানে প্রবেশ করুনঃ

+ +
mkdir borderify
+cd borderify
+ +

manifest.json

+ +

এখন "borderify" ডিরেক্টরীর ভেতরে "manifest.json" নামে নতুন একটি ফাইল তৈরী করুন। তাতে নিম্নলিখিত কোড লিখুনঃ

+ +
{
+
+  "manifest_version": 2,
+  "name": "Borderify",
+  "version": "1.0",
+
+  "description": "Adds a solid red border to all webpages matching mozilla.org.",
+
+  "icons": {
+    "48": "icons/border-48.png"
+  },
+
+  "content_scripts": [
+    {
+      "matches": ["*://*.mozilla.org/*"],
+      "js": ["borderify.js"]
+    }
+  ]
+
+}
+ + + +

কিছু ফায়ারফক্স ভার্সনে একটি অতিরক্ত applications key manifest.json-এ যোগ করা লাগতে পারে।

+ +
"applications": {
+  "gecko": {
+    "id": "borderify@example.com",
+    "strict_min_version": "42.0",
+    "strict_max_version": "50.*",
+    "update_url": "https://example.com/updates.json"
+  }
+}
+ +

সবচেয়ে মজার key হচ্ছ content_scripts. এটা ফায়ারফক্সকে সেই সব ওয়েব পেজে স্ক্রীপট লোড করতে বলবে যাদের URL-এ একটি নির্দিষ্ট প্যাটার্ন আছে।এক্ষেত্রে আমরা ফায়ারফক্সকে "mozilla.org" বা এর সাবডোমেনের সমস্ত HTTP অথবা HTTPS পেজে "borderify.js" নামে স্ক্রীপট লোড করতে বলছি।

+ + + +

icons/border-48.png

+ +

The add-on should have an icon. This will be shown next to the add-on's listing in the Add-ons Manager. Our manifest.json promised that we would have an icon at "icons/border-48.png".

+ +

Create the "icons" directory directly under the "borderify" directory. Save an icon there named "border-48.png".  You could use the one from our example, which is taken from the Google Material Design iconset, and is used under the terms of the Creative Commons Attribution-ShareAlike license.

+ +

If you choose to supply your own icon, It should be 48x48 pixels. You could also supply a 96x96 pixel icon, for high-resolution displays, and if you do this it will be specified as the 96 property of the icons object in manifest.json:

+ +
"icons": {
+  "48": "icons/border-48.png",
+  "96": "icons/border-96.png"
+}
+ +

Alternatively, you could supply an SVG file here, and it will be scaled correctly.

+ + + +

borderify.js

+ +

Finally, create a file called "borderify.js" directly under the "borderify" directory. Give it this content:

+ +
document.body.style.border = "5px solid red";
+ +

This script will be loaded into the pages that match the pattern given in the content_scripts manifest.json key. The script has direct access to the document, just like scripts loaded by the page itself.

+ + + +

Testing it out

+ +

First, double check that you have the right files in the right places:

+ +
borderify/
+    icons/
+        border-48.png
+    borderify.js
+    manifest.json
+ +

Open "about:debugging" in Firefox, click "Load Temporary Add-on" and select any file in your add-on's directory:

+ +

{{EmbedYouTube("cer9EUKegG4")}}

+ +

The add-on will now be installed, and will stay until you restart Firefox.

+ +

Now try visiting a page under "mozilla.org", and you should see the red border round the page:

+ +

{{EmbedYouTube("rxBQl2Z9IBQ")}}

+ +

Try experimenting a bit. Edit the content script to change the color of the border, or do something else to the page content. Save the content script, then reload the add-on's files by clicking the "Reload" button in about:debugging. You can see the changes right away:

+ +

{{EmbedYouTube("NuajE60jfGY")}}

+ + + +

Packaging and publishing

+ +

For other people to use your add-on, you need to package it and submit it to Mozilla for signing. To learn more about that, see "Publishing your WebExtension".

+ +

What's next?

+ +

Now you've got an idea of the process of developing a WebExtension for Firefox, try:

+ + diff --git "a/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/index.html" "b/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/index.html" new file mode 100644 index 0000000000..30bd842c22 --- /dev/null +++ "b/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/index.html" @@ -0,0 +1,60 @@ +--- +title: থিম +slug: Mozilla/Add-ons/থিম +tags: + - NeedsReview +translation_of: Mozilla/Add-ons/Themes +--- +

থিমস বিভিন্ন মোজিলা অ্যাপ্লিকেশনের জন্য স্কিনস। তারা আপনার ইউজার ইন্টারফেস এর লুক এবং অনুভুতিতে পরিবর্তন এবং আপনার কার্যকলাপকে এটি ব্যক্তিগতকৃত করতে অনুমতি দেয়।  একটি থিম সহজভাবে UI এর রং পরিবর্তন করতে পারে অথবা এটি তার লুক এর প্রতিটি স্থানের পরিবর্তন করতে পারে। এখানে থিম ডকুমেন্টেশন তারিখ সীমার বাইরে, কিন্তু আমরা শীঘ্রই এটি আপডেট করার জন্য কিছু সাহায্য পেতে প্রত্যাশা করছি।

+
+
+

নথিপত্র

+
+
+ Building a Theme
+
+ ফায়ারফক্স এর একটি সহজ থিম নির্মাণের জন্য একটি টিউটোরিয়াল।
+
+ Common Theme Issues and Their Solutions
+
+ যখন AMO সম্পাদকরা থিম এবং কিভাবে তাদের ঠিক করতে হবে এটা নিয়ে পর্যালোচনা করেন তখন প্রচলিত বিষয় দেখা যায়।
+
+ Lightweight themes
+
+ ফায়ারফক্সের জন্য লাইটওয়েট থিম নির্মাণের প্রণালী।
+
+ Creating a Skin for SeaMonkey 2
+
+ সীমাংকি 2 জন্য নতুন থিম তৈরির জন্য একটি উপস্থাপনা।
+
+ Making Sure Your Theme Works with RTL Locales
+
+ আপনার থিম হিব্রু, আরবি, ফার্সি ও উর্দু লোকেইলের সাথে সঠিক হবে কাজ করবে এটা নিশ্চিত করুন।
+
+ Theme Packaging
+
+ ফায়ারফক্স এবং থান্ডারবার্ড জন্য থিম প্যাকেজ করুন।
+
+ Yet Another Theme Tutorial
+
+ মোজিলা থিম নির্মাণ এর জন্য আরেকটি টিউটোরিয়াল।
+
+ Obsolete docs
+
+ এই ডক্স খুব পুরানো এবং আপডেট করা হবে না কখনও কিন্তু থিম ডকুমেন্টেশন আপডেট সবার জন্য দরকারী উৎস উপাদান তাই তাদের জন্য রাখা হয়েছে।
+
+
+
+

Getting help

+ +

Tools

+ +
+
+

 

diff --git "a/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/obsolete/index.html" "b/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/obsolete/index.html" new file mode 100644 index 0000000000..43f20d34b5 --- /dev/null +++ "b/files/bn/mozilla/add-ons/\340\246\245\340\246\277\340\246\256/obsolete/index.html" @@ -0,0 +1,9 @@ +--- +title: Obsolete +slug: Mozilla/Add-ons/থিম/Obsolete +tags: + - needsRevision +translation_of: Mozilla/Add-ons/Themes/Obsolete +--- +

এই পৃষ্ঠাটি কিছু থিম সংগ্রহ করে যেগুলো আমরা মনে করি কখনই হালনাগাদ করা হবে না , কিন্তু আমরা এই সময়ের জন্য এগুলো কে শক্তিশালী উৎস হিসেবে রেখে দিচ্ছি পরবর্তীতে ব্যবহার করার জন্য ।

+

{{ ListSubPages ("/en-US/Add-ons/Themes/Obsolete", 5) }}

-- cgit v1.2.3-54-g00ecf