Changeset 415
- Timestamp:
- 12/04/12 16:29:49 (12 years ago)
- Location:
- Dev/branches/rest-dojo-ui
- Files:
-
- 19 added
- 7 deleted
- 12 edited
- 5 copied
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/rest-dojo-ui/client/rft/pages/question.html
r407 r415 3 3 <h2> 4 4 <span class="rftIcon rftIconSurvey"></span> 5 <span class="headerText"> Question 123[Editing]</span>5 <span class="headerText"><span data-dojo-attach-point="titleNode">Question title</span> [Editing]</span> 6 6 </h2> 7 7 </div> -
Dev/branches/rest-dojo-ui/client/rft/pages/question.js
r410 r415 21 21 if ( this._started ) { return; } 22 22 this.inherited(arguments); 23 if (this.questionId) { 23 if ( !this.questionId ) { 24 throw new Error("Error: no reference to object set!"); 25 } 26 this._setupEditor(); 27 if (this.questionId === "new") { 28 this.question = { type: 'Question' }; 29 this._refresh(); 30 } else { 24 31 Deferred.when(store.get(this.questionId)) 25 32 .then(lang.hitch(this, function(obj) { … … 27 34 this._refresh(); 28 35 })); 29 } else {30 throw new Error("Error: no reference to object set!");31 36 } 32 this._setupEditor();33 37 }, 34 38 onLeave: function() { … … 36 40 }, 37 41 _refresh: function () { 42 this.titleNode.innerHTML = this.question.title || ""; 38 43 this._toolkit.set('value',this.question); 39 44 this._preview.appendItems(this.question.content || []); … … 46 51 Router.go('/questions'); 47 52 },function(err){ 48 Content.notify(err .reason,'error');53 Content.notify(err,'error'); 49 54 }); 50 55 evt && event.stop( evt ); -
Dev/branches/rest-dojo-ui/client/rft/pages/questions.js
r414 r415 40 40 }, 41 41 onNewQuestion: function() { 42 Deferred.when(store.add({type:'Question'})) 43 .then(lang.hitch(this,function(question){ 44 this.onEditQuestion(question); 45 })); 42 Router.go("/question/new"); 46 43 }, 47 44 onDeleteQuestion: function(question) { … … 50 47 Content.notify("Question deleted."); 51 48 },function(err){ 52 Content.notify(err .reason,'error');49 Content.notify(err,'error'); 53 50 }); 54 51 }, … … 62 59 Content.notify("Question published."); 63 60 },function(err){ 64 Content.notify(err .reason,'error');61 Content.notify(err,'error'); 65 62 }); 66 63 } -
Dev/branches/rest-dojo-ui/client/rft/pages/survey.html
r407 r415 40 40 data-dojo-attach-event="onSubmit:_onPropertiesOk"> 41 41 42 <form data-dojo-type="dijit/form/Form" 43 data-dojo-attach-point="propertiesForm"> 44 <label for="title">Title</label> 45 <input data-dojo-type="dijit/form/TextBox" name="title"/><br/> 46 <label for="description">Description</label> 47 <input data-dojo-type="dijit/form/Textarea" name="description"/><br/> 48 </form> 42 <div data-dojo-type="rft/ui/model/SurveyForm" 43 data-dojo-attach-point="propertiesForm"></div> 49 44 50 45 <div> -
Dev/branches/rest-dojo-ui/client/rft/pages/surveys.html
r414 r415 36 36 </div> 37 37 38 <div data-dojo-type="dijit/Dialog" 39 title="SurveyRun properties" 40 data-dojo-attach-point="surveyRunDialog"> 41 <form data-dojo-type="rft/ui/model/SurveyRunForm" data-dojo-attach-point="surveyRunForm"> 42 <button data-dojo-type="dijit/form/Button">OK</button> 43 <button data-dojo-type="dijit/form/Button">Cancel</button> 44 </form> 45 </div> 46 38 47 </div> -
Dev/branches/rest-dojo-ui/client/rft/pages/surveys.js
r414 r415 23 23 Router.go('/survey/'+store.getIdentity(survey)); 24 24 },function(err){ 25 Content.notify(err .reason,'error');25 Content.notify(err,'error'); 26 26 }); 27 27 }, … … 33 33 self.refreshPublished(); 34 34 },function(err){ 35 Content.notify(err .reason,'error');35 Content.notify(err,'error'); 36 36 }); 37 37 }, … … 42 42 self.refreshDrafts(); 43 43 },function(err){ 44 Content.notify(err .reason,'error');44 Content.notify(err,'error'); 45 45 }); 46 46 }, … … 52 52 }, 53 53 _onRunSurvey:function(survey){ 54 54 this.surveyRunDialog.show(); 55 55 }, 56 56 refresh: function() { -
Dev/branches/rest-dojo-ui/client/rft/pages/viewSurvey.js
r410 r415 7 7 '../store', 8 8 '../app/Page', 9 '../ui/ content/ContentWidgetFactory',9 '../ui/model/QuestionWidgetFactory', 10 10 'dojo/text!./viewSurvey.html' 11 ],function(array,declare,Deferred,event,lang,store,Page, ContentWidgetFactory,template){11 ],function(array,declare,Deferred,event,lang,store,Page,QuestionWidgetFactory,template){ 12 12 return declare([Page],{ 13 13 templateString: template, … … 35 35 this.titleNode.innerHTML = survey.title + 36 36 (this.options.preview?' [preview]':''); 37 var f = new ContentWidgetFactory();37 var f = new QuestionWidgetFactory(); 38 38 this.survey = survey; 39 39 store.query(null,{keys:this.survey.questions,include_docs:true}) -
Dev/branches/rest-dojo-ui/client/rft/stddeps.js
r407 r415 21 21 'dijit/form/Textarea', 22 22 'dijit/form/TextBox', 23 'dijit/form/TimeTextBox', 23 24 24 25 'dojox/grid/DataGrid', … … 33 34 'rft/ui/Selector', 34 35 'rft/ui/TitleGroup', 36 'rft/ui/generic/DateTimeTextBox', 37 'rft/ui/model/SurveyForm', 38 'rft/ui/model/SurveyRunForm', 35 39 'rft/ui/lists/AccountListView', 36 40 'rft/ui/lists/List', -
Dev/branches/rest-dojo-ui/client/rft/store.js
r410 r415 1 1 define([ 2 2 'dojo/date/stamp', 3 'dojox/json/schema', 4 './schema', 3 5 './store/CouchStore' 4 ],function(stamp, CouchStore){6 ],function(stamp,jsonSchema,schema,CouchStore){ 5 7 6 var store = new CouchStore({target: 'data/couch/'}); 8 var store = new CouchStore({ 9 target: 'data/couch/', 10 validate: function(object) { 11 var result = jsonSchema.validate(object,schema); 12 if ( result.valid ) { 13 return true; 14 } else { 15 console.log("Found error ",result," for invalid object ",object); 16 return false; 17 } 18 } 19 }); 7 20 store.formatDate = function(date){ 8 21 return stamp.toISOString(date,{zulu:true}); -
Dev/branches/rest-dojo-ui/client/rft/store/CouchStore.js
r414 r415 10 10 11 11 function getCouchError(err){ 12 return (err.response && err.response.data) 13 ? json.fromJson(err.response.data) 14 : "Unknown error."; 12 var reason = err.response && 13 err.response.data && 14 json.fromJson(err.response.data).reason; 15 return reason || "Unknown error."; 15 16 } 16 17 … … 74 75 return dfd.promise; 75 76 }, 77 validate: function(object) { 78 return true; 79 }, 76 80 put: function(object, options){ 77 81 // summary: … … 83 87 // id: String 84 88 // 89 90 if ( !this.validate(object) ) { 91 var dfd = new Deferred(); 92 dfd.reject("Invalid document."); 93 return dfd.promise; 94 } 95 return this._putValid(object, options); 96 97 }, 98 _putValid: function(object,options) { 99 var dfd = new Deferred(); 85 100 options = options || {}; 86 87 var dfd = new Deferred();88 101 var id = options.id ? options.id : this.getIdentity(object); 89 var hasId = typeof id != "undefined";102 var hasId = typeof id !== "undefined"; 90 103 xhr(hasId ? "PUT" : "POST", { 91 104 url: hasId ? this.target + id : this.target, -
Dev/branches/rest-dojo-ui/client/rft/ui/QuestionEditorPreviewItem.js
r414 r415 10 10 'dijit/_WidgetBase', 11 11 'dijit/_WidgetsInTemplateMixin', 12 './ content/ContentWidgetFactory',12 './model/QuestionWidgetFactory', 13 13 'dojo/text!./templates/QuestionEditorPreviewItem.html' 14 14 ], function( … … 23 23 _WidgetBase, 24 24 _WidgetsInTemplateMixin, 25 ContentWidgetFactory,25 QuestionWidgetFactory, 26 26 template 27 27 ){ … … 55 55 }, 56 56 _showViewWidget: function() { 57 var factory = new ContentWidgetFactory();57 var factory = new QuestionWidgetFactory(); 58 58 this.innerWidget = factory.createViewWidget( this.item ); 59 59 if ( this.innerWidget !== null ) { … … 65 65 }, 66 66 _showEditWidget: function() { 67 var factory = new ContentWidgetFactory();67 var factory = new QuestionWidgetFactory(); 68 68 this.innerWidget = factory.createEditWidget( this.item ); 69 69 if ( this.innerWidget !== null ) { -
Dev/branches/rest-dojo-ui/docs/jsonformat.txt
r414 r415 1 Document types 2 ============== 3 4 5 Question types 6 ============== 7 8 9 10 sessions 11 ======== 12 { 13 type: 'SessionTemplate' 14 title: '' 15 description: '' 16 plannedDate: '' /* ISO UTC datetime */ 17 accounts: [ /* Account ids */ ] 18 } 19 20 { 21 type: 'SessionInstance' 22 title: '' 23 description: '' 24 publishedDate: '' /* ISO UTC datetime */ 25 accounts: [ /* Account ids */ ] 26 } 27 28 survey 29 ====== 30 { 31 type: 'Survey' 32 title: '' 33 description: '' 34 questions: [ /* Question ids */ ] 35 publishedDate: '' 36 } 37 38 { 39 type: 'SurveyInstance' 40 surveyId: '' // String 41 publishedDate: '' // ISO datetime 42 startDate: '' // can fill in after 43 endDate: '' // can fill in until 44 } 45 46 question 47 ======== 48 { 49 type: 'Question' 50 title: '' 51 description: '' 52 topic: '' 53 categories: [] 54 content: [{ type:'contentTypeId', text: '' || ['' ...], /* custom content element fields */ } /*, and more ... */] 55 } 1 This file is now obsolete. Look in rft/schema for a JSON schema that we 2 can use to actually verify our data. -
Dev/branches/rest-dojo-ui/server/couchdb-admin/config/config.js
r414 r415 2 2 'dojo/_base/json', 3 3 'dojo/_base/lang', 4 'dojo/Deferred',5 'dojo/request',6 4 'dojox/lang/functional', 7 './docs' 8 ],function(json,lang,Deferred,request,func,docs){ 9 var dbUrl = "http://localhost:5984/"; 5 './util/async', 6 './util/db', 7 './data/design-docs' 8 ],function(json,lang,func,async,db,docs){ 10 9 11 10 function serializeFunctions(value) { … … 23 22 } 24 23 25 function req(method,path,body) { 26 var args = { 27 contentType: 'application/json', 28 handleAs: 'json', 29 data: json.toJson(body || {}) 30 }; 31 return request[method](dbUrl+path,args); 32 } 33 34 function asyncSeq(functions) { 35 var d = new Deferred(); 36 (function stepper(fs,arg) { 37 if ( fs.length > 0 ) { 38 try { 39 var f = fs.shift(); 40 var ret = f(arg); 41 if ( ret && ret.then ) { 42 ret.then(function(ret){ 43 stepper(fs,ret); 44 }); 45 } else { 46 stepper(fs,ret); 47 } 48 } catch(err) { 49 d.reject(err); 50 } 51 } else { 52 d.resolve(); 53 } 54 })(functions); 55 return d.promise; 56 } 57 58 function asyncFor(list,callback,ctx) { 59 var d = new Deferred(); 60 (function stepper(list,idx){ 61 if ( list.length > 0 ) { 62 var el = list.shift(); 63 var ret = callback.call(ctx,el,idx); 64 if ( ret && ret.then ) { 65 ret.then(function(){ 66 stepper(list,idx+1); 67 }); 68 } else { 69 stepper(list,idx+1); 70 } 71 } else { 72 d.resolve(); 73 } 74 })(list,0); 75 return d.promise; 76 } 77 78 asyncSeq([ 24 async.seq([ 79 25 function(){ 80 console.log("Configuring CouchDB for RFT:");26 console.log("Configuring CouchDB for QED:"); 81 27 }, 82 28 function(){ 83 29 console.log("Checking CouchDB version"); 84 return req('get','')30 return db.req('get','') 85 31 .then(function(res){ 86 32 if (res.version !== "1.2.0" ) { … … 92 38 },function(){ 93 39 console.log("Checking database 'qed'"); 94 return req('get','qed')40 return db.req('get','qed') 95 41 .then(function(res){ 96 42 if (res.error) { 97 43 console.log("Creating database 'qed'"); 98 return req('put','/qed');44 return db.req('put','/qed'); 99 45 } else { 100 46 console.log("Database 'qed' found."); … … 102 48 },function(res){ 103 49 console.log("Creating database 'qed'"); 104 return req('put','/qed');50 return db.req('put','/qed'); 105 51 }); 106 52 },function(){ … … 108 54 },function(docs){ 109 55 console.log("Putting documents in database."); 110 return async For(func.keys(docs),function(docUrl){56 return async.forEach(func.keys(docs),function(docUrl){ 111 57 var doc = docs[docUrl]; 112 58 var configAction = doc.__configAction; … … 117 63 case "update": 118 64 console.log(docUrl+" updating."); 119 return req('get',docUrl)65 return db.req('get',docUrl) 120 66 .then(function(oldDoc){ 121 67 lang.mixin(oldDoc,doc); 122 return req('put',docUrl,oldDoc);68 return db.req('put',docUrl,oldDoc); 123 69 },function(){ 124 return req('put',docUrl,doc);70 return db.req('put',docUrl,doc); 125 71 }); 126 72 case "replace": 127 73 default: 128 74 console.log(docUrl+" replacing."); 129 return req('get',docUrl)75 return db.req('get',docUrl) 130 76 .then(function(oldDoc){ 131 77 doc['_rev'] = oldDoc['_rev']; 132 return req('put',docUrl,doc);78 return db.req('put',docUrl,doc); 133 79 },function(){ 134 return req('put',docUrl,doc);80 return db.req('put',docUrl,doc); 135 81 }); 136 82 } -
Dev/branches/rest-dojo-ui/server/couchdb-admin/config/data/design-docs.js
r414 r415 26 26 validate_doc_update: function(newDoc, oldDoc, userCtx, secObj) { 27 27 if ( oldDoc && oldDoc.publicationDate ) { throw({forbidden:'Published documents cannot be modified.'}); } 28 if ( !newDoc._deleted && !newDoc.type ) { throw({forbidden:'Documents must have a type field.'}); }29 28 }, 30 29 views: { … … 40 39 _id: "_design/questions", 41 40 language: "javascript", 42 validate_doc_update: function(newDoc, oldDoc, userCtx, secObj) {43 if( newDoc._deleted || newDoc.type!=='Question' ){ return; }44 if( !newDoc.code ){ throw({forbidden:'Question must have a code field.'});}45 },46 41 views: { 47 42 all: { -
Dev/branches/rest-dojo-ui/server/couchdb-admin/run.bat
r412 r415 1 node ../dojo/dojo.js load=config/db1 nodejs bootstrap.js load=$1 -
Dev/branches/rest-dojo-ui/server/couchdb-admin/run.sh
r414 r415 1 1 #!/bin/sh 2 nodejs ../dojo/dojo.js load=config/db2 nodejs bootstrap.js load=$1
Note: See TracChangeset
for help on using the changeset viewer.