Changeset 260 for Dev/branches/rest-dojo-ui
- Timestamp:
- 02/14/12 18:22:25 (13 years ago)
- Location:
- Dev/branches/rest-dojo-ui
- Files:
-
- 9 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/rest-dojo-ui/client/index.html
r256 r260 8 8 <link type="text/css" href="dojox/grid/resources/claroGrid.css" rel="stylesheet" /> 9 9 <link type="text/css" href="rft/css/main.css" rel="stylesheet" /> 10 <script data-dojo-config="async: true, parseOnLoad: false, tlmSiblingOfDojo: false, isDebug: true, baseUrl: '', packages: ['dojo','dijit', 'dojox', 'rft']" src="dojo/dojo.js"></script> 11 <script> 12 require([ 'dojo/parser', 'rft/ui/LoginDialog', 'dojo/dom', 'dojo/_base/connect', 'dojo/cookie', 'rft/content', 'dojo/domReady!', 'dijit/layout/ContentPane', 'dijit/MenuBar', 'dijit/MenuBarItem', 'rft/ui/MenuBarLink', 'rft/ui/Page' ], 13 function(parser,LoginDialog,dom,connect,cookie,content) { 14 parser.parse(); 15 16 var session_cookie = cookie('rft_uid'); 17 if ( !session_cookie ) { 18 var login = new LoginDialog().placeAt(document.body); 19 login.startup(); 20 login.show(); 21 } else { 22 content.initial(); 23 } 24 25 connect.connect(dom.byId('userinfo'),'click',function(){ 26 login.show(); 27 }); 28 }); 29 </script> 10 <script type="text/javascript" src="dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, tlmSiblingOfDojo: false, isDebug: true, baseUrl: '', packages: ['dojo','dijit', 'dojox', 'rft']"></script> 11 <script type="text/javascript" src="rft/run.js"></script> 30 12 </head> 31 13 <body class="claro"> -
Dev/branches/rest-dojo-ui/client/pages/session.html
r257 r260 1 1 <div data-dojo-type="rft.ui.Page"> 2 <script type="dojo/method" data-dojo-event="init" data-dojo-args="args"> 2 <script type="dojo/method" data-dojo-event="init"> 3 var that = this; 3 4 require(['dojo/_base/json','dojo/dom','dojo/store/JsonRest','dojo/domReady!'], 4 5 function(json,dom,JsonRest){ … … 7 8 idProperty: 'uid' 8 9 }); 9 store.get( args.uid).then(function(obj){10 dom.byId('page_session_form').innerHTML = json.toJson(obj);10 store.get(that.args.uid).then(function(obj){ 11 that.page_session_form.innerHTML = json.toJson(obj); 11 12 }); 12 13 }); 13 14 </script> 14 <div class="largeFrame" id="page_session"style="width: 400px;">15 <div class="largeFrame" style="width: 400px;"> 15 16 <div class="largeTitle">Session</div> 16 17 <div class="content"> 17 <div id="page_session_form"></div>18 <div data-rft-attach-point="page_session_form"></div> 18 19 </div> 19 20 </div> -
Dev/branches/rest-dojo-ui/client/pages/sessions.html
r257 r260 1 1 <div data-dojo-type="rft.ui.Page"> 2 <script type="dojo/method" data-dojo-event="init" data-dojo-args="args"> 2 <script type="dojo/method" data-dojo-event="init"> 3 var that = this; 3 4 require(['dojo/store/JsonRest','dojox/grid/DataGrid', 4 5 Â Â Â Â 'dojo/data/ObjectStore','dojo/domReady!'], … … 8 9 idProperty: 'uid' 9 10 }); 10 11 11 Â Â Â Â var grid = new DataGrid({ 12 Â Â Â Â Â Â Â Â store: ObjectStore({objectStore: store}), 12 13 autoWidth: true, 13 14 autoHeight: true, 14 Â Â Â Â Â Â Â Â structure: [ 15 Â Â Â Â Â Â Â Â Â Â Â Â {name:"Title", field:"title", width: "200px"}, 16 Â Â Â Â Â Â Â Â Â Â Â Â {name:"Id", field:"uid", width: "200px"} 17 Â Â Â Â Â Â Â Â ] 18 Â Â Â Â }, "page_sessions_grid"); 19 Â Â Â Â grid.startup(); 15 Â Â Â Â Â Â Â Â structure: [ 16 Â Â Â Â Â Â Â Â Â Â Â Â {name:"Title", field:"title", width: "200px"} 17 Â Â Â Â Â Â Â Â ] 18 Â Â Â Â }, that.page_sessions_grid); 19 Â Â Â Â grid.startup(); 20 20 }); 21 21 </script> 22 <div class="largeFrame" id="page_sessions"style="width: 400px;">22 <div class="largeFrame" style="width: 400px;"> 23 23 <div class="largeTitle">Sessions</div> 24 24 <div class="content"> 25 <div id="page_sessions_grid"></div>25 <div data-rft-attach-point="page_sessions_grid"></div> 26 26 </div> 27 27 </div> -
Dev/branches/rest-dojo-ui/client/rft/auth.js
r256 r260 1 define(['dojo/_base/Deferred','./api'],function(Deferred,api){ 2 return new (function() { 3 var self = this; 4 var currentUser = null; 1 define(['dojo/_base/Deferred','dojo/_base/xhr','dojo/_base/json'], 2 function(Deferred,xhr,json){ 3 return new (function() { 4 var self = this; 5 var currentUser = null; 5 6 6 self.login = function(username,password) { 7 var d = new Deferred(); 8 api.post("login", 9 { 10 username:username, 11 password:password 12 }) 13 .then(function(data) { 14 currentUser = data; 15 d.resolve(data); 16 },function(){ 17 d.reject(); 18 }); 19 return d.promise; 20 }; 7 function post(path,args) { 8 return xhr.post({ 9 url: "../server/api.php"+path, 10 handleAs: "json", 11 headers: { 12 "Content-Type": "application/json" 13 }, 14 rawBody: json.toJson(args) 15 }); 16 } 17 18 self.login = function(username,password) { 19 var d = new Deferred(); 20 post("/login", 21 { 22 username:username, 23 password:password 24 }) 25 .then(function(data) { 26 currentUser = data; 27 d.resolve(data); 28 },function(){ 29 d.reject(); 30 }); 31 return d.promise; 32 }; 33 34 self.restore = function() { 35 var d = new Deferred(); 36 post("/login",{}) 37 .then(function(data) { 38 currentUser = data; 39 d.resolve(data); 40 },function(){ 41 d.reject(); 42 }); 43 return d.promise; 21 44 22 self.register = function(username,password) { 23 var d = new Deferred(); 24 api.post("register", 25 { 26 username:username, 27 password:password 28 }) 29 .then(function(data) { 30 currentUser = data; 31 d.resolve(data); 32 },function(){ 33 d.reject(); 34 }); 35 return d.promise; 36 }; 45 }; 46 47 self.register = function(username,password) { 48 var d = new Deferred(); 49 post("/register", 50 { 51 username:username, 52 password:password 53 }) 54 .then(function(data) { 55 currentUser = data; 56 d.resolve(data); 57 },function(){ 58 d.reject(); 59 }); 60 return d.promise; 61 }; 37 62 38 self.getUser = function(){39 return currentUser;40 };41 })();42 });63 self.getUser = function(){ 64 return currentUser; 65 }; 66 })(); 67 }); -
Dev/branches/rest-dojo-ui/client/rft/content.js
r257 r260 1 define(['dojo/_base/declare','dojo/_base/connect','dojo/_base/xhr','dojo/_base/lang','dojo/_base/Deferred','dojo/hash','dojo/io-query','dijit/registry','dijit','rft/util','rft/ui/Page'], 2 function(declare,connect,xhr,lang,Deferred,hash,uriQuery,registry,dijit,util,Page){ 1 define(['dojo/_base/declare','dojo/_base/connect','dojo/_base/xhr','dojo/dom-construct', 2 'dojo/dom-attr','dojo/_base/lang','dojo/_base/Deferred','dojo/hash', 3 'dojo/io-query','dojo/_base/json','dijit','rft/util'], 4 function(declare,connect,xhr,domConstruct,attr,lang,Deferred,hash,uriQuery,json,dijit,util){ 3 5 return new (function() { 4 6 var self = this; … … 6 8 7 9 var HRI = declare(null,{ 8 constructor: function() {10 constructor: function() { 9 11 this._path = '/'; 10 12 this._args = {}; … … 61 63 hash(newHash,replace); 62 64 xhr.get({ 63 url: 'pages'+hri.path()+'.html' 65 url: 'pages'+hri.path()+'.html', 66 failOk: true 64 67 }) 65 68 .then(function(html){ 66 contentPane.set('content',html); 67 var widgets = registry.findWidgets(contentPane.containerNode); 68 for(var i in widgets) { 69 if ( widgets[i].isInstanceOf(Page) ) { 70 widgets[i].init(hri.args()); 71 break; 72 } 73 } 69 var root = domConstruct.toDom(html) 70 var props = json.toJson(hri.args()); 71 props = props.slice(1,props.length-2); 72 if ( props ) 73 attr.set(root,'data-rft-props',props); 74 contentPane.set('content',root); 74 75 d.resolve(); 75 76 },function(){ … … 82 83 self.initial = function(path,args) { 83 84 if ( current ) { 84 return; 85 var dfd = new Deferred(); 86 dfd.resolved(); 87 return dfd.promise; 85 88 } 86 89 if ( hash() ) { 87 90 var hri = new HRI(hash()); 88 _goTo(hri, true);91 return _goTo(hri, true); 89 92 } else { 90 _goTo(new HRI(path,args));93 return _goTo(new HRI(path,args)); 91 94 } 92 95 } 93 96 94 97 self.goTo = function(path,args) { 95 _goTo(new HRI(path,args));98 return _goTo(new HRI(path,args)); 96 99 } 97 100 -
Dev/branches/rest-dojo-ui/client/rft/run.js
r258 r260 1 define(['require'], function(require) { 2 return {}; 3 }); 1 require(['dojo/_base/window','dojo/parser', 'rft/ui/LoginDialog', 2 'dojo/dom', 'dojo/_base/connect', 'rft/auth', 'rft/content', 3 'dojo/domReady!', 'dijit/layout/ContentPane', 'dijit/MenuBar', 4 'dijit/MenuBarItem', 'rft/ui/MenuBarLink', 'rft/ui/Page'], 5 function(win,parser,LoginDialog,dom,connect,auth,content) { 6 parser.parse(); 7 8 var login = new LoginDialog().placeAt(document.body); 9 login.startup(); 10 11 auth.restore() 12 .then(function(user){ 13 content.initial(); 14 },function(){ 15 login.show(); 16 }); 17 18 connect.connect(dom.byId('userinfo'),'click',function(){ 19 login.show(); 20 }); 21 }); -
Dev/branches/rest-dojo-ui/client/rft/ui/LoginDialog.html
r256 r260 6 6 </span> 7 7 </div> 8 <form data-dojo-type="dijit.form.Form" data-dojo-attach-point="loginForm"> 9 <fieldset> 10 <label for="username" class="loginLabel">Email</label> 11 <input data-dojo-type="dijit.form.TextBox" name="username" type="text" class="loginInput" /> 12 <label for="password" class="loginLabel">Password</label> 13 <input data-dojo-type="dijit.form.TextBox" name="password" type="password" class="loginInput" /> 14 </fieldset> 15 </form> 16 <button type="button" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onLogin">Login</button> 17 <button type="button" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onCancel">Cancel</button> 18 <div data-dojo-attach-point="loginErrors"></div> 19 <div data-dojo-attach-point="containerNode"></div> 8 <div data-dojo-attach-point="containerNode"> 9 <form data-dojo-type="dijit.form.Form" data-dojo-attach-point="loginForm"> 10 <fieldset> 11 <label for="username" class="loginLabel">Email</label> 12 <input data-dojo-type="dijit.form.TextBox" name="username" type="text" class="loginInput" /> 13 <label for="password" class="loginLabel">Password</label> 14 <input data-dojo-type="dijit.form.TextBox" name="password" type="password" class="loginInput" /> 15 </fieldset> 16 </form> 17 <button type="button" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onLogin">Login</button> 18 <button type="button" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onCancel">Cancel</button> 19 <div data-dojo-attach-point="loginErrors"></div> 20 </div> 20 21 </div> -
Dev/branches/rest-dojo-ui/client/rft/ui/LoginDialog.js
r256 r260 8 8 title: "Login", 9 9 baseClass: "rftLoginDialog", 10 show: function() { 11 this.loginErrors.innerHTML = ''; 12 this.loginForm.reset(); 13 this.inherited(arguments); 14 }, 10 15 onLogin: function() { 11 16 this.loginErrors.innerHTML = ''; … … 15 20 .then(function() { 16 21 hide(); 17 content.initial( "sessions");22 content.initial(); 18 23 },function() { 19 24 this.loginErrors.innerHTML = 'Login failed.'; -
Dev/branches/rest-dojo-ui/client/rft/ui/Page.js
r257 r260 1 define(['dojo/_base/declare','dijit/_WidgetBase','dijit/_Container'], 2 function(declare,_WidgetBase,_Container){ 3 return declare('rft.ui.Page',[_WidgetBase,_Container],{ 4 init: function(args){ 5 } 1 define(['dojo/_base/declare','dojo/query','dojo/_base/json','dojo/dom-attr','dojo/_base/lang','dijit/registry','dijit/_WidgetBase','dijit/_Container'], 2 function(declare,query,json,attr,lang,registry,_WidgetBase,_Container){ 3 return declare('rft.ui.Page',[_WidgetBase,_Container],{ 4 postCreate: function() { 5 this.inherited(arguments); 6 this.args = {}; 7 var props = attr.get(this.domNode,'data-rft-props'); 8 if ( props ) { 9 props = json.fromJson.call(this,'{'+props+'}'); 10 lang.mixin(this.args,props); 11 } 12 }, 13 startup: function() { 14 this.inherited(arguments); 15 query('[data-rft-attach-point]').forEach(lang.hitch(this,function(node){ 16 var name = attr.get(node,'data-rft-attach-point'); 17 this[name] = registry.byNode(node) || node; 18 })); 19 this.init(); 20 }, 21 init: function(){} 22 }); 6 23 }); 7 }); -
Dev/branches/rest-dojo-ui/server/api.php
r256 r260 12 12 use Tonic\Resource as Resource; 13 13 14 function restore_session() { 14 function set_session_cookie($response,$user) { 15 $response->addHeader('Set-Cookie', 'rft_uid=' . $user->uid . '; Max-Age: 3600; Path=' . $response->request->baseUri); 16 } 17 18 function restore_session($response) { 15 19 if (isset($_COOKIE['rft_uid'])) { 16 20 $user = Auth::restore($_COOKIE['rft_uid']); 17 21 if ($user) { 22 set_session_cookie($response, $user); 18 23 return $user; 19 24 } … … 34 39 $response = new Response($request); 35 40 36 if (!empty($request->data)) { 37 $data = json_decode($request->data); 38 $user = Auth::login($data->username, sha1($data->password)); 39 if ($user) { 40 $response->addHeader('Set-Cookie', 'rft_uid=' . $user->uid . '; Path=' . $request->baseUri); 41 $response->body = json_encode($user); 42 } else { 41 $user = null; 42 $data = null; 43 if ( !empty($request->data) ) { 44 $data = json_decode($request->data,true); 45 } 46 if (!empty($data)) { 47 $user = Auth::login($data['username'], sha1($data['password'])); 48 if (!$user) { 43 49 throw new ResponseException("Incorrect username and password", Response::UNAUTHORIZED); 44 50 } 45 51 } else { 46 throw new ResponseException("No login data provided", Response::BADREQUEST); 47 } 52 $user = restore_session($response); 53 } 54 $response->body = json_encode($user); 48 55 return $response; 49 56 } … … 64 71 65 72 function get($request) { 66 restore_session();67 $response = new Response($request);73 $response = new Response($request); 74 restore_session($response); 68 75 69 76 $type = $this->getType($request); 70 71 77 $objects = $type::get(array()); 72 78 //$objects = array_map(function($val) { return array('uid' => $val->uid); }, $objects); … … 77 83 78 84 function post($request) { 79 restore_session();80 $response = new Response($request);85 $response = new Response($request); 86 restore_session($response); 81 87 82 88 $type = $this->getType($request); … … 128 134 129 135 function get($request) { 130 restore_session();131 $response = new Response($request);136 $response = new Response($request); 137 restore_session($response); 132 138 133 139 $info = $this->getTypeAndUid($request); 134 135 140 $objects = $info['type']::get(array('uid' => $info['uid'])); 136 141 if (empty($objects)) { … … 143 148 144 149 function put($request) { 145 restore_session();146 $response = new Response($request);150 $response = new Response($request); 151 restore_session($response); 147 152 148 153 $info = $this->getTypeAndUid($request);
Note: See TracChangeset
for help on using the changeset viewer.