source: Dev/trunk/src/client/qed-client/model/widgets/questions/Factory.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.0 KB
Line 
1define([
2    "../../../lib/object",
3    "./HeaderConfigWidget",
4    "./HeaderWidget",
5    "./MultipleChoiceInputConfigWidget",
6    "./MultipleChoiceInputWidget",
7    "./NumberInputConfigWidget",
8    "./NumberInputWidget",
9    "./ScaleInputConfigWidget",
10    "./ScaleInputWidget",
11    "./StringInputConfigWidget",
12    "./StringInputWidget",
13    "./TextConfigWidget",
14    "./TextInputConfigWidget",
15    "./TextInputWidget",
16    "./TextWidget",
17    "dijit/_WidgetBase",
18    "dojo/_base/declare"
19], function(objectFuns, HeaderConfigWidget, HeaderWidget, MultipleChoiceInputConfigWidget, MultipleChoiceInputWidget, NumberInputConfigWidget, NumberInputWidget, ScaleInputConfigWidget, ScaleInputWidget, StringInputConfigWidget, StringInputWidget, TextConfigWidget, TextInputConfigWidget, TextInputWidget, TextWidget, _WidgetBase, declare) {
20   
21    var DividerWidget = declare([_WidgetBase], {
22        postCreate: function() {
23            this.domNode.innerHTML = "<hr>";
24        }
25    });
26
27    var viewMap = {
28        Header: HeaderWidget,
29        Text: TextWidget,
30        Divider: DividerWidget,
31        StringInput: StringInputWidget,
32        TextInput: TextInputWidget,
33        NumberInput: NumberInputWidget,
34        MultipleChoiceInput: declare([MultipleChoiceInputWidget],
35                                     {allowMultiple:true}),
36        SingleChoiceInput: declare([MultipleChoiceInputWidget],
37                                   {allowMultiple:false}),
38        ScaleInput: ScaleInputWidget
39    };
40    var editMap = {
41        Header: HeaderConfigWidget,
42        Text: TextConfigWidget,
43        StringInput: StringInputConfigWidget,
44        TextInput: TextInputConfigWidget,
45        NumberInput: NumberInputConfigWidget,
46        MultipleChoiceInput: declare([MultipleChoiceInputConfigWidget],
47                                     {allowMultiple:true}),
48        SingleChoiceInput: declare([MultipleChoiceInputConfigWidget],
49                                   {allowMultiple:false}),
50        ScaleInput: ScaleInputConfigWidget
51    };
52
53    editMap = objectFuns.map(editMap,function(Ctor,type){
54        return declare([Ctor],{
55            _getValueAttr: function() {
56                var value = this.inherited(arguments);
57                value.type = type;
58                return value;
59            }
60        });
61    });
62
63    var factory = declare(null, {
64        createViewWidget: function(/*Object*/options) {
65            // options: Object
66            //            type: "Header", "Text", "TextInput", etc.
67            //            other type specific fields
68            var Ctor = viewMap[options.type];
69            var view = Ctor && new Ctor(options) || null;
70            return view;
71        },
72        createEditWidget: function(/*Object*/options) {
73            var Ctor = editMap[options.type];
74            var edit = Ctor && new Ctor({
75                value: options
76            });
77            return edit || null;
78        }
79    });
80
81    return factory;
82});
Note: See TracBrowser for help on using the repository browser.