Ignore:
Timestamp:
02/24/12 16:09:22 (13 years ago)
Author:
hendrikvanantwerpen
Message:

[Client] MultipleChoiceWidget? for editing multiple choice questions
[Client] Move templates to separate directories.
[Client] Created QuestionWidget? to edit complete questions.
[Client] Fixed startup race condition where parsing was started before all classes were loaded.

Location:
Dev/branches/rest-dojo-ui/client/rft/ui
Files:
3 added
5 edited
3 moved

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui/client/rft/ui/LineWithActionsWidget.js

    r275 r288  
    1 define(['dojo/_base/declare','dojo/_base/lang','dijit/form/Button','dijit/_WidgetBase','dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','dojo/text!rft/ui/LineWithActionsWidget.html'],
     1define(['dojo/_base/declare','dojo/_base/lang','dijit/form/Button',
     2    'dijit/_WidgetBase','dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin',
     3    'dojo/text!./templates/LineWithActionsWidget.html'],
    24    function(declare,lang,Button,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,templateString){
    35        return declare('rft.ui.LineWithActionsWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
  • Dev/branches/rest-dojo-ui/client/rft/ui/LoginDialog.js

    r274 r288  
    11define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/event','dijit/Dialog',
    2     'dijit/_WidgetsInTemplateMixin','../auth', 'dojo/text!./LoginDialog.html',
     2    'dijit/_WidgetsInTemplateMixin','../auth', 'dojo/text!./templates/LoginDialog.html',
    33    '../content','dijit/form/Form','dijit/form/Button','dijit/form/TextBox'],
    44    function (declare, lang, event, Dialog, _WidgetsInTemplateMixin, auth, template, content) {
  • Dev/branches/rest-dojo-ui/client/rft/ui/QuestionWidget.js

    r281 r288  
    1 require(['dojo/_base/declare','dijit/_WidgetBase','dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','dojo/text!rft/ui/QuestionWidget.html','dijit/form/TextBox'],
    2     function(declare,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,templateString,TextBox){
    3         declare('rft.ui.QuestionWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
     1define(['dojo/_base/declare','dojo/dom-construct','dijit/_WidgetBase',
     2    'dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin',
     3    'dojo/text!./templates/QuestionWidget.html','dijit/form/TextBox',
     4    'dijit/form/Textarea','./MultipleChoiceWidget'],
     5    function(declare,domConstruct,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,templateString,TextBox,Textarea,MultipleChoiceWidget){
     6        return declare('rft.ui.QuestionWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
    47            templateString: templateString,
    58            mode: 'view', // view || edit
    6             type: 'string',
    7             _w: null,
     9            name: '',
     10            _type: null,
     11            _widgetCache: null,
     12            constructor: function() {
     13                this.inherited(arguments);
     14                this._widgetCache = {};
     15            },
    816            postCreate: function() {
    9                 this._setType(this.type);
     17                this.typeSelector.set('disabled', this.mode == 'edit');
    1018            },
    11             _setType: function(type) {
    12                 if ( !this._w || this.type != type ) {
    13                     if ( this._w ) {
    14                         this._w.destroy();
    15                         this._w = null;
    16                     }
    17                     this.type = type;
    18                     switch(type) {
    19                         case 'string':
    20                             this._getStringWidget().placeAt(this.typeDetails);
    21                             break;
    22                         case 'text':
    23                             break;
    24                         case 'multipleChoice':
    25                             break;
    26                     }
    27                 }
    28             },
    29             _getStringWidget: function() {
    30                 if ( !this._stringWidget ) {
    31                     this._stringWidget = new TextBox({
    32                         name: 'answers',
    33                         disabled: this.mode == 'view'
    34                     });
    35                 }
    36                 return this._stringWidget;
     19            _setValueAttr: function(value) {
     20                value.type && this._onTypeChange(value.type);
     21                this.ourForm.set('value',value);
    3722            },
    3823            _getValueAttr: function() {
    3924                return this.ourForm.get('value');
    4025            },
    41             _setValueAttr: function(value) {
    42                 return this.ourForm.set('value',value);
     26            _onTypeChange: function(type) {
     27                if ( this._type == type ) return;
     28                this._type = type;
     29                domConstruct.empty(this.typeDetails);
     30                var widget = this._getTypeWidget(type);
     31                widget && widget.placeAt(this.typeDetails,'only');
     32            },
     33            _getTypeWidget: function(type) {
     34                var widget = this._widgetCache[type];
     35                if (!widget) {
     36                    switch(type) {
     37                        case 'string':
     38                            widget = new TextBox({
     39                                name: 'answers',
     40                                disabled: this.mode == 'view'
     41                            });
     42                            break;
     43                        case 'text':
     44                            widget = new Textarea({
     45                                name: 'answers',
     46                                disabled: this.mode == 'view',
     47                                style: 'min-height: 120px'
     48                            });
     49                            break;
     50                        case 'singleChoice':
     51                        case 'multipleChoice':
     52                            widget = new MultipleChoiceWidget({
     53                                name: 'answers',
     54                                mode: this.mode,
     55                                allowMultiple: type == 'multipleChoice'
     56                            });
     57                            break;
     58                    }
     59                    this._widgetCache[type] = widget;
     60                }
     61                return widget;
    4362            }
    4463        });
  • Dev/branches/rest-dojo-ui/client/rft/ui/TitleGroup.js

    r281 r288  
    1 require(['dojo/_base/declare','dojo/_base/query','dijit/registry','dojox/widget/TitleGroup'],function(declare,query,registry,TitleGroup){
    2     declare('rft.ui.TitleGroup',[TitleGroup],{
    3         getChildren: function() {
    4             return query("> .dijitTitlePane", this.domNode)
    5             .map(function(node){
    6                 return registry.byNode(node);
    7             });
    8         }
     1require(['dojo/_base/declare','dojo/_base/query','dijit/registry','dojox/widget/TitleGroup'],
     2    function(declare,query,registry,TitleGroup){
     3        return declare('rft.ui.TitleGroup',[TitleGroup],{
     4            getChildren: function() {
     5                return query("> .dijitTitlePane", this.domNode)
     6                .map(function(node){
     7                    return registry.byNode(node);
     8                });
     9            }
     10        });
    911    });
    10 });
  • Dev/branches/rest-dojo-ui/client/rft/ui/_Page.js

    r274 r288  
    1 define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/array','dojo/parser','dojo/query','dojo/dom-attr','dojo/_base/connect','dijit','dijit/_WidgetBase','dijit/_Container','dijit/_Contained'],
     1define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/array','dojo/parser',
     2    'dojo/query','dojo/dom-attr','dojo/_base/connect','dijit','dijit/_WidgetBase',
     3    'dijit/_Container','dijit/_Contained'],
    24    function(declare,lang,array,parser,query,attr,connect,dijit,_WidgetBase,_Container,_Contained){
    35        return declare('rft.ui._Page',[_WidgetBase],{
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/QuestionWidget.html

    r281 r288  
    11<div>
    22    <form data-dojo-type="dijit.form.Form" data-dojo-attach-point="ourForm">
    3         <select data-dojo-type="dijit.form.Select" data-dojo-attach-point="typeSelector" name="type">
    4             <option value="string" selected>String</option>
    5             <option value="text">Text</option>
    6             <option value="multipleChoice">Multiple choice</option>
    7         </select>
    8         <div data-dojo-attach-point="typeDetails">
    9         </div>
     3        <fieldset>
     4            <input data-dojo-type="dijit.form.TextBox" name="uid" type="text" class="dijitHidden" />
     5            <label for="code" class="loginLabel">Code</label>
     6            <input data-dojo-type="dijit.form.TextBox" name="code" type="text" class="loginInput" />
     7            <label for="question" class="loginLabel">Title</label>
     8            <input data-dojo-type="dijit.form.TextBox" name="title" type="text" class="loginInput" />
     9            <label for="question" class="loginLabel">Description</label>
     10            <input data-dojo-type="dijit.form.Textarea" name="description" type="text" class="loginInput"/>
     11            <label for="category" class="loginLabel">Category</label>
     12            <input data-dojo-type="dijit.form.TextBox" name="category" type="text" class="loginInput" />
     13        </fieldset>
     14        <fieldset>
     15            <select data-dojo-type="dijit.form.Select" data-dojo-attach-point="typeSelector" data-dojo-attach-event="onChange:_onTypeChange" name="type">
     16                <option value="string" selected>String</option>
     17                <option value="text">Text</option>
     18                <option value="singleChoice">Single choice</option>
     19                <option value="multipleChoice">Multiple choice</option>
     20            </select>
     21            <div data-dojo-attach-point="typeDetails"></div>
     22        </fieldset>
    1023    </form>
    1124</div>
Note: See TracChangeset for help on using the changeset viewer.