ooops, forgot the remove `require("Glib")` since it's not even used. Updated the repo: https://github.com/WebReflection/jsgtk/blob/master/examples/lang.js
Best Regards On Mon, Apr 11, 2016 at 12:03 PM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > Hi Philip, > I forgot to push and post about it. It took a bit more than expected and > it required a different approach: > > 1. add special AST to babel class parser > 2. replace some babel helper to avoid errors with natives > 3. overwrite Object.getPrototypeOf to avoid errors with natives > 4. use behind the scene imports.lang since there's a lot going on in > there > > In any case, the final result, using the example code you gave me, is the > following: > https://github.com/WebReflection/jsgtk/blob/master/examples/lang.js > > ```js > > const > GLib = require('GLib'), > Gtk = require('Gtk') > ; > > class TimerLabel extends Gtk.Label { > constructor(props) { > super(props); > this._count = 0; > this.label = 'Hello World!'; > setInterval(() => { > this._count++; > this.emit('count'); > }, 1000); > } > get count() { > return this._count; > } > } > > Gtk.init(null); > > let win = new Gtk.Window(); > win.add( > new TimerLabel() > .on('count', function () { > if (this.count === 2) > Gtk.mainQuit(); > }) > ); > win > .on('show', Gtk.main) > .on('destroy', Gtk.mainQuit) > .showAll() > ; > > ``` > > I'm not sure I've missed some essential part of your example code but > doesn't that look good now? :-) > > Best Regards > > > > On Sat, Apr 9, 2016 at 9:47 PM, <philip.chime...@gmail.com> wrote: > >> On Sat, Apr 9, 2016 at 12:19 PM Andrea Giammarchi < >> andrea.giammar...@gmail.com> wrote: >> >>> Hi Philip, >>> rather than submitting PRs to the entirety of the JS community, I >>> believe it would make more sense to release a version of gjs that >>> suppresses all mozjs24 lint warnings **unless** specified otherwise. >>> >>> Like I've said, it's about interoperability and linters rules **THANKS >>> GOSH** are team and developers dependent. >>> >>> I specially found `return undefined;` as fix for `return;` being the >>> most pointless waste of time I've ever had in my life ... so no, I'm not >>> planning to submit PRs around to make stuff work on GJS (at least not yet >>> and I believe that won't really solve a thing). >>> >> >> I suggest then that you open a bug report on bugzilla.gnome.org >> proposing to reverse the flag. It would be a 3-line patch to change >> GJS_DISABLE_EXTRA_WARNINGS to GJS_ENABLE_EXTRA_WARNINGS, so I don't think >> doing the work will be the problem. I think your reasons make sense, so you >> shouldn't have trouble convincing the maintainers. >> >> >>> On Sat, Apr 9, 2016 at 8:08 PM, <philip.chime...@gmail.com> wrote: >>> >>>> Is there a way to write GObject-derived classes using the native ES6 >>>> class keyword? (That's the only reason for the existence of the Lang.Class >>>> metaclass, as far as I'm concerned.) >>>> >>>> could you give me a single example where `imports.lang` is needed? In >>> the entire `jsgtk` I haven't used it at all and I think I don't need it. >>> >>> `_init` methods? that's like very old style MooTools stuff but it takes >>> nothing to have a generic ES6 class invoking it within its constructor ... >>> right? >>> >>> If you could give me an example, I'd be more than happy to investigate >>> it. >>> >> >> Sure. Here's a slightly contrived example of writing a GObject-derived >> class with GObject properties: >> >> const GLib = imports.gi.GLib; >> const GObject = imports.gi.GObject; >> const Gtk = imports.gi.Gtk; >> const Lang = imports.lang; >> Gtk.init(null); >> >> const TimerLabel = new Lang.Class({ >> Name: 'TimerLabel', >> Extends: Gtk.Label, >> Properties: { >> 'timeout': GObject.ParamSpec.uint('timeout', '', '', >> GObject.ParamFlags.READWRITE | >> GObject.ParamFlags.CONSTRUCT_ONLY, >> 1, 10, 1), >> 'count': GObject.ParamSpec.uint('count', '', '', >> GObject.ParamFlags.READABLE, 0, GLib.MAXUINT32, 0), >> }, >> _init: function (props) { >> this.parent(props); >> this._count = 0; >> this.label = 'Hello World!'; >> GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, this.timeout, () >> => { >> this._count++; >> this.notify('count'); >> return GLib.SOURCE_CONTINUE; >> }); >> }, >> get count() { >> return this._count; >> }, >> }); >> >> let win = new Gtk.Window(); >> let label = new TimerLabel(); >> win.add(label); >> win.connect('destroy', Gtk.main_quit); >> label.connect('notify::count', (obj) => { >> if (obj.count === 10) >> Gtk.main_quit(); >> }); >> win.show_all(); >> Gtk.main(); >> >> The Lang.Class metaclass looks for two special keys, Properties and >> Signals, to create GObject properties and signals internally. You could use >> ES2015 native properties, but AFAIU you won't get features like GObject's >> "notify" signal (used in the example above.) >> >> Philip >> > >
_______________________________________________ javascript-list mailing list javascript-list@gnome.org https://mail.gnome.org/mailman/listinfo/javascript-list