source: Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js

Last change on this file was 511, checked in by hendrikvanantwerpen, 11 years ago
  • 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).
File size: 3.4 KB
Line 
1define([
2    "../../../widgets/ListWidget",
3    "../../../widgets/_ComplexValueWidget",
4    "dijit/_TemplatedMixin",
5    "dijit/_WidgetBase",
6    "dijit/_WidgetsInTemplateMixin",
7    "dojo/_base/declare",
8    "dojo/_base/event",
9    "dojo/_base/lang",
10    "dojo/dom-construct",
11    "dojo/text!./templates/MultipleChoiceInputConfigRowWidget.html",
12    "dojo/text!./templates/MultipleChoiceInputConfigWidget.html"
13], function(ListWidget, _ComplexValueWidget, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, event, lang, domConstruct, rowTemplate, template) {
14
15    var Row = declare([_ComplexValueWidget],{
16        templateString: rowTemplate,
17        onDestroy: function(evt) {}
18    });
19   
20    return declare([_ComplexValueWidget],{
21        baseClass: 'qedMultipleChoiceConfigWidget',
22        templateString: template,
23        allowMultiple: false,
24        buildRendering: function() {
25            this.inherited(arguments);
26            this.itemsWidget = new ListWidget({
27                name: "items",
28                type: "MultipleChoiceItem",
29                skipForm: true,
30                delay: 5,
31                createListElement: lang.hitch(this, "_createRow"),
32                createAvatar: lang.hitch(this, "_createAvatar")
33            }, this.itemsNode);
34        },
35        _createRow: function(id, item) {
36            var widget = new Row({
37                id: id,
38                value: item,
39                _valueOrSubcode: this.allowMultiple ? 'subcode' : 'value',
40                _valueOrSubcodeName: this.allowMultiple ? 'Subcode' : 'Value',
41                onDestroy: lang.hitch(this,function(evt){
42                    this.itemsWidget.removeItem(id,true);
43                    if ( evt ) { event.stop(evt); }
44                    return false;
45                })
46            });
47            widget.startup();
48            return widget;
49        },
50        _createAvatar: function(id, item) {
51            return domConstruct.create("div", {
52                innerHTML: item.text || "(empty)"
53            });
54        },
55        onAddItem: function(evt) {
56            this.itemsWidget.appendItem({},true);
57            if ( evt ) { event.stop(evt); }
58            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);
92        }
93    });
94});
Note: See TracBrowser for help on using the repository browser.