[gjs.wiki] Move wiki to doc directory
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs.wiki] Move wiki to doc directory
- Date: Thu, 19 Sep 2019 23:44:35 +0000 (UTC)
commit 7ea0599198cb1661a4d7bdacccd216328b80661e
Author: Philip Chimento <philip chimento gmail com>
Date: Thu Sep 19 23:44:31 2019 +0000
Move wiki to doc directory
Mapping.md | 243 +------------------------------------------------------------
1 file changed, 1 insertion(+), 242 deletions(-)
---
diff --git a/Mapping.md b/Mapping.md
index d1b0805..8b655a8 100644
--- a/Mapping.md
+++ b/Mapping.md
@@ -1,242 +1 @@
-## GObject Construction, Subclassing, Templates and GType
-
-### Constructing GObjects
-
-GObjects can be constructed with the `new` operator, just like JavaScript objects, and usually take an
Object map of properties.
-
-The object that you pass to `new` (e.g. `Gtk.Label` in `let label = new Gtk.Label()`) is the **constructor
object**, that contains constructor methods and static methods such as `Gio.File.new_for_path()`.
-It's different from the **prototype object** containing instance methods.
-For more information on JavaScript's prototypal inheritance, this [blog
post][understanding-javascript-prototypes] is a good resource.
-
-```js
-let label = new Gtk.Label({
- label: '<a href="https://www.gnome.org">Gnome.org</a>',
- halign: Gtk.Align.CENTER,
- hexpand: true,
- use_markup: true,
- visible: true
-});
-
-let file = Gio.File.new_for_path('/proc/cpuinfo');
-```
-
-[understanding-javascript-prototypes]:
https://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/
-
-### Subclassing GObjects
-
-GObjects have facilities for defining properties, signals and implemented interfaces. Additionally, Gtk
objects support defining a CSS name and composite template.
-
-The **constructor object** is also passed to the `extends` keyword in class declarations when subclassing
GObjects.
-
-```js
-var MyLabel = GObject.registerClass({
- // GObject
- GTypeName: 'Gjs_MyLabel', // GType name (see below)
- Implements: [ Gtk.Orientable ], // Interfaces the subclass implements
- Properties: {}, // More below on custom properties
- Signals: {}, // More below on custom signals
- // Gtk
- CssName: '', // CSS name
- Template: 'resource:///path/example.ui', // Builder template
- Children: [ 'label-child' ], // Template children
- InternalChildren: [ 'internal-box' ] // Template internal (private) children
-}, class MyLabel extends Gtk.Label {
- // Currently GObjects use _init, not construct
- _init(params) {
- // Chaining up
- super._init(params);
- }
-});
-```
-
-### GType Objects
-
-This is the object that represents a type in the GObject type system. Internally a GType is an integer, but
you can't access that integer in GJS.
-
-The `$gtype` property gives the GType object for the given type. This is the proper way to find the GType
given an object or a class. For a class, `GObject.type_from_name('GtkLabel')` would work too if you know the
GType name, but only if you had previously constructed a Gtk.Label object.
-
-```js
-log(Gtk.Label.$gtype);
-log(labelInstance.constructor.$gtype);
-// expected output: [object GType for 'GtkLabel']
-```
-
-The `name` property of GType objects gives the GType name as a string ('GtkLabel'). This is the proper way
to find the type name given an object or a class.
-
-User defined subclasses' GType name will be the class name prefixed with `Gjs_`by default.
-If you want to specify your own name, you can pass it as the value for the `GTypeName` property to
`GObject.registerClass()`.
-This will be relevant in situations such as defining a composite template for a GtkWidget subclass.
-
-```js
-log(Gtk.Label.$gtype.name);
-log(labelInstance.constructor.$gtype.name);
-// expected output: GtkLabel
-
-log(MyLabel.$gtype.name);
-// expected output: Gjs_MyLabel
-```
-
-[`instanceof`][mdn-instanceof] can be used to compare an object instance to a **constructor object**.
-
-```js
-log(typeof labelInstance);
-// expected output: object
-
-log(labelInstance instanceof Gtk.Label);
-// expected output: true
-```
-
-[mdn-instanceof]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/instanceof
-
-## Properties
-
-GObject properties may be retrieved and set using native property style access or GObject get/set methods.
Note that variables in JavaScript can't contain hyphens (-) so when a property name is *unquoted* use an
underscore (_).
-
-```js
-if (!label.use_markup) {
- label.connect('notify::use-markup', () => { ... });
- label.use_markup = true;
- label['use-markup'] = true;
- label.set_use_markup(true);
-}
-```
-
-GObject subclasses can register properties, which is necessary if you want to use `GObject.notify()` or
`GObject.bind_property()`.
-
-**NOTE:** Never use underscores in property names in the ParamSpec, because of the conversion between
underscores and hyphens mentioned above.
-
-```js
-var MyLabel = GObject.registerClass({
- Properties: {
- 'example-prop': GObject.ParamSpec.string(
- 'example-prop', // property name
- 'ExampleProperty', // nickname
- 'An example read write property', // description
- GObject.ParamFlags.READWRITE, // READABLE/READWRITE/CONSTRUCT/etc
- '' // implement defaults manually
- )
- }
-}, class MyLabel extends Gtk.Label {
- _init(params) {
- super._init(params);
- }
-
- get example_prop() {
- if (this._example_prop === undefined) {
- return 'A default';
- }
-
- return this._example_prop;
- }
-
- set example_prop(value) {
- this._example_prop = value;
- this.notify('example-prop');
- }
-});
-```
-
-## Signals
-
-Every object inherited from GObject has `connect()`, `connect_after()`, `disconnect()` and `emit()` methods.
-
-```js
-let handlerId = label.connect('activate-link', (label, uri) => {
- Gtk.show_uri_on_window(
- label.get_toplevel(),
- uri,
- Gdk.get_current_time()
- );
- return true;
-});
-
-label.emit('activate-link', 'https://www.gnome.org');
-
-label.disconnect(handlerId);
-```
-
-GObject subclasses can also register their own signals.
-
-```js
-var MyLabel = GObject.registerClass({
- Signals: {
- 'my-signal': {
- flags: GObject.SignalFlags.RUN_FIRST,
- param_types: [ GObject.TYPE_STRING ]
- }
- }
-}, class ExampleApplication extends GObject.Object {
- _init() {
- super._init();
- this.emit('my-signal', 'a string parameter');
- }
-});
-```
-
-**NOTE:** GJS also includes a built-in [`signals`](Modules#signals) module for applying signals to native
JavaScript classes.
-
-## Enumerations and Flags
-
-Both enumerations and flags appear as entries under the namespace, with associated member properties. These
are available in the official GJS [Gnome API documentation][gjs-docs].
-
-```js
-// enum GtkAlign, member GTK_ALIGN_CENTER
-Gtk.Align.CENTER;
-// enum GtkWindowType, member GTK_WINDOW_TOPLEVEL
-Gtk.WindowType.TOPLEVEL;
-// enum GApplicationFlags, member G_APPLICATION_FLAGS_NONE
-Gio.ApplicationFlags.FLAGS_NONE
-```
-
-Flags can be manipulated using native [bitwise operators][mdn-bitwise].
-
-```js
-let myApp = new Gio.Application({
- flags: Gio.ApplicationFlags.HANDLES_OPEN | Gio.ApplicationFlags.HANDLES_COMMAND_LINE
-});
-
-if (myApp.flags & Gio.ApplicationFlags.HANDLES_OPEN) {
- myApp.flags &= ~Gio.ApplicationFlags.HANDLES_OPEN;
-}
-```
-
-[gjs-docs]: http://devdocs.baznga.org/
-[mdn-bitwise]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
-
-## Structs and Unions
-
-C structures and unions are documented in the [Gnome API documentation][gjs-docs] (e.g.
[Gdk.Event][gdk-event]) and generally have either JavaScript properties or getter methods for each member.
Results may vary when trying to modify structs or unions.
-
-```js
-widget.connect("key-press-event", (widget, event) => {
- log(event);
- // expected output: [union instance proxy GIName:Gdk.Event jsobj@0x7f19a00b6400 native@0x5620c6a7c6e0]
- log(event.get_event_type() === Gdk.EventType.KEY_PRESS);
- // expected output: true
- let [ok, keyval] = event.get_keyval();
- log(keyval);
- // example output: 65507
-});
-```
-
-[gdk-event]: http://devdocs.baznga.org/gdk30~3.22p/gdk.event
-
-## Multiple return values (caller-allocates)
-
-In GJS caller-allocates (variables passed into a function) and functions with multiple out parameters are
returned as an array of return values. If the function has a return value, it will be the first element of
that array.
-
-```js
-let [minimumSize, naturalSize] = label.get_preferred_size();
-
-// Functions with boolean 'success' returns often still throw an Error on failure
-try {
- let file = new Gio.File({ path: '/proc/cpuinfo' });
- let [ok, contents, etag_out] = file.load_contents(null);
- // "ok" is actually useless in this scenario, since if it is false,
- // an exception will have been thrown. You can skip return values
- // you don't want with array elision:
- let [, contents2] = file.load_contents(null);
-} catch(e) {
- log('Failed to read file: ' + e.message);
-}
-```
\ No newline at end of file
+Since the GitLab wiki requires developer permissions to edit, we have moved the wiki pages to the `doc/`
directory where anyone can edit them by submitting a merge request. This page can now be found
[here](https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Mapping.md).
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]