Ignore:
Timestamp:
02/16/12 14:47:39 (13 years ago)
Author:
hendrikvanantwerpen
Message:
  • [Client] Finished page framework. See rft/ui/content.js or test files for details.
  • [Client] Allow login by pressing Enter.
  • [API] On exception include details in json response.
  • [Server Use Exceptions when save() fails, iso return values.
Location:
Dev/branches/rest-dojo-ui/client/rft/ui
Files:
1 added
2 edited
1 copied
1 moved

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui/client/rft/ui/LoginDialog.html

    r260 r263  
    1414                <input data-dojo-type="dijit.form.TextBox" name="password" type="password" class="loginInput" />
    1515            </fieldset>
     16            <button type="submit" 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>
    1618        </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>
    1919        <div data-dojo-attach-point="loginErrors"></div>
    2020    </div>
  • Dev/branches/rest-dojo-ui/client/rft/ui/LoginDialog.js

    r260 r263  
    1 define(['dojo/_base/declare','dojo/_base/lang','dijit/Dialog','dijit/_WidgetsInTemplateMixin',
    2     '../auth', 'dojo/text!./LoginDialog.html','../content',
    3     'dijit/form/Form','dijit/form/Button','dijit/form/TextBox'],
    4     function (declare, lang, Dialog, _WidgetsInTemplateMixin, auth, template, content) {
     1define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/event','dijit/Dialog',
     2    'dijit/_WidgetsInTemplateMixin','../auth', 'dojo/text!./LoginDialog.html',
     3    '../content','dijit/form/Form','dijit/form/Button','dijit/form/TextBox'],
     4    function (declare, lang, event, Dialog, _WidgetsInTemplateMixin, auth, template, content) {
    55        return declare([Dialog,_WidgetsInTemplateMixin], {
    66            templateString: template,
     
    88            title: "Login",
    99            baseClass: "rftLoginDialog",
     10            startup: function() {
     11                this.inherited(arguments);
     12                this.loginForm.on('submit',lang.hitch(this,'onLogin'));
     13            },
    1014            show: function() {
    1115                this.loginErrors.innerHTML = '';
     
    1317                this.inherited(arguments);
    1418            },
    15             onLogin: function() {
     19            onLogin: function(evt) {
    1620                this.loginErrors.innerHTML = '';
    1721                var data = this.loginForm.get('value');
    18                 var hide = lang.hitch(this,"hide");
    1922                auth.login(data.username,data.password)
    20                 .then(function() {
    21                     hide();
     23                .then(lang.hitch(this,function() {
     24                    this.hide();
    2225                    content.initial();
    23                 },function() {
     26                }),lang.hitch(this,function() {
    2427                    this.loginErrors.innerHTML = 'Login failed.';
    25                 })
     28                }));
     29                event.stop(evt);
    2630                return false;
    2731            }
  • Dev/branches/rest-dojo-ui/client/rft/ui/TestPageController.js

    r260 r263  
    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;
     1define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/event','rft/content',
     2    'dojo/store/JsonRest','dojo/data/ObjectStore','rft/ui/_PageController','dijit/registry'],
     3    function(declare,lang,event,content,JsonRest,ObjectStore,_PageController,registry) {
     4        return declare([_PageController],{
     5            onVisit: function() {
     6                this._store = new JsonRest({
     7                    target:"../server/api.php/data/Session/",
     8                    idProperty: 'uid'
     9                });
     10
     11                function setEnabledRecursive(node,value) {
     12                    registry.findWidgets(node).forEach(function(w){
     13                        w.set('disabled',!value);
     14                        setEnabledRecursive(w.domNode,value);
     15                    });
     16                };
     17
     18                setEnabledRecursive(this.form.domNode,false);
     19
     20                var refreshGrid = lang.hitch(this,function(){
     21                    this.grid.setStore(ObjectStore({
     22                        objectStore: this._store
     23                    }),'');
     24                });
     25                refreshGrid();
     26               
     27                var getSelectedItem = lang.hitch(this,function(evt){
     28                    var items = this.grid.selection.getSelected();
     29                    if (items.length)
     30                        return items[0];
     31                    return null;
     32                });
     33               
     34                this.grid.on('rowclick',lang.hitch(this,function(evt){
     35                    var obj = getSelectedItem();
     36                    if ( obj) {
     37                        this.form.set('value', obj);
     38                        setEnabledRecursive(this.form.domNode, true);
     39                    } else {
     40                        setEnabledRecursive(this.form.domNode, false);
     41                        this.form.reset();
     42                    }
    1843                }));
    19                 this.init();
    20             },
    21             init: function(){}
     44
     45                this.grid.on('rowdblclick',lang.hitch(this,function(evt){
     46                    var obj = getSelectedItem();
     47                    content.goTo('/session',{
     48                        uid:obj.uid
     49                    });
     50                }));
     51
     52                var submitHandler = lang.hitch(this,function(evt){
     53                    this.errors.innerHTML = '';
     54                    var newObj = this.form.get('value');
     55                    var obj = getSelectedItem();
     56                    obj = lang.mixin(obj,newObj);
     57                    //this._store.put(newObj,{id:obj.uid})
     58                    this._store.put(obj,{
     59                        overwrite:true
     60                    })
     61                    .then(lang.hitch(this,function(){
     62                        refreshGrid();
     63                    }),lang.hitch(this,function(e){
     64                        this.errors.innerHTML = e.toString();
     65                    }));
     66                    event.stop(evt);
     67                    return false;
     68                });
     69               
     70                this.form.on('submit',submitHandler);
     71            }
    2272        });
    2373    });
  • Dev/branches/rest-dojo-ui/client/rft/ui/_Page.js

    r260 r263  
    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() {
     1define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/array','dojo/parser','dojo/query','dojo/_base/Deferred',
     2    'dijit/_WidgetBase','dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','rft/ui/_PageController'],
     3    function(declare,lang,array,parser,query,Deferred,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_PageController){
     4        return declare('rft.ui._Page',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_PageController],{
     5            _controllerLoaded: false,
     6            _hasStarted: false,
     7            _triggeredOnVisit: false,
     8            pageController: null, /* class derived from rft.ui._PageController, mixed in at creation */
     9            buildRendering: function() {
    510                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                var dfd = new Deferred();
     12                var mixinType = this.domNode.getAttribute("data-rft-mixin");
     13                if ( mixinType ) {
     14                    require([mixinType],lang.hitch(this,function(SomePageController){
     15                        declare.safeMixin(this,new SomePageController());
     16                        dfd.resolve();
     17                    }));
     18                } else {
     19                    dfd.resolve();
    1120                }
     21                dfd.then(lang.hitch(this,function(){
     22                    var methods = query('> script[type^="rft/method"]',this.domNode).orphan();
     23                    array.forEach(methods,lang.hitch(this,function(s){
     24                        var method = s.getAttribute("data-rft-method");
     25                        var func = parser._functionFromScript(s);
     26                        this[method] = func;
     27                    }));
     28                    this._controllerLoaded = true;
     29                    this._triggerOnVisit();
     30                }));
    1231            },
    1332            startup: function() {
    1433                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();
     34                this._hasStarted = true;
     35                this._triggerOnVisit();
    2036            },
    21             init: function(){}
     37            _triggerOnVisit: function() {
     38                if ( this._controllerLoaded && this._hasStarted && !this._triggeredOnVisit ) {
     39                    this._triggeredOnVisit = false;
     40                    this.onVisit();
     41                }
     42            }
    2243        });
    2344    });
Note: See TracChangeset for help on using the changeset viewer.