From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- files/ru/mozilla/tech/index.html | 14 - files/ru/mozilla/tech/places/index.html | 77 ---- files/ru/mozilla/tech/xpcom/index.html | 47 --- files/ru/mozilla/tech/xpcom/reference/index.html | 21 -- .../tech/xpcom/reference/interface/index.html | 17 - .../interface/nsidomhtmlmediaelement/index.html | 29 -- .../reference/interface/nsiloginmanager/index.html | 372 ------------------- .../using_nsiloginmanager/index.html | 169 --------- files/ru/mozilla/tech/xul/action/index.html | 117 ------ .../mozilla/tech/xul/attribute/disabled/index.html | 38 -- .../mozilla/tech/xul/attribute/hidden/index.html | 26 -- files/ru/mozilla/tech/xul/attribute/index.html | 9 - files/ru/mozilla/tech/xul/index.html | 93 ----- .../tech/xul/property/dateleadingzero/index.html | 15 - .../tech/xul/property/datepicker.value/index.html | 15 - files/ru/mozilla/tech/xul/property/index.html | 295 ---------------- .../tech/xul/property/selectionstart/index.html | 16 - files/ru/mozilla/tech/xul/tabbrowser/index.html | 235 ------------ .../autocheck/index.html" | 12 - .../autoscroll/index.html" | 12 - .../index.html" | 270 -------------- .../index.html" | 185 ---------- .../index.html" | 142 -------- .../keyboard_shortcuts/index.html" | 392 --------------------- .../index.html" | 58 --- .../index.html" | 83 ----- .../index.html" | 76 ---- .../index.html" | 7 - .../index.html" | 157 --------- .../actions/index.html" | 88 ----- .../index.html" | 55 --- .../index.html" | 34 -- .../index.html" | 65 ---- .../index.html" | 49 --- .../index.html" | 64 ---- .../index.html" | 59 ---- .../index.html" | 87 ----- .../index.html" | 161 --------- .../index.html" | 33 -- 39 files changed, 3694 deletions(-) delete mode 100644 files/ru/mozilla/tech/index.html delete mode 100644 files/ru/mozilla/tech/places/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/reference/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/reference/interface/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html delete mode 100644 files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html delete mode 100644 files/ru/mozilla/tech/xul/action/index.html delete mode 100644 files/ru/mozilla/tech/xul/attribute/disabled/index.html delete mode 100644 files/ru/mozilla/tech/xul/attribute/hidden/index.html delete mode 100644 files/ru/mozilla/tech/xul/attribute/index.html delete mode 100644 files/ru/mozilla/tech/xul/index.html delete mode 100644 files/ru/mozilla/tech/xul/property/dateleadingzero/index.html delete mode 100644 files/ru/mozilla/tech/xul/property/datepicker.value/index.html delete mode 100644 files/ru/mozilla/tech/xul/property/index.html delete mode 100644 files/ru/mozilla/tech/xul/property/selectionstart/index.html delete mode 100644 files/ru/mozilla/tech/xul/tabbrowser/index.html delete mode 100644 "files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autocheck/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autoscroll/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\320\274\320\265\321\202\320\276\320\264\321\213/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/keyboard_shortcuts/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265_\320\262_xbl/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\263\321\200\321\203\320\277\320\277\320\270\321\200\321\203\321\216\321\211\320\270\320\265_\321\215\320\273\320\265\320\274\320\265\320\275\321\202\321\213/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\276\320\262\320\265\321\200\320\273\320\265\320\270/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\321\201\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260_xul/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/actions/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\321\200\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\206\320\270\321\217_\320\277\321\200\320\260\320\262\320\270\320\273/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\200\320\265\320\272\321\203\321\200\321\201\320\270\320\262\320\275\320\276\320\265_\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\276\320\275\321\202\320\265\320\275\321\202\320\260/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\201\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201_\320\267\320\260\320\277\321\200\320\276\321\201\320\276\320\262_rdf/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\210\320\260\320\261\320\273\320\276\320\275\321\213_\320\275\320\260_\320\276\321\201\320\275\320\276\320\262\320\265_sqlite/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\201\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/index.html" delete mode 100644 "files/ru/mozilla/tech/xul/\321\201\321\202\320\270\320\273\320\270/index.html" (limited to 'files/ru/mozilla/tech') diff --git a/files/ru/mozilla/tech/index.html b/files/ru/mozilla/tech/index.html deleted file mode 100644 index f9682e62e1..0000000000 --- a/files/ru/mozilla/tech/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Mozilla technologies -slug: Mozilla/Tech -tags: - - Landing - - Mozilla - - NeedsTranslation - - Reference - - TopicStub - - XUL -translation_of: Mozilla/Tech ---- -

Mozilla has several technologies used as components of its projects. These are documented here. (flesh out this text).

-

{{LandingPageListSubpages}}

diff --git a/files/ru/mozilla/tech/places/index.html b/files/ru/mozilla/tech/places/index.html deleted file mode 100644 index 261e8beab0..0000000000 --- a/files/ru/mozilla/tech/places/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Places -slug: Mozilla/Tech/Places -tags: - - Add-ons - - Developing Mozilla - - Extensions - - NeedsTranslation - - Places - - TopicStub -translation_of: Mozilla/Tech/Places ---- -

- -

Places is the bookmarks and history management system introduced in Firefox 3. It offers increased flexibility and complex querying to make handling the places the user goes easier and more convenient. It also includes new features including favicon storage and the ability to annotate pages with arbitrary information. It also introduces new user interfaces for managing all this information; see Places on the Mozilla wiki.

- -

Places stores its data in an SQLite database using the mozStorage interfaces.

- - - - - - - - -
-

Documentation

- -
-
Places migration guide
-
Migrating existing code to use the Places API.
-
Manipulating bookmarks using Places
-
Examples for how to work with bookmarks using the Places API.
-
Using the Places tagging service
-
How to use the tagging service.
-
Using the Places history service
-
How to access history information using the Places API.
-
Using the Places favicon service
-
How to manipulate favicons using the Places API.
-
Using the Places livemark service
-
How to create and manage livemarks.
-
Using the Places annotation service
-
How to work with the annotation service.
-
Using the Places keywords API
-
How to manage Places keywords
-
- -
-
Querying Places
-
How to query the bookmarks and history system with specific parameters.
-
Retrieving part of the bookmarks tree
-
How to fetch a section of the bookmarks tree using queries.
-
Displaying Places information using views
-
How to use Places views to display Places data in your own applications or extensions.
-
Places utilities for JavaScript
-
A library of convenient routines that make it easier to work with Places.
-
Places Database troubleshooting
-
How to deal with a corrupt places.sqlite database.
-
- -

View All...

-
- - -
-
The Places database
-
High-level overview of the Places database design.
-
History Service Design
-
Design of the history service.
-
Bookmark Service Design
-
Design of the bookmarks service.
-
Annotation Service Design
-
Design of the annotation service.
-
The Places "frecency" algorithm
-
The algorithm behind the Places location bar (sometimes called the "awesomebar").
-
-
diff --git a/files/ru/mozilla/tech/xpcom/index.html b/files/ru/mozilla/tech/xpcom/index.html deleted file mode 100644 index 07687c0f82..0000000000 --- a/files/ru/mozilla/tech/xpcom/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: XPCOM -slug: Mozilla/Tech/XPCOM -tags: - - Landing - - Mozilla - - NeedsTranslation - - TopicStub - - XPCOM -translation_of: Mozilla/Tech/XPCOM ---- -

XPCOM is a cross platform component object model, similar to Microsoft COM. It has multiple language bindings, allowing XPCOM components to be used and implemented in JavaScript, Java, and Python in addition to C++. Interfaces in XPCOM are defined in a dialect of IDL called XPIDL.

- -
-

XPCOM is no longer available for use by Firefox extensions. Use WebExtensions instead.

-
- -

XPCOM itself provides a set of core components and classes, e.g. file and memory management, threads, basic data structures (strings, arrays, variants), etc. The majority of XPCOM components are not part of this core set and are provided by other parts of the platform (e.g. Gecko or Necko) or by an application or even by an extension.

- -
-
Accessing the Windows Registry Using XPCOM
When implementing Windows-specific functionality, it is often useful to access the Windows registry for information about the environment or other installed programs. To this end, there exist XPCOM interfaces to read and write registry data. This article will show you how to use the available interfaces in several Mozilla products.
Aggregating the In-Memory Datasource
already_AddRefed
already_AddRefed in association with nsCOMPtr allows you to assign in a pointer without AddRefing it.
Binary compatibility
If Mozilla decides to upgrade to a compiler that does not have the same ABI as the current version, any built component may fail. It is a possiblity that is introduced when upgrading to a new compiler without recompiling everything. Effectively, it is a different platform.
Bundling multiple binary components
Binary XPCOM components are sometimes required to implement low-level features for extensions. Since binary components are linked against a single Gecko SDK, a dependency to a particular version of Gecko is created. If the component uses only "frozen" XPCOM interfaces, there is a good chance the same binary component will work with different versions of Gecko (version 1.8 and 1.9, for example). The more likely case is that the component uses "unfrozen" interfaces and those interfaces can change between Gecko versions. This can create a difficult situation for extension developers trying to support multiple Gecko versions (Firefox 2 and 3, for example).
Creating a Python XPCOM component
Creating Applications with Mozilla already provides a tutorial for making a simple JavaScript or C++ component (implementing the nsISimple interface). Here is how to make the same component in Python using PyXPCOM.
Fun With XBL and XPConnect
Generating GUIDs
GUIDs are used in Mozilla programming for identifying several types of entities, including XPCOM Interfaces (this type of GUIDs is callled IID), components (CID), and legacy add-ons—like extensions and themes—that were created prior to Firefox 1.5. Add-ons can (and should) be identified with IDs of the form extensionname@organization.tld since Firefox 1.5.
Generic factory
Most XPCOM factories can be very simple. Rick Potts wrote a templated-based generic factory (nsFactory<t>) that simplifies the factory creation process that just requires writing a CreateInstance() method. The new nsIGenericFactory interface takes this a step further, by providing a single interface that can be reused anytime a simple implementation of nsIFactory is needed. Here is the interface, and a description of its use.</t>
How to build a binary XPCOM component using Visual Studio
This is a simple tutorial for building XPCOM objects in C++ using Visual Studio. XPCOM is Mozilla’s cross platform component object model, similar to Microsoft’s COM technology. XPCOM components can be implemented in C, C++, and JavaScript, and can be used from C, C++, and JavaScript. That means you can call JavaScript methods from C++ and vice versa. For more information on the workings of XPCOM look elsewhere.
How To Pass an XPCOM Object to a New Window
If you want to be able to call functions within an XPCOM object from a XUL window's code, you can do so if you pass the XPCOM object as one of the arguments to the window creation method.
Interfacing with the XPCOM cycle collector
This is a quick overview of the cycle collector introduced into XPCOM for Firefox 3, including a description of the steps involved in modifying an existing C++ class to participate in XPCOM cycle collection. If you have a class that you think is involved in a cyclical-ownership leak, this page is for you.
Introduction to XPCOM for the DOM
Warning: this document has not yet been reviewed by the DOM gurus, it might contain some errors.
Language bindings
An XPCOM Language Binding is a bridge between a particular language and XPCOM to provide access to XPCOM objects from that language, and to let modules written in that language be used as XPCOM objects by all other languages for which there are XPCOM bindings.
Monitoring HTTP activity
Gecko includes the nsIHttpActivityObserver interface, which you can implement in your code to monitor HTTP transactions in real time, receiving a callback as the transactions take place.
nsCOMPtr versus RefPtr
Gecko code uses both nsCOMPtr and RefPtr as smart pointers. This guide provides some explanation and advice on how to choose between them.
Observer Notifications
The following are topics that you can observe during the course of an application. Unless otherwise noted you register for the topics using the nsIObserverService.
Setting HTTP request headers
HTTP is one of the core technologies behind the Web. In addition to the actual content, some important information is passed with HTTP headers for both HTTP requests and responses.
Storage
Storage is a SQLite database API. It is available to trusted callers, meaning extensions and Firefox components only.
The Thread Manager
The Thread Manager, introduced in Firefox 3, offers an easy to use mechanism for creating threads and dispatching events to them for processing.
-
Troubleshooting XPCOM components registration
Often the first time you create an XPCOM component, it may fail to register correctly.
Using nsCOMPtr
This document is the sum total of everything written down about nsCOMPtr. If you have a question about nsCOMPtr, and this document doesn't answer it, there probably isn't a document that answers it. You'll have to turn to the XPCOM newsgroup or another experienced nsCOMPtr user, or find the answer by experimentation.
Using nsIClassInfo
If you use a C++ class which implements nsIClassInfo from JavaScript, then you don't have to explicitly call QueryInterface on the JavaScript object to access the object's interfaces.
Using nsIDirectoryService
nsDirectoryService implements the nsIProperties interface. This implementation will allow you to Get(), Set(), Define(), and Undefine() nsIFile.
Using nsIPasswordManager
Technical review completed.
Using nsISimpleEnumerator
Using the clipboard
This section provides information about cutting, copying, and pasting to and from the clipboard.
Using the Gecko SDK
Weak reference
In XPCOM, a weak reference is a special object that contains a pointer to an XPCOM object, but doesnot keep that object alive. If the referent object is destroyed before the weak reference, the pointer inside the weak reference is set to nsnull.
Working with Multiple Versions of Interfaces
In this short note we illustrate how one can update an XPCOM module in -order for it to work in both Firefox 2 and Firefox 3, even if the interfaces have -changed in the interim.
Working with out parameters
wrappedJSObject
wrappedJSObject is a property sometimes available on XPConnect wrappers. When available, it lets you access the JavaScript object hidden by the wrapper.
XPCOM ABI
XPCOM ABI is the binary interface of XPCOM components. While XPCOM components written in a scripting language (such as JavaScript) can be moved across platforms (such as Windows and OS X) without adaptation, those written in a compiled language (such as C++) require recompilation when moving to a different platform. Often, compiled XPCOM components are called 'binary' or 'native'.
XPCOM category image-sniffing-services
In versions of Firefox prior to Firefox 3, extensions could add decoders for new image types. However, such decoders relied on servers sending correct MIME types; images sent with incorrect MIME types would not be correctly displayed.
XPCOM glue
The XPCOM Glue is a static library which component developers and embedders can link against. It allows developers to link only against the frozen XPCOM method symbols and maintain compatibility with multiple versions of XPCOM.
XPCOM guide
These articles provide tutorials and usage documentation for XPCOM, including how to use it in your own projects and how to build XPCOM components for your Firefox add-ons and the like.
XPCOM ownership guidelines
...naturally. If you create a temporary object, obviously it's up to you to destroy it. That's a sure sign of ownership. If you create an object with a longer lifespan, you will own it until you give ownership away.
XPCOM reference
This reference describes the interfaces and functions provided by the XPCOM library. In addition, it details the various helper classes and functions, as well as the components, provided by the XPCOM glue library. The contents herein are oriented primarily toward extension developers and people embedding XPCOM in other projects.
XPCOM tasks
The XPCOM module roughly parallels the C/C++ standard libraries. It overlaps them significantly, but goes beyond them in capabilities. XPCOM sits above the standard libraries. Its role is to extend them with facilities tailored to XPCOM development in general, and specifically the needs of Mozilla. Like the standard libraries, XPCOM must be a fairly self-contained library, so as not to encumber clients with any unnecessary external dependencies.
XPCOM Thread Synchronization
XPCOM thread synchronization primitives have the same semantics as those in NSPR, and each method of these synchronization objects (e.g. Mutex::Lock()) has a matching function in NSPR (PR_Lock()). This is no accident, as mozilla:: primitives are merely bare-minimum wrappers around NSPR's.
xptcall FAQ
xptcall is a small low level XPCOM method call library. It is implemented using platform specific C/C++ and assembly language code. It is used to facilitate cross language and cross thread method calls. Porting this code is required in order to make Mozilla run on any given platform.
Xptcall Porting Guide
Original Author: John Bandhauer, 31 May 1999.
Xptcall Porting Status
This is a status page for the multiplatform porting of xptcall. xptcall has a FAQ and a Porting Guide.
-
- -
- -
-

Join the XPCOM community

-
-
Choose your preferred method for joining the discussion:
- -
- -
-
- - diff --git a/files/ru/mozilla/tech/xpcom/reference/index.html b/files/ru/mozilla/tech/xpcom/reference/index.html deleted file mode 100644 index 7724292115..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: XPCOM reference -slug: Mozilla/Tech/XPCOM/Reference -tags: - - Landing - - Mozilla - - NeedsTranslation - - Reference - - TopicStub - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Reference ---- -

This reference describes the interfaces and functions provided by the XPCOM library. In addition, it details the various helper classes and functions, as well as the components, provided by the XPCOM glue library. The contents herein are oriented primarily toward extension developers and people embedding XPCOM in other projects.

-
-

Note: If you're working on a module in the Mozilla codebase that's compiled with the MOZILLA_INTERNAL_API flag set, some of these APIs -- the string functions and classes in particular -- are not the ones you should be using. See the XPCOM internal string guide for documentation of the internal string API used within the Mozilla codebase.

-
-

-
-
XPCOM Interface Reference
This is a reference to the XPCOM interfaces provided by the Mozilla platform.
-

-

Many XPCOM pages return an nsresult. Prior to Gecko 19 (Firefox 19 / Thunderbird 19 / SeaMonkey 2.16), this was an integer that simply returned an error code. It is now a strongly typed enum when XPCOM is built using a C++11 compiler. This causes compile-time errors to occur when improper values are returned as nsresult values, thereby making it easier to catch many bugs.

diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/index.html deleted file mode 100644 index 61f0ae4fca..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: XPCOM Interface Reference -slug: Mozilla/Tech/XPCOM/Reference/Interface -tags: - - NeedsTranslation - - TopicStub - - XPCOM - - XPCOM Interface Reference -translation_of: Mozilla/Tech/XPCOM/Reference/Interface ---- -

This is a reference to the XPCOM interfaces provided by the Mozilla platform.

-
-
-

See also

- diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html deleted file mode 100644 index 90109df203..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: nsIDOMHTMLMediaElement -slug: Mozilla/Tech/XPCOM/Reference/Interface/NsIDOMHTMLMediaElement -translation_of: Web/API/DOMMatrixReadOnly/translate ---- -
-
-
dom/interfaces/html/nsIDOMHTMLMediaElement.idlScriptable
-The basis for the nsIDOMHTMLAudioElement and nsIDOMHTMLVideoElement interfaces, which in turn implement the <audio> and <video> HTML5 elements. - -
-
1.0
- -
67
- -
- -
- -
Introduced
- -
Gecko 1.9.1
-
- -
Inherits from: nsIDOMHTMLElement Last changed in Gecko 1.1
-
-
- -
The nsIDOMHTMLMediaElement interface implements the DOM HTMLMediaElement interface. See that page for details.
diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html deleted file mode 100644 index 8fe801e95f..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html +++ /dev/null @@ -1,372 +0,0 @@ ---- -title: nsILoginManager -slug: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager -tags: - - Firefox 3 - - Interfaces - - 'Interfaces:Scriptable' - - Login Manager - - NeedsTranslation - - Thunderbird 3 - - TopicStub - - XPCOM - - XPCOM API Reference - - thunderbird -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager ---- -

