Changeset 292
- Timestamp:
- 02/28/12 16:19:52 (13 years ago)
- Location:
- Dev/branches/rest-dojo-ui
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/rest-dojo-ui/client/rft/content.js
r274 r292 19 19 * this e.g. to ask confirmation of changed values are not saved. 20 20 */ 21 define(['dojo/_base/declare','dojo/_base/connect','dojo/_base/xhr', 22 'dojo/_base/lang','dojo/_base/Deferred','dojo/hash', 21 define(['dojo/_base/declare','dojo/_base/connect','dojo/_base/xhr','dojo/_base/json', 22 'dojo/_base/lang','dojo/_base/Deferred','dojo/hash','dojo/dom-attr','dojo/dom-construct', 23 23 'dojo/io-query','dijit','rft/util','rft/ui/_Page'], 24 function(declare,connect,xhr, lang,Deferred,hash,uriQuery,dijit,util,_Page){24 function(declare,connect,xhr,json,lang,Deferred,hash,attr,domConstruct,uriQuery,dijit,util,_Page){ 25 25 return new (function() { 26 26 var self = this; 27 var currentHash = ""; 28 var currentPage = null; 29 27 30 28 var HRI = declare(null,{ 31 29 constructor: function() { … … 73 71 }); 74 72 73 var currentHri = null; 74 var currentPage = null; 75 75 76 function _goTo(hri,replace) { 76 77 var contentPane = dijit.byId('content'); 77 78 var dfd = new Deferred(); 78 var newHash = hri.hash();79 79 80 80 // if already there, return 81 if ( currentH ash === newHash) {81 if ( currentHri && currentHri.hash() === hri.hash() ) { 82 82 dfd.resolve(); 83 83 return dfd.promise; … … 88 88 if ( currentPage.onLeave() === false ) { 89 89 // restore hash if changed by hand or back button 90 hash(currentH ash);90 hash(currentHri.hash()); 91 91 dfd.reject(); 92 92 return dfd.promise; … … 95 95 } 96 96 97 function mixinArgs(node) { 98 var props = {}; 99 if ( attr.has(node,'data-dojo-props') ) { 100 props = json.fromJson(attr.get(node,'data-dojo-props')); 101 } 102 lang.mixin(props,{pageArgs:hri.args()}); 103 var jsonStr = json.toJson(props); 104 attr.set(node,'data-dojo-props',jsonStr.slice(1,jsonStr.length-1)); 105 } 106 97 107 // update hash 98 currentH ash = newHash;99 hash( newHash,replace);108 currentHri = hri; 109 hash(hri.hash(),replace); 100 110 101 111 // load html … … 108 118 // initialize page or create error message 109 119 .then(function(html){ 110 contentPane.set('content',html); 111 var rootNode = contentPane.containerNode.firstChild; 120 var rootNode = domConstruct.toDom(html); 121 mixinArgs(rootNode); 122 contentPane.set('content',rootNode); 112 123 currentPage = dijit.byNode(rootNode); 113 124 if ( !currentPage ) { … … 123 134 124 135 self.initial = function(path,args) { 125 if ( currentH ash) {136 if ( currentHri ) { 126 137 var dfd = new Deferred(); 127 138 dfd.resolve(); … … 140 151 } 141 152 153 self.getArgs = function() { 154 if ( currentHri ) { 155 return currentHri.args(); 156 } else { 157 return {}; 158 } 159 } 160 142 161 connect.subscribe('/dojo/hashchange', function(){ 143 162 _goTo(new HRI(hash())); -
Dev/branches/rest-dojo-ui/client/rft/run.js
r288 r292 20 20 'dijit/form/Button', 21 21 'dijit/form/Textarea', 22 'dijit/form/SimpleTextarea', 22 23 'dijit/form/ComboBox', 23 24 'dijit/form/Select', … … 31 32 32 33 // pages -> load dynamically? 33 'rft/pages/questions'], 34 'rft/pages/questions', 35 'rft/pages/surveys', 36 'rft/pages/survey', 37 ], 34 38 function(win,parser,LoginDialog,dom,connect,auth,content) { 35 39 parser.parse(); -
Dev/branches/rest-dojo-ui/client/rft/ui/_Page.js
r288 r292 1 define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/array','dojo/parser', 2 'dojo/query','dojo/dom-attr','dojo/_base/connect','dijit','dijit/_WidgetBase', 3 'dijit/_Container','dijit/_Contained'], 4 function(declare,lang,array,parser,query,attr,connect,dijit,_WidgetBase,_Container,_Contained){ 1 define(['dojo/_base/declare','dojo/_base/lang','dojo/parser','dojo/query', 2 'dojo/dom-attr','dijit','dijit/_WidgetBase'], 3 function(declare,lang,parser,query,attr,dijit,_WidgetBase){ 5 4 return declare('rft.ui._Page',[_WidgetBase],{ 6 5 startup: function() { -
Dev/branches/rest-dojo-ui/server/api.php
r275 r292 74 74 set_session_cookie($response, $user); 75 75 } else { 76 throw new ResponseException("No email and password provided.", Response::BADREQUEST);76 throw new ResponseException("No email and password provided.", Response::BADREQUEST); 77 77 } 78 78 $response->body = $user; … … 83 83 84 84 /** 85 * @uri /data/\w+ 85 * @uri /data/\w+(/\w+)? 86 86 */ 87 class Data CollectionResource extends Resource {88 89 function getType ($request) {87 class DataResource extends Resource { 88 89 function getTypeAndUid($request) { 90 90 $uri = get_clean_uri($request); 91 91 $path = explode('/', $uri); 92 $type = $path[2]; 93 return $type; 92 93 $info = array(); 94 $info['type'] = $path[2]; 95 if (isset($path[3])) { 96 $info['uid'] = $path[3]; 97 } 98 99 return $info; 94 100 } 95 101 … … 98 104 restore_session($response); 99 105 100 $type = $this->getType($request); 101 $objects = $type::get(array()); 102 103 $response->body = $objects; 106 $info = $this->getTypeAndUid($request); 107 if (isset($info['uid'])) { 108 $objects = $info['type']::get(array('uid' => $info['uid'])); 109 if (empty($objects)) { 110 throw new ResponseException("Object not found", Response::NOTFOUND); 111 } 112 $response->body = $objects[0]; 113 } else { 114 $objects = $info['type']::get(array()); 115 $response->body = $objects; 116 } 117 104 118 return $response; 105 119 } … … 107 121 function post($request) { 108 122 $response = new Response($request); 109 restore_session($response);110 111 $ type = $this->getType($request);123 $user = restore_session($response); 124 125 $info = $this->getTypeAndUid($request); 112 126 $onlyAdd = $request->ifNoneMatch('*'); 113 127 $onlyUpdate = $request->ifMatch('*'); 114 128 115 $object = FALSE; 116 if (isset($request->data->uid)) { 117 $objects = $type::get(array('uid' => $request->data->uid)); 129 $uid = null; 130 if (isset($info['uid'])) { 131 $uid = $info['uid']; 132 } else if (isset($request->data->uid)) { 133 $uid = $request->data->uid; 134 } 135 136 $object = null; 137 if ($uid) { 138 $objects = $info['type']::get(array('uid' => $uid)); 118 139 if (!empty($objects)) { 119 140 $object = $objects[0]; … … 126 147 127 148 if (!$object) { 128 $object = new $ type(null);149 $object = new $info['type']($uid); 129 150 $response->code = Response::CREATED; 130 151 } else { … … 134 155 $object->$key = $val; 135 156 } 136 if (!$object->save()) { 137 throw new ResponseException("Save failed", Response::INTERNALSERVERERROR); 138 } 139 140 $response->body = $object; 141 return $response; 142 } 143 144 function put($request) { 145 return $this->post($request); 146 } 147 148 } 149 150 /** 151 * @uri /data/\w+/\w+ 152 */ 153 class DataObjectResource extends Resource { 154 155 function getTypeAndUid($request) { 156 $uri = get_clean_uri($request); 157 $path = explode('/', $uri); 158 $type = $path[2]; 159 $uid = $path[3]; 160 return array('type' => $type, 'uid' => $uid); 161 } 162 163 function get($request) { 164 $response = new Response($request); 165 restore_session($response); 166 167 $info = $this->getTypeAndUid($request); 168 $objects = $info['type']::get(array('uid' => $info['uid'])); 169 if (empty($objects)) { 170 throw new ResponseException("Object not found", Response::NOTFOUND); 171 } 172 173 $response->body = $objects[0]; 174 return $response; 175 } 176 177 function post($request) { 178 $response = new Response($request); 179 restore_session($response); 180 181 $info = $this->getTypeAndUid($request); 182 $onlyAdd = $request->ifNoneMatch('*'); 183 $onlyUpdate = $request->ifMatch('*'); 184 185 $object = FALSE; 186 $objects = $info['type']::get(array('uid' => $info['uid'])); 187 if (!empty($objects)) { 188 $object = $objects[0]; 189 } 190 191 if (( $onlyUpdate && !$object ) || ( $onlyAdd && $object )) { 192 throw new ResponseException("Update/Create and existing object mismatch", Response::PRECONDITIONFAILED); 193 } 194 195 if (!$object) { 196 $object = new $info['type']($info->uid); 197 $response->code = Response::CREATED; 198 } else { 199 $response->code = Response::OK; 200 } 201 foreach ($request->data as $key => $val) { 202 $object->$key = $val; 157 if (isset($object->creator)) { 158 $object->creator = $user; 203 159 } 204 160 if (!$object->save()) {
Note: See TracChangeset
for help on using the changeset viewer.