Changeset 511
- Timestamp:
- 03/13/14 00:44:08 (11 years ago)
- Location:
- Dev/trunk/src
- Files:
-
- 5 deleted
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/trunk/src/client/qed-client/css/model/widgets/MultipleChoiceWidget.less
r508 r511 1 #rft.claro .qedMultipleChoiceWidget { 2 .subcode { 3 &.dijitTextBox { 1 #rft.claro { 2 .qedMultipleChoiceWidget { 3 .openItem { 4 margin-left: 2em; 5 } 6 } 7 .qedMultipleChoiceConfigWidget { 8 .subcode { 4 9 width: 4em; 5 10 } -
Dev/trunk/src/client/qed-client/model/widgets/QuestionEditorPreview.js
r510 r511 18 18 }); 19 19 }, 20 createListElement: function(id, item ) {20 createListElement: function(id, item, fromDrop) { 21 21 var previewItem = new QuestionEditorPreviewItem({ 22 22 id: id, 23 23 value: item 24 24 }); 25 previewItem.showEdit(); 25 previewItem.startup(); 26 if ( fromDrop ) { previewItem.showEdit(); } 26 27 this.own(previewItem.on('destroy', 27 28 lang.hitch(this,'removeItem',id,true))); 28 previewItem.startup();29 29 return previewItem; 30 30 } -
Dev/trunk/src/client/qed-client/model/widgets/QuestionEditorPreviewItem.js
r510 r511 148 148 _destroyInnerWidget: function() { 149 149 if ( this.innerWidget !== null ) { 150 if ( this._editing === true ) { 151 this._onChange(); 152 } 150 153 this.removeChild(this.innerWidget); 151 154 this.innerWidget.destroyRecursive(); -
Dev/trunk/src/client/qed-client/model/widgets/SurveyRenderWidget.js
r508 r511 4 4 "dojo/_base/array", 5 5 "dojo/_base/declare", 6 "dojo/_base/lang", 6 7 "dojo/dom-construct", 7 8 "dojo/text!./templates/SurveyRenderWidget.html" 8 ], function(_ComplexValueWidget, QuestionWidgetFactory, array, declare, domConstruct, template) {9 ], function(_ComplexValueWidget, QuestionWidgetFactory, array, declare, lang, domConstruct, template) { 9 10 return declare([_ComplexValueWidget],{ 10 11 templateString: template, … … 31 32 },this); 32 33 },this); 34 }, 35 _getValueAttr: function() { 36 var newValue = {}; 37 array.forEach(this._getDescendantFormWidgets(),function(widget){ 38 lang.mixin(newValue,widget.get('value')); 39 },this); 40 this.value = newValue; 41 return this.value; 42 }, 43 _setValueAttr: function(value) { 44 array.forEach(this._getDescendantFormWidgets(),function(widget){ 45 widget.set('value',value); 46 },this); 47 this.value = value; 33 48 } 34 49 }); -
Dev/trunk/src/client/qed-client/model/widgets/questions/Factory.js
r510 r511 9 9 "./ScaleInputConfigWidget", 10 10 "./ScaleInputWidget", 11 "./SingleChoiceInputConfigWidget",12 "./SingleChoiceInputWidget",13 11 "./StringInputConfigWidget", 14 12 "./StringInputWidget", … … 19 17 "dijit/_WidgetBase", 20 18 "dojo/_base/declare" 21 ], function(objectFuns, HeaderConfigWidget, HeaderWidget, MultipleChoiceInputConfigWidget, MultipleChoiceInputWidget, NumberInputConfigWidget, NumberInputWidget, ScaleInputConfigWidget, ScaleInputWidget, S ingleChoiceInputConfigWidget, 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) { 22 20 23 21 var DividerWidget = declare([_WidgetBase], { … … 34 32 TextInput: TextInputWidget, 35 33 NumberInput: NumberInputWidget, 36 MultipleChoiceInput: MultipleChoiceInputWidget, 37 SingleChoiceInput: SingleChoiceInputWidget, 34 MultipleChoiceInput: declare([MultipleChoiceInputWidget], 35 {allowMultiple:true}), 36 SingleChoiceInput: declare([MultipleChoiceInputWidget], 37 {allowMultiple:false}), 38 38 ScaleInput: ScaleInputWidget 39 39 }; … … 44 44 TextInput: TextInputConfigWidget, 45 45 NumberInput: NumberInputConfigWidget, 46 MultipleChoiceInput: MultipleChoiceInputConfigWidget, 47 SingleChoiceInput: SingleChoiceInputConfigWidget, 46 MultipleChoiceInput: declare([MultipleChoiceInputConfigWidget], 47 {allowMultiple:true}), 48 SingleChoiceInput: declare([MultipleChoiceInputConfigWidget], 49 {allowMultiple:false}), 48 50 ScaleInput: ScaleInputConfigWidget 49 51 }; -
Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js
r510 r511 19 19 20 20 return declare([_ComplexValueWidget],{ 21 baseClass: 'qedMultipleChoice Widget',21 baseClass: 'qedMultipleChoiceConfigWidget', 22 22 templateString: template, 23 allowMultiple: false, 23 24 buildRendering: function() { 24 25 this.inherited(arguments); … … 36 37 id: id, 37 38 value: item, 39 _valueOrSubcode: this.allowMultiple ? 'subcode' : 'value', 40 _valueOrSubcodeName: this.allowMultiple ? 'Subcode' : 'Value', 38 41 onDestroy: lang.hitch(this,function(evt){ 39 42 this.itemsWidget.removeItem(id,true); … … 54 57 if ( evt ) { event.stop(evt); } 55 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); 56 92 } 57 93 }); -
Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputWidget.js
r510 r511 1 1 define([ 2 "dijit/_Container", 3 "dijit/_TemplatedMixin", 4 "dijit/_WidgetBase", 5 "dijit/_WidgetsInTemplateMixin", 2 "../../../widgets/_ComplexValueWidget", 6 3 "dijit/form/CheckBox", 4 "dijit/form/RadioButton", 5 "dijit/form/TextBox", 7 6 "dojo/_base/array", 8 7 "dojo/_base/declare", 8 "dojo/_base/lang", 9 9 "dojo/dom-construct", 10 10 "dojo/text!./templates/MultipleChoiceInputWidget.html" 11 ], function(_Co ntainer, _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],{ 13 13 templateString: template, 14 baseClass: 'qedMultipleChoiceWidget', 15 allowMultiple: false, 14 16 startup: function() { 15 17 if ( this._started ) { return; } 16 18 this.inherited(arguments); 17 19 20 var Ctor = this.allowMultiple ? CheckBox : RadioButton; 21 22 var input; 18 23 domConstruct.empty(this.domNode); 19 24 array.forEach(this.items, function(item){ 20 25 var div = domConstruct.create("div", { 21 26 }, this.domNode, "last"); 22 var input = new CheckBox({23 name: this.code + item.subcode,24 value: 127 input = new Ctor({ 28 name: this.code + (this.allowMultiple?item.subcode:this.subcode), 29 value: this.allowMultiple ? 1 : item.value 25 30 }).placeAt(div); 26 31 var label = domConstruct.create("label",{ … … 29 34 }, div); 30 35 }, 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 } 31 69 } 32 70 }); -
Dev/trunk/src/client/qed-client/model/widgets/questions/NumberInputWidget.js
r510 r511 1 1 define([ 2 "dijit/_Container", 3 "dijit/_TemplatedMixin", 4 "dijit/_WidgetBase", 5 "dijit/_WidgetsInTemplateMixin", 2 "../../../widgets/_ComplexValueWidget", 6 3 "dojo/_base/declare", 7 4 "dojo/text!./templates/NumberInputWidget.html" 8 ], function(_Co ntainer, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {9 return declare([_ WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{5 ], function(_ComplexValueWidget, declare, template) { 6 return declare([_ComplexValueWidget],{ 10 7 templateString: template, 11 8 text: '', -
Dev/trunk/src/client/qed-client/model/widgets/questions/ScaleInputWidget.js
r508 r511 1 1 define([ 2 "dijit/_Container", 3 "dijit/_TemplatedMixin", 4 "dijit/_WidgetBase", 5 "dijit/_WidgetsInTemplateMixin", 2 "../../../widgets/_ComplexValueWidget", 3 "dijit/form/CheckBox", 6 4 "dijit/form/RadioButton", 7 5 "dojo/_base/array", … … 11 9 "dojo/dom-construct", 12 10 "dojo/text!./templates/ScaleInputWidget.html" 13 ], function(_Co ntainer, _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],{ 15 13 templateString: template, 16 14 baseClass: "qedScaleWidget", -
Dev/trunk/src/client/qed-client/model/widgets/questions/StringInputWidget.js
r510 r511 1 1 define([ 2 "dijit/_Container", 3 "dijit/_TemplatedMixin", 4 "dijit/_WidgetBase", 5 "dijit/_WidgetsInTemplateMixin", 2 "../../../widgets/_ComplexValueWidget", 6 3 "dojo/_base/declare", 7 4 "dojo/text!./templates/StringInputWidget.html" 8 ], function(_Co ntainer, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {9 return declare([_ WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{5 ], function(_ComplexValueWidget, declare, template) { 6 return declare([_ComplexValueWidget],{ 10 7 templateString: template, 11 8 text: '', -
Dev/trunk/src/client/qed-client/model/widgets/questions/TextInputWidget.js
r510 r511 1 1 define([ 2 "dijit/_Container", 3 "dijit/_TemplatedMixin", 4 "dijit/_WidgetBase", 5 "dijit/_WidgetsInTemplateMixin", 2 "../../../widgets/_ComplexValueWidget", 6 3 "dojo/_base/declare", 7 4 "dojo/text!./templates/TextInputWidget.html" 8 ], function(_Co ntainer, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, declare, template) {9 return declare([_ WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{5 ], function(_ComplexValueWidget, declare, template) { 6 return declare([_ComplexValueWidget],{ 10 7 templateString: template, 11 8 text: '', -
Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigRowWidget.html
r510 r511 1 1 <form> 2 <div data-dojo-type="dijit/form/CheckBox"3 data-dojo-props="disabled: true, readOnly: true"></div>4 2 <div data-dojo-type="dijit/form/ValidationTextBox" 5 data-dojo-props="required: true, placeholder: ' Subcode'"3 data-dojo-props="required: true, placeholder: '${_valueOrSubcodeName}'" 6 4 class="subcode" 7 name=" subcode"></div>5 name="${_valueOrSubcode}"></div> 8 6 <div data-dojo-type="dijit/form/ValidationTextBox" 9 7 data-dojo-props="required: true, placeholder: 'Item text'" -
Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html
r510 r511 1 1 <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> 2 9 <div data-dojo-attach-point="itemsNode"> 3 10 </div> 4 11 <div data-dojo-type="dijit/form/Button" 5 12 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> 6 26 </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> 2 2 <p>${text}</p> 3 3 <div class="qedField" … … 5 5 data-dojo-type="dijit/form/NumberTextBox" 6 6 name="${code}${subcode}"></div> 7 </ div>7 </form> -
Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputWidget.html
r508 r511 1 < divclass="${baseClass}">1 <form class="${baseClass}"> 2 2 <table> 3 3 <thead> … … 12 12 </tbody> 13 13 </table> 14 </ div>14 </form> -
Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputWidget.html
r508 r511 1 < div>1 <form> 2 2 <p>${text}</p> 3 3 <div data-dojo-type="dijit/form/TextBox" 4 4 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> 2 2 <p>${text}</p> 3 3 <textarea class="qedField" … … 5 5 data-dojo-type="dijit/form/Textarea" 6 6 name="${code}${subcode}"></textarea> 7 </ div>7 </form> -
Dev/trunk/src/client/qed-client/widgets/ListWidget.js
r506 r511 26 26 _onChangeActive: false, 27 27 _onChangeHandle: null, 28 _fromDrop: true, 28 29 buildRendering: function() { 29 30 this.inherited(arguments); … … 52 53 lang.mixin(sourceParams, { 53 54 accept: [this.type], 54 creator: lang.hitch(this, 55 creator: lang.hitch(this,"creator"), 55 56 dropParent: this.containerNode 56 57 }); … … 82 83 } else { 83 84 if ( this.createListElement ) { 84 nodeOrWidget = this.createListElement(id,item );85 nodeOrWidget = this.createListElement(id,item,this._fromDrop); 85 86 } else { 86 87 return this.source.defaultCreator(item, hint); … … 98 99 }, 99 100 createAvatar: null, /*function(id,item){},*/ 100 createListElement: null, /* function(id,item ){},*/101 createListElement: null, /* function(id,item,fromDrop){},*/ 101 102 _getValueAttr: function() { 102 103 this.value = array.map(this.source.getAllNodes(),function(node){ … … 145 146 }, 146 147 appendItems: function(items,forceEvent) { 148 this._fromDrop = false; 147 149 this.source.insertNodes(false,items); 148 150 if ( forceEvent ) { this._handleDrop(); } 151 this._fromDrop = true; 149 152 }, 150 153 appendItem: function(item,forceEvent) { 154 this._fromDrop = false; 151 155 this.source.insertNodes(false,[item]); 152 156 if ( forceEvent ) { this._handleDrop(); } 157 this._fromDrop = true; 153 158 }, 154 159 removeItem: function(key,forceEvent) { … … 200 205 this._onChange(); 201 206 }, 202 _onChange: function() {207 _onChange: function() { 203 208 if ( this._onChangeActive && 204 209 !(this.readOnly || this.disabled) ) { -
Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js
r506 r511 92 92 }, 93 93 focus: function() { 94 var children = this._getDescendantFormWidgets();94 /*var children = this._getDescendantFormWidgets(); 95 95 if ( children.length > 0 ) { 96 96 children[0].focus(); 97 } 97 }*/ 98 98 }, 99 99 _handleChange: function(evt) { 100 100 if ( evt.target !== this.domNode ) { 101 if ( this._onChangeActive && 102 !(this.readOnly || this.disabled) ) { 103 if ( this._onChangeHandle ) { 104 this._onChangeHandle.cancel(); 105 } 106 this._onChangeHandle = this.defer(function(){ 107 this._onChangeHandle = null; 108 on.emit(this.domNode,'change',{ 109 target: this.domNode, 110 value: this.get('value'), 111 bubbles: true, 112 cancellable: true 113 }); 114 }); 115 } 101 this._onChange(); 116 102 if ( evt ) { event.stop(evt); } 117 103 return false; … … 133 119 if (evt) { event.stop(evt); } 134 120 return false; 121 }, 122 _onChange: function() { 123 if ( this._onChangeActive && 124 !(this.readOnly || this.disabled) ) { 125 if ( this._onChangeHandle ) { 126 this._onChangeHandle.cancel(); 127 } 128 this._onChangeHandle = this.defer(function(){ 129 this._onChangeHandle = null; 130 on.emit(this.domNode,'change',{ 131 target: this.domNode, 132 value: this.get('value'), 133 bubbles: true, 134 cancellable: true 135 }); 136 }); 137 } 135 138 } 136 139 }); -
Dev/trunk/src/server/config/couchdb-schema.json
r510 r511 214 214 "additionalProperties": false 215 215 } }, 216 "otherItem": { 217 "type": "object", 218 "properties": { 219 "text": { "$ref": "#/definitions/nonEmptyString" }, 220 "value": { "$ref": "#/definitions/nonEmptyString" } 221 }, 222 "required": ["subcode","value"], 216 "lastItemIsOpen": { 217 "type": "object", 218 "properties": { 219 "subcode": { "$ref": "#/definitions/codeString" } 220 }, 221 "required": ["subcode"], 223 222 "additionalProperties": false 224 223 }, … … 235 234 "type": "object", 236 235 "properties": { 237 238 236 "subcode": { "$ref": "#/definitions/codeString" }, 237 "text": { "$ref": "#/definitions/nonEmptyString" } 239 238 }, 240 239 "required": ["subcode","text"], 241 240 "additionalProperties": false 242 241 } }, 243 "otherItem": { 244 "type": "object", 245 "properties": { 246 "subcode": { "$ref": "#/definitions/codeString" }, 247 "text": { "$ref": "#/definitions/nonEmptyString" } 248 }, 249 "required": ["subcode","text"], 242 "lastItemIsOpen": { 243 "type": "object", 244 "properties": { 245 "subcode": { "$ref": "#/definitions/codeString" } 246 }, 247 "required": ["subcode"], 250 248 "additionalProperties": false 251 249 }
Note: See TracChangeset
for help on using the changeset viewer.