-
toolkit/components/passwordmgr/public/nsILoginManager.idlСо скриптами
- - -Used to interface with the built-in Password Manager - - -
- -
1.0
- -
66
- -
- -
- -
Introduced
-
Gecko 1.9
- -
- -
- -
-Наследуется из: nsISupports -Последнее изменение в Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)
-

-

Replaces nsIPasswordManager which was used in older versions of Gecko.

-

Implemented by: @mozilla.org/login-manager;1. To create an instance, use:

-
var loginManager = Components.classes["@mozilla.org/login-manager;1"]
-                   .getService(Components.interfaces.nsILoginManager);
-
-

Method overview

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void addLogin(in nsILoginInfo aLogin);
nsIAutoCompleteResult autoCompleteSearch(in AString aSearchString, in nsIAutoCompleteResult aPreviousResult, in nsIDOMHTMLInputElement aElement);
unsigned long countLogins(in AString aHostname, in AString aActionURL, in AString aHttpRealm);
boolean fillForm(in nsIDOMHTMLFormElement aForm);
void findLogins(out unsigned long count, in AString aHostname, in AString aActionURL, in AString aHttpRealm, [retval, array, size_is(count)] out nsILoginInfo logins);
void getAllDisabledHosts([optional] out unsigned long count, [retval, array, size_is(count)] out wstring hostnames);
void getAllLogins([optional] out unsigned long count, [retval, array, size_is(count)] out nsILoginInfo logins);
boolean getLoginSavingEnabled(in AString aHost);
void modifyLogin(in nsILoginInfo oldLogin, in nsISupports newLoginData);
void removeAllLogins();
void removeLogin(in nsILoginInfo aLogin);
void searchLogins(out unsigned long count, in nsIPropertyBag matchData, [retval, array, size_is(count)] out nsILoginInfo logins);
void setLoginSavingEnabled(in AString aHost, in boolean isEnabled);
-

Methods

-

addLogin()

-

Stores a new login in the Login Manager.

-

Примечание: Default values for the nsILoginMetaInfo properties are created if the specified login doesn't explicitly specify them.

-
void addLogin(
-  in nsILoginInfo aLogin
-);
-
-
Parameters
-
-
- aLogin
-
- The login to store.
-
-
Exceptions thrown
-
-
-  
-
- An exception is thrown if the login information is already stored in the Login Manager. To change a login, you have to use modifyLogin().
-
-

autoCompleteSearch()

-

Generates results for a user field autocomplete menu.

-

Примечание: This method is provided for use only by the FormFillController, which calls it directly. It should not be used for any other purpose.

-
nsIAutoCompleteResult autoCompleteSearch(
-  in AString aSearchString,
-  in nsIAutoCompleteResult aPreviousResult,
-  in nsIDOMHTMLInputElement aElement
-);
-
-
Parameters
-
-
- aSearchString
-
- Missing Description
-
- aPreviousResult
-
- Missing Description
-
- aElement
-
- Missing Description
-
-
Return value
-

Missing Description

-

countLogins()

-

Returns the number of logins matching the specified criteria. Called when only the number of logins is needed, and not the actual logins (which avoids prompting the user for a Master Password, as the logins don't need to be decrypted).

-
unsigned long countLogins(
-  in AString aHostname,
-  in AString aActionURL,
-  in AString aHttpRealm
-);
-
-
Parameters
-
-
- aHostname
-
- The hostname to which to restrict searches, formatted as a URL. For example, "http://www.bar.com". To match all hostnames, specify "" (empty string). A value of null will cause countLogins() to not match any logins.
-
- aActionURL
-
- For form logins, this parameter should specify the URL to which the form will be submitted. To match any form login, specify "" (empty string). To not match any form logins (For example when interested in protocol logins only), specify null.
-
- aHttpRealm
-
- For protocol logins, specify the HTTP Realm for which the login applies; this is obtained from the WWW-Authenticate header (see RFC 2617). To match any protocol login, specify "" (empty string). To not match any protocol logins (For example when interested in form logins only), specify null.
-
-
Return value
-

The number of logins matching the parameters passed.

-

fillForm()

-

Fills out a form with login information, if appropriate information is available.

-

Примечание: This method will attempt to fill out the form regardless of the setting of the signon.autofillForms preference.

-
boolean fillForm(
-  in nsIDOMHTMLFormElement aForm
-);
-
-
Parameters
-
-
- aForm
-
- The HTMLform to attempt to fill out.
-
-
Return value
-

true if the form was successfully filled out; otherwise false.

-

findLogins()

-

Searches for logins matching the specified criteria. Called when looking for logins that might be applicable to a given form or authentication request.

-
void findLogins(
-  out unsigned long count,
-  in AString aHostname,
-  in AString aActionURL,
-  in AString aHttpRealm,
-  [retval, array, size_is(count)] out nsILoginInfo logins
-);
-
-
Parameters
-
-
- count
-
- The number of elements in the returned array. JavaScript callers can simply use the array's length property and supply a dummy argument for this parameter.
-
- aHostname
-
- The hostname to restrict searches to, formatted as a URL. For example, "http://www.bar.com".
-
- aActionURL
-
- For form logins, this parameter should specify the URL to which the form will be submitted. For protocol logins, specify null. An empty string ("") will match any value (except null).
-
- aHttpRealm
-
- For protocol logins, specify the HTTP Realm for which the login applies; this is obtained from the WWW-Authenticate header (see RFC 2617). For form logins, this parameter should be null. An empty string ("") will match any value (except null).
-
- logins
-
- An array of nsILoginInfo objects.
-
-
Example
-

This method can be called from JavaScript like this:

-
 var logins = myLoginMgr.findLogins({}, hostname, ...);
-
-

getAllDisabledHosts()

-

Returns a list of all hosts for which login saving is disabled.

-
void getAllDisabledHosts(
-  [optional] out unsigned long count,
-  [retval, array, size_is(count)] out wstring hostnames
-);
-
-
Parameters
-
-
- count
-
- The number of elements in the returned array. JavaScript callers can simply use the array's length property and supply a dummy argument for this parameter.
-
- hostnames
-
- An array of hostname strings in URL format without a pathname. For example: "https://www.site.com".
-
-
Example
-

You can call this method from JavaScript like this:

-
 var disabledHosts = myLoginMgr.getAllDisabledHosts({});
-
-

getAllLogins()

-

Returns an array containing all logins recorded by the Login Manager.

-

If you just want to see if any logins are stored, use countLogins() instead. It's more efficient, and avoids the possibility of the user being prompted for their master password.

-
void getAllLogins(
-  [optional] out unsigned long count,
-  [retval, array, size_is(count)] out nsILoginInfo logins
-);
-
-
Parameters
-
-
- count
-
- The number of elements in the returned array. JavaScript callers can simply use the array's length property and supply a dummy argument for this parameter.
-
- logins
-
- An array of nsILoginInfo objects containing all the logins the Login Manager has on record.
-
-
Example
-

You can call this method from JavaScript like this:

-
 var logins = myLoginMgr.getAllLogins({});
-
-

getLoginSavingEnabled()

-

Reports whether or not saving login information is enabled for a host.

-
boolean getLoginSavingEnabled(
-  in AString aHost
-);
-
-
Parameters
-
-
- aHost
-
- The hostname to check. This argument should be in the origin URL format, with no pathname. For example: "https://www.site.com".
-
-
Return value
-

true if login saving is enabled for the host, otherwise false.

-

modifyLogin()

-

Modifies an existing login by replacing it with a new one.

-

If newLoginData is a nsILoginInfo, all of the old login's nsILoginInfo properties are changed to the values from newLoginData (but the old login's nsILoginMetaInfo properties are unmodified).

-

If newLoginData is a nsIPropertyBag, only the specified properties will be changed. The nsILoginMetaInfo properties of oldLogin can be changed in this manner.

-

If the propertybag contains an item named "timesUsedIncrement", the login's timesUsed property will be incremented by the item's value.

-
void modifyLogin(
-  in nsILoginInfo oldLogin,
-  in nsISupports newLoginData
-);
-
-
Parameters
-
-
- oldLogin
-
- The login to be modified.
-
- newLoginData
-
- The login information to replace the oldLogin with. This may be specified as either an nsILoginInfo or an nsIPropertyBag2 object.
-
-

removeAllLogins()

-

Removes all logins known by the Login Manager. This works without a need for the master password, if one is set.

-
void removeAllLogins();
-
-
Parameters
-

None.

-

removeLogin()

-

Removes a login from the Login Manager.

-

Примечание: The specified login must exactly match a stored login. However, the values of any nsILoginMetaInfo properties are ignored.

-
void removeLogin(
-  in nsILoginInfo aLogin
-);
-
-
Parameters
-
-
- aLogin
-
- The login to remove from the Login Manager. Only a login that is an exact match is deleted.
-
-

searchLogins()

-

Searches for logins in the login manager's data store, returning an array of matching logins. If there are no matching logins, an empty array is returned.

-
void searchLogins(
-  out unsigned long count,
-  in nsIPropertyBag matchData,
-  [retval, array, size_is(count)] out nsILoginInfo logins
-);
-
-
Parameters
-
-
- count
-
- The number of elements in the returned array.
-
- matchData
-
- The data used for the search. This does not follow the same requirements as findLogins() for those fields; wildcard matches are not specified.
-
- logins
-
- An array of matching nsILoginInfo objects.
-
-
Example
-

This method can be called from JavaScript like this:

-
 var logins = myLoginMgr.searchLogins({}, matchData);
- var numLogins = logins.length;
-
-

setLoginSavingEnabled()

-

Enables or disables storing logins for a specified host. When login storing is disabled, the Login Manager won't prompt the user to store logins for that host. Existing logins are not affected.

-
void setLoginSavingEnabled(
-  in AString aHost,
-  in boolean isEnabled
-);
-
-
Parameters
-
-
- aHost
-
- The hostname to adjust the setting for. This argument should be in the origin URL format, with no pathname. For example: "https://www.site.com".
-
- isEnabled
-
- If true, login saving is enabled for the specified host. If false, login saving is disabled.
-
-

See also

- -

diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html deleted file mode 100644 index 16c2c5a029..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Using nsILoginManager -slug: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager ---- -
-
-

Working with the Login Manager

-

Extensions often need to securely store passwords to external sites, web applications, and so on. To do so securely, they can use nsILoginManager, which provides for secure storage of sensitive password information and nsILoginInfo, which provides a way of storing login information.

-

Getting nsILoginManager

-

To get a component implementing nsILoginManager, use the following:

-
-
var passwordManager = Components.classes["@mozilla.org/login-manager;1"].getService(
-	Components.interfaces.nsILoginManager
-);
-
-

Most Login Manager functions take an nsILoginInfo object as a parameter. An nsILoginInfo object contains the following attributes: hostname, form submit URL, HTTP realm, username, username field, password, and password field. The hostname, username and password attributes are mandatory, while the other fields are set based on whether the login is for a web page form or an HTTP/FTP authentication site login. See the nsILoginInfo attribute definitions for more details. Defining an nsILoginInfo object is simple:

-
-
var nsLoginInfo = new Components.Constructor(
-	"@mozilla.org/login-manager/loginInfo;1",
-	Components.interfaces.nsILoginInfo,
-	"init"
-);
-
-var loginInfo = new nsLoginInfo(
-	hostname, formSubmitURL, httprealm, username, password, usernameField, passwordField
-);
-
-
-

Examples

-

Creating a login for a web page

-
var formLoginInfo = new nsLoginInfo(
-	'http://www.example.com',
-	'http://login.example.com',
-	null,
-	'joe',
-	'SeCrEt123',
-	'uname',
-	'pword'
-);
-

This login would correspond to a HTML form such as:

-
<form action="http://login.example.com/foo/authenticate.cgi">
-	<div>Please log in.</div>
-	<label>Username:</label> <input type="text" name="uname">
-	<label>Password:</label> <input type="password" name="pword">
-</form>
-
-

Creating a site authentication login

-
var authLoginInfo = new nsLoginInfo(
-	'http://www.example.com',
-	null,
-	'ExampleCo Login',
-	'alice',
-	'SeCrEt321',
-	"",
-	""
-);
-
-

This would correspond to a login on http://www.example.com when the server sends a reply such as:

-
 HTTP/1.0 401 Authorization Required
- Server: Apache/1.3.27
- WWW-Authenticate: Basic realm="ExampleCo Login"
-
-
-

Creating a local extension login

-
var extLoginInfo = new nsLoginInfo(
-	'chrome://firefoo',
-	null,
-	'User Registration',
-	'bob',
-	'123sEcReT',
-	"",
-	""
-);
-

From a component creating a new info block is done slightly differently:

-
var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init");
-var extLoginInfo = new nsLoginInfo('chrome://firefoo', null, 'User Registration', 'bob', '123sEcReT', '', '');
-//var extLoginInfo = new nsLoginInfo(aHostname, aFormSubmitURL, aHttpRealm, aUsername, aPassword, aUsernameField, aPasswordField)
-
-

The Login Manager treats this as if it was a web site login. You should use your extension's chrome:// URL to prevent conflicts with other extensions, and a realm string which briefly denotes the login's purpose.

-

Storing a password

-

To store a password in the Login Manager, you first need to create an nsILoginInfo object as defined above. Then you simply need to call the nsILoginManager method addLogin().

-
myLoginManager.addLogin(loginInfo);
-
-

Примечание: This will throw an exception if both the httprealm and formSubmitURL parameters are NULL. One must be specified when storing a password. The hostname, username and password parameters are also mandatory.

-

Retrieving a password

-

Retrieving a password from the Login Manager is slightly more difficult. In order to locate a password, the hostname, formSubmitURL and httprealm must match exactly what is stored for the password to be found. The only exception is that if the stored formSubmitURL is blank, in which case the formSubmitURL parameter is ignored. Note that the hostname and formSubmitURL arguments should not include the path from the full URL. The example below should serve as a starting point for matching form logins:

-
var hostname = 'http://www.example.com';
-var formSubmitURL = 'http://www.example.com';  // not http://www.example.com/foo/auth.cgi
-var httprealm = null;
-var username = 'user';
-var password;
-
-try {
-	// Get Login Manager
-	var myLoginManager = Components.classes["@mozilla.org/login-manager;1"].
-		getService(Components.interfaces.nsILoginManager);
-
-	// Find users for the given parameters
-	var logins = myLoginManager.findLogins({}, hostname, formSubmitURL, httprealm);
-
-	// Find user from returned array of nsILoginInfo objects
-	for (var i = 0; i < logins.length; i++) {
-		if (logins[i].username == username) {
-			password = logins[i].password;
-			break;
-		}
-	}
-}
-
-catch(ex) {
-	// This will only happen if there is no nsILoginManager component class
-}
-

Note that the user will be prompted for their master password if they have chosen to set one to secure their passwords.

-

Removing a password

-

Removing a password is simple:

-
myLoginManager.removeLogin(loginInfo);
-
-

When removing a password the specified nsILoginInfo object must exactly match what was stored or an exception will be thrown. This includes the password attribute. Here's an example on how to remove the password without actually knowing what the password is:

-
// example values
-var hostname = 'http://www.example.com';
-var formSubmitURL = 'http://www.example.com';
-var httprealm = null;
-var username = 'user';
-
-try {
-	// Get Login Manager
-	var passwordManager = Components.classes["@mozilla.org/login-manager;1"].
-		getService(Components.interfaces.nsILoginManager);
-
-	// Find users for this extension
-	var logins = passwordManager.findLogins({}, hostname, formSubmitURL, httprealm);
-
-	for (var i = 0; i < logins.length; i++) {
-		if (logins[i].username == username) {
-			passwordManager.removeLogin(logins[i]);
-			break;
-		}
-	}
-}
-catch(ex) {
-	// This will only happen if there is no nsILoginManager component class
-}
-

Changing stored login information

-

Changing a password is rather simple. Since all this does is make a removeLogin() call followed by an addLogin() call, it has the same caveats as both of them: namely that the oldLogin must match an existing login exactly (see above) and that the newLogin attributes must be set correctly.:

-
myLoginManager.modifyLogin(oldLogin, newLogin);
-

Login Manager notifications

-

-

Замечание по Firefox 3.5

-

The Login Manager notifications were added in Firefox 3.5.

-

-

Firefox 3.5 and later send assorted notifications when various Login Manager related events occur, including when form autofill does not occur for various reasons, as well as when changes are made to the Login Manager's database. See the Login Manager section of the article on observer notifications for details.

-

Debugging

-

The login manager implementation has the ability to send debug messages to the Error Console, which can provide some visibility into what it's doing. To enable the debug logging, see http://wiki.mozilla.org/Firefox:Pass...ager_Debugging.

-

Supporting older versions of Gecko

-

If you want your extension to support both Gecko 1.9 (Firefox 3, Thunderbird 3, SeaMonkey 2) and older versions it will need to implement both the nsILoginManager and nsIPasswordManager components. A simple method to do this is as follows:

-
if ("@mozilla.org/passwordmanager;1" in Components.classes) {
-	// Password Manager exists so this is not Firefox 3 (could be Firefox 2, Netscape, SeaMonkey, etc).
-	// Password Manager code
-} else if ("@mozilla.org/login-manager;1" in Components.classes) {
-	// Login Manager exists so this is Firefox 3
-	// Login Manager code
-}
-

See also

- diff --git a/files/ru/mozilla/tech/xul/action/index.html b/files/ru/mozilla/tech/xul/action/index.html deleted file mode 100644 index 3f4ec0f4de..0000000000 --- a/files/ru/mozilla/tech/xul/action/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: action -slug: Mozilla/Tech/XUL/action -tags: - - XUL Elements - - XUL ссылки -translation_of: Archive/Mozilla/XUL/action ---- -
- « Справочник по XUL [ - Примеры | - Атрибуты | - Свойства | - Методы | - См. также ] -
- -
Действие должно содержаться в query или rule элементе. Используется для указания содержимого,  генерируемого для каждого совпадающего узла. Внутри action, атрибуты анализируются и выявляются uri, ссылки на ресурсы и переменные.
- -

Дополнительная информация доступна в -руководстве по XUL.
- Зарубежный источник: Actions.

- -

Примеры

- -
 пример использования
