X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=doc%2Fmkws-developer.markdown;h=edc25664f068d34c92be47e6b1b760b1f859cc46;hb=81ed4f1429a0f6171891d10b384aaace9ef12ec6;hp=9d3ac4b72ed7151ec5d85556e9f8d1a9cc0d5b70;hpb=c209fd276576df2500e25299a00120db4c573884;p=mkws-moved-to-github.git diff --git a/doc/mkws-developer.markdown b/doc/mkws-developer.markdown index 9d3ac4b..edc2566 100644 --- a/doc/mkws-developer.markdown +++ b/doc/mkws-developer.markdown @@ -87,29 +87,30 @@ Defining new types of widget ---------------------------- Development with MKWS consists primarily of defining new types of -widgets. These can interact with the core functionality is several -defined ways. +widgets. This is done using exactly the same API as the the widgets +that come as part of the set: they have no privileged access. You create a new widget type by calling the `mkws.registerWidgetType` function, passing in the widget name and a function. The name is used to recognise HTML elements as being widgets of this type -- for -example, if you register a `Foo` widget, elements like -`
` will be widgets of this type. +example, if you register a `foo` widget, elements like +`
` will become widgets of this type. -The function promotes a bare widget object (passed as `this`) into a +The function promotes a bare widget object (which is created by the +core widget code and passed in as `this`) into a widget of the appropriate type. MKWS doesn't use classes or explicit prototypes: it just makes objects that have the necessary behaviours. There are _no_ behaviours that Widgets are obliged to provide: you can make a doesn't-do-anything-at-all widget if you like: - mkws.registerWidgetType('Sluggard', function() {}); + mkws.registerWidgetType('sluggard', function() {}); More commonly, widgets will subscribe to one or more events, so that they're notified when something interesting happens. For example, the -`Log` widget asks to be notified when a `log` event happens, and +`log` widget asks to be notified when a `log` event happens, and appends the logged message to its node, as follows: - mkws.registerWidgetType('Log', function() { + mkws.registerWidgetType('log', function() { var that = this; this.team.queue("log").subscribe(function(teamName, timestamp, message) { @@ -131,11 +132,11 @@ This simple widget illustrates several important points: * You can add functionality to a widget by subscribing it to an event's queue using `this.team.queue("EVENT").subscribe`. The argument is a function which is called whenever the event is - published. The arguments to the function are different for different - events. + published. The arguments to the event-callback function are + different for different events. * As with so much JavaScript programming, the value of the special - variable `this` is lost inside the `subscribez` callback function, + variable `this` is lost inside the `subscribe` callback function, so it must be saved if it's to be used inside that callback (typically as a local variable named `that`). @@ -144,13 +145,13 @@ Widget specialisation (inheritance) ----------------------------------- Many widgets are simple specialisations of existing widgets. For -example, the `Record` widget is the same as the `Records` widget -except that it defaults to displaying a single record. It's defined as -follows: +example, the `images` widget is the same as the `records` widget +except that it defaults to using the `images` template for displaying +its result list. It's defined as follows: - mkws.registerWidgetType('Record', function() { - mkws.promotionFunction('Records').call(this); - if (!this.config.maxrecs) this.config.maxrecs = 1; + mkws.registerWidgetType('images', function() { + mkws.promotionFunction('records').call(this); + if (!this.config.template) this.config.template = 'images'; }); Remember that when a promotion function is called, it's passed a base @@ -160,11 +161,11 @@ that you want to specialise from -- in this case, `Records` -- using the promotion function that's been registered for that type. Once this has been done, the specialisations can be introduced. In -this case, it's a very simple matter of changing the `maxrecs` -configuration setting to 1 unless it's already been given an explicit -value. (That would occur if the HTML used an element like `
`, though it's not obvious why anyone -would do that.) +this case, it's a very simple matter of changing the `template` +configuration setting to `'images'` unless it's already been given an +explicit value. (That would occur if the HTML used an element like +`
` to use a customised +template. Reference Guide @@ -226,7 +227,7 @@ be used by the derived widget. widgets that can be omitted from the mobile version of a site. * `expandValue()` -- - TODO: either document this or remove it from the API. + FIXME: either document this or remove it from the API. * `subwidget(type, overrides, defaults)` -- Returns the HTML of a subwidget of the specified type, which @@ -241,7 +242,7 @@ be used by the derived widget. See for example the `Credo` widget defined in the example area's `mkws-widget-credo.js` file. This uses several invocations of `subwidget` to create a complex compound widget - with numerous text, facet and image panes. TODO: rename this + with numerous text, facet and image panes. FIXME: rename this widget and everything related to it. In addition to these properties and methods of the bare widget object, @@ -330,7 +331,7 @@ API should get simpler. Events ------ -TODO: list of events that can be usefully subscribed to. +FIXME: list of events that can be usefully subscribed to. - - -