Ignore:
Timestamp:
03/13/14 00:44:08 (11 years ago)
Author:
hendrikvanantwerpen
Message:
  • Added open item options to singe and multiple choice.
  • Question view widgets are forms again, because we needed the control.
  • Multiple and singel choice share their widgets.
  • QuestionEditorPreview? now has items that were already there close, but opens newly dropped items.
  • PreviewItems? will save modified value even when we change to view before the widget loses its focus (which causes a change event).
Location:
Dev/trunk/src/client/qed-client/model/widgets/questions
Files:
5 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/src/client/qed-client/model/widgets/questions/Factory.js

    r510 r511  
    99    "./ScaleInputConfigWidget",
    1010    "./ScaleInputWidget",
    11     "./SingleChoiceInputConfigWidget",
    12     "./SingleChoiceInputWidget",
    1311    "./StringInputConfigWidget",
    1412    "./StringInputWidget",
     
    1917    "dijit/_WidgetBase",
    2018    "dojo/_base/declare"
    21 ], function(objectFuns, HeaderConfigWidget, HeaderWidget, MultipleChoiceInputConfigWidget, MultipleChoiceInputWidget, NumberInputConfigWidget, NumberInputWidget, ScaleInputConfigWidget, ScaleInputWidget, SingleChoiceInputConfigWidget, SingleChoiceInputWidget, StringInputConfigWidget, StringInputWidget, TextConfigWidget, TextInputConfigWidget, TextInputWidget, TextWidget, _WidgetBase, declare) {
     19], function(objectFuns, HeaderConfigWidget, HeaderWidget, MultipleChoiceInputConfigWidget, MultipleChoiceInputWidget, NumberInputConfigWidget, NumberInputWidget, ScaleInputConfigWidget, ScaleInputWidget, StringInputConfigWidget, StringInputWidget, TextConfigWidget, TextInputConfigWidget, TextInputWidget, TextWidget, _WidgetBase, declare) {
    2220   
    2321    var DividerWidget = declare([_WidgetBase], {
     
    3432        TextInput: TextInputWidget,
    3533        NumberInput: NumberInputWidget,
    36         MultipleChoiceInput: MultipleChoiceInputWidget,
    37         SingleChoiceInput: SingleChoiceInputWidget,
     34        MultipleChoiceInput: declare([MultipleChoiceInputWidget],
     35                                     {allowMultiple:true}),
     36        SingleChoiceInput: declare([MultipleChoiceInputWidget],
     37                                   {allowMultiple:false}),
    3838        ScaleInput: ScaleInputWidget
    3939    };
     
    4444        TextInput: TextInputConfigWidget,
    4545        NumberInput: NumberInputConfigWidget,
    46         MultipleChoiceInput: MultipleChoiceInputConfigWidget,
    47         SingleChoiceInput: SingleChoiceInputConfigWidget,
     46        MultipleChoiceInput: declare([MultipleChoiceInputConfigWidget],
     47                                     {allowMultiple:true}),
     48        SingleChoiceInput: declare([MultipleChoiceInputConfigWidget],
     49                                   {allowMultiple:false}),
    4850        ScaleInput: ScaleInputConfigWidget
    4951    };
  • Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js

    r510 r511  
    1919   
    2020    return declare([_ComplexValueWidget],{
    21         baseClass: 'qedMultipleChoiceWidget',
     21        baseClass: 'qedMultipleChoiceConfigWidget',
    2222        templateString: template,
     23        allowMultiple: false,
    2324        buildRendering: function() {
    2425            this.inherited(arguments);
     
    3637                id: id,
    3738                value: item,
     39                _valueOrSubcode: this.allowMultiple ? 'subcode' : 'value',
     40                _valueOrSubcodeName: this.allowMultiple ? 'Subcode' : 'Value',
    3841                onDestroy: lang.hitch(this,function(evt){
    3942                    this.itemsWidget.removeItem(id,true);
     
    5457            if ( evt ) { event.stop(evt); }
    5558            return false;
     59        },
     60        _setDisabledAttr: function() {
     61            this.inherited(arguments);
     62            this._handleOpenItemChange();
     63        },
     64        _setReadOnlyAttr: function() {
     65            this.inherited(arguments);
     66            this._handleOpenItemChange();
     67        },
     68        _getValueAttr: function() {
     69            var value = this.inherited(arguments);
     70            if ( value.lastItemIsOpen[0] ) {
     71                value.lastItemIsOpen = {
     72                    subcode: value.openItemSubcode
     73                };
     74            } else {
     75                delete value.lastItemIsOpen;
     76            }
     77            delete value.openItemSubcode;
     78            return value;
     79        },
     80        _setValueAttr: function(value) {
     81            if ( value.lastItemIsOpen ) {
     82                value.openItemSubcode = value.lastItemIsOpen.subcode;
     83                value.lastItemIsOpen = ["on"];
     84            }
     85            this.inherited(arguments);
     86        },
     87        _handleOpenItemChange: function() {
     88            var enabled = !(this.readOnly || this.disabled) && 
     89                          this.openItemCheckBox.get('value')[0];
     90            this.openItemSubcodeTextBox.set('disabled',!enabled);
     91            this.openItemSubcodeTextBox.set('readOnly',!enabled);
    5692        }
    5793    });
  • Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputWidget.js

    r510 r511  
    11define([
    2     "dijit/_Container",
    3     "dijit/_TemplatedMixin",
    4     "dijit/_WidgetBase",
    5     "dijit/_WidgetsInTemplateMixin",
     2    "../../../widgets/_ComplexValueWidget",
    63    "dijit/form/CheckBox",
     4    "dijit/form/RadioButton",
     5    "dijit/form/TextBox",
    76    "dojo/_base/array",
    87    "dojo/_base/declare",
     8    "dojo/_base/lang",
    99    "dojo/dom-construct",
    1010    "dojo/text!./templates/MultipleChoiceInputWidget.html"
    11 ], function(_Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, CheckBox, array, declare, domConstruct, template) {
    12     return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     11], function(_ComplexValueWidget, CheckBox, RadioButton, TextBox, array, declare, lang, domConstruct, template) {
     12    return declare([_ComplexValueWidget],{
    1313        templateString: template,
     14        baseClass: 'qedMultipleChoiceWidget',
     15        allowMultiple: false,
    1416        startup: function() {
    1517            if ( this._started ) { return; }
    1618            this.inherited(arguments);
    1719
     20            var Ctor = this.allowMultiple ? CheckBox : RadioButton;
     21
     22            var input;
    1823            domConstruct.empty(this.domNode);
    1924            array.forEach(this.items, function(item){
    2025                var div = domConstruct.create("div", {
    2126                }, this.domNode, "last");
    22                 var input = new CheckBox({
    23                     name: this.code + item.subcode,
    24                     value: 1
     27                input = new Ctor({
     28                    name: this.code + (this.allowMultiple?item.subcode:this.subcode),
     29                    value: this.allowMultiple ? 1 : item.value
    2530                }).placeAt(div);
    2631                var label = domConstruct.create("label",{
     
    2934                }, div);
    3035            }, this);
     36           
     37            if ( this.lastItemIsOpen && input ) {
     38                this.lastItem = input;
     39                var openItemDiv = domConstruct.create("div", {
     40                }, this.domNode, "last");
     41                this.openItemTextBox = new TextBox({
     42                    name: this.code + this.lastItemIsOpen.subcode,
     43                    disabled: true,
     44                    readOnly: true,
     45                    'class': 'openItem'
     46                });
     47                this.openItemTextBox.placeAt(openItemDiv);
     48                this.own(this.lastItem.on(
     49                    'change',lang.hitch(this,'_handleOpenItemChange')));
     50            }
     51        },
     52        _setDisabledAttr: function() {
     53            this.inherited(arguments);
     54            this._handleOpenItemChange();
     55        },
     56        _setReadOnlyAttr: function() {
     57            this.inherited(arguments);
     58            this._handleOpenItemChange();
     59        },
     60        _handleOpenItemChange: function() {
     61            if ( this.lastItem ) {
     62                var value = this.allowMultiple ?
     63                            this.lastItem.get('value') :
     64                            this.lastItem.get('value')[0];
     65                var enabled = !(this.readOnly || this.disabled) && value;
     66                this.openItemTextBox.set('disabled',!enabled);
     67                this.openItemTextBox.set('readOnly',!enabled);
     68            }
    3169        }
    3270    });
  • Dev/trunk/src/client/qed-client/model/widgets/questions/NumberInputWidget.js

    r510 r511  
    11define([
    2     "dijit/_Container",
    3     "dijit/_TemplatedMixin",
    4     "dijit/_WidgetBase",
    5     "dijit/_WidgetsInTemplateMixin",
     2    "../../../widgets/_ComplexValueWidget",
    63    "dojo/_base/declare",
    74    "dojo/text!./templates/NumberInputWidget.html"
    8 ], function(_Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {
    9     return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     5], function(_ComplexValueWidget, declare, template) {
     6    return declare([_ComplexValueWidget],{
    107        templateString: template,
    118        text: '',
  • Dev/trunk/src/client/qed-client/model/widgets/questions/ScaleInputWidget.js

    r508 r511  
    11define([
    2     "dijit/_Container",
    3     "dijit/_TemplatedMixin",
    4     "dijit/_WidgetBase",
    5     "dijit/_WidgetsInTemplateMixin",
     2    "../../../widgets/_ComplexValueWidget",
     3    "dijit/form/CheckBox",
    64    "dijit/form/RadioButton",
    75    "dojo/_base/array",
     
    119    "dojo/dom-construct",
    1210    "dojo/text!./templates/ScaleInputWidget.html"
    13 ], function(_Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, RadioButton, array, declare, lang, domAttr, domConstruct, template) {
    14     return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     11], function(_ComplexValueWidget, CheckBox, RadioButton, array, declare, lang, domAttr, domConstruct, template) {
     12    return declare([_ComplexValueWidget],{
    1513        templateString: template,
    1614        baseClass: "qedScaleWidget",
  • Dev/trunk/src/client/qed-client/model/widgets/questions/StringInputWidget.js

    r510 r511  
    11define([
    2     "dijit/_Container",
    3     "dijit/_TemplatedMixin",
    4     "dijit/_WidgetBase",
    5     "dijit/_WidgetsInTemplateMixin",
     2    "../../../widgets/_ComplexValueWidget",
    63    "dojo/_base/declare",
    74    "dojo/text!./templates/StringInputWidget.html"
    8 ], function(_Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {
    9     return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     5], function(_ComplexValueWidget, declare, template) {
     6    return declare([_ComplexValueWidget],{
    107        templateString: template,
    118        text: '',
  • Dev/trunk/src/client/qed-client/model/widgets/questions/TextInputWidget.js

    r510 r511  
    11define([
    2     "dijit/_Container",
    3     "dijit/_TemplatedMixin",
    4     "dijit/_WidgetBase",
    5     "dijit/_WidgetsInTemplateMixin",
     2    "../../../widgets/_ComplexValueWidget",
    63    "dojo/_base/declare",
    74    "dojo/text!./templates/TextInputWidget.html"
    8 ], function(_Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {
    9     return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     5], function(_ComplexValueWidget, declare, template) {
     6    return declare([_ComplexValueWidget],{
    107        templateString: template,
    118        text: '',
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigRowWidget.html

    r510 r511  
    11<form>
    2   <div data-dojo-type="dijit/form/CheckBox"
    3        data-dojo-props="disabled: true, readOnly: true"></div>
    42  <div data-dojo-type="dijit/form/ValidationTextBox"
    5        data-dojo-props="required: true, placeholder: 'Subcode'"
     3       data-dojo-props="required: true, placeholder: '${_valueOrSubcodeName}'"
    64       class="subcode"
    7        name="subcode"></div>
     5       name="${_valueOrSubcode}"></div>
    86  <div data-dojo-type="dijit/form/ValidationTextBox"
    97       data-dojo-props="required: true, placeholder: 'Item text'"
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html

    r510 r511  
    11<form class="${baseClass}">
     2  <div>
     3    <label class="qedLabel" for="subcode">Subcode</label>
     4    <input data-dojo-type="dijit/form/ValidationTextBox"
     5           data-dojo-props="required:true,placeHolder:'Subcode'"
     6           class="subcode"
     7           name="subcode"/>
     8  </div>
    29  <div data-dojo-attach-point="itemsNode">
    310  </div>
    411  <div data-dojo-type="dijit/form/Button"
    512       data-dojo-attach-event="onClick:onAddItem">Add item</div>
     13  <div>
     14    <label class="qedLabel" for="lastItemIsOpen">Last option is open</label>
     15    <input data-dojo-type="dijit/form/CheckBox"
     16           class="qedField"
     17           name="lastItemIsOpen"
     18           data-dojo-attach-point="openItemCheckBox"
     19           data-dojo-attach-event="onChange:_handleOpenItemChange"/>
     20    <input data-dojo-type="dijit/form/ValidationTextBox"
     21           data-dojo-props="required:true,disabled:true,placeHolder:'Subcode'"
     22           data-dojo-attach-point="openItemSubcodeTextBox"
     23           class="subcode"
     24           name="openItemSubcode"/>
     25  </div>
    626</form>
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputWidget.html

    r508 r511  
    1 <div>
    2 </div>
     1<form class="${baseClass}">
     2</form>
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/NumberInputWidget.html

    r508 r511  
    1 <div>
     1<form>
    22  <p>${text}</p>
    33  <div class="qedField"
     
    55       data-dojo-type="dijit/form/NumberTextBox"
    66       name="${code}${subcode}"></div>
    7 </div>
     7</form>
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputWidget.html

    r508 r511  
    1 <div class="${baseClass}">
     1<form class="${baseClass}">
    22  <table>
    33    <thead>
     
    1212    </tbody>
    1313  </table>
    14 </div>
     14</form>
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputWidget.html

    r508 r511  
    1 <div>
     1<form>
    22  <p>${text}</p>
    33  <div data-dojo-type="dijit/form/TextBox"
    44       name="${code}${subcode}"></div>
    5 </div>
     5</form>
  • Dev/trunk/src/client/qed-client/model/widgets/questions/templates/TextInputWidget.html

    r508 r511  
    1 <div>
     1<form>
    22  <p>${text}</p>
    33  <textarea class="qedField"
     
    55            data-dojo-type="dijit/form/Textarea"
    66            name="${code}${subcode}"></textarea>
    7 </div>
     7</form>
Note: See TracChangeset for help on using the changeset viewer.