-
-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A">
-  <template>
-    <query>
-      <content uri="?start"/>
-      <triple subject="?start"
-              predicate="http://www.xulplanet.com/rdf/relatedItem"
-              object="?relateditem"/>
-    </query>
-    <action>
-      <button uri="?relateditem" label="?relateditem"/>
-    </action>
-  </template>
-</vbox>
- -

Атрибуты

- -

- - - - - -

Наследуется с XUL элемента
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-

- -

Свойства

- -

-

Наследуемые свойства
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Методы

- -

-

Inherited Methods
addEventListener(), appendChild(), blur, click, cloneNode(), compareDocumentPosition, dispatchEvent(), doCommand, focus, getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getBoundingClientRect(), getClientRects(), getElementsByAttribute, getElementsByAttributeNS, getElementsByClassName(), getElementsByTagName(), getElementsByTagNameNS(), getFeature, getUserData, hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isDefaultNamespace(), isEqualNode, isSameNode, isSupported(), lookupNamespaceURI, lookupPrefix, normalize(), querySelector(), querySelectorAll(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS(), setUserData

- -

См. также

- -

diff --git a/files/ru/mozilla/tech/xul/attribute/disabled/index.html b/files/ru/mozilla/tech/xul/attribute/disabled/index.html deleted file mode 100644 index aa8ff7ebb9..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/disabled/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: disabled -slug: Mozilla/Tech/XUL/Attribute/disabled -tags: - - XUL Attributes - - XUL Reference -translation_of: Archive/Mozilla/XUL/Attribute/disabled ---- -
- « Справочник по XUL
-
-
- disabled
-
- Тип: булево
-
-  Указывает, отключен ли элемент или нет. В случае, если элемент имеет значение true, он отключается. Отключенные элементы имеют, как правило, так называемый "затенённый" цветовой эффект. Если элемент отключен, он не будет отвечать на какие-либо действия пользователя, он не может быть выбран, и событие command в этом случае не вызывается. -
-
- Тем не менее, элемент всё ещё будет отвечать событиям, связанным с мышью (т.е. реагировать на mouse events). Для активации элемента, присвойте атрибуту значение false.
-
-
- Графические элементы управления имеют свойство disabled, которое (кроме меню и их элементов) принято использовать в качестве атрибута на случай, если понадобится расширить функционал: добавить/изменить режим работы элемента, задействовать/отключить элемент и так далее.
-
-
- Image:XUL_ref_attr_disabled.png -
// Отключение элемента
-document.getElementById('buttonRemove').setAttribute("disabled", "true");
-
-// Задействование элемента путём снятия атрибута "disabled"
-document.getElementById('buttonRemove').removeAttribute("disabled");
-
-

-

Замечание по Firefox 3.5

-

Поддержка данного атрибута была добавлена в Firefox 3.5 для элементов keyset.

-

-
-

 

diff --git a/files/ru/mozilla/tech/xul/attribute/hidden/index.html b/files/ru/mozilla/tech/xul/attribute/hidden/index.html deleted file mode 100644 index f3a704e075..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/hidden/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: hidden -slug: Mozilla/Tech/XUL/Attribute/hidden -tags: - - XUL Attributes - - XUL Reference -translation_of: Archive/Mozilla/XUL/Attribute/hidden ---- -
- « Справочник по XUL
-
-
- hidden
-
- Тип: булево
-
- В случае, если значение установлено как true, элемент не отображается. Аналогом является установка в CSS свойства отображения 'none'.
-
-
-

Смотрите также

- -

-
-

 

diff --git a/files/ru/mozilla/tech/xul/attribute/index.html b/files/ru/mozilla/tech/xul/attribute/index.html deleted file mode 100644 index ef0984c948..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Attribute -slug: Mozilla/Tech/XUL/Attribute ---- -

 

- -

This page was auto-generated because a user created a sub-page to this page.

- -

 

diff --git a/files/ru/mozilla/tech/xul/index.html b/files/ru/mozilla/tech/xul/index.html deleted file mode 100644 index 326dbea5cf..0000000000 --- a/files/ru/mozilla/tech/xul/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: XUL -slug: Mozilla/Tech/XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL ---- -

 

- -
Руководство по XUL
-Подробное руководство, которое поможет вам легко начать работать с XUL. Первоначально было опубликовано на XULPlanet.
- -
XUL (XML User Interface Language) — это основанный на XML язык разметки, используемый в приложениях Mozilla. XUL позволяет создавать кроссплатформенные приложения с интерфейсами любой сложности, как использующие интернет, так и работающие локально. В приложениях легко изменить графику, всплывающие подсказки и расположение элементов так, чтобы их интерфейс отвечал требованиям бренда или был переведен на любой язык. Веб-разработчики, уже хорошо знакомые с Dynamic HTML (DHTML), легко изучат XUL и так же легко смогут создавать приложения с его помощью. Чтобы посмотреть примеры интерфейсов на XUL, откройте страницу XUL Periodic Table в браузере Firefox или любом другом браузере на движке Gecko.
- - - - - - - - -
-

Документация

- -
-
Справочник по XUL
-
См. также: докуметация MDC на prefwindow.
-
- -
-
Радости XUL
-
Здесь перечисленны основные возможности компонентов XUL.
-
- -
-
Совместимость приложений с Firefox 1.5
-
Список изменений в Firefox 1.5, важных для разработчиков на XUL.
-
- -
-
Руководство по шаблонам в XUL
-
Детальное руководство, рассказывающее о шаблонах, которые генерируют содержимое документа XUL на основе динамических источников данных.
-
- -
-
Оверлеи
-
Статья про оверлеи. Оверлеи используются для добавления элементов в уже существующие интерфейсы. Оверлеи — это очень удобный механизм для функционального или частичного расширения основанных на XUL приложений.
-
- -

Все ссылки…

-
-

Сообщество

- -
    -
  • Форумы Mozilla…
  • -
- -

- - - -

Утилиты

- - - -

Все ссылки…

- -

См. также

- -
-
JavaScript, XBL, CSS, RDF, Расширения, XULRunner
-
-
- -

Категории

- -

Interwiki Language Links

- -

 

- -

diff --git a/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html b/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html deleted file mode 100644 index ea5b2dd298..0000000000 --- a/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: dateLeadingZero -slug: Mozilla/Tech/XUL/Property/dateLeadingZero -translation_of: Archive/Mozilla/XUL/Property/dateLeadingZero ---- -
- « XUL Справочник
-
-
- dateLeadingZero
-
- Type: булево
-
- Значение, имеющее атрибут "только чтение", и указывающее, надо ли отображать ноль перед числом дня даты в случае, если число меньше 10.
-
diff --git a/files/ru/mozilla/tech/xul/property/datepicker.value/index.html b/files/ru/mozilla/tech/xul/property/datepicker.value/index.html deleted file mode 100644 index 9585adae32..0000000000 --- a/files/ru/mozilla/tech/xul/property/datepicker.value/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: datepicker.value -slug: Mozilla/Tech/XUL/Property/datepicker.value -translation_of: Archive/Mozilla/XUL/Property/datepicker.value ---- -
- « XUL Справочник
-
-
- value
-
- Type: строка
-
- Служит для отображения выбранной даты в формате ГГГГ-ММ-ДД. В отличие от свойства month, в этом значении месяцы ранжируются от 01 до 12. Используйте это свойство для установки нужной даты.
-
diff --git a/files/ru/mozilla/tech/xul/property/index.html b/files/ru/mozilla/tech/xul/property/index.html deleted file mode 100644 index e6a3fd7eae..0000000000 --- a/files/ru/mozilla/tech/xul/property/index.html +++ /dev/null @@ -1,295 +0,0 @@ ---- -title: Property -slug: Mozilla/Tech/XUL/Property -tags: - - NeedsTranslation - - TopicStub - - XUL Properties - - XUL Reference -translation_of: Archive/Mozilla/XUL/Property ---- -

« XUL Справочник

- - - diff --git a/files/ru/mozilla/tech/xul/property/selectionstart/index.html b/files/ru/mozilla/tech/xul/property/selectionstart/index.html deleted file mode 100644 index 4a5ba34fdc..0000000000 --- a/files/ru/mozilla/tech/xul/property/selectionstart/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: selectionStart -slug: Mozilla/Tech/XUL/Property/selectionStart -translation_of: Archive/Mozilla/XUL/Property/selectionStart ---- -
« XUL Справочник
- -
-
selectionStart
-
Тип: integer
-
Получает или устанавливает начало выделения области текста в поле ввода. Используется в паре со свойством selectionEnd. Значение указывает на порядковый номер первого символа в выделенном фрагменте относительно всего текста.
-
- -
-

-
diff --git a/files/ru/mozilla/tech/xul/tabbrowser/index.html b/files/ru/mozilla/tech/xul/tabbrowser/index.html deleted file mode 100644 index 90f858cfeb..0000000000 --- a/files/ru/mozilla/tech/xul/tabbrowser/index.html +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: tabbrowser -slug: Mozilla/Tech/XUL/tabbrowser -translation_of: Archive/Mozilla/XUL/tabbrowser ---- -
- - « Справочник по XUL [ - Примеры | - Атрибуты | - Свойства | - Методы | - См. также ] -
-

This element is used for holding a set of read-only views of Web documents. It is similar to the browser element, except that multiple documents can be displayed, each in a separate tab.

-

Примечание: Starting in Firefox 3 (XULRunner/Gecko 1.9), this is only used in the main Firefox window and cannot be used in other XUL windows by third-party applications or extensions.

-
-
- Attributes
-
- autocompleteenabled, autocompletepopup, autoscroll, contentcontextmenu, contenttooltip, handleCtrlPageUpDown, onbookmarkgroup, onnewtab, tabmodalPromptShowing
-
-
-
- Properties
-
- browsers, canGoBack, canGoForward, contentDocument, contentTitle, contentViewerEdit, contentViewerFile, contentWindow, currentURI, docShell, documentCharsetInfo, homePage, markupDocumentViewer, securityUI, selectedBrowser, selectedTab, sessionHistory, tabContainer, tabs, visibleTabs, webBrowserFind, webNavigation, webProgress
-
-
-
- Methods
-
- addProgressListener, addTab, addTabsProgressListener,appendGroup, getBrowserAtIndex, getBrowserIndexForDocument, getBrowserForDocument, getBrowserForTab, getIcon, getNotificationBox, getTabForBrowser, getTabModalPromptBox, goBack, goBackGroup, goForward, goForwardGroup, goHome, gotoIndex, loadGroup, loadOneTab, loadTabs, loadURI, loadURIWithFlags, moveTabTo, pinTab, reload, reloadAllTabs, reloadTab, reloadWithFlags, removeAllTabsBut, removeCurrentTab, removeProgressListener, removeTab, removeTabsProgressListener,replaceGroup, selectTabAtIndex, setIcon, showOnlyTheseTabs, stop, unpinTab
-
-

Attributes

-

- -
- -
- - -
-
autoscroll
-
Тип: boolean
-
Установите значение атрибута на false, чтобы отключить автопрокрутку для браузера. Если значение этого атрибута true или отсутствует, автопрокрутка будет включена или в зависимости от пользовательских настроек general.autoScroll.
-
-
- -
- -
- -
- -
- -
- -

-

Properties

-

- -
-
browsers
-
Type: nodelist of browser elements
-
Holds a list of the browser elements inside the tabbrowser.
-
-
-
- canGoBack
-
- Type: boolean
-
- This read-only property is true if there is a page to go back to in the session history and the Back button should be enabled.
-
- -
-
canGoForward
-
Type: boolean
-
This read-only property is true if there is a page to go forward to in the session history and the Forward button should be enabled.
-
-
-
- contentDocument
-
- Type: document
-
- This read-only property contains the document object in the element.
-
-
-
- contentTitle
-
- Type: string
-
- This read-only property contains the title of the document object in the browser.
-
-
-
- contentViewerEdit
-
- Type: nsIContentViewerEdit
-
- This read-only property contains the nsIContentViewerEdit which handles clipboard operations on the document.
-
-
-
- contentViewerFile
-
- Type: nsIContentViewerFile
-
- Reference to the nsIContentViewerFile interface for the document.
-
-
contentWindow
Type: TODO
Use the contentWindow.wrappedJSObject to obtain a DOM(html) window object
-
-
-
- currentURI
-
- Type: nsIURI
-
- This read-only property contains the currently loaded URL. To change the URL, use the loadURI method.
-
-
-
- docShell
-
- Type: nsIDocShell
-
- This read-only property contains the nsIDocShell object for the document.
-
-
-
- documentCharsetInfo Obsolete since Gecko 12.0
-
- Type: nsIDocumentCharsetInfo
-
- This read-only property contains the nsIDocumentCharsetInfo object for the document which is used to handle which character set should be used to display the document. The properties of the nsIDocumentCharsetInfo object were merged into the docshell in Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9).
-
-
-
- homePage
-
- Type: string home page URL
-
- This property holds the value of the user's home page setting.
-
-
-
- markupDocumentViewer
-
- Type: nsIMarkupDocumentViewer
-
- This read-only property contains the nsIMarkupDocumentViewer which is responsible for drawing the document.
-
-
-
- securityUI
-
- Type: nsISecureBrowserUI
-
- The read-only property holds an object which may be used to determine the security level of the loaded document.
-
- -
-
selectedBrowser
-
Type: browser element
-
This read-only property returns the currently displayed browser element.
-
- -
-
selectedTab
-
Type: tab element
-
A reference to the currently selected tab, which will always be one of the tab elements in the tabs element. Assign a value to this property to modify the currently selected tab.
-
-
-
- sessionHistory
-
- Type: nsISHistory
-
- This read-only property contains the nsISHistory object which holds the session history.
-
- -
-
tabContainer
-
Type: tabs element
-
 
-
Returns the tabs element that contains the tabs. This is useful for add-ons that need to use events related to tabs in the browser window.
-
-
tabs
Type: array
A NodeList containing the tab objects for each tab in the tabbrowser. This is a shortcut for looking at the tabs in the tabContainer.
-
-
visibleTabs
Type: array
An array containing tab objects for each visible tab in the tabbrowser. This lets you determine which tabs are visible in the current tab set.
-
-
-
- webBrowserFind
-
- Type: nsIWebBrowserFind
-
- This read-only property contains an nsIWebBrowserFind object which can be used to search for text in the document.
-
-
-
- webNavigation
-
- Type: nsIWebNavigation
-
- This read-only property contains the nsIWebNavigation object for the document. Most of its methods are callable directly on the element itself, such as goBack and goForward. It also contains the load constants used by reloadWithFlags and loadURIWithFlags.
-
-
-
- webProgress
-
- Type: nsIWebProgress
-
- This read-only property contains an nsIWebProgress object which is used to monitor the progress of a document loading.
-

-

Methods

-

- - - - - -
-

Наследуемые методы
-addEvrutListruer(), apprudChild(), blur, click, clonruode(), compareDocumrutPosition, dispatchEvrut(), doCommand, focus, getAttribute(), getAttributruode(), getAttributruodruS(), getAttributruS(), getBoundingClirutRect(), getClirutRects(), getElemrutsByAttribute, getElemrutsByAttributruS, getElemrutsByClassName(), getElemrutsByTagName(), getElemrutsByTagNamruS(), getFeature(), getUserData, hasAttribute(), hasAttributruS(), hasAttributes(), hasChildNodes(), insertBefore(), isDefaultNamespace(), isEqualNode, isSamruode, isSupported(), lookupNamespaceURI, lookupPrefix, normalize(), querySelector(), querySelectorAll(), removeAttribute(), removeAttributruode(), removeAttributruS(), removeChild(), removeEvrutListruer(), replaceChild(), setAttribute(), setAttributruode(), setAttributruodruS(), setAttributruS(), setUserData

- -

- - diff --git "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autocheck/index.html" "b/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autocheck/index.html" deleted file mode 100644 index f8b9f1939a..0000000000 --- "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autocheck/index.html" +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: autocheck -slug: Mozilla/Tech/XUL/Атрибуты/autoCheck -translation_of: Archive/Mozilla/XUL/Attribute/autoCheck ---- -
« Справочник по XUL
- -
-
autocheck
-
Тип: boolean
-
Если значение этого атрибута true или отсутствует, проверяемое состояние кнопки будет переключаться каждый раз при нажатии кнопки. Если значение этого атрибута false, проверяемое состояние должно быть отрегулировано вручную. Когда autocheck истинно, тип кнопки должен быть "checkbox" или "radio".
-
diff --git "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autoscroll/index.html" "b/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autoscroll/index.html" deleted file mode 100644 index f60c1a1e56..0000000000 --- "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/autoscroll/index.html" +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: autoscroll -slug: Mozilla/Tech/XUL/Атрибуты/autoscroll -translation_of: Archive/Mozilla/XUL/Attribute/autoscroll ---- -
« Справочник по XUL
- -
-
autoscroll
-
Тип: boolean
-
Установите значение атрибута на false, чтобы отключить автопрокрутку для браузера. Если значение этого атрибута true или отсутствует, автопрокрутка будет включена или в зависимости от пользовательских настроек general.autoScroll.
-
diff --git "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/index.html" "b/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/index.html" deleted file mode 100644 index 02f7461eb9..0000000000 --- "a/files/ru/mozilla/tech/xul/\320\260\321\202\321\200\320\270\320\261\321\203\321\202\321\213/index.html" +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: Атрибуты -slug: Mozilla/Tech/XUL/Атрибуты -tags: - - XUL -translation_of: Archive/Mozilla/XUL/Attribute ---- -

-

-

Атрибуты XUL

- diff --git "a/files/ru/mozilla/tech/xul/\320\274\320\265\321\202\320\276\320\264\321\213/index.html" "b/files/ru/mozilla/tech/xul/\320\274\320\265\321\202\320\276\320\264\321\213/index.html" deleted file mode 100644 index 135b087f78..0000000000 --- "a/files/ru/mozilla/tech/xul/\320\274\320\265\321\202\320\276\320\264\321\213/index.html" +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Методы -slug: Mozilla/Tech/XUL/Методы -translation_of: Archive/Mozilla/XUL/Method ---- -

« XUL Reference home

- - - - - - diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/index.html" deleted file mode 100644 index c9b37fb8b8..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/index.html" +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Руководство по XUL -slug: Mozilla/Tech/XUL/Руководство_по_XUL -tags: - - XUL - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial ---- -

 

-


- Это руководство расскажет нам о XUL (читается как зул). XUL — это основанный на XML язык описания интерфейса пользователя (XML User-interface Language). Язык создавался для описания интерфейсов в приложениях Mozilla.

-

Введение

- -

Простые элементы

- -

Боксы (BOX Model)

- -

Элементы представления

- -

Меню и панели инструментов

- -

Скрипты и события

- -

Объектная модель документа (DOM)

- -

Деревья

- -

RDF и шаблоны

- -

Темы оформления и локализация

- -

Привязки (Bindings)

- -

Специальные виды окон

- -

Установка

- -
-

Это руководство первоначально написано Нилом Дикиным(Neil Deakin). И он любезно разрешил нам разместить текст на MDC.

-
-
-
Информация о происхождении документа
- -
-

Interwiki Language Links

-

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/keyboard_shortcuts/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/keyboard_shortcuts/index.html" deleted file mode 100644 index ea41465bc4..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/keyboard_shortcuts/index.html" +++ /dev/null @@ -1,392 +0,0 @@ ---- -title: Keyboard Shortcuts -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Keyboard_Shortcuts -translation_of: Archive/Mozilla/XUL/Tutorial/Keyboard_Shortcuts ---- -

-

« Предыдущая статьяСледующая статья »

-

- -

You could use keyboard event handlers to respond to the keyboard. However, it would be tedious to do that for every button and menu item (though it could be necessary when one's key commands are only triggered when the user is focused on a particular element).

- -

Creating a Keyboard Shortcut

- -

XUL provides methods in which you can define keyboard shortcuts. We've already seen in the section on menus that we can define an attribute called accesskey which specifies the key which a user can press to activate the menu or menu item. In the example below, the File menu can be selected by pressing Alt and F (or some other key combination for a specific platform). Once the File menu is open, the Close menu item can be selected by pressing C.

- -

Example 1 : Исходный код Просмотреть

- -
<menubar id="sample-menubar">
-  <menu id="file-menu" label="File" accesskey="f">
-    <menupopup id="file-popup">
-      <menuitem id="close-command" label="Close" accesskey="c"/>
-    </menupopup>
-  </menu>
-</menubar>
-
- -

You can also use the accesskey attribute on buttons. When the key is pressed in this case, the button is selected.

- -

You might want to set up more general keyboard shortcuts however. For example, pressing Control+C to copy text to the clipboard. Although shortcuts such as this might not always be valid, they will usually work any time the window is open. Usually, a keyboard shortcut will be allowed at any time and you can check to see whether it should do something using a script. For example, copying text to the clipboard should only work when some text is selected.

- -

Key element

- -

XUL provides an element, key, which lets you define a keyboard shortcut for a window. It has attributes to specify the key that should be pressed and what modifier keys (such as Shift or Control) need to be pressed. An example is shown below:

- -
<keyset>
-  <key id="sample-key" modifiers="shift" key="R"/>
-</keyset>
-
- -

This sample defines a keyboard shortcut that is activated when the user presses the Shift key and R. The key attribute (note that it has the same name as the element itself) can be used to indicate which key should be pressed, in this case R. You could add any character for this attribute to require that key to be pressed. The modifiers that must be pressed are indicated with the modifiers attribute. It is a space-separated list of modifier keys, which are listed below.

- -
-
alt
-
The user must press the Alt key. On the Macintosh, this is the Option key.
-
control
-
The user must press the Control key.
-
meta
-
The user must press the Meta key. This is the Command key on the Macintosh.
-
shift
-
The user must press the Shift key.
-
os
-
The user must press the Win key. This is the Super key or the Hyper key on Linux. If this value is used, typically the key combination conflicts with system wide shortcut keys. So, you shouldn't use this value as far as possible.
-
accel
-
The user must press the special accelerator key. The key used for keyboard shortcuts on the user's platform. Usually, this would be the value you would use.
-
access
-
The user must press the special access key. The key used for access keys on the user's platform.
-
- -

Your keyboard won't necessarily have all of the keys, in which case they will be mapped to modifier keys that you do have.

- -

The key element must be placed inside a keyset element. This element is designed for holding a set of key elements, which serves to group all of the key definitions in one place in a file. Any key elements outside of a keyset element will not work.

- -

Each platform generally uses a different key for keyboard shortcuts. For example, Windows uses the Control key and the Macintosh uses the Command key. It would be inconvenient to define separate key elements for each platform. Luckily, there is a solution. The modifier accel refers to the special platform-specific key used for shortcuts. It works just like the other modifiers, but won't be the same on every platform.

- -

Here are some additional examples:

- -
<keyset>
-  <key id="copy-key" modifiers="control" key="C"/>
-  <key id="explore-key" modifiers="control alt" key="E"/>
-  <key id="paste-key" modifiers="accel" key="V"/>
-</keyset>
-
- -

Keycode attribute

- -

The key attribute is used to specify the key that must be pressed. However, there will also be cases where you want to refer to keys that cannot be specified with a character (such as the Enter key or the function keys). The key attribute can only be used for printable characters. Another attribute, keycode can be used for non-printable characters.

- -

The keycode attribute should be set to a special code which represents the key you want. A table of the keys is listed below. Not all of the keys are available on all keyboards.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VK_CANCELVK_BACKVK_TABVK_CLEAR
VK_RETURNVK_ENTERVK_SHIFTVK_CONTROL
VK_ALTVK_PAUSEVK_CAPS_LOCKVK_ESCAPE
VK_SPACEVK_PAGE_UPVK_PAGE_DOWNVK_END
VK_HOMEVK_LEFTVK_UPVK_RIGHT
VK_DOWNVK_PRINTSCREENVK_INSERTVK_DELETE
VK_0VK_1VK_2VK_3
VK_4VK_5VK_6VK_7
VK_8VK_9VK_SEMICOLONVK_EQUALS
VK_AVK_BVK_CVK_D
VK_EVK_FVK_GVK_H
VK_IVK_JVK_KVK_L
VK_MVK_NVK_OVK_P
VK_QVK_RVK_SVK_T
VK_UVK_VVK_WVK_X
VK_YVK_ZVK_NUMPAD0VK_NUMPAD1
VK_NUMPAD2VK_NUMPAD3VK_NUMPAD4VK_NUMPAD5
VK_NUMPAD6VK_NUMPAD7VK_NUMPAD8VK_NUMPAD9
VK_MULTIPLYVK_ADDVK_SEPARATORVK_SUBTRACT
VK_DECIMALVK_DIVIDEVK_F1VK_F2
VK_F3VK_F4VK_F5VK_F6
VK_F7VK_F8VK_F9VK_F10
VK_F11VK_F12VK_F13VK_F14
VK_F15VK_F16VK_F17VK_F18
VK_F19VK_F20VK_F21VK_F22
VK_F23VK_F24VK_NUM_LOCKVK_SCROLL_LOCK
VK_COMMAVK_PERIODVK_SLASHVK_BACK_QUOTE
VK_OPEN_BRACKETVK_BACK_SLASHVK_CLOSE_BRACKETVK_QUOTE
VK_HELP   
- -

For example, to create a shortcut that is activated when the user presses Alt and F5, do the following:

- -
<keyset>
-  <key id="test-key" modifiers="alt" keycode="VK_F5"/>
-</keyset>
-
- -

The example below demonstrates some more keyboard shortcuts:

- -
<keyset>
-  <key id="copy-key" modifiers="accel" key="C"/>
-  <key id="find-key" keycode="VK_F3"/>
-  <key id="switch-key" modifiers="control alt" key="1"/>
-</keyset>
-
- -

The first key is invoked when the user presses their platform-specific shortcut key and C. The second is invoked when the user presses F3. The third is invoked on a press of the Control key, the Alt key and 1. If you wanted to distinguish between keys on the main part of the keyboard and the numeric keypad, use the VK_NUMPAD keys (such as VK_NUMPAD1).

- -
-

Refer to the Mozilla Keyboard Planning FAQ and Cross Reference for more information about selecting keyboard shortcuts to use in applications.

-
- -

Using the Keyboard Shortcuts

- -

Now that we know how to define keyboard shortcuts, we'll find out how we can use them. There are two ways.

- -

The first way is the simplest and just requires that you use the command event handler on the key element. When the user presses the key, the script will be invoked. An example is shown below:

- -
<keyset>
-  <key id="copy-key" modifiers="accel" key="C" oncommand="DoCopy();"/>
-</keyset>
-
- -

The function DoCopy will be called when the user presses the keys specified by the key element, which in this example, are the keys for copying to the clipboard (such as Control+C). This will work as long as the window is open. The DoCopy function should check to see if text is selected and then copy the text to the clipboard. Note that textboxes have the clipboard shortcuts built-in so you don't have to implement them yourself.

- -

Assigning a keyboard shortcut on a menu

- -

The second way is: If you are assigning a keyboard shortcut that performs a command that also exists on a menu, you can associate the key element directly with the menu command. To do this, also add a key attribute on the menuitem. Set its value to the id of the key that you want to use. The example below demonstrates this.

- -

Example 2 : Исходный код Просмотреть

- -
Image:keyshort1.jpg
- -
<keyset>
-  <key id="paste-key" modifiers="accel" key="V"
-          oncommand="alert('Paste invoked')"/>
-</keyset>
-
-<menubar id="sample-menubar">
-  <menu id="edit-menu" label="Edit" accesskey="e">
-    <menupopup id="edit-popup">
-      <menuitem id="paste-command"
-         accesskey="p" key="paste-key"
-         label="Paste" oncommand="alert('Paste invoked')"/>
-    </menupopup>
-  </menu>
-</menubar>
-
- -

The menuitem's key attribute, which here is paste-key is equal to the id of the defined key. You can use this for additional keys as well to define keyboard shortcuts for any number of menu items.

- -

You'll also notice in the image that text has been placed next to the Paste menu command to indicate that Control and the V key can be pressed to invoke the menu command. This is added for you based on the modifiers on the key element. Keyboard shortcuts attached to menus will work even if the menu is not open.

- -

One additional feature of key definitions is that you can disable them easily. To do this add a disabled attribute to the key element and set it to the value true. This disables the keyboard shortcut so that it cannot be invoked. It is useful to change the disabled attribute using a script.

- -

 

- -
-

Our find files example

- -

Let's add keyboard shortcuts to the find files dialog. We'll add four of them, one for each of the Cut, Copy, and Paste commands and also one for the Close command when the user presses Escape.

- -
<?xml version="1.0" encoding="utf-8"?>
-<window xmlns="http://www.mozilla.org/keymaster/gat...re.is.only.xul">
- <keyset>
-   <key id="cut_cmd" modifiers="accel" key="X"/>
-   <key id="copy_cmd" modifiers="accel" key="C"/>
-   <key id="paste_cmd" modifiers="accel" key="V"/>
-   <key id="close_cmd" keycode="VK_ESCAPE" oncommand="window.close();"/>
- </keyset>
- -

<vbox flex="1">
- <toolbox>
- <menubar id="findfiles-menubar">
- <menu id="file-menu" label="File" accesskey="f">
- <menupopup id="file-popup">
- <menuitem label="Open Search..." accesskey="o"/>
- <menuitem label="Save Search..." accesskey="s"/>
- <menuseparator/>
- <menuitem label="Close" accesskey="c" key="close_cmd"
- oncommand="window.close();"/>
- </menupopup>
- </menu>
- <menu id="edit-menu" label="Edit" accesskey="e">
- <menupopup id="edit-popup">
- <menuitem label="Cut" accesskey="t" key="cut_cmd"/>
- <menuitem label="Copy" accesskey="c" key="copy_cmd"/>
- <menuitem label="Paste" accesskey="p" key="paste_cmd" disabled="true"/>
- </menupopup>
- </menu>
- </menubar>
- </toolbox>
- </vbox>
- </window>

- -

Now we can use those shortcuts to activate the commands. Of course, the clipboard commands don't do anything anyway, as we haven't written those scripts.

-
- -

Key Events

- -

There are three keyboard events that may be used if the key related features described above aren't suitable. These events are:

- -
-
keypress
-
Called when a key is pressed and released when an element has the focus. You might use this to check for allowed characters in a field.
-
keydown
-
Called when a key is pressed down while an element has the focus. Note that the event will be called as soon as the key is pressed, even if it hasn't been released yet.
-
keyup
-
Called when a key is released while an element has the focus.
-
- -

Key events are only sent to the element that has the focus. Typically, this will include textboxes, buttons, checkboxes and so forth. If no element is focused, the key event will instead be targeted at the XUL document itself. In this case, you can add an event listener to the window tag. Normally though, if you want to respond to keys globally, you will use a keyboard shortcut as described earlier.

- -

The key event object has two properties which hold the key that was pressed. The keyCode property holds the key code and may be compared to one of the constants from the key table earlier in this section. The charCode is used for printable characters and will hold the numeric Unicode character code value for the key that was pressed.

- -
Our Find files example so far : Исходный код Просмотреть
- -

Next, we'll find out how to handle focus and the selection.

- -

-

« Предыдущая статьяСледующая статья »

-

- -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" deleted file mode 100644 index c79c3cb055..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Введение -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Введение -tags: - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Introduction ---- -

-

Следующая статья »

-
TODO: нужно исправить Шаблон:Next

-

Этот учебник является руководством для изучения XUL (XML User Interface Language) - кроссплатформенного языка для описания пользовательского интерфейса приложений.

-

В учебнике демонстрируется создание простого интерфейса для поиска файлов, похожего на Macintosh's Sherlock или диалога поиска файлов в ОС Windows. Имейте в виду, что создается только пользовательский интерфейс с ограниченной функциональностью. Фактически, поиск файлов реализован не будет. Синяя линия слева от параграфа будет указывать места где диалог поиска файлов будет изменяться. Ниже приводится общая информация о XUL, которую при первом чтении можно пропустить.

-

Что такое XUL и почему он был создан?

-

XUL (произносится как "zool" и рифмуется с "cool") был создан для упрощения и ускорения разработки браузера Mozilla. Это язык на основе XML, поэтому все преимущества имеющиеся в XML также доступны для XUL.

-

Большинство приложений должны быть разработаны для конкретных платформ, что влечет за собой большие затраты времени и издержки. Ранее уже были разработаны кросс-платформенные решения. Например в Java главным преимуществом была переносимость. XUL является одним из таких языков, спроектированных специально для создания переносимых пользовательских интерфейсов. Java забирает много времени для создания приложений даже для одной платформы. Время затраченное на компиляцию и отладку кода может быть довольно длительным. С помощью XUL, интерфейс приложения реализовать или изменить можно быстро и легко.

-

XUL имеет все преимущества других XML языков. К примеру XHTML или другие XML языки такие как MathML или SVG могут легко интегрироваться в него. Также, текст отображаемый в XUL легко локализовать, а это значит что его можно перевести на другие языки без особых усилий.

-

Какие пользовательские интерфейсы могут быть реализованы средствами XUL?

-

XUL предоставляет возможность создания большинства элементов содержащихся в современных графических интерфейсах. Элементы которые можно создать:

- -

Выводящийся контент может быть сформирован из содержимого XUL файла или из данных в datasource. В Mozilla, такие datasources включают почтовый ящик пользователя, его закладки и результаты поиска. Содержимое меню, деревьев и других элементов может быть заполнено этими данными, либо вашими собственными данными, представленными в RDF файле.

-

Есть несколько способов применения XUL:

- -

Первые три типа требуют установки на компьютер пользователя. Эти типы приложений не имеют ограничений безопасности, к примеру они могут получать доступ к локальным файлам и читать или изменять настройки. Для дополнений, XUL файлы и связанные скрипты и картинки, должны быть упакованы в один файл, загружены и установлены пользователем. Приложения Mozilla, такие как Firefox, обеспечивают менеджер дополнений, который позволяет устанавливать дополнения без необходимости написания большого объёма сложного кода.

-

Кроме того, можно открывать XUL файлы прямо из файловой системы или с удаленного веб-сайта, но они будут ограничены по некоторым операциям, и некоторые элементы XUL не будут функционировать. Если, несмотря на это, вы хотите загрузить содержимое XUL с удалённого веб-сайта, веб-сервер должен быть настроен соответствующим образом, т.е. он должен отправлять XUL файлы с заголовком Content-Type равным "application/vnd.mozilla.xul+xml". XUL обычно хранится в файлах с .xul расширением. Вы можете открыть XUL файл браузером Mozilla как любой другой файл, используя команду "Open File" из файлового меню или введя URL в строку адреса.

-

Что нужно знать для использования этого учебника?

-

Вам необходимо знать HTML и, по крайней мере знать базовые понятия XML и CSS. Вот некоторые принципы, которые необходимо помнить:

- -
-
    -
  1. Для компоновки и элементов
  2. -
  3. Для определения стилей
  4. -
  5. Для определения сущностей (используется для локализации)
  6. -
  7. Для скриптов
  8. -
-
-

Кроме того, вы можете иметь дополнительные файлы для картинок или для данных определённой платформы.

-

XUL поддерживается в программных продуктах Mozilla и в браузерах, которые основаны на движке Gecko, таких как Netscape 6 (или более поздних версий) и Mozilla Firefox. Из-за различных изменений в XUL синтаксисе, вам необходимо получить последнюю версию для примеров, чтобы они работали корректно. Большинство примеров должно работать в Mozilla 1.0 или более поздней версии. XUL достаточно одинаков в Firefox и в других браузерах, хотя у него есть существенные различия, такие, как поддержка настраиваемых панелей инструментов.

-

В этом руководстве освещена бóльшая часть функциональности XUL, однако не все функции обсуждаются. Ознакомившись с XUL, вы можете использовать XUL Reference, чтобы узнать о других особенностях поддерживаемых элементов.

-

-

Следующая статья »

-

-

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265_\320\262_xbl/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265_\320\262_xbl/index.html" deleted file mode 100644 index a2979cadb6..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265_\320\262_xbl/index.html" +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Введение в XBL -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Введение_в_XBL -tags: - - XBL - - XUL_Tutorial ---- -

-

-

« Предыдущая статьяСледующая статья »

-
-

У XUL есть родственный язык XBL (eXtensible Bindings Language, расширяемый язык привязок). Его используют для описания внешнего вида и поведения элементов XUL. -

-

Привязки

-

Вы можете использовать XUL для создания пользовательского интерфейса. Применив стили, можно настроить внешний вид элементов или создать новый скин. Основной вид всех элементов, таких как полоса прокрутки и чекбоксы можно изменить, добавив стили или атрибуты. Однако, в XUL нет средств для изменения сути работы элемента. Например, вы захотите поменять поведение полосы прокрутки. Как раз для этого нужен XBL. -

Файл XBL содержит привязки. Привязка описывает поведение элементов. К примеру, привязку можно связать с полосой прокрутки. Поведение описывается свойствами и методами полосы прокрутки дополнительно к существующему описанию на XUL. -

XUL, так же как и XBL, основан на семействе языков XML. В примере приводится основа файла XBL: -

-
<?xml version="1.0"?>
-<bindings xmlns="http://www.mozilla.org/xbl">
-  <binding id="binding1">
-    <!-- Здесь находится содержимое, свойства, методы и описание событий -->
-  </binding>
-  <binding id="binding2">
-    <!-- Здесь находится содержимое, свойства, методы и описание событий -->
-  </binding>
-</bindings>
-
-

Тэг bindings — главный элемент файла XBL содержит один или более элементов binding. Каждый тэг binding задает одну привязку. Атрибут id используется для обозначения привязки, как в примере выше. Этот шаблон содежит две привязки: binding1 и binding2. Первая может определять полосу прокрутки, а вторая меню. Привязку можно связывать с любым элементом XUL. Если вы используете CSS классы, можно сколько угодно применять к ним различные привязки. Note the namespace on the bindings element in the template above. This declares that we are using XBL syntax. -

You assign a binding to an element by setting the CSS property -moz-binding to the URL of the bindings file. For example: -

-
scrollbar {
-    -moz-binding: url('chrome://findfile/content/findfile.xml#binding1');
-}
-
-

The URL points to the binding with the id 'binding1' in the file 'chrome://findfile/content/findfile.xml'. The '#binding1' syntax is used to point to a specific binding, much like how you would point to an anchor in an HTML file. You will usually put all of your bindings in a single file. The result in this example, is that all scrollbar elements will have their behavior described by the binding 'binding1'. -

A binding has five types of things that it declares: -

-
  1. Content: child elements that are added to the element that the binding is bound to. -
  2. Properties: properties added to the element. They can be accessed through a script. -
  3. Methods: methods added to the element. They can be called from a script. -
  4. Events: events, such as mouse clicks and keypresses that the element will respond to. The binding can add scripts to provide default handling. In addition new events can be defined. -
  5. Style: custom style properties that the XBL defined element has. -
-

Binding Example

-

The box is generic enough that you can use it to create custom widgets (although you can use any element, even one you make up yourself). By assigning a class to a box tag, you can associate a binding to only those boxes that belong to that class. The following example demonstrates this. -

-
XUL (example.xul):
-
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://example/skin/example.css" type="text/css"?>
-
-<window
-     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only..xul">
-  <box class="okcancelbuttons"/>
-</window>
-
-CSS (example.css):
-
-box.okcancelbuttons {
-    -moz-binding: url('chrome://example/skin/example.xml#okcancel');
-}
-
-XBL (example.xml):
-
-<?xml version="1.0"?>
-<bindings xmlns="http://www.mozilla.org/xbl"
-         xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <binding id="okcancel">
-    <content>
-      <xul:button label="OK"/>
-      <xul:button label="Cancel"/>
-    </content>
-  </binding>
-</bindings>
-
-

This example creates a window with a single box. The box has been declared to have a class of okcancelbuttons. The style sheet associated with the file says that boxes with the class okcancelbuttons have a specialized binding, defined in the XBL file. You may use other elements besides the box, even your own custom tags. -

We'll look more at the details of the XBL part in the next section. However, to summarize, it causes two buttons to be added automatically inside the box, one an OK button and the other a Cancel button. -

In the next section, we will look at creating content with XBL.

-

« Предыдущая статьяСледующая статья »

-
-

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\263\321\200\321\203\320\277\320\277\320\270\321\200\321\203\321\216\321\211\320\270\320\265_\321\215\320\273\320\265\320\274\320\265\320\275\321\202\321\213/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\263\321\200\321\203\320\277\320\277\320\270\321\200\321\203\321\216\321\211\320\270\320\265_\321\215\320\273\320\265\320\274\320\265\320\275\321\202\321\213/index.html" deleted file mode 100644 index 1e36b36ed8..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\263\321\200\321\203\320\277\320\277\320\270\321\200\321\203\321\216\321\211\320\270\320\265_\321\215\320\273\320\265\320\274\320\265\320\275\321\202\321\213/index.html" +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Группирующие элементы -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Группирующие_элементы -tags: - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Groupboxes ---- -

-

-

« Предыдущая статьяСледующая статья »

-
-

В этом разделе рассказывается, как объединять элементы с помощью группирующей рамки. -

-

Группирующая рамка

-

Язык HTML предоставляет элемент fieldset, с помощью которого можно объединять элементы в группы. Обычно, вокруг группы рисуется рамка, отражающая связь между элементами. Примером может служить группа из нескольких флажков. В языке XUL для тех же целей предлагается использовать элемент groupbox. -

Как видно из названия, groupbox — ни что иное как разновидность бокса. Это значит, что элементы внутри него будут выравниваться по правилам боксов. Есть два различия между группирующей рамкой и обычными боксами: -

- -

Так как группирующие рамки являются видом боксов, для них можно использовать атрибуты присущие обычным боксам, например orient и flex. Вы можете помещать внутрь группирующей рамки любые элементы, хотя обычно они должны быть чем-то связаны. -

Поместить метку на верх группирующей рамки можно с помощью элемента caption. Этот элемент во многом похож на legend из HTML. Достаточно поместить один элемент caption в качестве первого дочернего элемента. -

Ниже приведен простой пример группирующей рамки: -

-
Пример: Простая группирующая рамка
-

Исходный код Просмотреть -

-
Image:titledbox1.png
-
<groupbox>
-  <caption label="Answer"/>
-  <description value="Banana"/>
-  <description value="Tangerine"/>
-  <description value="Phone Booth"/>
-  <description value="Kiwi"/>
-</groupbox>
-
-

В результате будут выведены четыре обведенные рамкой строки с меткой Answer. Обратите внимание, что по умолчанию группирующая рамка выстраивает элементы вертикально, это нужно для того, чтобы получился столбец из текстовых элементов. -

Вы так же можете добавлять в элемент caption вложенные элементы, чтобы сделать его более разнообразным. Например, панель выбора шрифта в Мозиле использует в качестве заголовка выпадающее меню. Любые другие элементы так же могут быть включены в заголовок, скорее всего вам пригодятся флажки и выпадающие списки. -

-
Группирующая рамка с флажком в заголовке
-

Исходный код Просмотреть -

-
Image:groupbox2.png
-
<groupbox flex="1">
-  <caption>
-    <checkbox label="Enable Backups"/>
-  </caption>
-  <hbox>
-    <label control="dir" value="Directory:"/>
-    <textbox id="dir" flex="1"/>
-  </hbox>
-  <checkbox label="Compress archived files"/>
-</groupbox>
-
-

В этом примере в качестве заголовка используется checkbox. Можно написать скрипт, помечающий содержимое группирующей рамки активным или неактивным в зависимости от состояния флажка. На примере группирующая рамка содержит горизонтальный элемент box с элементами label и textbox внутри. Оба элемента textbox и groupbox были сделаны эластичными, и текстовое поле в результате может менять ширину вместе с окном. Дополнительный флажок появился снизу текстового поля потому, что у группирующей рамки вертикальная ориентация элементов. В следующем разделе мы добавим группирующую рамку в наше диалоговое окно поиска файлов. -

-

Группы радиокнопок

-

Чтобы сгруппировать несколько радиокнопок, воспользуйтесь элементом radiogroup. Элемент radiogroup является типом бокса. Вы можете помещать в него любые элементы, и все они, кроме элементов radio, будут вести себя так же, как и внутри обычных боксов. -

Любые радиокнопки, содержащиеся в элементе группы, будут объединены друг с другом, даже если они находятся внутри еще каких-либо элементов. Это полезно при добавлении разных элементов, придающих группе кнопок дополнительную структуру. Этот прием отражен в следующем примере: -

Исходный код Просмотреть -

-
<radiogroup>
-  <radio id="no" value="no" label="No Number"/>
-  <radio id="random" value="random" label="Random Number"/>
-  <hbox>
-    <radio id="specify" value="specify" label="Specify Number:"/>
-    <textbox id="specificnumber"/>
-  </hbox>
-</radiogroup>
-
-

Заметьте, что вокруг элемента radiogroup по умолчанию рамка не рисуется. Можно поместить группу радиокнопок внутрь элемента groupbox, чтобы появилась рамка, и можно было добавить заголовок. -

Далее, используя только что полученные знания, мы добавим еще немного элементов в наш пример поискового диалога. -

-

« Предыдущая статьяСледующая статья »

-
-

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\276\320\262\320\265\321\200\320\273\320\265\320\270/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\276\320\262\320\265\321\200\320\273\320\265\320\270/index.html" deleted file mode 100644 index 20ce1660d7..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\320\276\320\262\320\265\321\200\320\273\320\265\320\270/index.html" +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Оверлеи -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Оверлеи ---- -

В этой главе будет описаны оверлеи которые могут быть использованы для разделения обычного содержимого.

-

Использование Оверлеев

-

В простом приложении с только одним окном, обычно, вы будете иметь только один XUL файл, вместе с файлом скрипта, файлом стилей, DTD файл и возможно несколько картинок. Некоторые приложения так же будут иметь ассоциированные с ними диалоги. Они будут размещены в отдельные XUL файлы. Более сложные приложения будут содержать множество окон и диалогов.

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\321\201\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260_xul/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\321\201\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260_xul/index.html" deleted file mode 100644 index b2c047f1cd..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_xul/\321\201\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260_xul/index.html" +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Структура XUL -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Структура_XUL -tags: - - XUL_Tutorial ---- -

-

« Предыдущая статьяСледующая статья »

-

- -


- Начнём с описания того, как обрабатывается XUL в браузере Mozilla.

- -

Как обрабатывается XUL

- -

XUL обрабатывается в Mozilla теми же методами, что и HTML или другие типы содержимого. Когда вы вводите URL HTML-страницы в адресную строку браузера, браузер находит веб-сайт и загружает его содержимое. Механизм рендеринга Mozilla получает содержимое в виде исходного кода HTML и преобразует его в дерево документа. Дерево затем конвертируется в набор объектов, которые уже могут быть отображены на экране. Таблицы стилей (CSS), изображения, и другие технологии, используются для управления отображением. XUL в основном функционирует похожим образом.

- -

На самом деле, в Mozilla, все типы документов, будь то HTML или XUL, или даже SVG, обрабатываются одним и тем же кодом ядра. Это означает, что одни и те же CSS свойства могут использоваться для оформления и HTML и XUL, и многие функции также могут быть доступны обоим. Тем не менее, существуют некоторые особенности, которые являются специфическими для HTML, такие, как формы, и другие, которые являются характерными для XUL такие как оверлеи . Поскольку XUL и HTML обрабатываются сходным образом, постольку вы можете загружать их либо из локальной файловой системы, либо с веб-страницы, либо из дополнения или автономного XULRunner-приложения.

- -

Содержимое удаленных источников, например http://localhost/~username/, независимо от того, HTML это, или XUL или другой тип документа, будет по соображениям безопасности ограничено по типу операций, которое оно может выполнить. Из-за этого Mozilla обеспечивает возможность локальной установки кнтента и регистрации установленных файлов как части её chrome системы. Это позволяет использовать специальный формат URL -- chrome:// URL. Получая доступ к файлу посредством chrome URL, Mozilla обеспечивает этим файлам расширенные права для доступа к локальным файлам, к настройкам и закладкам, и выполнению других привилегированных операций. Очевидно, что у веб-страниц нет таких привилегий, если только они не имеют цифрового сертификата и пользователь не дал разрешение на выполнение таких операций.

- -

Эта регистрация пакетов в chrome системе -- способ Firefox-дополнений добавлять новые функции в браузер. Дополнения это небольшие пакеты из XUL файлов, сценариев JavaScript, таблиц стилей и изображений упакованных в один файл. Такой упакованный файл может быть создан с помощью архиватора ZIP. Когда пользователь загружает дополнение, файлы, содержащиеся в нем устанавливаются на компьютер пользователя. Расширение внедряется в браузер с помощью специального механизма XUL, называемого - оверлей (overlay) и обеспечивающего объединение XUL-кода дополнения и кода XUL браузера. Пользователю может показаться, что дополнение изменило браузер, но на самом деле, код браузера и дополнения разделены, и дополнение может быть легко удалено. Зарегистрированным пакетам, конечно же, использование оверлеев не требуется. Если бы это было не так, то вы не смогли бы получить к ним доступ посредством основного интерфейса браузера, правда, к ним можно все же получить доступ с помощью chrome URL, если вы знаете что это такое.

- -

Автономные XUL приложения могут интегрировать XUL-код похожим способом, но, естественно, XUL для приложения будет включаться как часть установки, вместо того чтобы быть установленным отдельно как дополнение. Однако, этот XUL-код будет зарегистрирован в chrome-системе, чтобы приложение могло отображать интерфейс пользователя.

- -

Следует также отметить, что браузер Mozilla сам представляет собой просто набор пакетов, содержащих файлы XUL, JavaScript и таблицы стилей. Эти файлы доступны через chrome URL, имеют расширенные привилегии и работают так же, как любой другой пакет. Конечно, браузер гораздо больше и более сложен, чем большинство дополнений. Firefox и Thunderbird также как и другие компоненты, все написаны на XUL и все они доступны через chrome URL-ы. Вы можете исследовать эти пакеты, просмотрев каталог chrome, в который установлен Firefox или другое XUL приложение.

- -

Chrome URL всегда начинается с 'chrome://'. Также как 'http://' URL всегда ссылается на веб-сайты используя HTTP и 'file://' URL всегда ссылается на локальные файлы, 'chrome://' URL всегда ссылается на установленные пакеты и дополнения. Подробнее синтаксис chrome URL будет рассмотрен в следующем разделе. Важно отметить, что доступ через chrome URL даёт дополнительные привилегии, описанные выше, чего не дают другие типы URL. Так, например, HTTP URL не имеет каких-либо особых привилегий, и если веб-страница попытается, например, считать локальный файл то произойдет ошибка. А файл, загруженный через chrome URL, может читать файлы имея тот же уровень доступа, что и установленное расширение, которому он принадлежит.

- -

Это различие очень важно. Оно означает, что есть определенные вещи, которые контент веб-страницы не может выполнить, например - прочитать закладки пользователя. Это различие основывается не на типе отображаемого контента, а только на типе используемого URL. И HTML и XUL, размещённые на веб-сайте, не имеют никаких дополнительных разрешений, однако если и HTML и XUL загружены через chrome URL, то они эти разрешения получают.

- -

Если вы собираетесь использовать XUL на веб-сайте, то просто выложите на этот сайт XUL, как обычный HTML файл, а затем загрузите этот URL в браузере http://localhost/xul.php. Проверьте, что ваш веб-сервер отправляет правильный заголовок типа контента content-type (он должен быть равен application/vnd.mozilla.xul+xml, например, для PHP можно использовать header('Content-type: application/vnd.mozilla.xul+xml');). Этот тип контента является механизмом, с помощью которого система Mozilla отличала XUL от HTML. Mozilla не использует расширение файла, если только не считывает файлы из файловой системы, но для XUL файлов вам необходимо использовать расширение .xul. Вы можете загружать XUL файлы с собственного компьютера, открывая их в браузере или двойным щелчком по имени файла в файловом менеджере.

- -
Помните, что XUL, полученный из удаленного источника будет иметь значительные ограничения в действиях, которые он сможет выполнять.
- -

Типы документа: HTML XML XUL CSS

- -

Mozilla использует существенно разные типы объектов документа (DOM) для HTML и XUL, хотя у них много общего в смысле функциональности. В Mozilla есть вВсего три типа документа имеются : HTML, XML, and XUL. Естественно, HTML документ используется для документов HTML, XUL документ используется для документов XUL, и XML документ используется для других типов документов XML. Поскольку XUL это разновидность XML, постольку документ XUL это подмножество более общего XML документа. Однако есть тонкие различия в функциональности. Так, например, когда управляющие элементы формы на HTML странице доступны через свойство document.forms, это свойство не доступно для документов  XUL, так как в XUL нет форм в том смысле, в котором они есть в HTML. Сходным образом специфические возможности XUL, такие как оверлеи и шаблоны, существуют только в документах XUL.

- -

Эти различия очень важны. Можно использовать многие возможности XUL в HTML или XML документах в тех случаях, когда эти возможности не являются специфичными для типа документа; тем не менее для других возможностей необходим правильный тип документа.

- -

Подведя итоги вышесказанного:

- - - -

Следующие несколько разделов описывают chrome пакет, который может устанавливаться в Mozilla. Но, если вы хотите уже начать разработку простого приложения, то вы можете сразу перейти на Создаем окно и вернуться к этому разделу позже.

- -

Устройство пакета

- -

Mozilla устроен таким образом, что вы можете иметь столько компонентов сколько вы захотите установить. Каждое дополнение - это отдельный компонент со своим chrome URL. В Mozilla также есть по одному компоненту для каждого установленного скина и локали. Каждый из этих компонентов, или пакетов, состоит из набора файлов, которые описывают его пользовательский интерфейс. К примеру, компонент messenger содержит описания окна списка почтовых сообщений, окно создания письма и описания диалоговых окон адресной книги.

- -

Пакеты, которые предоставляются в составе Mozilla, расположены внутри каталога chrome, который находится в каталоге, в который вы установили Mozilla. В каталоге chrome вы найдете все файлы, описывающие интерфейс самого браузера Mozilla, почтового клиента, и других приложений. Обычно вы размещаете все  XUL файлы в каталоге приложения, однако дополнения устанавливаются в каталоге extensions для каждого отдельного пользователя. Простое копирование XUL файла в каталог chrome не дает ему каких-либо дополнительных привилегий, также он не может быть доступен через chrome URL. Для получения дополнительных привилегий вам необходимо создать manifest-файл и поместить его в каталог chrome. Этот файл легко создать, так как он обычно состоит всего из нескольких строк. Он используется для отображения(связывания) chrome URL-а на путь к файлу или каталогу где лежат XUL файлы. Подробности создания этого файла обсуждаются в разделе далее.

- -

Единственный способ создать контент доступный через chrome URL, это создать пакет, как описано в нескольких нижеследующих разделах. Каталог называется 'chrome', скорее всего потому, что имя оказалось удобным, чтобы запомнить, что он используется для хранения chrome пакетов, содержащихся в Mozilla.

- -

Чтобы увеличить путаницу, отметим, что есть еще два других места, где может появляться слово "chrome". Это параметр -chrome в командной строке и модификатор chrome в функции window.open(). Ни одна из этих возможностей не дает дополнительных привилегий; вместо этого они используются для открытия нового окна верхнего уровня без элементов браузерного интерфейса, таких, как меню и панели инструментов. Вы можете использовать эту возможность в более сложных XUL приложениях если не хотите чтобы интерфейс браузера присутствовал в ваших диалоговых окнах.

- -

Файлы пакета обычно объединяются в JAR файл. Этот файл может быть создан любым ZIP архиватором. Например, вы можете открыть JAR файлы из  каталога chrome Mozill-ы, чтобы посмотреть базовую структуру пакета.  Несмотря на то, что обычно файлы упаковываются в JAR, пакеты могут также быть доступны в несжатой форме внутри каталога. Распространять пакеты таким образом не рекомендуется, но это очень удобно для разработки, так как вы можете править файлы напрямую и перезагружать XUL без необходимости переустановки или переупаковки файлов.

- -

По умолчанию, приложения Mozill-ы парсят XUL файлы и скрипты, и сохраняют прекомпилированную версию в памяти до конца сессии приложения. Это повышает производительность. Однако, из-за этого XUL не перезагрузится даже если исходные файлы изменятся. Чтобы отключить этот механизм, необходимо изменить опцию nglayout.debug.disable_xul_cache. В Firefox, эта опция может быть добавлена в пользовательские настройки простым вводом "about:config" в адресную строку, и установкой значения опции в true. Или же вы можете вручную отредактировать файл настроек user.js, добавив следующую строчку:

- -
pref("nglayout.debug.disable_xul_cache", true);
-
- -

Как правило chrome пакет состоит из трех частей, хотя ни одна из них не является обязательной. Каждая часть хранится в отдельном каталоге. Эти три части это контент, скин и локаль, все они описываются ниже. Отдельно взятый пакет может содержать один или более скинов и локалей, но пользователи могут заменять их своими собственными. Дополнительно пакет может содержать несколько различных приложений, каждое из которых доступно через свой  отдельный chrome URL. Система упаковки достаточно гибкая, так что вы можете включать любые нужные вам части и разрешать отдельную загрузку других частей, таких как текст для разных языков пользователей.

- -

Три типа chrome-пакетов, это:

- - - -

Пакеты контента

- -

Имя файла JAR может описывать то, что он содержит, но вы не сможете сказать с уверенностью, соответствует ли название пакета его содержимому, до тех пор пока не просмотрите это содержимое. Приведем пример на основе пакета, имеющегося в составе Firefox. Если вы распакуете файлы из пакета  browser.jar, вы увидите, что он содержит струтуру папок выглядящую скорее всего примерно так:

- -
content
-   browser
-      browser.xul
-      browser.js
-      -- other browser XUL and JS files goes here --
-      bookmarks
-         -- bookmarks files go here --
-      preferences
-         -- preferences files go here --
-.
-.
-.
-
- -

Этот пакет можно легко опознать, как пакет контента, поскольку папка самого верхнего уровня называется content. Для скинов эта папка, как правило, будет называться skin, а для локалей - locale. Эта схема поименования не является обязательной, но это общепринятое соглашение для того, чтобы сделать более понятным, какая часть пакета что содержит. Некоторые пакеты могут иметь раздел контента, скин и локаль. В таком случае вы обнаружите по папке для каждого типа. Так например пакет Chatzilla поставляется именно в таком виде.

- -

Папка content/browser содержит набор файлов с расширениями .xul и .js. XUL файлы - это файлы с расширением .xul. Файлы с расширением .js - это файлы сценариев на языке JavaScript, которые обеспечивают собственно функциональность элементов интерфейса окна. Многие XUL файлы имеют файл сценария, связанного с ними, а некоторые могут иметь по несколько таких файлов сценариев.

- -

В вышеприведенном листинге приведены два файла. Конечно в пакете есть и другие файлы, но для простоты изложения они не показаны. Файл browser.xul - это XUL файл, который описывает главное окно браузера. Главное окно для пакета контента должно иметь такое же имя, как пакет с раширением .xul. В данном случае имя пакета - "browser", поэтому мы предполагаем обнаружить файл browser.xul. Некоторые другие XUL файлы описывают отдельные окна. Например, файл pageInfo.xul описывает диалог информации о странице.

- -

Во многие пакеты будет входить файл contents.rdf, который описывает пакет, его автора, и оверлеи, которые использует этот пакет. Однако этот файл устарел и заменен более простым механизмом. Этим механизмом является файл манифеста, упомянутый ранее, вы можете отличить эти файлы в папке chrome по расширению .manifest. Например, browser.manifest описывает пакет браузера.

- -

Несколько подкаталогов, таких, как bookmarks и preferences, представляют дополнительные разделы компонента браузера. Они размещаются в различных папках только для того, чтобы расположение файлов было более организованным.

- -

Скины или Темы

- -

Несмотря на то, что код ядра Mozilla называет такие объекты скинами, а в пользовательском интерфейсе они называются темами, они оба ссылаются на одну и ту же вещь. В файле classic.jar описана тема по умолчанию, поставляемая вместе с Firefox. Структура этих частей  очень напоминает пакеты контента. Например, посмотрите classic.jar:

- -
skin
-   classic
-      browser
-         browser.css
-         -- other browser skin files go here --
-      global
-         -- global skin files go here --
-.
-.
-.
-
- -

Повторимся, что такая струтура папок не является необходимой и используется исключительно для удобства. В действительности вы можете поместить все файлы в одну папку верхнего уровня и не пользоваться подкаталогами. Однако в случае приложений большого размера подкаталоги используются для разделения разных компонентов. В вышеприведенном примере одна папка предназначена для файлов, связанных с темой для браузера, a другая - для файлов, имеющих отношение к общей для приложения теме оформления. Общая папка содержит файлы тем оформления (скинов), являющиеся общими для всех пакетов. Эти файлы используются во всех компонентах и будут включены в поставку вашего отдельного самостоятельного приложения. Общая часть определяет внешний вид всех общих виджетов XUL, тогда как все прочие папки содержат файлы, специфичные для самих приложений. Firefox содержит в одном архиве и общие файлы темы оформления и файлы темы оформления браузера, но они могут содержаться и по отдельности.

- -

Скин состоит из CSS файлов и набора изображений, используемых для задания внешнего вида интерфейса. Файл browser.css используется файлом browser.xul и содержит стили, которые определяют внешний вид различных частей интерфейса браузера. Повторно отметим, что файл browser.css называется такое же имя, как и пакет в целом. Путем изменения CSS файлов вы можете менять внешний вид окна, не меняя при этом его функций. Именно таким способом вы можете создать новую тему оформления. Часть XUL остается неизменной, и независимо от нее меняется только часть со скином.

- -

Локали

- -

Файл en-US.jar содержит описание языковой информации для каждого компонента, в данном случае на американском варианте Английского языка. Аналогично скинам, каждый языковой раздел содержит файлы, которые определяют тексты, используемые в пакете для каждого отдельного языка. Структура локали сходна со всеми остальными, поэтому здесь она не приводится.

- -

Локализованный текст хранится в файлах двух типов: DTD файлы и файлы свойств. Файлы DTD имеют расширение .dtd и содержат определения объектов, по одному на каждую строку текста, используемую в окне. Например, файл browser.dtd содержит определения объектов для каждой команды меню. Кроме того для каждой команды определяются сочетания клавиш, так как они могут быть различными для каждого языка. Файлы DTD также используются XUL файлами, по одному файлу DTD на каждый XUL файл в общем случае. Часть локали также содержит файлы свойств, которые похожи на файлы DTD, но используются файлами сценариев. Файл browser.properties содержит несколько таких локализованных строк.

- -

Эта структура позволяет вам переводить Mozilla или компонент приложения на разные языки просто добавляя новые локали для этих языков. И при этом вам не нужно менять полностью код XUL. К тому же другой программист может создать отдельный пакет, который добавит скин или локаль к контенту вашего приложения, что позволят создавать новые темы оформления или добавлять языки интерфейса без необходимости менять исходный пакет.

- -

Другие пакеты

- -

Существует специальный пакет, называющийся toolkit (или global). Ранее мы уже видели папку с глобальными данными в скинах. Файл toolkit.jar содержит соответствующие части контента для такого пакета. Он содержит некоторые глобальные диалоги и определения. Также он определяет вид по умолчанию и функциональность различных общих виджетов XUL, таких как текстовые поля и кнопки. Файлы, расположенные в глобальной части пакета скина содержат вид по умолчанию для всех элементов интерфейса XUL. Пакет tolkit используется всеми XUL приложениями.

- -

Добавление пакета

- -

Mozilla помещает пакеты, которые поставляются вместе с дистрибутивом, в папку chrome. Однако это не означает, что они обязательно должны там размещаться. При установке другого пакета вы можете поместить его в любое место на диске, при условии, что файл манифеста указывает на это место.

- -

Традиционно пакеты помещаются в папку chrome просто потому, что это удобно; тем не менее они будут работать точно так же и будучи размещенными в другой папке или даже в каком-нибудь каталоге вашей локальной сети. Но вы не сможете хранить их на удаленном сайте, если только этот сайт не смонтирован как локальная файловая система.

- -

Есть две папки chrome используемых для XUL приложений: одна - в том же месте, в которое установлено приложение, тогда как другая - часть профиля пользователя. Первая предназначена для пакетов, которые используются всеми пользователями, а вторая - для пакетов, применяемых только отдельным пользователем или пользователями. Расширения, будучи установленными в отдельную папку для расширений, также специфичны для каждого пользователя. Любые файлы манифеста, расположенные в любой из вышеприведенных папок, будут проверяться, чтобы определить, какие пакеты установлены.

- -

В следующей главе мы рассмотрим, как ссылаться на chrome пакеты с помощью chrome URL.

- -

-

« Предыдущая статьяСледующая статья »

-
Interwiki Language Links

- -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/actions/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/actions/index.html" deleted file mode 100644 index 179838def0..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/actions/index.html" +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Генерирование контента -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Actions -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Actions ---- -

Для создания контента в шаблоне используется элемент <action>, который должен быть либо сестринским узлом элемента query либо прямым дочерним узлом элемента <rule>. Для каждого результата содержимое блока копируется и вставляется в документ. Давайте для начала рассмотрим простой пример.

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A">
-  <template>
-    <query>
-      <content uri="?start"/>
-      <triple subject="?start"
-              predicate="http://www.xulplanet.com/rdf/relatedItem"
-              object="?relateditem"/>
-    </query>
-    <action>
-      <button uri="?relateditem" label="?relateditem"/>
-    </action>
-  </template>
-</vbox>
-
-

Здесь элемент rule не "обрамляет" элемента action, поскольку мы хотим, чтобы контент был создан безусловно. Вместо этого, элемент action помещён внутри элемента template - сразу после запроса. Блок action содержит всего один элемент управления, но вы можете использовать сколь угодно много элементов по-своему усмотрению. В данном случае, для каждого результата будет создана кнопка. Поскольку мы имеем три результата, будет создано три кнопки. Если вы запустите [пример] в своём браузере, вы увидите что-то в этом роде:

-

Image:template-guide-p8.png

-

Конструктор шаблонов последовательно обрабатывает содержимое блока action для каждого из трёх результатов. Атрибут кнопки uri используется для ссылки на значение конечной переменной (ending or member variable). В данном примере мы можем использовать только одну переменную ?relateditem, поскольку ?start - это начальная вершина, а конечная и исходная вершины не могут совпадать. Давайте снова посмотрим на имеющиеся результаты:

-
(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D)
-
-

Конструктор начинает обрабатывать первый набор данных. При этом элемент <button> будет скопирован и вставлен в документ - сразу же после тела шаблона. Атрибут id нового элемента получит значение ?relateditem. Вы можете мысленно представить замену атрибута uri на id, заменяя при этом переменную. Поскольку в первом наборе данных переменная ?relateditem имеет значение 'http://www.xulplanet.com/rdf/B', атрибут id получит это значение.

-

После этого обрабатываются все остальные атрибуты элемента и, если нужно, в них подставляются значения переменных. Так, вместо строки ?relateditem атрибута label получим 'http://www.xulplanet.com/rdf/B' (для первого набора данных). Убедитесь, что первая кнопка действительно имеет такую надпись. Таким образом, обработка первого результата завершена, и поэтому конструктор переходит к следующим. Для второго результата, которому соответствует узел B, конструктор создаст следующий контент:

-
<button id="http://www.xulplanet.com/rdf/B" label="http://www.xulplanet.com/rdf/B"/>
-
-

В блоках action фиксированные, заранее определенные значения атрибута id не используются - они игнорируются. Тем не менее, вы можете использовать предопределённые идентификаторы в других частях шаблона, например, в запросе. Для получения доступа к созданному шаблоном элементу используется, конечно же, метод getElementById. Так можно получить доступ ко второй созданной кнопке: document.getElementById("http://www.xulplanet.com/rdf/C").

-

После окончания работы конструктора шаблонов документ имеет вид:

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A">
-  <template>
-    <query>
-      <content uri="?start"/>
-      <triple subject="?start"
-              predicate="http://www.xulplanet.com/rdf/relatedItem"
-              object="?relateditem"/>
-    </query>
-    <action>
-      <button uri="?relateditem" label="?relateditem"/>
-    </action>
-  </template>
-  <button id="http://www.xulplanet.com/rdf/B" label="http://www.xulplanet.com/rdf/B"/>
-  <button id="http://www.xulplanet.com/rdf/C" label="http://www.xulplanet.com/rdf/C"/>
-  <button id="http://www.xulplanet.com/rdf/D" label="http://www.xulplanet.com/rdf/D"/>
-</vbox>
-
-

Поскольку тэг <template> скрыт, вы увидите только три кнопки с надписями, полученными из источника данных.

-

Дополнительный контент

-

В предыдущем примере в блоке action были задействованы только кнопки. Но мы можем добавить рядом с ними надписи:

-
<action>
-  <hbox uri="?relateditem">
-    <label value="Related Item:"/>
-    <button label="?relateditem"/>
-  </hbox>
-</action>
-
-

Таким образом, для каждого набора данных будет создан элемент <hbox>; при это атрибут id получит значение ?relateditem; внутри будут добавлены надпись и кнопка. Надпись на кнопке образована переменной ?relateditem. В данном случае атрибут id используется только для одного элемента, поскольку каждому результату соответствует лишь один блок <hbox>.

-

Не смотря на то, что атрибут uri используется лишь для одного элемента, этим элементом не обязан быть внешний элемент - прямой потомок элемента action. Вы можете "обернуть" этот элемент другим; таким образом вы получите контейнер, внутри которого и создаётся контент. Этот контейнер создаётся один раз для всех наборов данных. Таким образом для каждого результата копируется только тот элемент, который имеет атрибут uri. Изменив предыдущий пример, получим:

-
<action>
-  <toolbar>
-    <button uri="?relateditem" label="?relateditem"/>
-  </toolbar>
-</action>
-
-

В данном случае для каждого результата будет скопирована только кнопка; панель инструментов будет создана лишь один раз. Таким образом, будет создана панель инструментов с тремя кнопками. Естественно, в таком простом примере было бы лучше поместить шаблон внутрь панели инструментов, имеющей атрибут datasource, а не наоборот.

-

До сих пор мы использовали только переменную ?relateditem, поскольку это единственная полезная переменная. Можно использовать также переменную ?start. Посмотрим на результаты ещё раз:

-
(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D)
-
-

Можно отобразить значение переменной ?start:

-
<action>
-  <hbox uri="?relateditem">
-    <button label="?start"/>
-    <button label="?relateditem"/>
-  </hbox>
-</action>
-
-

Для первой кнопки значение переменной ?start будет вычислено в выходных данных, тогда как вторая кнопка использует значение переменной ?relateditem. Поскольку все результаты используют одно и тоже значение переменной ?start, первая кнопка в каждом ряду имеет одну и ту же надпись. Запустите этот [this пример] и удостоверьтесь, что всё работает правильно.

-

Image:template-guide-p9.png

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/index.html" deleted file mode 100644 index 706e51f872..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/index.html" +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Руководство по шаблонам XUL -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL -tags: - - XUL - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide ---- -
Основы
- -
Синтаксис шаблонов на основе RDF
- -
Синтаксис шаблонов на основе XML
- -
Синтаксис шаблонов на основе SQL
- -
Общий синтаксис шаблонов
- -
Создание деревьев с использованием шаблонов
- -
Модификация шаблона
- -
Дополнительные темы
- -

Interwiki Language Links -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" deleted file mode 100644 index 227967a263..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\262\320\262\320\265\320\264\320\265\320\275\320\270\320\265/index.html" +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Введение -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Введение -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Introduction ---- -

Шаблоны XUL используются для автоматического создания контента на основе результатов запроса. Хороший пример - выполнение запроса к базе данных: для каждого набора данных, полученных запросом, создаётся некоторый контент. Синтаксис шаблонов позволяет как создавать новый контент, так и изменять значения атрибутов, используя правила с параметрами. Иногда это называют привязкой данных (databinding). Таким образом, шаблоны XUL используются для эффективной реализации привязки данных. -

Каждый шаблон получает необходимые данные из соответствующего источника. По-умолчанию поддерживается несколько типов источников данных: RDF, XML и базы данных Sqlite. Тем не менее, для поддержки других типов источников данных могут быть написаны соответствующие процессоры. При использовании технологии XUL источник данных определяется атрибутом datasources. Как правило, его значением является URI, указывающий на местонахождение данных. Например, для источника данных XML определяется соответствующий URL. Когда анализатор XUL находит элемент с этим атрибутом, он создаёт конструктор шаблона и связывает его с этим элементом. Предполагается также, что внутри этого элемента находится шаблон. Конструктор шаблона загружает источник данных, выполняет требуемый запрос и на основании полученных результатов генерирует соответсвующий контент. Тип источника данных определяется с помощью шаблона querytype. Тип определяет не только способ использования источника данных, но и синтаксис запросов. -

Сгенерированный шаблоном контент дополняет дерево документа XUL так же, как если бы вы сделали это собственноручно. Например: -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf" querytype="rdf">
-
-

В этом примере источник данных определён файлом 'http://www.xulplanet.com/ds/sample.rdf'; тип источника данных - rdf, это определено атрибутом querytype. -

Для начала давайте посмотрим, как обрабатывается источник данных RDF. Для его загрузки конструктор шаблона использует сервис RDF - тот же самый, который вы можете использовать напрямую. Для определения местонахождения ресурса используется URL. Тем не менее, некоторые источники данных RDF предоставляет платформа Mozilla, и их URL предваряются символами 'rdf:'. Если же это не используется, то источник данных загружается также, как и любой другой файл - по его URL. Если источник данных уже загружен и кеширован, конструктор шаблонов может сразу же начинать работу. В противном случае, ничего не происходит до тех пор, пока данные не загружены, хотя на самом деле это не совсем так. Сервис RDF начинает загрузку данных в фоновом режиме и в это же время начинает работать конструктор шаблонов. Естественно, доколе данные не поступили, ничего не будет отображено и конструктор приостанавливает работу.

Когда данные начинают поступать, конструктор определяет, достаточно ли информации для их обработки. Если это так, генерируется какой-то контент. В противном случае результата опять-таки нет. Интересно, что в силу природы процесса анализа RDF-данных, конструктор обрабатывает данные и выдаёт результат инкрементно, т.е. порциями - одновременно с поступлением данных (это особенно важно, например, для геоинформационных систем, работающих в режиме реального времени и оперирующих с огромными массивами данных). Конечно, поскольку данные поступают из сети достаточно быстро, вы, скорее всего, не заметите этого процесса, но это не умаляет его важности. Если же данные уже загружены, то конструктор обрабатывает их целиком, за один раз, хотя, как мы увидим позже, даже это не совсем так. -

Используя источники данных XML, атрибут querytype должен иметь значение xml. Атрибут datasources должен содержать URL файла XML, который указывает либо на файл на web-сайте, либо на локальный файл, либо на файл chrome. Этот файл будет загружен при обработке шаблона, используя данные в XML файле. Например: -

-
<listbox datasources="http://www.xulplanet.com/ds/sample.xml" querytype="xml">
-  <template>
-    <listitem label="?name"/>
-  </template>
-<listbox>
-
-

Этот шаблон использует данные XML для создания списка элементов(listbox). Не смотря на то, что мы рассмотрим особенности процесса позже, уже сейчас можно сказать, что для каждого дочернего узла дерева данных XML будет создан элемент списка (listitem), атрибут label которого будет соответствовать имени узла в древе XML. -

Для источников данных на основе базы данных Sqlite, атрибут datasources определяет URI файла. Поскольку в этом случае поддерживаются только локальные файлы, используется URL файла. -

Конструктор шаблонов может также использовать несколько источников данных, объединяя их в единое целое - так, если бы это был один источник данных, если это возможно. Этот механизм поддерживает только встроенный RDF; источники данных на основе XML или Sqlite не поддерживают такой возможности. При использовании нескольких источников данных для управления ими создаётся объект с интерфейсом nsIRDFCompositeDataSource. Вы можете получить доступ к нему из скрипта, используя свойство 'database'. Таким образом, вы можете добавлять или исключать источники данных на лету. -

При использовании нескольких источников данных RDF они объединяются в единое целое так, если бы это был один большой источник. Это значит, что запрос в шаблоне может получить данные из любого источника, находящегося в этом объединении. Это в самом деле может быть полезным свойством и работает одинаковым образом независимо от источника данных. Например, вы можете использовать встроенный источник, хранящий информацию о пользовательских закладках в браузере и использовать собственный источник данных для добавления дополнительной информации об этих закладках. -

-
<vbox datasources="rdf:bookmarks http://www.xulplanet.com/ds/sample.rdf">
-
-

Кроме того, при использовании RDF для chrome XUL (таких как расширения), источник данных rdf:local-store всегда включается в смесь источников. Локальное хранилище (local-store) - это источник данных, хранящий различную информацию о состоянии элементов пользовательского интерфейса, таких как размеры окон, список выбранных колонок и раскрытых элементах дерева. Хотя это и редко используется, вы можете запросить любые данные из локального хранилища для использования в шаблоне. -

Иногда вам будет необходимо указать, что источник данных будет определён позже, возможно с помощью скрипта. В этом случае используется специальная форма URI, содержащая префикс rdf:null, обозначающая, что используется пустой источник данных или то, что он будет определён позже. Эта запись также работает и с источниками данных, отличными от RDF, поэтому не стесняйтесь при необходимости использовать её. Это удобная форма указать на то, что для шаблона ещё не определён источник данных, и поэтому нет никаких результатов. -

Interwiki Language Links -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\321\200\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\321\200\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262/index.html" deleted file mode 100644 index a34c573b4f..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\321\200\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262/index.html" +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Генерирование результатов -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Генерирование_результатов -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Result_Generation ---- -

RDF

-

В этом разделе мы рассмотрим, как генерировать контент с помощью шаблонов XUL, используя источник данных RDF. Но вначале нужно познакомиться с основополагающими принципами и идеями. -

Используя математическое определение, можно сказать, что RDF - это размеченный направленный граф. Иными словами, RDF можно представить в виде графа; граф состоит из узлов и соединён стрелками; все стрелки и узлы имеют метки. Поскольку это граф, стрелки могут указывать на какой-угодно узел, а узлы могут иметь любое количество дуг, входящих или выходящих из него. Также, поскольку это граф, не существует начального (корневого) узла, поэтому вы, в принципе, можете начать с любого из них. На следующем графике видно, что из узла A, находящегося в верхней части рисунка, выходят дуги в узлы B, C и D. Из узла C выходит дуга в узел D. Поскольку стрелки могут указывать на любой узел, дуга из узла D может входит в узел A. Для обхода всех вершин дерева можно начать с узла A и, следуя по дугам, перейти к вершинам B, C и D. Вместе с тем, можно начать с узла B, от него перейти к A, а после - к C и D. Нет никаких ограничений на то, каким образом вы будете переходить по дугам: в том направлении, в которым они указывают, или в обратном. Данный график был создан программой RDF validator, разработанной W3C; если вы хотите проверить корректность RDF-файла, воспользуйтесь этим сервисом. -

Image:Template-guide-p2.png -

Красным цветом выделены метки стрелок, называемые предикатами (predicates). В данном примере все стрелки имеют метки; однако так бывает далеко не всегда. Шаблоны же предоставляют способ обхода только тех дуг, которые имеют определённые метки. -Ниже представлен пример возможной сериализация данного графа RDF в формате XML, хотя возможны и другие варианты. -

-
<?xml version="1.0"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xmlns:rel="http://www.xulplanet.com/rdf/">
-
-  <rdf:Description rdf:about="http://www.xulplanet.com/rdf/A">
-    <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/B"/>
-    <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/C"/>
-    <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/D"/>
-  </rdf:Description>
-
-  <rdf:Description rdf:about="http://www.xulplanet.com/rdf/C">
-    <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/D"/>
-  </rdf:Description>
-
-</rdf:RDF>
-
-

Для запроса в шаблоне XUL прежде всего нужно выбрать начальный узел графа. После этого для определения дальнейшего пути обхода используется множество условий. В конечном счёте, будет получен набор узлов, называемых конечными точками. Они и являются результатами выполнения запроса; именно их использует конструктор для генерирования контента. Допустим, вы начинаете с узла A. От него вы можете перейти к вершинам B, C и D и создать, таким образом, три элемента XUL. Или же вы можете начать с узла D и возвратиться по дугам к исходным вершинам. В данном случае получим всего один результат - вершину A. Убедитесь, что в этом случае получаем лишь один результат. -

Используя терминологию шаблонов XUL, назовём начальную вершину контейнером (container) или исходной точкой, а конечную вершину назовём элементом или членом (member). Такие названия используются потому, что в наиболее общем случае удобно говорить о списке элементов или дочерних узлов, собранных в контейнере. Тем не менее, выбор контейнера или его элементов зависит от вас; любой узел может выступать в этом качестве. -

Узлы RDF идентифицируются строкой символов. В RDF можно выделить два типа узлов: ресурсы, соответствующие "сущностям", и литералы, обозначающие имена, даты, размеры и другие свойства этих сущностей. Литералом может быть имя человека, например, "Елисей" или "Гарри Поттер". Значением ресурса является URI, выбранный по вашему усмотрению; мы будем использовать значение URI в шаблонах. На приведённом графике URI ресурсов выделены синим цветом на метках узлов. Хотя в данном примере литералы не используются мы будем использовать их позже. -

С вашего позволения пусть узел A будет начальным; ему соответствует URI (http://www.xulplanet.com/rdf/A). Используя атрибут 'ref', определим начальную вершину в шаблоне. Например, так: -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A" flex="1">
-
-

Обработка запросов

-

Запрос для источника данных RDF состоит из множества утверждений, оформленных как дочерние узлы элемента query. При обработке запроса конструктор собирает информацию о возможных результатах, расположении сгенерированого контента, и информацию о поведении в случае изменения содержимого источника данных. Эта информация сохраняется в течение всего жизненного цикла шаблона, до тех пока он не будет построен заново или разрушен. Для поиска требуемой информации конструктор шаблонов использует метод, основанный на алгоритме RETE. Это позволяет обновлять результаты эффективно при изменении структуры графа RDF. Т.е. вместо того, чтобы строить весь граф с самого начала, алгоритм позволяет добавить только некоторые его фрагменты и обновить вывод инкрементно. Схожий алгоритм используется при удалении утверждений RDF. -

Не смотря на то, что шаблон хранит множество информации для генерации корректного вывода, нас сейчас интересует информация о возможных результатах. Конструктор начинает, работу, имея всего один возможный начальный результат (seed). После он последовательно обрабатывает условия запроса. Для обработки конкретного условия необходимо рассмотреть все возможные результаты; если результат удовлетворяет условию, то он принимается, в противном случае - отвергается. Для первого условия в качестве возможного результата доступен только начальный (seed). При выполнении последующих шагов могут быть добавлены новые результаты либо иная релевантная информация. Отвергнутые результаты, естественно, будут удалены. После просмотра всех результатов для текущего условия, конструктор переходит к следующему. После обработки всех условий все оставшиеся результаты принимаются в качестве вывода. Они используются для генерации контента. Таким образом, подведём итоги: -

-
  1. Начать работу с одним возможным результатом (seed) -
  2. Для всех уже доступных результатов с дополнительными сведениями повторить шаги -
  3. Добавить все возможные результаты -
  4. Удалить все отвергнутые результаты -
  5. Повторить шаги 2-4 для всех условий запроса -
  6. По окончанию работы все оставшиеся данные становятся выводом -
-

Все возможные результаты образованы наборами пар переменная-значение. Например, результат будет выглядеть примерно так: -

-
(?name = Елисей, ?age = 5)
-
-

Здесь имеются две переменные, ?name со значением "Елисей" и ?age со значением 5. Переменные начинаются со знака вопроса, значениями являются либо ресурсы RDF, либо литералы. В данном случае используются литералы, поскольку это более удобочитаемо. Если бы у нас было два результата, они выглядели бы примерно так: -

-
(?name = Елисей, ?age = 5)
-(?name = Забава, ?age = 12)
-
-

Это обозначение для возможных результатов используется в этом и последующих примерах. -

Если у нас будет запрос, удаляющий все результаты, относящиеся к мужчинам, то после его применения результат будет примерно следующим: -

-
(?name = Забава, ?age = 12, ?gender = Female)
-
-

Таким образом, условие удалило Елисея из потенциальных результатов и добавило переменную ?gender для Забавы. На самом деле, это пример типичного поведения условия запроса: добавить новую переменную к результатам и отсеять те результаты, которые не удовлетворяют условию. Если данное условие было последним в списке, результат Забавы станет конечным выводом. -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\206\320\270\321\217_\320\277\321\200\320\260\320\262\320\270\320\273/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\206\320\270\321\217_\320\277\321\200\320\260\320\262\320\270\320\273/index.html" deleted file mode 100644 index 2d055cf6ff..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\206\320\270\321\217_\320\277\321\200\320\260\320\262\320\270\320\273/index.html" +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Компиляция правил -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Компиляция_правил -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Rule_Compilation ---- -

Шаблон XUL образован запросом и набором правил. Запрос содержит инструкции для выбора набора данных из их источника. Точный синтаксис зависит от типа источника данных, используемого в шаблоне. Например, для источника Sqlite в качестве запроса используется предложение SQL. Запрос возвращает таблицу результатов с данными, на основании которых впоследствии генерируется вывод. Для источников данных RDF и XML запрос содержит инструкции для обхода вершин графа RDF или дерева XML. Запрос объявляется с помощью тэга query, который должен быть размещён прямо под элементом <template> Цель запроса состоит в порождении набора выходных данных. -

При использовании упрощённого синтаксиса вы можете опустить элемент <rule>. При этом имеется только одно правило и его употребление подразумевается неявно. С другой стороны, расширенный синтаксис всегда требует наличия элемента <rule>. -

Шаблон содержит также набор правил; каждое правило может содержать множество условий для генерации контента. Синтаксис подстановки атрибутов, рассмотренный позже, используется для изменения значения атрибутов элементов, созданных в шаблоне. Каждое правило объявляется с помощью тэга rule; вы можете объявлять несколько правил. Для каждого результата запроса просматриваются условия, определённые правилом, и если они удовлетворяются, генерируется контент. Для каждого результа запроса применяется только первое согласующееся правило. Например, первое правило может быть применено к результатам, соответствующим книгам, тогда как второе правило может быть применено только к результатам, соответствующим журналам. Таким образом, в зависимости от особенностей результирующих данных может быть сгенерирован различный контент. -

Во многих случаях вам будет достаточно одного правила, обрабатывающего все данные одинаковым образом. Например, при создании элементов списка вы, скорее всего, будете использовать всего одно правило. В этом случае элемент rule необязателен. Шаблон без правил (или с правилом без условий) сгенерирует вывод для каждого набора выходных данных. -

Пока что можем представить синтаксис шаблонов примерно таким образом. -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A" flex="1">
-  <template>
-    <query>
-      -- query content goes here --
-    </query>
-    <rule>
-      -- rule content goes here --
-    </rule>
-    <rule>
-      -- rule content goes here --
-    </rule>
-  </template>
-</vbox>
-
-

Когда конструктор шаблона начинает загрузку и обработку данных, он, прежде всего, должен скомпилировать запрос и правила. Этот шаг включает обработку правил запроса и их преобразование во внутренние структуры. Таким образом, динамическое изменение правил ни на что не влияет, поскольку они уже скомиплированы. Тем не менее, повторная сборка шаблона (с использованием метода builder.rebuild) повторно скомпилирует запрос и правила и применит их для построения шаблона. Это обозначает, что вы можете динамически изменить правила, используя методы объектной модели документа (DOM), повторно собрать шаблон, и получить новый результат. -

Когда конструктор шаблонов скомпилировал правила, он может приступать к обработке запросов и генерации контента. Конструктор генерирует контент лениво (lazily), т.е. обрабатывает столько данных, сколько нужно именно сейчас, и продолжает обработку только тогда, когда это действительно необходимо. Давайте, например, рассмотрим следующий пример: -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A" hidden="true">
-  <template>
-    ...
-  </template>
-</vbox>
-
-

Элемент <vbox> скрыт (hidden="true"). Поскольку любой сгенерированный контент всё равно не будет отображён, конструктор шаблонов ничего не делает, откладывая работу "на потом". Если же вы отобразите элемент vbox (hidden="false"), будет вызван конструктор шаблонов и сгенерирован соответствующий контент. -

Означает ли это, что шаблоны не могут быть использованы внутри скрытых областей пользовательского интерфейса? Нет, ибо вы можете использовать их и в этом случае. Изменение свойства hidden не является единственным способом вызова конструктора шаблонов и генерации контента. Вызов программного интерфейса объектной модели документа (DOM API), которому необходимо получить доступ к созданному контенту, заставит конструктор генерировать контент. Например, достаточно вызвать код, подобный приведённому ниже, и внутри скрытого элемента vbox конструктор шаблонов создаст контент. -

-
var length = vbox.childNodes.length;
-
-

Таким образом, запрос на количество дочерних узлов элемента vbox заставит конструктор обработать запрос и вывести контент. И только после окончания работы конструктора может быть вычислено требуемое число элементов. -

Всё это должно быть очевидно XUL-разработчику. Решение о том, когда конструктор должен начать работу, принимается автоматически; вам для этого ничего особенного делать не нужно. Тем не менее, есть два случая, когда контент не создаётся автоматически: создание меню и дочерних элементов дерева. -

Содержимое меню не генерируется до тех пор, пока оно не открыто. Это имеет смысл, поскольку пользователь не может видеть содержимого меню до тех пор, пока оно не открыто. Тем не менее, это означает также, что использование программного интерфейса объектной модели документа (DOM API), такое как попытка получить количество дочерних узлов элемента, не заставит конструктор шаблонов создать содержимое до тех пор, пока пользователь не отобразит меню. Это на самом деле важная особенность. Это означает, что вы не можете полагаться на возможность получения сгенерированных элементов меню до тех пор, пока оно не открыто. Похожее правило применяется к дочерним элементам дерева. Таким образом, дочерние элементы дерева не генерируются до тех пор, пока пользователь либо скрипт не вызвают раскрытие строки в дереве. -

Ленивая генерация прийдётся кстати при работе с меню и деревьями, особенно рекурсивными. Создание дочерних элементов узла дерева, особенно тех, которые не отображаются, - весьма трудоёмкий процесс, поэтому конструктор шаблонов откладывает эту работу на потом. -

На самом деле, конструктор ещё более ленив. Если созданный контент сам содержит скрытые дочерние элементы, эти элементы не будут сгенерированы до тех пор, пока это не станет необходимо. При создании дерева контента конструктор обходит дерево и выполняет работу только в том случае, если это действительно необходимо. -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\200\320\265\320\272\321\203\321\200\321\201\320\270\320\262\320\275\320\276\320\265_\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\276\320\275\321\202\320\265\320\275\321\202\320\260/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\200\320\265\320\272\321\203\321\200\321\201\320\270\320\262\320\275\320\276\320\265_\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\276\320\275\321\202\320\265\320\275\321\202\320\260/index.html" deleted file mode 100644 index 44f23c389b..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\200\320\265\320\272\321\203\321\200\321\201\320\270\320\262\320\275\320\276\320\265_\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\276\320\275\321\202\320\265\320\275\321\202\320\260/index.html" +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Рекурсивное генерирование контента -slug: >- - Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Рекурсивное_генерирование_контента -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Recursive_Generation ---- -

В предыдущем примере конструктор создал во второй строке лишний набор из двух кнопок. Тем не менее, надписи на кнопках во втором наборе отличаются от надписей в первом наборе. Если вы посмотрите на граф снова, вы можете догадаться, почему так происходит. На нём видно, что узлы C и D соединены дугой с меткой relatedItem. Эта лишняя дуга, которой ни имеет ни узел B, ни узел D, и стала причиной создания дополнительного набора кнопок. -

После создания контента конструктор повторяет таким же образом процесс и на более нижних уровнях - до тех пор, пока это возможно. Таким образом, можно сказать, что конструктор создаёт контент рекурсивно. Т.е. после создания контента на одном уровне, конструктор выполняет работу на новом уровне - для нового родительского узла и новой начальной вершины. Естественно, родительский узел будет выбран из только что созданного контента, а не из какого-либо внешнего элемента, и начальная вершина будет выбрана среди конечных вершин предыдущего набора конечных вершин. В данном случае родительский узел - это элемент с атрибутом datasources, т.е. <vbox>. Для вложенных результатов родительским узлом станет один из элементов, созданных на предыдущем уровне. Таким образом, после первой итерации имеем: -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-      ref="http://www.xulplanet.com/rdf/A">
-  <template>
-    <query>
-      <content uri="?start"/>
-      <triple subject="?start"
-              predicate="http://www.xulplanet.com/rdf/relatedItem"
-              object="?relateditem"/>
-    </query>
-    <action>
-      <hbox uri="?relateditem">
-        <button label="?start"/>
-        <button label="?relateditem"/>
-      </hbox>
-    </action>
-  </template>
-  <hbox id="http://www.xulplanet.com/rdf/B">
-    <button label="http://www.xulplanet.com/rdf/A"/>
-    <button label="http://www.xulplanet.com/rdf/B"/>
-  </hbox>
-  <hbox id="http://www.xulplanet.com/rdf/C">
-    <button label="http://www.xulplanet.com/rdf/A"/>
-    <button label="http://www.xulplanet.com/rdf/C"/>
-  </hbox>
-  <hbox id="http://www.xulplanet.com/rdf/D">
-    <button label="http://www.xulplanet.com/rdf/A"/>
-    <button label="http://www.xulplanet.com/rdf/D"/>
-  </hbox>
-</vbox>
-
-

Для следующей итерации точками вставки контента станут три элемента <hbox>. Тем не менее, поскольку только узел C имеет дополнительный контент, только во второй элемент <hbox> будут вложены дополнительные дочерние элементы. -

Для вложенных элементов конструктор обрабатывает запрос как обычно; разве что в качестве начальной точки (seed) вместо атрибута ref используется конечная вершина (end point or member). Причём это значение должно соответствовать атрибуту id подходящего элемента. Вначале обрабатывается узел B: -

-
(?start = http://www.xulplanet.com/rdf/B)
-
-

После проверяется условие <triple>, однако из узла B не выходит дуга с меткой relatedItem, поэтому результат отбрасывается. Поскольку нет никаких результатов, контента не создаётся. Аналогичная ситуация и с узлом D. Тем не менее, для узла C условие выполняется и к промежуточным результатам добавляется набор данных: -

-
(?start = http://www.xulplanet.com/rdf/C, ?relateditem = http://www.xulplanet.com/rdf/D)
-
-

Image:Template-guide-p9.png -

Поскольку имеются результаты, к контенту, соответствующему узлу C, будет добавлена новая информация - согласно инструкциям в блоке action. Поскольку переменная ?start указывает на узел C и переменная ?relateditem указывает на D, будут добавлены кнопки именно с этими надписями. Посмотрите на приведённый рисунок и проверьте это. Теперь контент для узла C выглядит так: -

-
<hbox id="http://www.xulplanet.com/rdf/C">
-  <button label="http://www.xulplanet.com/rdf/A"/>
-  <button label="http://www.xulplanet.com/rdf/C"/>
-  <hbox id="http://www.xulplanet.com/rdf/D">
-    <button label="http://www.xulplanet.com/rdf/C"/>
-    <button label="http://www.xulplanet.com/rdf/D"/>
-  </hbox>
-</hbox>
-
-

Рекурсивная природа шаблонов имеет полезное применение при работе с меню и деревьями, позволяя автоматически создавать вложенный контент. Мы узнаем больше о рекурсивных шаблонах позже, а пока что рассмотрим более-менее реалистичный пример. -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\201\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201_\320\267\320\260\320\277\321\200\320\276\321\201\320\276\320\262_rdf/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\201\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201_\320\267\320\260\320\277\321\200\320\276\321\201\320\276\320\262_rdf/index.html" deleted file mode 100644 index 016a7679c9..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\201\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201_\320\267\320\260\320\277\321\200\320\276\321\201\320\276\320\262_rdf/index.html" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Синтаксис запросов RDF -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Синтаксис_запросов_RDF -tags: - - Руководство_по_шаблонам_XUL ---- -

Давайте рассмотрим простой запрос с двумя условиями. Каждому условию соответствует дочерний узел элемента <query>. -

-
<vbox datasources="http://www.xulplanet.com/ds/sample.rdf"
-         ref="http://www.xulplanet.com/rdf/A">
-  <template>
-    <query>
-      <content uri="?start"/>
-      <triple subject="?start"
-              predicate="http://www.xulplanet.com/rdf/relatedItem"
-              object="?relateditem"/>
-    </query>
-    <rule>
-      ...
-    </rule>
-  </template>
-</vbox>
-
-

Двум условиям запроса сопоставлены два различных тэга. Конструктор шаблонов ничего не будет создавать до тех пор, пока блок <action> пуст. Тем не менее, он имеет возможность скомпилировать правила; именно этот процесс мы и рассмотрим. -

Конструктор начинает работу, имея всего один элемент (seed), который определён тэгом <content>. Он задаёт начальную точку для обхода графа. Ясно, что нужно начинать с чего-то; тэг <content> задаёт эту вершину и поэтому должен быть первым условием запроса. Поскольку мы можем иметь только одну начальную точку, может быть использован только один тэг <content>. Таким образом начальный результат будет выглядеть так: -

-
(?start = http://www.xulplanet.com/rdf/A)
-
-

Значение переменной ?start определено атрибутом 'uri'. Выбор названия переменной оставлен на ваше усмотрение; как правило, используется название ?uri. Поскольку все правила должны использовать одну и ту же переменную для начальной вершины, назовём её ?start. Она имеет значение 'http://www.xulplanet.com/rdf/A'. Обратите внимание на то, что это соответствует значению атрибута ref, указывающего на требуемый начальный узел. Таким образом, переменная ?start становится контейнером (исходной точкой). -

Поскольку тэг <content> ничего больше не делает, т.е. не добавляет никакой новой информации, обработчик переходит к следующему условию <triple> -

На самом деле, приведённое описание работы шаблона не совсем корректно; во всяком случае, для данной программной реализации этого механизма. Начальный узел (seed) на самом деле - это внутренняя переменная, указывающая на контейнер; в данном случае это элемент <vbox>; переменная ?start получает значение атрибута ref позже, но это лишь деталь реализации, ненамного улучшающая понимание механизма работы шаблонов. Поэтому положим пока что, что имеется лишь один возможный результат. -

После анализа содержимого тэга <content> конструктор переходит к следующему условию, <triple>, которое выглядит примерно так: -

-
<triple subject="?start"
-        predicate="http://www.xulplanet.com/rdf/relatedItem"
-        object="?relateditem"/>
-
-

Условие <triple> используется для перехода по дугам в графе RDF. Атрибут predicate определяет метку дуги, по которой необходимо перемещаться. В данном случае, он имеет значение 'http://www.xulplanet.com/rdf/relatedItem', поэтому конструктор переходит по дугам с этой меткой; он может переходить по направлению, указанному в графе, либо в противоположном направлении, но только в одном направлении для каждого условия. Конструктор сам определяет, в каком направлении необходимо двигаться, в зависимости от того, какие данные известны, а какие нужно найти. Возвращаясь к имеющимся результатам, имеем: -

-
(?start = http://www.xulplanet.com/rdf/A)
-
-

Как вы помните, начальный узел (seed) был определён условием <content>. Как вы уже, наверное, догадываетесь, конструктор подставляет значение этой переменной в атрибут subject, получая: -

-
<triple subject="http://www.xulplanet.com/rdf/A"
-        predicate="http://www.xulplanet.com/rdf/relatedItem"
-        object="?relateditem"/>
-
-

На самом деле, конструктор не изменяет элемент triple, но такая условность упрощает понимание работы шаблона. Конструктор просматривает содержимое атрибутов subject и object элемента triple и пытается найти все переменные, использующие эти данные. Переменная ?start имеет значение 'http://www.xulplanet.com/rdf/A', поэтому её значение подставляется в условие. Переменная ?relateditem не имеет никакого значение, поэтому она будет оставлена как есть. После того, как значения переменных подставлены, можно выполнить запрос к графу RDF. -

Запрос выявит все дуги, выходящие из вершины 'http://www.xulplanet.com/rdf/A' с меткой, соответствующей предикату 'http://www.xulplanet.com/rdf/relatedItem'. Поскольку переменная ?relateditem неизвестна, конструктор позволяет в качестве объекта любой узел, и просмотрит в источнике данных все утверждения RDF, удовлетворяющие такому условию. В условии <triple> атрибут subject всегда соответствует узлу, из которого выходит дуга, тогда как атрибуту object соответствует узел, в который дуга входит. В данном случае конструктор будет переходить в стандартном направлении, а не в обратном. Давайте снова посмотрим на наш граф: -

Image:Template-guide-p2.png -

Начиная с вершины A и следуя по дуге relatedItem, можем видеть, что есть три возможных значения для переменной ?relateditem: узлы B, C и D. Это новые данные, поэтому конструктор добавляет их к графу результатов. Поскольку было найдено три узла, набор возможных (промежуточных) результатов выглядит так: -

-
(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C)
-(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D)
-
-

Вы, должно быть, заметили, что переменная ?start повторяется для каждого результата. Это происходит потому, что конструктор копирует существующие данные для всех промежуточных результатов и добавляет новые данные. Точнее, это не совсем так; конструктор на самом деле использует одну копию результатов, остальные значения - это только ссылки на эту копию. -

Это может показаться несколько запутанным, но, когда мы перейдём к рассмотрению примеров, это станет более ясным. Поскольку <triple> был последним условием, конструктор переходит к этапу генерации контента, т.е. будет создано три элемента. -

diff --git "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\210\320\260\320\261\320\273\320\276\320\275\321\213_\320\275\320\260_\320\276\321\201\320\275\320\276\320\262\320\265_sqlite/index.html" "b/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\210\320\260\320\261\320\273\320\276\320\275\321\213_\320\275\320\260_\320\276\321\201\320\275\320\276\320\262\320\265_sqlite/index.html" deleted file mode 100644 index d597289c0f..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\200\321\203\320\272\320\276\320\262\320\276\320\264\321\201\321\202\320\262\320\276_\320\277\320\276_\321\210\320\260\320\261\320\273\320\276\320\275\320\260\320\274_xul/\321\210\320\260\320\261\320\273\320\276\320\275\321\213_\320\275\320\260_\320\276\321\201\320\275\320\276\320\262\320\265_sqlite/index.html" +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Шаблоны на основе SQLite -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Шаблоны_на_основе_SQLite -tags: - - Руководство_по_шаблонам_XUL ---- -

-

Шаблоны могут использовать источник данных, получающий информацию из базы данных Sqlite. Это позволяет использовать информацию, полученную из базы данных, для генерации контента XUL. Чтобы сделать это, установите значение атрибута querytype корневого узла шаблона равным storage. Это позволяет рассматривать источник данных как базу данных Sqlite. -

Атрибут datasources может быть установленным равным одному из двух возможных типов значений. Во-первых, это может быть URL файла, указывающего на локальный файл. В этом случае, вы, скорее всего, будете устанавливать атрибут datasources динамически, после определения пути к файлу. Во-вторых, вы можете использовать специальную форму url: -

-
profile:filename.sqlite
-
-

Эта форма, содержащая префикс 'profile' используется для указания на файлы в директории, содержащей параметры пользователя (profile). Это полезно для хранения пользовательских данных, и применимо в том случае, если вам не нужно вычислять, где находится данная директория. Файл, находящийся в этой директории, указан после двоеточия, и в данном случае это 'filename.sqlite'. Файлы базы данных Sqlite имеют, как правило, расширение 'sqlite'. -

Точно также, как и с источниками данных на основе XML, атрибут ref в данное время не используется для источников Sqlite, поэтому вам нужно всего лишь оставить атрибут ref пустым; как правило, для этого используется специальное значение '*'.

Запрос для источника данных Sqlite представляет из себя просто предложение select языка SQL, как текст внутри элемента query. Этот простой пример иллюстрирует, как отобразить список, содержащий значения из одной колонки в таблице из базы данных. -

-
<listbox datasources="profile:userdata.sqlite" ref="*" querytype="storage">
-  <template>
-    <query>
-      select name from myfriends
-    </query>
-    <action>
-      <listitem uri="?" label="?name"/>
-    </action>
-  </template>
-</listbox>
-
-

Запрос возвращает список значений из колонки 'name' в таблице 'myfriends'. Тело блока action, начинающееся узлом с атрибутом uri="?" повторяется для каждого результата, возвращенного в результате выполнения запроса. Если запрос возвращает шесть результатов, будет создано шесть элементов списка. Атрибут label имеет специальное значение '?name'. Синтаксис, использующий знак вопроса, похож на используемый для других типов запросов. Это обозначает, что каждому атрибуту label будет сопоставлено значение из соответствующей колонки таблицы. В данном случае, значение '?name' обозначает, что необходимо подставить значение из таблицы name. В результате получим список элементов, содержащий имена из базы данных. -

Используя более сложные запросы, можно получить значения из нескольких колонок или же данные, выбранные по определённому критерию. -

-
<vbox datasources="profile:userdata.sqlite" ref="*" querytype="storage">
-  <template>
-    <query>
-      select name, email from myfriends where age >= 30
-    </query>
-    <action>
-      <hbox uri="?">
-        <label value="?name"/>
-        <label value="?email"/>
-      </hbox>
-    </action>
-  </template>
-</vbox>
-
-

Этот шаблон отображает данные, полученные из двух колонок. Всякое вхождение знака вопроса в блоке action заменяется на значение из результата запроса. В данном случае он используется дважды: в первый раз для отображения имени и во второй раз для отображения адреса электронной почты. Атрибут uri элемента hbox необходим для одного элемента внутри блока action. Для запросов Sqlite в большинстве случаев это будет самый внешний узел. -

Обратите внимание также на то, что запрос содержит оператор where, который выбирает только те строки, для которых значение поля возраст не меньше 30. -

-

Параметры запроса

-

Иногда, вам потребуется динамически изменять запрос в зависимости от определённых критериев. Вы можете использовать простой способ, изменяя текст внутри элемента query, а после перестраивать шаблон. Тем не менее, этот подход может стать громоздким и неповоротливым для более сложных запросов, и может стать источником большого количества ошибок, если для значений не были правильно обработаны специальные символы, такие как лишние кавычки и двоеточия. Это особенно важно, если вы обрабатываете значения, полученные от пользователя. -

Простым решением проблемы является использование параметров запросов, используя элемент param. -

-
<query>
-  select name, email from myfriends where gender == :wantedgender
-  <param name="wantedgender">male</param>
-</query>
-
-

В этом примере используется параметр 'wantedgender'. Прямым потомком элемента query должен быть элемент param. Атрибут name используется для определения имени параметра, а содержимое элемента param определяет используемое значение. Когда имя, предварённое двоеточием, появляется в запросе, такое как ':wantedgender' в вышеприведённом примере, значение этого параметра будет подставлено в запрос. В конечном счёте, используемый запрос выглядит так: -

-
select name, email from myfriends where gender == 'male'
-
-

При использовании такого приёма, специальные символы, такие как кавычки, обрабатываются автоматически. Если кавычки появляются в запросе, то они будут при необходимости обработаны. Теперь, чтобы настроить запрос для выбора чего-то иного, например, чтобы выбрать информацию, относящуюся к женщинам, всё что нужно сделать - это просто получить ссылку на элемент param и изменить его содержимое. Скорее всего, вы присвоите определённый идентификатор элементу param, чтобы использовать метод getElementById для доступа к нему. -

Вы можете добавить столь много параметров, сколько необходимо для выполнения вашего запроса. Пример, приведённый выше использовал строковый параметр. Тем не менее, если вам нужен числовой параметр, вам также потребуется установить значение атрибута type. -

-
<listbox id="friends" datasources="profile:userdata.sqlite" ref="*" querytype="storage">
-  <template>
-    <query>
-      select name, from myfriends where age >= :minage && age <= maxage
-      <param id="minage" name="minage" type="integer">30</param>
-      <param id="maxage" name="maxage" type="integer">40</param>
-    </query>
-    <action>
-      <listitem uri="?" label="?name"/>
-    </action>
-  </template>
-</listbox>
-
-

В данном случае age - целочисленный параметр, поэтому атрибуту type установлено значение integer. Целые числа представлены 32-битными значениями, но вы можете использовать значение int64 для 64-битных целых. Вы можете также использовать специальное значение double для вещественных чисел с двойной точностью. Если же тип не определён, то по умолчанию предполагается, что он строковый. -

Позже мы можем изменить значение параметра age, используя простой скрипт: -

-
function adjustAge(min, max)
-{
-  document.getElementById("minage").textContent = min;
-  document.getElementById("maxage").textContent = max;
-  document.getElementById("friends").builder.rebuild();
-}
-
-

Эта функция принимает два параметра, максимальное и минимальное используемое значения. Мы получаем элементы param и устанавливаем их свойства textContent равными требуемому значению. Наконец, мы перестраиваем весь шаблон. -

diff --git "a/files/ru/mozilla/tech/xul/\321\201\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/index.html" "b/files/ru/mozilla/tech/xul/\321\201\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/index.html" deleted file mode 100644 index ef599ae729..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\201\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/index.html" +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: XUL Справочник -slug: Mozilla/Tech/XUL/Справочник -tags: - - XUL -translation_of: Archive/Mozilla/XUL/XUL_Reference ---- -

 

- - - - - - - - - - - - -
Перечень всех XUL элементов
-

action
- arrowscrollbox
- bbox
- binding
- bindings
- box
- broadcaster
- broadcasterset
- button
- browser
- checkbox
- caption
- colorpicker
- column
- columns
- commandset
- command
- conditions
- content
- datepicker
- deck
- description
- dialog
- dialogheader
- dropmarker
- editor
- grid
- grippy
- groupbox
- hbox
- iframe
- image
- key
- keyset
- label
- listbox
- listcell
- listcol
- listcols
- listhead
- listheader

-
-

listitem
- member
- menu
- menubar
- menuitem
- menulist
- menupopup
- menuseparator
- notification
- notificationbox
- observes
- overlay
- page
- panel
- popup
- popupset
- preference
- preferences
- prefpane
- prefwindow
- progressmeter
- radio
- radiogroup
- resizer
- richlistbox
- richlistitem
- row
- rows
- rule
- scale
- script
- scrollbar
- scrollbox
- scrollcorner
- separator
- spacer
- spinbuttons
- splitter
- stack
- statusbar

-
-

statusbarpanel
- stringbundle
- stringbundleset
- tab
- tabbrowser
- tabbox
- tabpanel
- tabpanels
- tabs
- template
- textnode
- textbox
- textbox (автозаполнение в Firefox)
- textbox (автозаполнение в Mozilla)
- timepicker
- titlebar
- toolbar
- toolbarbutton
- toolbargrippy
- toolbaritem
- toolbarpalette
- toolbarseparator
- toolbarset
- toolbarspacer
- toolbarspring
- toolbox
- tooltip
- tree
- treecell
- treechildren
- treecol
- treecols
- treeitem
- treerow
- treeseparator
- triple
- vbox
- window
- wizard
- wizardpage

-
- -

См. также о XUL

- - - -

diff --git "a/files/ru/mozilla/tech/xul/\321\201\321\202\320\270\320\273\320\270/index.html" "b/files/ru/mozilla/tech/xul/\321\201\321\202\320\270\320\273\320\270/index.html" deleted file mode 100644 index a9fbd80c13..0000000000 --- "a/files/ru/mozilla/tech/xul/\321\201\321\202\320\270\320\273\320\270/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Классы стилей -slug: Mozilla/Tech/XUL/Стили -translation_of: Archive/Mozilla/XUL/Style ---- -

« XUL Справочник

- - - -

-- cgit v1.2.3-54-g00ecf