Changeset 407


Ignore:
Timestamp:
09/05/12 14:41:13 (13 years ago)
Author:
hendrikvanantwerpen
Message:

Added build infrastructure and reorganised code to match it.

Page navigation is now done by the rft/app/Controller class. pages
inherit generally from rft/app/Page, which is a BorderContainer?. The
Page uses normal widget mechanism like templateString, all data-rft-*
are obsolete, use normal data-dojo-* options again in templates.
This is done so the pages of the app can be included in the build.
URLs are linked to pages through registration, which is done in
run.js. The routes are defined in the routes.js file. Page class names
and URLs are now independent.

Reduced includes in index.html to one CSS file and two JS files. Dojo
stylesheets are now included thorugh externals.css.

Dojo 1.8 doesn't require the dotted names in declares anymore. All these
are now removed (redundant with module path and JS filename anyway)
and in templates a module id is used, so iso 'dijit.form.Form' use
'dijit/form/Form' now. This is more consistent with requires in the JS
code and they are picked up by the build system.

Removed any old-style dojo.<function> code and use loaded modules
everywhere.

Lots of whitespace unification.

Location:
Dev/branches/rest-dojo-ui
Files:
10 added
6 deleted
59 edited

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui

    • Property svn:ignore
      •  

        old new  
        11nbproject
        22.project
         3release
  • Dev/branches/rest-dojo-ui/client

    • Property svn:externals
      •  

        old new  
        1 dojotoolkit http://svn.dojotoolkit.org/src/tags/release-1.8.0
         1dojo http://svn.dojotoolkit.org/src/tags/release-1.8.0/dojo
         2dijit http://svn.dojotoolkit.org/src/tags/release-1.8.0/dijit
         3dojox http://svn.dojotoolkit.org/src/tags/release-1.8.0/dojox
         4util http://svn.dojotoolkit.org/src/tags/release-1.8.0/util
  • Dev/branches/rest-dojo-ui/client/index.html

    r386 r407  
    22<html>
    33    <head>
     4        <title>Research Facilitator Tool</title>
    45        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    5         <title>Research Facilitator Tool</title>
    6         <link rel="stylesheet" type="text/css" href="dojotoolkit/dijit/themes/claro/claro.css" />
    7         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/Grid.css" />
    8         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/claroGrid.css" />
    9         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/widget/Toaster/Toaster.css" />
    106        <link rel="stylesheet" type="text/css" href="rft/css/main.css" />
    11         <script type="text/javascript" src="dojotoolkit/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, tlmSiblingOfDojo: false, isDebug: true, baseUrl: '', packagePaths: {'dojotoolkit':['dojo','dijit', 'dojox'], '.':['rft']}"></script>
    12         <script type="text/javascript" src="rft/run.js"></script>
    137    </head>
    148    <body class="dijitReset claro">
    15         <div class="page" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="width: 100%; height: 100%;">
    16             <div class="topbar" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    17                 <a href="#!/index"><h1>ResearchTool</h1></a>
    18                 <div data-dojo-type="rft.ui.MainMenu"></div>
    19                 <div class="breadcrumbs">
    20                     <span class="breadcrumb">Some</span> &gt; <span class="breadcrumb">Sample</span> &gt; <span class="breadcrumbCurrent">Breadcrumb [visiting]</span>
    21                 </div>
    22             </div>
    23             <div id="content" class="content" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
     9        <script type="text/javascript" src="dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, isDebug: true"></script>
     10        <script type="text/javascript" src="rft/run.js"></script>
     11        <div id="content" class="page" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'center'" style="width: 100%; height: 100%;">
     12            <div class="topbar" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     13                <a href="#!/"><h1>ResearchTool</h1></a>
     14                <div data-dojo-type="rft/ui/MainMenu"></div>
    2415            </div>
    2516        </div>
    26         <div id="toaster" data-dojo-type="rft.ui.Notifications">
     17        <div id="toaster" data-dojo-type="rft/ui/Notifications">
    2718        </div>
    2819    </body>
  • Dev/branches/rest-dojo-ui/client/rft/css/main.css

    r354 r407  
     1@import url('external.css');
    12@import url('claroOverride.css');
    23
  • Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticReadStore.js

    r384 r407  
    77    ],function(declare, json, lang, xhr, QueryReadStore) {
    88
    9     return declare("rft.elastic.ElasticReadStore", QueryReadStore, {
     9    return declare(QueryReadStore, {
    1010        fetch:function(request){
    1111            var attr = Object.keys(request.query)[0];
  • Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticSearchFilteringSelect.js

    r406 r407  
    33    'dijit/form/FilteringSelect'
    44], function(declare, FilteringSelect) {
    5     return declare("rft.elastic.ElasticSearchFilteringSelect", FilteringSelect, {
     5    return declare(FilteringSelect, {
    66         // custom min input character count to trigger search
    77         minKeyCount: 3,
  • Dev/branches/rest-dojo-ui/client/rft/pages/index.html

    r359 r407  
    1 <div data-dojo-type="rft.pages.index">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 600px;">
    3         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    4             <h2>
    5                 <span class="rftIcon rftIconUser"></span>
    6                 <span class="headerText">Main Menu</span>
    7             </h2>
     1<div>
     2    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     3        <h2>
     4            <span class="rftIcon rftIconUser"></span>
     5            <span class="headerText">Main Menu</span>
     6        </h2>
     7    </div>
     8
     9    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
     10
     11        <div class="rftIndexMenuBlock" title="Sessions">
     12            <div class="rftIndexMenuMask">
     13                <span class="rftIcon rftIconSession"></span><span class="label">Sessions</span>
     14            </div>
     15            <button data-dojo-attach-point="btnContentCreate" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'green twoHeight', iconClass: 'rftIcon rftIconPlus'">Create and edit</button>
     16            <button data-dojo-attach-point="btnContentFacilitate" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'green twoHeight', iconClass: 'rftIcon rftIconForward'">Facilitate</button>
    817        </div>
    918
    10         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
     19        <div class="rftIndexMenuBlock" title="Content">
     20            <div class="rftIndexMenuMask">
     21                <span class="rftIcon rftIconInspect"></span><span class="label">Content</span>
     22            </div>
     23            <button data-dojo-attach-point="btnSurveys" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'blue oneHeight', iconClass: 'rftIcon rftIconSurvey'">Surveys</button>
     24            <button data-dojo-attach-point="btnQuestions" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'orange oneHeight', iconClass: 'rftIcon rftIconQuestion'">Questions</button>
     25            <button data-dojo-attach-point="btnApplications" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'purple oneHeight', iconClass: 'rftIcon rftIconApplication'">Applications</button>
     26            <button data-dojo-attach-point="btnDashboards" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'red oneHeight', iconClass: 'rftIcon rftIconDashboard'">Dashboards</button>
     27        </div>
    1128
    12             <div class="rftIndexMenuBlock" title="Sessions">
    13                 <div class="rftIndexMenuMask">
    14                     <span class="rftIcon rftIconSession"></span><span class="label">Sessions</span>
    15                 </div>
    16                 <button data-rft-attach-point="btnContentCreate" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'green twoHeight', iconClass: 'rftIcon rftIconPlus'">Create and edit</button>
    17                 <button data-rft-attach-point="btnContentFacilitate" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'green twoHeight', iconClass: 'rftIcon rftIconForward'">Facilitate</button>
     29        <div class="rftIndexMenuBlock" title="results">
     30            <div class="rftIndexMenuMask">
     31                <span class="rftIcon rftIconGameData"></span><span class="label">Results</span>
    1832            </div>
    19 
    20             <div class="rftIndexMenuBlock" title="Content">
    21                 <div class="rftIndexMenuMask">
    22                     <span class="rftIcon rftIconInspect"></span><span class="label">Content</span>
    23                 </div>
    24                 <button data-rft-attach-point="btnSurveys" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'blue oneHeight', iconClass: 'rftIcon rftIconSurvey'">Surveys</button>
    25                 <button data-rft-attach-point="btnQuestions" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'orange oneHeight', iconClass: 'rftIcon rftIconQuestion'">Questions</button>
    26                 <button data-rft-attach-point="btnApplications" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'purple oneHeight', iconClass: 'rftIcon rftIconApplication'">Applications</button>
    27                 <button data-rft-attach-point="btnDashboards" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'red oneHeight', iconClass: 'rftIcon rftIconDashboard'">Dashboards</button>
    28             </div>
    29 
    30             <div class="rftIndexMenuBlock" title="results">
    31                 <div class="rftIndexMenuMask">
    32                     <span class="rftIcon rftIconGameData"></span><span class="label">Results</span>
    33                 </div>
    34                 <button data-rft-attach-point="btnResults" data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'blue fourHeight', iconClass: 'rftIcon rftIconGameData'">Results</button>
    35             </div>
     33            <button data-dojo-attach-point="btnResults" data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftIndexMenuButton', class: 'blue fourHeight', iconClass: 'rftIcon rftIconGameData'">Results</button>
    3634        </div>
    3735    </div>
    3836
    39     <script>
    40     require([
    41         'dojo/on',
    42         'dojo/query',
    43         'dijit/registry',
    44         'rft/content',
    45         'dojo/domReady!'
    46         ], function(on, query, registry, content){
    47             debugger;
    48             registry.byId("btnSessionsCreate").on("click", function(){
    49                 content.goTo("sessions", null);
    50             });
    51             registry.byId("btnSessionsFacilitate").on("click", function(){
    52                 content.goTo("sessions", null);
    53             });
    54 
    55             registry.byId("btnSurveys").on("click", function(){
    56                 content.goTo("surveys", null);
    57             });
    58             registry.byId("btnQuestions").on("click", function(){
    59                 content.goTo("questions", null);
    60             });
    61             registry.byId("btnApplications").on("click", function(){
    62                 content.goTo("applications", null);
    63             });
    64             registry.byId("btnDashboards").on("click", function(){
    65                 content.goTo("dashboards", null);
    66             });
    67 
    68             registry.byId("btnResults").on("click", function(){
    69                 content.goTo("results", null);
    70             });
    71 
    72         });
    73     </script>
    7437</div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/index.js

    r359 r407  
    1 define(['dojo/_base/declare','dojo/_base/lang','rft/content','rft/ui/_Page'],
    2     function(declare,lang,content,_Page){
    3         return declare('rft.pages.index',[_Page],{
    4             selectedObject: null,
    5             onVisit: function() {
    6                 this.btnContentCreate.on("click",function(){ content.goTo("sessions"); });
    7                 this.btnContentFacilitate.on("click",function(){ content.goTo("run"); });
    8                 this.btnSurveys.on("click",function(){ content.goTo("surveys"); });
    9                 this.btnQuestions.on("click",function(){ content.goTo("questions"); });
    10                 this.btnApplications.on("click",function(){ content.goTo("applications"); });
    11                 this.btnDashboards.on("click",function(){ content.goTo("dashboards"); });
    12                 this.btnResults.on("click",function(){ content.goTo("results"); });
    13             }
    14         });
     1define([
     2    'dojo/_base/declare',
     3    '../app/Controller',
     4    '../app/Page',
     5    'dojo/text!./index.html'
     6],function(declare,Controller,Page,template){
     7    return declare([Page],{
     8        templateString: template,
     9        selectedObject: null,
     10        startup: function() {
     11            if ( this._started ) { return; }
     12            this.inherited(arguments);
     13            this.btnContentCreate.on("click",function(){ Controller.go("/sessions"); });
     14            this.btnContentFacilitate.on("click",function(){ Controller.go("/run"); });
     15            this.btnSurveys.on("click",function(){ Controller.go("/surveys"); });
     16            this.btnQuestions.on("click",function(){ Controller.go("/questions"); });
     17            this.btnApplications.on("click",function(){ Controller.go("/applications"); });
     18            this.btnDashboards.on("click",function(){ Controller.go("/dashboards"); });
     19            this.btnResults.on("click",function(){ Controller.go("/results"); });
     20        }
    1521    });
    16 
     22});
  • Dev/branches/rest-dojo-ui/client/rft/pages/question.html

    r396 r407  
    1 <div data-dojo-type="rft.pages.question" class="orange">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
    3         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    4             <h2>
    5                 <span class="rftIcon rftIconSurvey"></span>
    6                 <span class="headerText">Question 123 [Editing]</span>
    7             </h2>
     1<div class="orange">
     2    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     3        <h2>
     4            <span class="rftIcon rftIconSurvey"></span>
     5            <span class="headerText">Question 123 [Editing]</span>
     6        </h2>
     7    </div>
     8    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'left', design:'headline'" style="width: 300px;">
     9        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
     10            <div data-dojo-attach-point="QuestionEditorToolkitNode"></div>
    811        </div>
    9         <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'left', design:'headline'" style="width: 300px;">
    10             <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
    11                 <div data-rft-attach-point="QuestionEditorToolkitNode"></div>
    12             </div>
    13             <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    14                 <button data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'" data-rft-attach-event="onClick:_onDiscard">Discard</button>
    15                 <button data-dojo-type="dijit.form.Button" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'" data-rft-attach-event="onClick:_onSave">Save and exit</button>
    16             </div>
     12        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     13            <button data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'" data-dojo-attach-event="onClick:_onDiscard">Discard</button>
     14            <button data-dojo-type="dijit/form/Button" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'" data-dojo-attach-event="onClick:_onSave">Save and exit</button>
    1715        </div>
    18         <div data-rft-attach-point="QuestionEditorPreviewNode"></div>
    19 
     16    </div>
     17    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
     18        <div data-dojo-attach-point="QuestionEditorPreviewNode"></div>
    2019    </div>
    2120</div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/question.js

    r390 r407  
    44    'dojo/_base/event',
    55    'dojo/_base/lang',
    6     'rft/store',
    7     'rft/content',
    8     'rft/ui/_Page',
    9     'rft/ui/QuestionEditorPreview',
    10     'rft/ui/QuestionEditorToolkit'
    11     ],function(declare, Deferred, event, lang, store, content, _Page, QuestionEditorPreview, QuestionEditorToolkit){
    12         return declare('rft.pages.question', [_Page], {
    13             question: null,
    14             _toolkit: null,
    15             _preview: null,
    16            
    17             onVisit: function() {
    18                 if (this.pageArgs.uid) {
    19                     Deferred.when(store.get(this.pageArgs.uid))
    20                     .then(lang.hitch(this, function(obj) {
    21                         this.question = obj;
    22                         this._refresh();
    23                     }));
    24                 } else {
    25                     throw new Error("Error: no reference to object set!");
    26                 }
    27                 this._setupEditor();
    28             },
    29             onLeave: function() {
    30                 this.inherited(arguments);
    31             },
    32             _refresh: function () {
    33                 this._toolkit.set('value',this.question);
    34                 this._preview.appendItems(this.question.content || []);
    35             },
    36             _onSave: function(evt) {
    37                 lang.mixin(this.question, this._toolkit.get('value'));
    38                 this.question.content = this._preview.getItems();
    39                 store.put(this.question)
    40                 .then(function() {
    41                     content.goTo('questions');
    42                 });
    43                 evt && event.stop( evt );
    44                 return false;
    45             },
    46             _onDiscard: function() {
    47                 content.goTo('questions');
    48                 return true;
    49             },
    50             _setupEditor: function() {
    51                 this._toolkit = new QuestionEditorToolkit({
    52                 },this.QuestionEditorToolkitNode);
    53                 this._toolkit.on('submit',lang.hitch(this,"_onSave"));
    54                 this._toolkit.startup();
     6    '../store',
     7    '../app/Controller',
     8    '../app/Page',
     9    '../ui/QuestionEditorPreview',
     10    '../ui/QuestionEditorToolkit',
     11    'dojo/text!./question.html'
     12],function(declare, Deferred, event, lang, store, Controller, Page, QuestionEditorPreview, QuestionEditorToolkit, template){
     13    return declare([Page], {
     14        templateString: template,
     15        question: null,
     16        _toolkit: null,
     17        _preview: null,
     18       
     19        startup: function() {
     20            if ( this._started ) { return; }
     21            this.inherited(arguments);
     22            if (this.questionId) {
     23                Deferred.when(store.get(this.questionId))
     24                .then(lang.hitch(this, function(obj) {
     25                    this.question = obj;
     26                    this._refresh();
     27                }));
     28            } else {
     29                throw new Error("Error: no reference to object set!");
     30            }
     31            this._setupEditor();
     32        },
     33        onLeave: function() {
     34            this.inherited(arguments);
     35        },
     36        _refresh: function () {
     37            this._toolkit.set('value',this.question);
     38            this._preview.appendItems(this.question.content || []);
     39        },
     40        _onSave: function(evt) {
     41            lang.mixin(this.question, this._toolkit.get('value'));
     42            this.question.content = this._preview.getItems();
     43            store.put(this.question)
     44            .then(function() {
     45                Controller.go('/questions');
     46            });
     47            evt && event.stop( evt );
     48            return false;
     49        },
     50        _onDiscard: function() {
     51            Controller.go('/questions');
     52            return true;
     53        },
     54        _setupEditor: function() {
     55            this._toolkit = new QuestionEditorToolkit({
     56            },this.QuestionEditorToolkitNode);
     57            this._toolkit.on('submit',lang.hitch(this,"_onSave"));
     58            this._toolkit.startup();
    5559
    56                 this._preview = new QuestionEditorPreview({
    57                     region: 'center'
    58                 },this.QuestionEditorPreviewNode);
    59                 this._preview.startup();
    60                 this._supportingWidgets.push(this._toolkit, this._preview);
    61             }
    62         });
     60            this._preview = new QuestionEditorPreview({
     61            },this.QuestionEditorPreviewNode);
     62            this._preview.startup();
     63            this._supportingWidgets.push(this._toolkit, this._preview);
     64        }
     65    });
    6366});
    64 
  • Dev/branches/rest-dojo-ui/client/rft/pages/questions.html

    r370 r407  
    1 <div data-dojo-type="rft.pages.questions" class="blue">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
     1<div class="blue">
    32
    4         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    5             <h2>
    6                 <span class="rftIcon rftIconQuestion"></span>
    7                 <span class="headerText">Questions</span>
    8             </h2>
    9         </div>
    10        
    11         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
    12             <div data-rft-attach-point="questionBrowser"></div>
    13         </div>
     3    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     4        <h2>
     5            <span class="rftIcon rftIconQuestion"></span>
     6            <span class="headerText">Questions</span>
     7        </h2>
     8    </div>
     9   
     10    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
     11        <div data-dojo-attach-point="questionBrowser"></div>
     12    </div>
    1413
    15         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'bottom'">
    16             <div data-dojo-type="dijit.form.Button" data-rft-attach-event="onClick:onNewQuestion" data-dojo-props="baseClass: 'rftLargeButton', iconClass:'rftIcon rftIconQuestion'">New question</div>
    17         </div>
     14    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom'">
     15        <div data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onNewQuestion" data-dojo-props="baseClass: 'rftLargeButton', iconClass:'rftIcon rftIconQuestion'">New question</div>
     16    </div>
    1817
    19     </div>
    2018</div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/questions.js

    r370 r407  
    44    'dojo/_base/event',
    55    'dojo/_base/lang',
    6     'rft/content',
    7     'rft/store',
    8     'rft/ui/_Page',
    9     'rft/ui/TabbedQuestionBrowser'
    10     ],function(declare,Deferred,event,lang,content,store,_Page,TabbedQuestionBrowser) {
    11         return declare('rft.pages.questions',[_Page],{
    12             constructor: function() {
    13                 this.inherited(arguments);
    14             },
    15             onVisit: function() {
    16                 this.questionBrowser = new TabbedQuestionBrowser({
    17                     region: 'center',
    18                     'class': 'blue',
    19                     itemActions: {
    20                         'Edit': {
    21                             callback: lang.hitch(this,"onEditQuestion"),
    22                                icon: 'Edit',
    23                                description: 'Edit question'
    24                         }
     6    '../app/Controller',
     7    '../store',
     8    '../app/Page',
     9    '../ui/TabbedQuestionBrowser',
     10    'dojo/text!./questions.html'
     11],function(declare,Deferred,event,lang,Controller,store,Page,TabbedQuestionBrowser,template) {
     12    return declare([Page],{
     13        templateString: template,
     14        startup: function() {
     15            if ( this._started ) { return; }
     16            this.inherited(arguments);
     17            this.questionBrowser = new TabbedQuestionBrowser({
     18                region: 'center',
     19                'class': 'blue',
     20                itemActions: {
     21                    'Edit': {
     22                        callback: lang.hitch(this,"onEditQuestion"),
     23                           icon: 'Edit',
     24                           description: 'Edit question'
    2525                    }
    26                 },this.questionBrowser);
    27                 this.questionBrowser.startup();
    28             },
    29             _refresh: function() {
    30                 Deferred.when(store.query('_design/default/_view/by_type',{key: 'Question'}))
    31                 .then(lang.hitch(this,function(items){
    32                     this._list.setItems(items);
    33                 }));
    34             },
    35             onNewQuestion: function() {
    36                 Deferred.when(store.add({type:'Question'}))
    37                 .then(lang.hitch(this,function(question){
    38                     this.onEditQuestion(question);
    39                 }));
    40             },
    41             onEditQuestion: function(question) {
    42                 content.goTo("question", {uid: question._id});
    43             }
    44         });
     26                }
     27            },this.questionBrowser);
     28            this.questionBrowser.startup();
     29        },
     30        _refresh: function() {
     31            Deferred.when(store.query('_design/default/_view/by_type',{key: 'Question'}))
     32            .then(lang.hitch(this,function(items){
     33                this._list.setItems(items);
     34            }));
     35        },
     36        onNewQuestion: function() {
     37            Deferred.when(store.add({type:'Question'}))
     38            .then(lang.hitch(this,function(question){
     39                this.onEditQuestion(question);
     40            }));
     41        },
     42        onEditQuestion: function(question) {
     43            Controller.go("/question/"+question._id);
     44        }
     45    });
    4546});
  • Dev/branches/rest-dojo-ui/client/rft/pages/session.html

    r384 r407  
    1 <div data-dojo-type="rft.pages.session">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
    3         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    4             <h2>
    5                 <span class="rftIcon rftIconSurvey"></span>
    6                 <span data-rft-attach-point="titleNode" class="headerText">Untitled</span><span class="headerText"> [editing]</span>
    7             </h2>
    8         </div>
    9         <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'">
    10             <div data-dojo-type="dijit.layout.TabContainer" class="green" data-dojo-props="tabPosition:'left-h',region:'center'">
    11                 <div data-dojo-type="dijit.layout.ContentPane" title="Properties">
    12                     <div data-dojo-type="dijit.form.Form" data-rft-attach-point="propertiesForm" data-rft-attach-event="onSubmit:onSave">
     1<div>
     2    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     3        <h2>
     4            <span class="rftIcon rftIconSurvey"></span>
     5            <span data-dojo-attach-point="titleNode" class="headerText">Untitled</span><span class="headerText"> [editing]</span>
     6        </h2>
     7    </div>
     8    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'center'">
     9        <div data-dojo-type="dijit/layout/TabContainer" class="green" data-dojo-props="tabPosition:'left-h',region:'center'">
     10            <div data-dojo-type="dijit/layout/ContentPane" title="Properties">
     11                <div data-dojo-type="dijit/form/Form" data-dojo-attach-point="propertiesForm" data-dojo-attach-event="onSubmit:onSave">
    1312
    14                         <h3>Basic</h3>
    15                         <fieldset class="align">
    16                             <label for="title">Title</label>
    17                             <input type="text" name="title" data-dojo-type="dijit.form.TextBox" data-dojo-props="placeHolder: 'Enter title here'" />
    18                             <br/>
    19                             <label for="description">Description</label>
    20                             <textarea name="description" rows="3" cols="54" data-dojo-type="dijit.form.SimpleTextarea" data-dojo-props="selectOnClick: true, placeHolder: 'Description shown in tooltips'"></textarea>
    21                             <br/>
    22                             <label for="plannedDate">Planned date</label>
    23                             <input type="text" name="plannedDate" data-dojo-type="dijit.form.DateTextBox" required="required" />
    24                         </fieldset>
     13                    <h3>Basic</h3>
     14                    <fieldset class="align">
     15                        <label for="title">Title</label>
     16                        <input type="text" name="title" data-dojo-type="dijit/form/TextBox" data-dojo-props="placeHolder: 'Enter title here'" />
     17                        <br/>
     18                        <label for="description">Description</label>
     19                        <textarea name="description" rows="3" cols="54" data-dojo-type="dijit/form/SimpleTextarea" data-dojo-props="selectOnClick: true, placeHolder: 'Description shown in tooltips'"></textarea>
     20                        <br/>
     21                        <label for="plannedDate">Planned date</label>
     22                        <input type="text" name="plannedDate" data-dojo-type="dijit/form/DateTextBox" required="required" />
     23                    </fieldset>
    2524
    26                         <h3>Accounts</h3>
    27                         <fieldset class="align">
    28                             <label for="accountSelector">Add new</label>
    29                             <select data-rft-attach-point="accountSelector"></select>
    30                             <button data-rft-attach-point="btnInvite" data-dojo-type="dijit.form.Button" data-rft-attach-event="onClick:onInvite" data-dojo-props="baseClass: 'rftBlockButton', class: 'green', iconClass: 'rftIcon rftIconPlus'">Invite</button>
    31                             <br/><br/>
    32                            
    33                             <div data-rft-attach-point="accountListNode" class="rftAccountListView">
    34                             </div>
    35                         </fieldset>
     25                    <h3>Accounts</h3>
     26                    <fieldset class="align">
     27                        <label for="accountSelector">Add new</label>
     28                        <select data-dojo-attach-point="accountSelector"></select>
     29                        <button data-dojo-attach-point="btnInvite" data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onInvite" data-dojo-props="baseClass: 'rftBlockButton', class: 'green', iconClass: 'rftIcon rftIconPlus'">Invite</button>
     30                        <br/><br/>
     31                       
     32                        <div data-dojo-attach-point="accountListNode" class="rftAccountListView">
     33                        </div>
     34                    </fieldset>
    3635
    37                         <button data-dojo-type="dijit.form.Button" data-rft-attach-event="onClick:onDiscard" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'">Discard changes</button>
    38                         <button data-dojo-type="dijit.form.Button" data-rft-attach-event="onClick:onSave" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'">Save changes</button>
    39 
    40                     </div>
     36                    <button data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onDiscard" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'">Discard changes</button>
     37                    <button data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onSave" data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'">Save changes</button>
    4138
    4239                </div>
    43                 <div data-dojo-type="dijit.layout.ContentPane" title="Design">
    44                     <div class="rftSessionObject green">
    45                         <div class="rftIcon rftIconSurvey"></div>
    46                         <label>Survey name</label>
    47                     </div>
    48                     <div class="rftSessionObject green">
    49                         <div class="rftIcon rftIconSurvey"></div>
    50                         <label>Survey name, this one is really long.</label>
    51                     </div>
    5240
     41            </div>
     42            <div data-dojo-type="dijit/layout/ContentPane" title="Design">
     43                <div class="rftSessionObject green">
     44                    <div class="rftIcon rftIconSurvey"></div>
     45                    <label>Survey name</label>
    5346                </div>
     47                <div class="rftSessionObject green">
     48                    <div class="rftIcon rftIconSurvey"></div>
     49                    <label>Survey name, this one is really long.</label>
     50                </div>
     51
    5452            </div>
    5553        </div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/session.js

    r389 r407  
    55    'dojo/_base/event',
    66    'dojo/_base/Deferred',
    7     '../content',
     7    '../app/Controller',
    88    '../store',
    99    '../elastic/ElasticSearchFilteringSelect',
    1010    '../elastic/ElasticReadStore',
    11     '../ui/_Page',
    12     '../ui/lists/AccountListView'
    13     ],
    14     function(array,declare,lang,event,Deferred,ElasticSearchFilteringSelect,ElasticReadStore,store,_Page,content,AccountListView){
    15         return declare('rft.pages.session',[_Page],{
    16             session: null,
    17             _accountList: null,
    18             _select: null,
    19             onVisit: function() {
    20                 if ( this.pageArgs.uid ) {
    21                     Deferred.when(store.get(this.pageArgs.uid))
    22                     .then(lang.hitch(this,function(obj){
    23                         this.session = obj;
    24                         this._setupAccountList();
    25                         this._refresh();
    26                     }));
    27                     this._setupAutoComplete();
    28                 } else {
    29                     throw "No valid uid or session passed!";
    30                 }
    31             },
    32             _refresh: function() {
    33                 this.titleNode.innerHTML = this.session.title || '';
    34                 this.propertiesForm.set('value',this.session);
    35             },
    36             onInvite: function() {
    37                 this._addAccount(this._select.item.i);
    38                 this._select.reset();
    39             },
    40             onSave: function(evt) {
    41                 lang.mixin(this.session,this.propertiesForm.get('value'));
    42                 this.session.accounts = array.map(this._accountList.getItems(),function(item){
    43                     return store.getIdentity(item);
    44                 });
    45                 store.put(this.session)
    46                 .then(function(){
    47                     content.goTo('sessions');
    48                 });
    49                 event.stop(evt);
    50                 return false;
    51             },
    52             onDiscard: function(evt) {
    53                 this.propertiesForm.reset();
    54                 event.stop(evt);
    55                 content.goTo('sessions');
    56                 return false;
    57             },
    58             _addAccount: function(item) {
    59                 this._accountList.insertItem(item);
    60             },
    61             _setupAccountList: function() {
    62                 this._accountList = new AccountListView().placeAt(this.accountListNode);
    63                 this._accountList.startup();
    64                 for (var account in this.session.accounts) {
    65                     this._accountList.insertItem(this.session.accounts[account]);
    66                 }
    67             },
    68             _setupAutoComplete: function() {
    69                 var accountStore = new ElasticReadStore({
    70                     url: "http://localhost:9200/rft/_search",
    71                     requestMethod: "POST"
    72                 });
    73                 this._select = new ElasticSearchFilteringSelect({
    74                     store: accountStore,
    75                     autoComplete: false,
    76                     required: false,
    77                     labelType: "text",
    78                     placeHolder: "Enter email address here...",
    79                     pageSize: 10,
    80                     hasDownArrow: false,
    81                     style: "width: 400",
    82                     searchAttr: "title"
    83                 }, this.accountSelector);
    84                 this._select.startup();
     11    '../app/Page',
     12    '../ui/lists/AccountListView',
     13    'dojo/text!./session.html'
     14],function(array,declare,lang,event,Deferred,ElasticSearchFilteringSelect,ElasticReadStore,store,Page,Controller,AccountListView,template){
     15    return declare([Page],{
     16        templateString: template,
     17        session: null,
     18        _accountList: null,
     19        _select: null,
     20        startup: function() {
     21            if ( this._started ) { return; }
     22            this.inherited(arguments);
     23            if ( this.sessionId ) {
     24                Deferred.when(store.get(this.sessionId))
     25                .then(lang.hitch(this,function(obj){
     26                    this.session = obj;
     27                    this._setupAccountList();
     28                    this._refresh();
     29                }));
     30                this._setupAutoComplete();
     31            } else {
     32                throw "No valid uid or session passed!";
    8533            }
     34        },
     35        _refresh: function() {
     36            this.titleNode.innerHTML = this.session.title || '';
     37            this.propertiesForm.set('value',this.session);
     38        },
     39        onInvite: function() {
     40            this._addAccount(this._select.item.i);
     41            this._select.reset();
     42        },
     43        onSave: function(evt) {
     44            lang.mixin(this.session,this.propertiesForm.get('value'));
     45            this.session.accounts = array.map(this._accountList.getItems(),function(item){
     46                return store.getIdentity(item);
     47            });
     48            store.put(this.session)
     49            .then(function(){
     50                Controller.go('/sessions');
     51            });
     52            event.stop(evt);
     53            return false;
     54        },
     55        onDiscard: function(evt) {
     56            this.propertiesForm.reset();
     57            event.stop(evt);
     58            Controller.go('/sessions');
     59            return false;
     60        },
     61        _addAccount: function(item) {
     62            this._accountList.insertItem(item);
     63        },
     64        _setupAccountList: function() {
     65            this._accountList = new AccountListView().placeAt(this.accountListNode);
     66            this._accountList.startup();
     67            for (var account in this.session.accounts) {
     68                this._accountList.insertItem(this.session.accounts[account]);
     69            }
     70        },
     71        _setupAutoComplete: function() {
     72            var accountStore = new ElasticReadStore({
     73                url: "http://localhost:9200/rft/_search",
     74                requestMethod: "POST"
     75            });
     76            this._select = new ElasticSearchFilteringSelect({
     77                store: accountStore,
     78                autoComplete: false,
     79                required: false,
     80                labelType: "text",
     81                placeHolder: "Enter email address here...",
     82                pageSize: 10,
     83                hasDownArrow: false,
     84                style: "width: 400",
     85                searchAttr: "title"
     86            }, this.accountSelector);
     87            this._select.startup();
     88        }
    8689
    8790
    88         });
    8991    });
     92});
    9093
  • Dev/branches/rest-dojo-ui/client/rft/pages/sessions.html

    r359 r407  
    1 <div data-dojo-type="rft.pages.sessions">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
    3         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    4             <h2>
    5                 <span class="rftIcon rftIconSession"></span>
    6                 <span class="headerText">Sessions</span>
    7             </h2>
    8         </div>
    9         <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'">
    10             <div data-rft-attach-point="tabContainer" data-dojo-type="dijit.layout.TabContainer" class="green" data-dojo-props="tabPosition:'left-h',region:'center'">
    11                 <div data-dojo-type="dijit.layout.BorderContainer" title="Templates" data-rft-attach-point="templatesTab">
    12                     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'center'" data-rft-attach-point="containerTemplates">
    13                     </div>
    14                     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'bottom'" style="height: 40px;">
    15                         <div data-dojo-type="dijit.form.Button" data-dojo-props="region: 'bottom', baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconSessionTemplate'" data-rft-attach-event="onClick:onAddSessionTemplate">Create new template</div>
    16                     </div>
     1<div>
     2    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     3        <h2>
     4            <span class="rftIcon rftIconSession"></span>
     5            <span class="headerText">Sessions</span>
     6        </h2>
     7    </div>
     8    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'center'">
     9        <div data-dojo-attach-point="tabContainer" data-dojo-type="dijit/layout/TabContainer" class="green" data-dojo-props="tabPosition:'left-h',region:'center'">
     10            <div data-dojo-type="dijit/layout/BorderContainer" title="Templates" data-dojo-attach-point="templatesTab">
     11                <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'center'" data-dojo-attach-point="containerTemplates">
    1712                </div>
    18                 <div data-dojo-type="dijit.layout.ContentPane" title="Sessions" data-rft-attach-point="sessionsTab">
    19                     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'center'" data-rft-attach-point="containerSessions">
    20                     </div>
    21                     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'bottom'" style="height: 40px;">
    22                         <!-- Buttons? -->
    23                     </div>
     13                <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'bottom'" style="height: 40px;">
     14                    <div data-dojo-type="dijit/form/Button" data-dojo-props="region: 'bottom', baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconSessionTemplate'" data-dojo-attach-event="onClick:onAddSessionTemplate">Create new template</div>
     15                </div>
     16            </div>
     17            <div data-dojo-type="dijit/layout/ContentPane" title="Sessions" data-dojo-attach-point="sessionsTab">
     18                <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'center'" data-dojo-attach-point="containerSessions">
     19                </div>
     20                <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'bottom'" style="height: 40px;">
     21                    <!-- Buttons? -->
    2422                </div>
    2523            </div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/sessions.js

    r384 r407  
    33    'dojo/_base/lang',
    44    'dojo/date/stamp',
    5     'rft/store',
    6     'rft/content',
    7     'rft/ui/_Page',
    8     'rft/ui/ObjectBox'],
    9     function(declare,lang,dateStamp,store,content,_Page,ObjectBox){
    10         return declare('rft.pages.sessions',[_Page],{
    11             templateActions: null,
    12             sessionActions: null,
    13             onVisit: function() {
    14                 this.templateActions = {
    15                     "Edit": function(obj){
    16                         content.goTo('session',{uid:store.getIdentity(obj)});
    17                     },
    18                     "Delete": lang.hitch(this,function(obj){
    19                         store.remove(store.getIdentity(obj),store.getRevision(obj))
    20                         .then(lang.hitch(this,function(){
    21                             this._refresh();
    22                         }));
    23                     }),
    24                     "Publish": lang.hitch(this,this._publishSession)
    25                 };
    26                 this.sessionActions = {
    27                     "Facilitate": function(obj){
    28                         content.goTo('run',{uid:store.getIdentity(obj)});
    29                     },
    30                     "Delete": lang.hitch(this,function(obj){
    31                         store.remove(store.getIdentity(obj),store.getRevision(obj))
    32                         .then(lang.hitch(this,function(){
    33                             this._refresh();
    34                         }));
    35                     })
    36                 };
     5    '../store',
     6    '../app/Controller',
     7    '../app/Page',
     8    '../ui/ObjectBox',
     9    'dojo/text!./sessions.html'
     10],function(declare,lang,dateStamp,store,Controller,Page,ObjectBox,template){
     11    return declare([Page],{
     12        templateString: template,
     13        templateActions: null,
     14        sessionActions: null,
     15        startup: function() {
     16            if ( this._started ) { return; }
     17            this.inherited(arguments);
     18            this.templateActions = {
     19                "Edit": function(obj){
     20                    Controller.go('/session/'+store.getIdentity(obj));
     21                },
     22                "Delete": lang.hitch(this,function(obj){
     23                    store.remove(store.getIdentity(obj),store.getRevision(obj))
     24                    .then(lang.hitch(this,function(){
     25                        this._refresh();
     26                    }));
     27                }),
     28                "Publish": lang.hitch(this,this._publishSession)
     29            };
     30            this.sessionActions = {
     31                "Facilitate": function(obj){
     32                    Controller.go('run',{uid:store.getIdentity(obj)});
     33                },
     34                "Delete": lang.hitch(this,function(obj){
     35                    store.remove(store.getIdentity(obj),store.getRevision(obj))
     36                    .then(lang.hitch(this,function(){
     37                        this._refresh();
     38                    }));
     39                })
     40            };
     41            this._refresh();
     42        },
     43        _refresh: function() {
     44            this.containerTemplates.set('content','');
     45            this.containerSessions.set('content','');
     46            this._refreshByType('SessionTemplate',this.containerTemplates.domNode,this.templateActions);
     47            this._refreshByType('SessionInstance',this.containerSessions.domNode,this.sessionActions);
     48        },
     49        _refreshByType: function(type,container,actions) {
     50            store.query("_design/default/_view/by_type",{key:type})
     51            .forEach(lang.hitch(this,function(obj){
     52                var widget = new ObjectBox({
     53                    actions: actions
     54                }).placeAt(container, "last");
     55                widget.startup();
     56                widget.set('value',obj);
     57            }));
     58        },
     59        onAddSessionTemplate: function(){
     60            store.put({
     61                type: 'SessionTemplate'
     62            })
     63            .then(lang.hitch(this,function(obj){
     64                Controller.go('/session/'+store.getIdentity(obj));
     65            }));
     66        },
     67        _publishSession: function(sessionTemplate) {
     68            var session = lang.clone(sessionTemplate);
     69            delete session[store.idProperty];
     70            delete session[store.revProperty];
     71            session.type = "SessionInstance";
     72            session.publishedDate = dateStamp.toISOString(new Date(),{zulu: true});
     73            session.creator = "Igor Mayer";
     74            store.add(session)
     75            .then(lang.hitch(this,function(){
    3776                this._refresh();
    38             },
    39             _refresh: function() {
    40                 this.containerTemplates.set('content','');
    41                 this.containerSessions.set('content','');
    42                 this._refreshByType('SessionTemplate',this.containerTemplates.domNode,this.templateActions);
    43                 this._refreshByType('SessionInstance',this.containerSessions.domNode,this.sessionActions);
    44             },
    45             _refreshByType: function(type,container,actions) {
    46                 store.query("_design/default/_view/by_type",{key:type})
    47                 .forEach(lang.hitch(this,function(obj){
    48                     var widget = new ObjectBox({
    49                         actions: actions
    50                     }).placeAt(container, "last");
    51                     widget.startup();
    52                     widget.set('value',obj);
    53                 }));
    54             },
    55             onAddSessionTemplate: function(){
    56                 store.put({
    57                     type: 'SessionTemplate'
    58                 })
    59                 .then(lang.hitch(this,function(obj){
    60                     content.goTo('session',{uid:store.getIdentity(obj)});
    61                 }));
    62             },
    63             _publishSession: function(sessionTemplate) {
    64                 var session = lang.clone(sessionTemplate);
    65                 delete session[store.idProperty];
    66                 delete session[store.revProperty];
    67                 session.type = "SessionInstance";
    68                 session.publishedDate = dateStamp.toISOString(new Date(),{zulu: true});
    69                 session.creator = "Igor Mayer";
    70                 store.add(session)
    71                 .then(lang.hitch(this,function(){
    72                     this._refresh();
    73                     this.tabContainer.selectChild(this.sessionsTab);
    74                 }));
    75             }
    76         });
     77                this.tabContainer.selectChild(this.sessionsTab);
     78            }));
     79        }
    7780    });
    78 
     81});
  • Dev/branches/rest-dojo-ui/client/rft/pages/survey.html

    r382 r407  
    1 <div data-dojo-type="rft.pages.survey" class="blue">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
     1<div class="blue">
    32
    4         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    5             <h2>
    6                 <span class="rftIcon rftIconSurvey"></span>
    7                 <span class="headerText" data-rft-attach-point="titleNode">Survey Editor</span>
    8             </h2>
     3    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     4        <h2>
     5            <span class="rftIcon rftIconSurvey"></span>
     6            <span class="headerText" data-dojo-attach-point="titleNode">Survey Editor</span>
     7        </h2>
     8    </div>
     9   
     10    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'center'">
     11        <div data-dojo-attach-point="questionBrowser"></div>
     12    </div>
     13   
     14    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'right'" style="width: 300px">
     15        <div data-dojo-attach-point="surveyListViewNode" class="rftSurveyListView">
    916        </div>
    10        
    11         <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'">
    12             <div data-rft-attach-point="questionBrowser"></div>
     17
     18        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'bottom'">
     19            <button data-dojo-type="dijit/form/Button"
     20                    data-dojo-attach-event="onClick:_onShowProperties"
     21                    data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconProperties'">
     22                Properties</button>
     23            <button data-dojo-type="dijit/form/Button"
     24                    data-dojo-attach-event="onClick:_onSave"
     25                    data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'">
     26                Save Changes</button>
     27            <button data-dojo-type="dijit/form/Button"
     28                    data-dojo-attach-event="onClick:_onDiscard"
     29                    data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'">
     30                Discard changes</button>
     31            <button data-dojo-type="dijit/form/Button"
     32                    data-dojo-attach-event="onClick:_onShowPreview"
     33                    data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconPreview'">
     34                Preview</button>
    1335        </div>
    14        
    15         <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'right'" style="width: 300px">
    16             <div data-rft-attach-point="surveyListViewNode" class="rftSurveyListView">
    17             </div>
    1836
    19             <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'bottom'">
    20                 <button data-dojo-type="dijit.form.Button"
    21                         data-rft-attach-event="onClick:_onShowProperties"
    22                         data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconProperties'">
    23                     Properties</button>
    24                 <button data-dojo-type="dijit.form.Button"
    25                         data-rft-attach-event="onClick:_onSave"
    26                         data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconAccept'">
    27                     Save Changes</button>
    28                 <button data-dojo-type="dijit.form.Button"
    29                         data-rft-attach-event="onClick:_onDiscard"
    30                         data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconCancel'">
    31                     Discard changes</button>
    32                 <button data-dojo-type="dijit.form.Button"
    33                         data-rft-attach-event="onClick:_onShowPreview"
    34                         data-dojo-props="baseClass: 'rftLargeButton', iconClass: 'rftIcon rftIconPreview'">
    35                     Preview</button>
    36             </div>
    37         </div>
    38     </div>
     37    <div data-dojo-type="dijit/Dialog"
     38         title="Survey properties"
     39         data-dojo-attach-point="propertiesDialog"
     40         data-dojo-attach-event="onSubmit:_onPropertiesOk">
    3941
    40     <div data-dojo-type="dijit.Dialog"
    41          title="Survey properties"
    42          data-rft-attach-point="propertiesDialog"
    43          data-rft-attach-event="onSubmit:_onPropertiesOk">
    44 
    45         <form data-dojo-type="dijit.form.Form"
    46               data-rft-attach-point="propertiesForm">
     42        <form data-dojo-type="dijit/form/Form"
     43              data-dojo-attach-point="propertiesForm">
    4744            <label for="title">Title</label>
    48             <input data-dojo-type="dijit.form.TextBox" name="title"/><br/>
     45            <input data-dojo-type="dijit/form/TextBox" name="title"/><br/>
    4946            <label for="description">Description</label>
    50             <input data-dojo-type="dijit.form.Textarea" name="description"/><br/>
     47            <input data-dojo-type="dijit/form/Textarea" name="description"/><br/>
    5148        </form>
    5249           
    5350        <div>
    54             <button data-dojo-type="dijit.form.Button"
     51            <button data-dojo-type="dijit/form/Button"
    5552                    type="submit"
    56                     data-rft-attach-event="onClick:_onPropertiesOk">
     53                    data-dojo-attach-event="onClick:_onPropertiesOk">
    5754                OK</button>
    58             <button data-dojo-type="dijit.form.Button"
     55            <button data-dojo-type="dijit/form/Button"
    5956                    type="button"
    60                     data-rft-attach-event="onClick:_onPropertiesCancel">
     57                    data-dojo-attach-event="onClick:_onPropertiesCancel">
    6158                Cancel</button>
    6259        </div>
     60
    6361    </div>
    6462
  • Dev/branches/rest-dojo-ui/client/rft/pages/survey.js

    r402 r407  
    55    'dojo/_base/event',
    66    'dojo/_base/lang',
    7     '../content',
     7    '../app/Controller',
    88    '../store',
    9     '../ui/_Page',
     9    '../app/Page',
    1010    '../ui/lists/QuestionListView',
    11     '../ui/TabbedQuestionBrowser'
    12     ],
    13     function(array,declare,Deferred,event,lang,content,store,_Page,
    14              QuestionListView,TabbedQuestionBrowser){
    15         return declare('rft.pages.survey',[_Page],{
    16             survey: null,
    17             questionList: null,
    18             _dataMap: null,
    19             constructor: function(){
    20                 this._dataMap = {};
    21             },
    22             onVisit: function() {
    23                 if ( this.pageArgs.uid ) {
    24                     this._setupQuestionBrowser();
    25                     this._setupListView();
    26                     Deferred.when(store.get(this.pageArgs.uid))
    27                     .then(lang.hitch(this,function(obj){
    28                         this.survey = obj;
    29                         store.query(null,{keys:this.survey.questions,include_docs:true})
    30                         .forEach(lang.hitch(this.questionList,'appendItem'));
    31                         this.refresh();
    32                     }));
    33                 } else {
    34                     throw "No valid uid or survey passed!";
     11    '../ui/TabbedQuestionBrowser',
     12    'dojo/text!./survey.html'
     13],function(array,declare,Deferred,event,lang,Controller,store,Page,
     14         QuestionListView,TabbedQuestionBrowser,template){
     15    return declare([Page],{
     16        templateString: template,
     17        survey: null,
     18        questionList: null,
     19        _dataMap: null,
     20        constructor: function(){
     21            this._dataMap = {};
     22        },
     23        startup: function() {
     24            if ( this._started ) { return; }
     25            this.inherited(arguments);
     26            if ( this.surveyId ) {
     27                this._setupQuestionBrowser();
     28                this._setupListView();
     29                Deferred.when(store.get(this.surveyId))
     30                .then(lang.hitch(this,function(obj){
     31                    this.survey = obj;
     32                    store.query(null,{keys:this.survey.questions,include_docs:true})
     33                    .forEach(lang.hitch(this.questionList,'appendItem'));
     34                    this.refresh();
     35                }));
     36            } else {
     37                throw "No valid uid or survey passed!";
     38            }
     39        },
     40        _setupQuestionBrowser: function() {
     41            this.questionBrowser = new TabbedQuestionBrowser({
     42                region: 'center',
     43                'class': 'blue',
     44                selectedActions: {
     45                    "Include": {
     46                        callback: lang.hitch(this,this._includeQuestion),
     47                        icon: "Accept",
     48                        description: "Include in survey"
     49                    }
     50                },
     51                itemActions: {
     52                    "Info": {
     53                        callback: function(item){ item.description && alert(item.description); },
     54                        icon: "Inspect",
     55                        description: "Show item description"
     56                    }
    3557                }
    36             },
    37             _setupQuestionBrowser: function() {
    38                 this.questionBrowser = new TabbedQuestionBrowser({
    39                     region: 'center',
    40                     'class': 'blue',
    41                     selectedActions: {
    42                         "Include": {
    43                             callback: lang.hitch(this,this._includeQuestion),
    44                             icon: "Accept",
    45                             description: "Include in survey"
    46                         }
    47                     },
    48                     itemActions: {
    49                         "Info": {
    50                             callback: function(item){ item.description && alert(item.description); },
    51                             icon: "Inspect",
    52                             description: "Show item description"
    53                         }
    54                     }
    55                 },this.questionBrowser);
    56                 this.questionBrowser.startup();
    57             },
    58             _includeQuestion: function(question) {
    59                 this.questionList.insertItem(question);
    60             },
    61             _setupListView: function() {
    62                 this.questionList = new QuestionListView({
    63                     region: 'center'
    64                 },this.surveyListViewNode);
    65                 this.questionList.startup();
    66             },
    67             refresh: function() {
    68                 this.titleNode.innerHTML = this.survey.title || "(set title in properties)";
    69                 this.propertiesForm.set('value',this.survey);
    70             },
    71             _onShowProperties: function(evt) {
    72                 this.propertiesDialog.show();
    73             },
    74             _onPropertiesOk: function(evt) {
    75                 this.propertiesDialog.hide();
    76                 lang.mixin(this.survey, this.propertiesForm.get('value'));
    77                 this.refresh();
    78                 event.stop(evt);
    79                 return false;
    80             },
    81             _onPropertiesCancel: function(evt) {
    82                 this.propertiesDialog.hide();
    83                 this.propertiesForm.set('value',this.survey);
    84                 event.stop(evt);
    85                 return false;
    86             },
    87             _onSave: function(evt) {
    88                 this.survey.questions = array.map(this.questionList.getItems(),function(item){
    89                     return store.getIdentity(item);
    90                 });
    91                 store.put(this.survey)
    92                 .then(function() {
    93                     content.goTo('surveys');
    94                 });
    95                 event.stop(evt);
    96                 return false;
    97             },
    98             _onDiscard: function(evt) {
    99             },
    100             _onShowPreview: function() {
    101                 content.goTo('viewSurvey', {uid: store.getIdentity(this.survey)});
    102             }
    103         });
     58            },this.questionBrowser);
     59            this.questionBrowser.startup();
     60        },
     61        _includeQuestion: function(question) {
     62            this.questionList.insertItem(question);
     63        },
     64        _setupListView: function() {
     65            this.questionList = new QuestionListView({
     66                region: 'center'
     67            },this.surveyListViewNode);
     68            this.questionList.startup();
     69        },
     70        refresh: function() {
     71            this.titleNode.innerHTML = this.survey.title || "(set title in properties)";
     72            this.propertiesForm.set('value',this.survey);
     73        },
     74        _onShowProperties: function(evt) {
     75            this.propertiesDialog.show();
     76        },
     77        _onPropertiesOk: function(evt) {
     78            this.propertiesDialog.hide();
     79            lang.mixin(this.survey, this.propertiesForm.get('value'));
     80            this.refresh();
     81            event.stop(evt);
     82            return false;
     83        },
     84        _onPropertiesCancel: function(evt) {
     85            this.propertiesDialog.hide();
     86            this.propertiesForm.set('value',this.survey);
     87            event.stop(evt);
     88            return false;
     89        },
     90        _onSave: function(evt) {
     91            this.survey.questions = array.map(this.questionList.getItems(),function(item){
     92                return store.getIdentity(item);
     93            });
     94            store.put(this.survey)
     95            .then(function() {
     96                Controller.go('/surveys');
     97            });
     98            event.stop(evt);
     99            return false;
     100        },
     101        _onDiscard: function(evt) {
     102        },
     103        _onShowPreview: function() {
     104            Controller.go('/viewSurvey/'+store.getIdentity(this.survey));
     105        }
     106    });
    104107});
    105108
  • Dev/branches/rest-dojo-ui/client/rft/pages/surveys.html

    r358 r407  
    1 <div data-dojo-type="rft.pages.surveys">
    2         <button data-dojo-type="dijit.form.Button" class="blue" data-dojo-props="disabled: true, baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconEdit'" data-rft-attach-point="btnEdit">Edit</button>
    3         <button data-dojo-type="dijit.form.Button" class="blue" data-dojo-props="baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconPlus'" data-rft-attach-point="btnNew">New</button>
    4         <div data-dojo-type="dojox.grid.DataGrid" data-dojo-props="autoWidth:true,autoHeight:true,structure:[{name:'Title',field:'title'}]"
    5         data-rft-attach-point="grid"></div>
     1<div>
     2    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'center'">
     3        <button data-dojo-type="dijit/form/Button" class="blue" data-dojo-props="disabled: true, baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconEdit'" data-dojo-attach-point="btnEdit">Edit</button>
     4        <button data-dojo-type="dijit/form/Button" class="blue" data-dojo-props="baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconPlus'" data-dojo-attach-point="btnNew">New</button>
     5        <div data-dojo-type="dojox/grid/DataGrid" data-dojo-props="autoWidth:true,autoHeight:true,structure:[{name:'Title',field:'title'}]" data-dojo-attach-point="grid"></div>
     6    </div>
    67</div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/surveys.js

    r358 r407  
    1 define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/Deferred','dojo/data/ObjectStore','rft/auth','rft/store','rft/content','rft/ui/_Page'],
    2     function(declare,lang,Deferred,ObjectStore,auth,store,content,_Page){
    3         return declare('rft.pages.surveys',[_Page],{
    4             selectedObject: null,
    5             onVisit: function() {
    6                 this.grid.setStore(
    7                     ObjectStore({objectStore: store}),
    8                     "_design/default/_view/by_type",{key:'Survey'});
     1define([
     2    'dojo/_base/declare',
     3    'dojo/_base/lang',
     4    'dojo/_base/Deferred',
     5    'dojo/data/ObjectStore',
     6    '../auth',
     7    '../store',
     8    '../app/Controller',
     9    '../app/Page',
     10    'dojo/text!./surveys.html'
     11],function(declare,lang,Deferred,ObjectStore,auth,store,Controller,Page,template){
     12    return declare([Page],{
     13        templateString: template,
     14        selectedObject: null,
     15        startup: function() {
     16            if ( this._started ) { return; }
     17            this.inherited(arguments);
     18            this.grid.setStore(
     19                ObjectStore({objectStore: store}),
     20                "_design/default/_view/by_type",{key:'Survey'});
     21           
     22            this.grid.on('rowclick',lang.hitch(this,function(evt){
     23                this.selectedObject = evt.grid.getItem(evt.rowIndex);
     24                this.btnEdit.set('disabled',!this.selectedObject);
     25            }));
     26
     27            this.grid.on('rowdblclick',lang.hitch(this,function(evt){
     28                var obj = evt.grid.getItem(evt.rowIndex);
     29                Controller.go('/survey/'+store.getIdentity(obj));
     30            }));
     31           
     32            this.btnNew.on('click',lang.hitch(this,function(){
     33                Deferred.when( store.add({type:'Survey',creator:auth.getUser()}) )
     34                .then(function(obj) {
     35                    Controller.go('/survey/'+store.getIdentity(obj));
     36                });
     37            }));
     38
     39            this.btnEdit.on('click',lang.hitch(this,function(){
     40                if ( this.selectedObject ) {
     41                    Controller.go('/survey/'+store.getIdentity(this.selectedObject));
     42                }
    943               
    10                 this.grid.on('rowclick',lang.hitch(this,function(evt){
    11                     this.selectedObject = evt.grid.getItem(evt.rowIndex);
    12                     this.btnEdit.set('disabled',!this.selectedObject);
    13                 }));
    14 
    15                 this.grid.on('rowdblclick',lang.hitch(this,function(evt){
    16                     var obj = evt.grid.getItem(evt.rowIndex);
    17                     content.goTo('/survey',{uid:store.getIdentity(obj)});
    18                 }));
    19                
    20                 this.btnNew.on('click',lang.hitch(this,function(){
    21                     Deferred.when( store.add({type:'Survey',creator:auth.getUser()}) )
    22                     .then(function(obj) {
    23                         content.goTo('/survey',{uid:store.getIdentity(obj)});
    24                     });
    25                 }));
    26 
    27                 this.btnEdit.on('click',lang.hitch(this,function(){
    28                     if ( this.selectedObject ) {
    29                         content.goTo('/survey',{uid:store.getIdentity(this.selectedObject)});
    30                     }
    31                    
    32                 }));
    33             }
    34         });
     44            }));
     45        }
     46    });
    3547});
    3648
  • Dev/branches/rest-dojo-ui/client/rft/pages/viewSurvey.html

    r406 r407  
    1 <div data-dojo-type="rft.pages.viewSurvey" class="blue">
    2     <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="height: 500px;">
     1<div class="blue">
    32
    4         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
    5             <h2>
    6                 <span class="rftIcon rftIconSurvey"></span>
    7                 <span class="headerText" data-rft-attach-point="titleNode">Survey</span>
    8             </h2>
    9         </div>
    10        
    11         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'" data-rft-attach-point="questionsPane">
    12             <form data-dojo-type="dijit.form.Form" data-rft-attach-point="questionsForm"
    13                   data-rft-attach-event="onSubmit:_onSubmit"
    14                   style="overflow: auto">
    15                 <div data-rft-attach-point="questionsAnchor"></div>
    16             </form>
    17         </div>
    18        
    19         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'bottom'">
    20             <button data-dojo-type="dijit.form.Button"
    21                     type="submit"
    22                     data-rft-attach-event="onClick:_onSubmit">
    23                 Submit</button>
    24             <button data-dojo-type="dijit.form.Button"
    25                     type="button"
    26                     data-rft-attach-event="onClick:_onCancel">
    27                 Cancel</button>
    28         </div>
     3    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
     4        <h2>
     5            <span class="rftIcon rftIconSurvey"></span>
     6            <span class="headerText" data-dojo-attach-point="titleNode">Survey</span>
     7        </h2>
     8    </div>
     9   
     10    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'" data-dojo-attach-point="questionsPane">
     11        <form data-dojo-type="dijit/form/Form" data-dojo-attach-point="questionsForm"
     12              data-dojo-attach-event="onSubmit:_onSubmit"
     13              style="overflow: auto">
     14            <div data-dojo-attach-point="questionsAnchor"></div>
     15        </form>
     16    </div>
     17   
     18    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom'">
     19        <button data-dojo-type="dijit/form/Button"
     20                type="submit"
     21                data-dojo-attach-event="onClick:_onSubmit">
     22            Submit</button>
     23        <button data-dojo-type="dijit/form/Button"
     24                type="button"
     25                data-dojo-attach-event="onClick:_onCancel">
     26            Cancel</button>
     27    </div>
    2928
    30     </div>
    3129</div>
  • Dev/branches/rest-dojo-ui/client/rft/pages/viewSurvey.js

    r406 r407  
    66    'dojo/_base/lang',
    77    '../store',
    8     '../ui/_Page',
    9     '../ui/content/ContentWidgetFactory'
    10     ],
    11     function(array,declare,Deferred,event,lang,store,_Page,ContentWidgetFactory){
    12         return declare('rft.pages.viewSurvey',[_Page],{
    13             survey: null,
    14             constructor: function(){
    15                 this._dataMap = {};
    16             },
    17             onVisit: function() {
    18                 if ( this.pageArgs.uid ) {
    19                     Deferred.when(store.get(this.pageArgs.uid))
    20                     .then(lang.hitch(this,function(obj){
    21                         var f = new ContentWidgetFactory();
    22                         this.survey = obj;
    23                         store.query(null,{keys:this.survey.questions,include_docs:true})
    24                         .forEach(function(question){
    25                             array.forEach(question.content || [],function(item){
    26                                 var w = f.createViewWidget(item,{
    27                                     name: question.code+'.'+item.code
    28                                 });
    29                                 if ( w !== null ) {
    30                                     w.placeAt(this.questionsAnchor,'before');
    31                                 }
    32                             },this);
     8    '../app/Page',
     9    '../ui/content/ContentWidgetFactory',
     10    'dojo/text!./viewSurvey.html'
     11],function(array,declare,Deferred,event,lang,store,Page,ContentWidgetFactory,template){
     12    return declare([Page],{
     13        templateString: template,
     14        survey: null,
     15        constructor: function(){
     16            this._dataMap = {};
     17        },
     18        startup: function() {
     19            if ( this._started ) { return; }
     20            this.inherited(arguments);
     21            if ( this.surveyId ) {
     22                Deferred.when(store.get(this.surveyId))
     23                .then(lang.hitch(this,function(obj){
     24                    var f = new ContentWidgetFactory();
     25                    this.survey = obj;
     26                    store.query(null,{keys:this.survey.questions,include_docs:true})
     27                    .forEach(function(question){
     28                        array.forEach(question.content || [],function(item){
     29                            var w = f.createViewWidget(item,{
     30                                name: question.code+'.'+item.code
     31                            });
     32                            if ( w !== null ) {
     33                                w.placeAt(this.questionsAnchor,'before');
     34                            }
    3335                        },this);
    34                     }));
    35                 } else {
    36                     throw "No valid uid or survey passed!";
    37                 }
    38             },
    39             _onSubmit: function(evt) {
    40                 var value = this.questionsForm.get('value');
    41                 this.questionsPane.set('content','<pre>'+JSON.stringify(value)+'</pre>');
    42                 event.stop(evt);
    43                 return false;
    44             },
    45             _onCancel: function(evt) {
    46                 event.stop(evt);
    47                 return false;
     36                    },this);
     37                }));
     38            } else {
     39                throw "No valid uid or survey passed!";
    4840            }
    49         });
     41        },
     42        _onSubmit: function(evt) {
     43            var value = this.questionsForm.get('value');
     44            this.questionsPane.set('content','<pre>'+JSON.stringify(value)+'</pre>');
     45            event.stop(evt);
     46            return false;
     47        },
     48        _onCancel: function(evt) {
     49            event.stop(evt);
     50            return false;
     51        }
     52    });
    5053});
    51 
  • Dev/branches/rest-dojo-ui/client/rft/run.js

    r399 r407  
    11require([
    2     'dojo/_base/connect',
    3     'dojo/_base/window',
    4     'dojo/dom',
     2    'dojo/_base/array',
    53    'dojo/parser',
    6     'rft/auth',
    7     'rft/content',
    8     'rft/ui/LoginDialog',
    9     'rft/indexContent',
     4    'rft/app/Controller',
     5    'rft/routes',
    106    'rft/stddeps',
    117    'dojo/domReady!'
    12 ],function(connect,win,dom,parser,auth,content,LoginDialog) {
     8],function(array,parser,controller,routes) {
    139    parser.parse();
    14     content.init();
    15 
    16     var login = new LoginDialog().placeAt(win.body());
    17     login.startup();
    18 
    19     auth.restore()
    20     .then(function(){
    21         content.initial();
    22     },function(){
    23         login.show();
     10    array.forEach(routes,function(route){
     11        controller.register(route);
    2412    });
    25 
    26     connect.connect(dom.byId('loginMenu'),'click',function(){
    27         login.show();
    28     });
    29 
     13    controller.startup();
    3014});
  • Dev/branches/rest-dojo-ui/client/rft/stddeps.js

    r399 r407  
    11define([
    2     // dijit & rft widgets used declaratively in templates and pages
     2    // dijit & rft widgets used declaratively in templates
    33    'dijit/Dialog',
    44    'dijit/DropDownMenu',
     
    3535    'rft/ui/lists/AccountListView',
    3636    'rft/ui/lists/List',
    37     'rft/ui/lists/OrderedList',
    38 
    39     // pages -> load dynamically?
    40     'rft/pages/index',
    41     'rft/pages/questions',
    42     'rft/pages/question',
    43     'rft/pages/session',
    44     'rft/pages/sessions',
    45     'rft/pages/surveys',
    46     'rft/pages/survey',
    47     'rft/pages/viewSurvey'
     37    'rft/ui/lists/OrderedList'
    4838],function(){});
  • Dev/branches/rest-dojo-ui/client/rft/store.js

    r406 r407  
    1010   
    1111    var CouchStore = declare(null, {
    12         /** dojo.Store implementation for CouchDB
     12        /** dojo Store implementation for CouchDB
    1313         *
    1414         * See for details on the REST API, the wiki
  • Dev/branches/rest-dojo-ui/client/rft/ui/Breadcrumbs.js

    r406 r407  
    55    'dojo/dom-class',
    66    'dojo/topic',
    7     'dijit/_WidgetBase'
    8 ], function(declare, baseArray, Button, domClass, topic, _WidgetBase){
    9     return declare('rft.ui.Breadcrumbs', [_WidgetBase], {
     7    'dijit/_WidgetBase',
     8    '../app/Controller'
     9], function(declare, baseArray, Button, domClass, topic, _WidgetBase,Controller){
     10    return declare([_WidgetBase], {
    1011        _crumbs: [],
    1112       
     
    1415        },
    1516        _getIndexOf: function(label) {
    16             dojo.forEach(this._crumbs, function(crumb, index){
    17                 if (crumb.label == label) {
     17            baseArray.forEach(this._crumbs, function(crumb, index){
     18                if (crumb.label === label) {
    1819                    return index;
    1920                }
     
    3132            var removals = this._crumbs.slice(index+1);
    3233            this._crumbs = this._crumbs.slice(0, index+1);
    33             dojo.forEach(removals, function(removal){
     34            baseArray.forEach(removals, function(removal){
    3435                removal.widget.destroyRecursive(false); // boolean "keepDOMnode"
    3536            }, this);
     
    6061                iconClass: "dijitNoIcon",
    6162                onClick: lang.hitch(this, function(){
    62                     rft.api.loadPage(path);  // TODO: fix this call!
     63                    Controller.go(path);  // TODO: fix this call!
    6364                })
    6465            });
    6566        },
    6667        _createBreadcrumbs: function() {
    67             dojo.forEach(this._crumbs, function(crumb, index){
     68            baseArray.forEach(this._crumbs, function(crumb, index){
    6869                if (!crumb.widget) {
    6970                    crumb.widget = this._createBreadcrumb(crumb.label, crumb.path);
  • Dev/branches/rest-dojo-ui/client/rft/ui/LineWithActionsWidget.js

    r406 r407  
    1111    'dojo/text!./templates/LineWithActionsWidget.html'
    1212],function(declare,lang,on,dom,event,domClass,Button,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,templateString){
    13     return declare('rft.ui.LineWithActionsWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
     13    return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
    1414        templateString: templateString,
    1515        baseClass: 'rftLineWithButtons',
  • Dev/branches/rest-dojo-ui/client/rft/ui/MainMenu.js

    r311 r407  
    22    'dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','dojo/text!./templates/MainMenu.html'],
    33    function(declare,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,template){
    4         return declare('rft.ui.MainMenu',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
     4        return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
    55            templateString: template
    66        });
  • Dev/branches/rest-dojo-ui/client/rft/ui/MenuBarLink.js

    r256 r407  
    1 define(['dojo/_base/declare','dijit/MenuBarItem','../content'],
    2 function(declare,MenuBarItem,content){
    3     return declare('rft.ui.MenuBarLink',[MenuBarItem],{
     1define(['dojo/_base/declare','dijit/MenuBarItem','../app/Controller'],
     2function(declare,MenuBarItem,Controller){
     3    return declare([MenuBarItem],{
    44        options:{
    5             pageId: null
     5            path: null
    66        },
    77        onClick: function(){
    8             content.goTo(this.pageId);
     8            this.path && Controller.go(this.path);
    99        }
    1010    });
  • Dev/branches/rest-dojo-ui/client/rft/ui/MenuLink.js

    r367 r407  
    1 define(['dojo/_base/declare','dijit/MenuItem','../content'],
    2 function(declare,MenuItem,content){
    3     return declare('rft.ui.MenuLink',[MenuItem],{
     1define(['dojo/_base/declare','dijit/MenuItem','../app/Controller'],
     2function(declare,MenuItem,Controller){
     3    return declare([MenuItem],{
    44        options:{
    5             pageId: null
     5            path: null
    66        },
    77        onClick: function(){
    8             content.goTo(this.pageId);
     8            this.path && Controller.go(this.path);
    99        }
    1010    });
  • Dev/branches/rest-dojo-ui/client/rft/ui/MultipleChoiceWidget.js

    r288 r407  
    77        _WidgetsInTemplateMixin,_Container,
    88        templateString,RadioButton,CheckBox,TextBox,Button){
    9         return declare('rft.ui.MultipleChoiceWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     9        return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
    1010            templateString: templateString,
    1111            multiple: true,
  • Dev/branches/rest-dojo-ui/client/rft/ui/Notifications.js

    r311 r407  
    11define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/connect','dojox/widget/Toaster'],
    22    function(declare,lang,connect,Toaster){
    3         return declare('rft.ui.Notifications',[Toaster],{
     3        return declare([Toaster],{
    44            positionDirection: "br-up",
    55            duration: 1000,
  • Dev/branches/rest-dojo-ui/client/rft/ui/ObjectBox.js

    r406 r407  
    66    'dijit/_WidgetsInTemplateMixin',
    77    'rft/ui/LineWithActionsWidget',
    8     'dojo/text!./templates/ObjectBox.html',
     8    'dojo/text!./templates/ObjectBox.html'
    99], function(declare, lang, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, LineWithActionsWidget, template){
    10     return declare('rft.ui.ObjectBox', [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
     10    return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
    1111        baseClass: "rftObjectBox",
    1212        templateString: template,
  • Dev/branches/rest-dojo-ui/client/rft/ui/QuestionEditorPreview.js

    r392 r407  
    55    'dijit/registry',
    66    './QuestionEditorPreviewItem',
    7     './lists/OrderedList',
    8     ], function(declare, lang, domConstruct, registry, QuestionEditorPreviewItem, OrderedList) {
    9         return declare("rft.ui.QuestionEditorPreview", [OrderedList], {
    10             baseClass: 'surveyEditorPreview',
    11             type: 'questionContent',
    12             withHandles: true,
     7    './lists/OrderedList'
     8], function(declare, lang, domConstruct, registry, QuestionEditorPreviewItem, OrderedList) {
     9    return declare([OrderedList], {
     10        baseClass: 'surveyEditorPreview',
     11        type: 'questionContent',
     12        withHandles: true,
    1313
    14             _createAvatarNode: function(item) {
    15                 return domConstruct.create("span",{
    16                     innerHTML: item.type || "Dragging!!!"
    17                 });
    18             },
    19             _createListNode: function(item) {
    20                 var previewItem = new QuestionEditorPreviewItem({
    21                     item: item
    22                 });
    23                 previewItem.on('close',lang.hitch(this,'removeItem',item));
    24                 previewItem.startup();
    25                 return previewItem.domNode;
    26             },
    27             getItems: function() {
    28                 return this.source.getAllNodes()
    29                 .map(function(node){
    30                     return registry.byNode(node).get('value');
    31                 },this);
    32             }
    33         });
     14        _createAvatarNode: function(item) {
     15            return domConstruct.create("span",{
     16                innerHTML: item.type || "Dragging!!!"
     17            });
     18        },
     19        _createListNode: function(item) {
     20            var previewItem = new QuestionEditorPreviewItem({
     21                item: item
     22            });
     23            previewItem.on('close',lang.hitch(this,'removeItem',item));
     24            previewItem.startup();
     25            return previewItem.domNode;
     26        },
     27        getItems: function() {
     28            return this.source.getAllNodes()
     29            .map(function(node){
     30                return registry.byNode(node).get('value');
     31            },this);
     32        }
    3433    });
     34});
  • Dev/branches/rest-dojo-ui/client/rft/ui/QuestionEditorPreviewItem.js

    r405 r407  
    44    'dojo/_base/lang',
    55    'dojo/dom-class',
     6    'dojo/dom-geometry',
    67    'dojo/on',
    78    'dijit/_Container',
     
    1011    'dijit/_WidgetsInTemplateMixin',
    1112    './content/ContentWidgetFactory',
    12     'dojo/text!./templates/QuestionEditorPreviewItem.html',
    13     ], function(declare, fx, lang, domClass, on, _Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, ContentWidgetFactory, template) {
    14         return declare("rft.ui.QuestionEditorPreviewItem", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Container], {
    15             version: "full",
    16             templateString: template,
    17             baseClass: "surveyEditorPreviewItem",
    18             previousContentHeight: 200,
    19             item: null,
    20             innerWidget: null,
    21             foldDuration: [250, 250],
    22             animation: null,
    23             _editing: false,
     13    'dojo/text!./templates/QuestionEditorPreviewItem.html'
     14], function(
     15    declare,
     16    fx,
     17    lang,
     18    domClass,
     19    domGeom,
     20    on,
     21    _Container,
     22    _TemplatedMixin,
     23    _WidgetBase,
     24    _WidgetsInTemplateMixin,
     25    ContentWidgetFactory,
     26    template
     27){
     28    return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Container], {
     29        version: "full",
     30        templateString: template,
     31        baseClass: "surveyEditorPreviewItem",
     32        previousContentHeight: 200,
     33        item: null,
     34        innerWidget: null,
     35        foldDuration: [250, 250],
     36        animation: null,
     37        _editing: false,
    2438
    25             startup: function() {
    26                 if ( this._started ){ return; }
    27                 this.inherited(arguments);
    28                 this.foldButtonNode.onClick = lang.hitch(this, this.toggleFold);
    29                 this.removeButtonNode.onClick = lang.hitch(this, "onClose");
    30                 this.editButtonNode.onClick = lang.hitch(this, this.toggleEdit);
    31                 if (this.item) {
    32                     this._showViewWidget();
     39        startup: function() {
     40            if ( this._started ){ return; }
     41            this.inherited(arguments);
     42            this.foldButtonNode.onClick = lang.hitch(this, this.toggleFold);
     43            this.removeButtonNode.onClick = lang.hitch(this, "onClose");
     44            this.editButtonNode.onClick = lang.hitch(this, this.toggleEdit);
     45            if (this.item) {
     46                this._showViewWidget();
     47            } else {
     48                throw "No data supplied to create an innerWidget!";
     49            }
     50        },
     51        _destroyInnerWidget: function() {
     52            if ( this.innerWidget !== null ) {
     53                this.innerWidget.destroyRecursive();
     54            }
     55        },
     56        _showViewWidget: function() {
     57            var factory = new ContentWidgetFactory();
     58            this.innerWidget = factory.createViewWidget( this.item );
     59            if ( this.innerWidget !== null ) {
     60                this.innerWidget.placeAt(this.containerNode);
     61                this.innerWidget.startup();
     62                this.innerWidget.set('readOnly',true);
     63            }
     64            this.titleNode.innerHTML = (this.item.code||"(no code)")+" : "+this.item.type+" [preview]";
     65        },
     66        _showEditWidget: function() {
     67            var factory = new ContentWidgetFactory();
     68            this.innerWidget = factory.createEditWidget( this.item );
     69            if ( this.innerWidget !== null ) {
     70                this.innerWidget.placeAt(this.containerNode);
     71                this.innerWidget.startup();
     72            }
     73            this.titleNode.innerHTML = (this.item.code||"(no code)")+" : "+this.item.type+" [editing]";
     74        },
     75        onClose: function() {},
     76        _getValueAttr: function(value) {
     77            return this.item;
     78        },
     79        _setValueAttr: function(value) {
     80            this.item = value;
     81            this._destroyInnerWidget();
     82            if ( this._editing ) {
     83                this._showEditWidget();
     84            } else {
     85                this._showViewWidget();
     86            }
     87        },
     88        toggleEdit: function() {
     89            if(this._editing) {
     90                if ( this.innerWidget !== null ) {
     91                    this.item = this.innerWidget.get('value');
     92                }
     93                this._destroyInnerWidget();
     94                this._showViewWidget();
     95                this.editButtonNode.iconNode.className = this.editButtonNode.iconNode.className.replace("rftIconAccept", "rftIconEdit");
     96                this.editButtonNode.set("label", "Edit");
     97            } else {
     98                this._destroyInnerWidget();
     99                this._showEditWidget();
     100                this.editButtonNode.iconNode.className = this.editButtonNode.iconNode.className.replace("rftIconEdit", "rftIconAccept");
     101                this.editButtonNode.set("label", "Done");
     102            }
     103            this._editing = !this._editing;
     104        },
     105        toggleFold: function() {
     106            if (!this.animation) {
     107                if (!domClass.contains(this.domNode, "fold")) {
     108                    this.previousContentHeight = domGeom.getMarginBox(this.innerNode).h;
     109                    this.animation = fx.animateProperty({
     110                        node: this.innerNode,
     111                        duration: this.foldDuration[0],
     112                        properties: {
     113                            height: 1                       
     114                        },
     115                        onEnd: lang.hitch(this, function(){
     116                            domClass.add(this.domNode, "fold");
     117                            this.animation = null;
     118                        })
     119                    }).play();
     120                    this.foldButtonNode.iconNode.className = this.foldButtonNode.iconNode.className.replace("rftIconHalfArrowUp", "rftIconHalfArrowDown");
    33121                } else {
    34                     throw "No data supplied to create an innerWidget!";
    35                 }
    36             },
    37             _destroyInnerWidget: function() {
    38                 if ( this.innerWidget !== null ) {
    39                     this.innerWidget.destroyRecursive();
    40                 }
    41             },
    42             _showViewWidget: function() {
    43                 var factory = new ContentWidgetFactory();
    44                 this.innerWidget = factory.createViewWidget( this.item );
    45                 if ( this.innerWidget !== null ) {
    46                     this.innerWidget.placeAt(this.containerNode);
    47                     this.innerWidget.startup();
    48                     this.innerWidget.set('readOnly',true);
    49                 }
    50                 this.titleNode.innerHTML = (this.item.code||"(no node)")+" : "+this.item.type+" [preview]";
    51             },
    52             _showEditWidget: function() {
    53                 var factory = new ContentWidgetFactory();
    54                 this.innerWidget = factory.createEditWidget( this.item );
    55                 if ( this.innerWidget !== null ) {
    56                     this.innerWidget.placeAt(this.containerNode);
    57                     this.innerWidget.startup();
    58                 }
    59                 this.titleNode.innerHTML = (this.item.code||"(no node)")+" : "+this.item.type+" [editing]";
    60             },
    61             onClose: function() {},
    62             _getValueAttr: function(value) {
    63                 return this.item;
    64             },
    65             _setValueAttr: function(value) {
    66                 this.item = value;
    67                 this._destroyInnerWidget();
    68                 if ( this._editing ) {
    69                     this._showEditWidget();
    70                 } else {
    71                     this._showViewWidget();
    72                 }
    73             },
    74             toggleEdit: function() {
    75                 if(this._editing) {
    76                     if ( this.innerWidget !== null ) {
    77                         this.item = this.innerWidget.get('value');
    78                     }
    79                     this._destroyInnerWidget();
    80                     this._showViewWidget();
    81                     this.editButtonNode.iconNode.className = this.editButtonNode.iconNode.className.replace("rftIconAccept", "rftIconEdit");
    82                     this.editButtonNode.set("label", "Edit");
    83                 } else {
    84                     this._destroyInnerWidget();
    85                     this._showEditWidget();
    86                     this.editButtonNode.iconNode.className = this.editButtonNode.iconNode.className.replace("rftIconEdit", "rftIconAccept");
    87                     this.editButtonNode.set("label", "Done");
    88                 }
    89                 this._editing = !this._editing;
    90             },
    91             toggleFold: function() {
    92                 if (!this.animation) {
    93                     if (!domClass.contains(this.domNode, "fold")) {
    94                         this.previousContentHeight = dojo.marginBox(this.innerNode).h;
    95                         this.animation = fx.animateProperty({
    96                             node: this.innerNode,
    97                             duration: this.foldDuration[0],
    98                             properties: {
    99                                 height: 1                       
    100                             },
    101                             onEnd: lang.hitch(this, function(){
    102                                 domClass.add(this.domNode, "fold");
    103                                 this.animation = null;
    104                             })
    105                         }).play();
    106                         this.foldButtonNode.iconNode.className = this.foldButtonNode.iconNode.className.replace("rftIconHalfArrowUp", "rftIconHalfArrowDown");
    107                     } else {
    108                         this.animation = fx.animateProperty({
    109                             node: this.innerNode,
    110                             duration: this.foldDuration[1],
    111                             properties: {
    112                                 height: this.previousContentHeight               
    113                             },
    114                             onEnd: lang.hitch(this, function(){
    115                                 domClass.remove(this.domNode, "fold");
    116                                 this.animation = null;
    117                             })
    118                         }).play();
    119                         this.foldButtonNode.iconNode.className = this.foldButtonNode.iconNode.className.replace("rftIconHalfArrowDown", "rftIconHalfArrowUp");
    120                     }
     122                    this.animation = fx.animateProperty({
     123                        node: this.innerNode,
     124                        duration: this.foldDuration[1],
     125                        properties: {
     126                            height: this.previousContentHeight               
     127                        },
     128                        onEnd: lang.hitch(this, function(){
     129                            domClass.remove(this.domNode, "fold");
     130                            this.animation = null;
     131                        })
     132                    }).play();
     133                    this.foldButtonNode.iconNode.className = this.foldButtonNode.iconNode.className.replace("rftIconHalfArrowDown", "rftIconHalfArrowUp");
    121134                }
    122135            }
     136        }
    123137
    124         });
    125138    });
     139});
  • Dev/branches/rest-dojo-ui/client/rft/ui/QuestionEditorToolkit.js

    r402 r407  
    1515    'dojo/text!./templates/QuestionEditorToolkit.html'
    1616    ], function(declare, lang, Source, domConstruct, Memory, _Container, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, Button, ComboBox, store, CategoryListView, template) {
    17         return declare("rft.ui.QuestionEditorToolkit", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Container], {
     17        return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Container], {
    1818
    1919            templateString: template,
  • Dev/branches/rest-dojo-ui/client/rft/ui/QuestionWidget.js

    r343 r407  
    44    'dijit/form/Textarea','./MultipleChoiceWidget'],
    55    function(declare,lang,domConstruct,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,templateString,TextBox,Textarea,MultipleChoiceWidget){
    6         return declare('rft.ui.QuestionWidget',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
     6        return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
    77            templateString: templateString,
    88            mode: 'view', // view || edit
  • Dev/branches/rest-dojo-ui/client/rft/ui/Selector.js

    r406 r407  
    11define([
     2    'dojo/_base/array',
    23    'dojo/_base/declare',
    3     'dojo/_base/array',
     4    'dojo/_base/event',
     5    'dojo/_base/lang',
     6    'dojo/dom-class',
     7    'dojo/fx',
     8    'dojo/query',
     9    'dijit/_Container',
     10    'dijit/_TemplatedMixin',
     11    'dijit/_WidgetBase',
     12    'dijit/_WidgetsInTemplateMixin',
    413    'dijit/registry',
    5     'dojo/_base/lang',
    6     'dojo/_base/event',
    7     'dojo/fx',
    8     'dijit/_WidgetBase',
    9     'dijit/_TemplatedMixin',
    10     'dijit/_WidgetsInTemplateMixin',
    11     'dijit/_Container',
    1214    './LineWithActionsWidget',
    13     'dojo/text!./templates/Selector.html',
    14     'dojo/dom-class',
     15    'dojo/text!./templates/Selector.html'
    1516],function(
     17    baseArray,
    1618    declare,
    17     baseArray,
     19    event,
     20    lang,
     21    domClass,
     22    fx,
     23    query,
     24    _Container,
     25    _TemplatedMixin,
     26    _WidgetBase,
     27    _WidgetsInTemplateMixin,
    1828    registry,
    19     lang,
    20     event,
    21     fx,
    22     _WidgetBase,
    23     _TemplatedMixin,
    24     _WidgetsInTemplateMixin,
    25     _Container,
    2629    LineWithActionsWidget,
    27     templateString,
    28     domClass
    29     ){
    30     return declare('rft.ui.Selector',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
     30    templateString
     31){
     32    return declare([_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,_Container],{
    3133        templateString: templateString,
    3234        baseClass: 'rftSelector',
     
    125127        onToggle: function(evt) {
    126128            if (this._folded) {
    127                 var downArrowIcon = dojo.query(".rftBlockButton .rftIconHalfArrowDown", this._selectorLine.buttonsNode)[0];
     129                var downArrowIcon = query(".rftBlockButton .rftIconHalfArrowDown", this._selectorLine.buttonsNode)[0];
    128130                if (downArrowIcon){
    129131                    domClass.replace(downArrowIcon, "rftIconHalfArrowUp", "rftIconHalfArrowDown");
     
    134136                this._folded = false;
    135137            } else {
    136                 var upArrowIcon = dojo.query(".rftBlockButton .rftIconHalfArrowUp", this._selectorLine.buttonsNode)[0];
     138                var upArrowIcon = query(".rftBlockButton .rftIconHalfArrowUp", this._selectorLine.buttonsNode)[0];
    137139                if (upArrowIcon){
    138140                    domClass.replace(upArrowIcon, "rftIconHalfArrowDown", "rftIconHalfArrowUp");
  • Dev/branches/rest-dojo-ui/client/rft/ui/TabbedQuestionBrowser.js

    r405 r407  
    1111    ],
    1212    function(declare,lang,win,ContentPane,TabContainer,Standby,store,Selector){
    13         return declare('rft.ui.TabbedQuestionBrowser',[TabContainer],{
     13        return declare([TabContainer],{
    1414            tabPosition: 'left-h',
    1515
  • Dev/branches/rest-dojo-ui/client/rft/ui/TitleGroup.js

    r288 r407  
    11require(['dojo/_base/declare','dojo/_base/query','dijit/registry','dojox/widget/TitleGroup'],
    22    function(declare,query,registry,TitleGroup){
    3         return declare('rft.ui.TitleGroup',[TitleGroup],{
     3        return declare([TitleGroup],{
    44            getChildren: function() {
    55                return query("> .dijitTitlePane", this.domNode)
  • Dev/branches/rest-dojo-ui/client/rft/ui/content/ContentWidgetFactory.js

    r406 r407  
    1717    './../lists/OrderedList'
    1818],function(array, declare, lang, domConstruct, _TemplatedMixin, _WidgetBase, _Container, Button, CheckBox, NumberSpinner, RadioButton, Textarea, TextBox, TableContainer, _EditableListMixin, OrderedList) {
    19     var factory = declare('rft.ui.content.ContentWidgetFactory', [], {
     19    var factory = declare(null, {
    2020        createViewWidget: function(/*Object*/options) {
    2121            // options: Object
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/AccountListView.js

    r406 r407  
    1212    OrderedList
    1313) {
    14     return declare('rft.ui.lists.AccountListView',[OrderedList],{
     14    return declare([OrderedList],{
    1515        baseClass: 'rftAccountListView',
    1616        type: 'account',
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/CategoryListView.js

    r396 r407  
    33    'dojo/_base/lang',
    44    '../LineWithActionsWidget',
    5     './List',
    6     ],function(
    7         declare,
    8         lang,
    9         LineWithActionsWidget,
    10         List
    11         ) {
    12         return declare('rft.ui.lists.CategoryListView',[List],{
    13             baseClass: 'rftLineListView',
     5    './List'
     6],function(
     7    declare,
     8    lang,
     9    LineWithActionsWidget,
     10    List
     11) {
     12    return declare([List],{
     13        baseClass: 'rftLineListView',
    1414
    15             _createAvatarNode: function(item) {
    16                 var node = document.createElement("div");
    17                 node.className = "dragAvatar";
    18                 node.innerHTML = item.title;
    19                 return node;
    20             },
     15        _createAvatarNode: function(item) {
     16            var node = document.createElement("div");
     17            node.className = "dragAvatar";
     18            node.innerHTML = item.title;
     19            return node;
     20        },
    2121
    22             _createListNode: function(item) {
    23                 var w = new LineWithActionsWidget({
    24                     title: item,
    25                     'class': "orange",
    26                     actions: {
    27                         "Remove" : {
    28                             callback: lang.hitch(this, function() {
    29                                 this.removeItem(item, w);
    30                             }),
    31                             properties: {
    32                                 blockButton: false,
    33                                 icon: "Delete"
    34                             }
     22        _createListNode: function(item) {
     23            var w = new LineWithActionsWidget({
     24                title: item,
     25                'class': "orange",
     26                actions: {
     27                    "Remove" : {
     28                        callback: lang.hitch(this, function() {
     29                            this.removeItem(item, w);
     30                        }),
     31                        properties: {
     32                            blockButton: false,
     33                            icon: "Delete"
    3534                        }
    3635                    }
    37                 });
    38                 w.startup();
    39                 return w.domNode;
    40             }
     36                }
     37            });
     38            w.startup();
     39            return w.domNode;
     40        }
    4141
    42         });
    4342    });
     43});
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/List.js

    r405 r407  
    1919    BorderContainer,
    2020    templateString){
    21     return declare('rft.ui.lists.List',[BorderContainer,_TemplatedMixin,_WidgetsInTemplateMixin],{
     21    return declare([BorderContainer,_TemplatedMixin,_WidgetsInTemplateMixin],{
    2222        templateString: templateString,
    2323        baseClass: 'rftList',
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/MultipleChoiceListView.js

    r406 r407  
    1212    OrderedList
    1313    ) {
    14     return declare('rft.ui.lists.MultipleChoiceListView',[OrderedList],{
     14    return declare([OrderedList],{
    1515        baseClass: 'rftMultipleChoiceListView',
    1616        type: 'multipleChoiceOption',
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/OrderedList.js

    r405 r407  
    1212        templateString
    1313        ){
    14         return declare('rft.ui.lists.OrderedList',[List],{
     14        return declare([List],{
    1515            templateString: templateString,
    1616            baseClass: 'rftLineListView',
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/QuestionListView.js

    r406 r407  
    1212    OrderedList
    1313){
    14     return declare('rft.ui.lists.QuestionListView',[OrderedList],{
     14    return declare([OrderedList],{
    1515        baseClass: 'rftSurveyListView',
    1616        type: 'question',
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/_EditableListMixin.js

    r404 r407  
    44    'dijit/registry'
    55],function(declare,lang,registry){
    6     return declare('rft.ui.lists._EditableListMixin',null,{
     6    return declare(null,{
    77        getItems: function() {
    88            return this.source.getAllNodes()
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/templates/List.html

    r389 r407  
    11<div>
    2         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'top'">
     2        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'top'">
    33                <h3 data-dojo-attach-point="titleNode"></h3>
    44        </div>
    5         <div data-dojo-type="dijit.layout.ContentPane"
     5        <div data-dojo-type="dijit/layout/ContentPane"
    66             data-dojo-props="region: 'center'"
    77             data-dojo-attach-point="sourceNode"
  • Dev/branches/rest-dojo-ui/client/rft/ui/lists/templates/OrderedList.html

    r389 r407  
    11<div>
    2         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'top'">
     2        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'top'">
    33                <h3 data-dojo-attach-point="titleNode"></h3>
    44        </div>
    5         <div data-dojo-type="dijit.layout.ContentPane"
     5        <div data-dojo-type="dijit/layout/ContentPane"
    66             data-dojo-props="region: 'center'"
    77             data-dojo-attach-point="sourceNode"
    88             class="${baseClass}Content">
    99        </div>
    10         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'bottom'" data-dojo-attach-point="buttonsNode">
     10        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'bottom'" data-dojo-attach-point="buttonsNode">
    1111                    <span>Move selected: </span>
    1212                    <button data-dojo-attach-point="btnListMoveUp" ></button>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/LoginDialog.html

    r390 r407  
    77    </div>
    88    <div data-dojo-attach-point="containerNode">
    9         <form data-dojo-type="dijit.form.Form" data-dojo-attach-point="loginForm">
     9        <form data-dojo-type="dijit/form/Form" data-dojo-attach-point="loginForm">
    1010            <fieldset>
    1111                <label for="email" class="loginLabel">Email</label>
    12                 <input data-dojo-type="dijit.form.TextBox" name="email" type="text" class="loginInput" />
     12                <input data-dojo-type="dijit/form/TextBox" name="email" type="text" class="loginInput" />
    1313                <label for="password" class="loginLabel">Password</label>
    14                 <input data-dojo-type="dijit.form.TextBox" name="password" type="password" class="loginInput" />
     14                <input data-dojo-type="dijit/form/TextBox" name="password" type="password" class="loginInput" />
    1515            </fieldset>
    1616            <div style="float: right;">
    17                 <button type="button" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onRegister">Register</button>
    18                 <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:onRegister">Register</button>
     18                <button type="submit" data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onLogin">Login</button>
    1919            </div>
    2020        </form>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/MainMenu.html

    r403 r407  
    11<div class="mainMenu">
    2     <div  data-dojo-type="dijit.MenuBar">
    3         <div class="rftMainMenuButton" data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'sessions'">Sessions</div>
    4         <div class="rftMainMenuButton" data-dojo-type="dijit.PopupMenuBarItem">
     2    <div  data-dojo-type="dijit/MenuBar">
     3        <div class="rftMainMenuButton" data-dojo-type="rft/ui/MenuBarLink" data-dojo-props="path:'/sessions'">Sessions</div>
     4        <div class="rftMainMenuButton" data-dojo-type="dijit/PopupMenuBarItem">
    55            <span>Content</span>
    6             <div data-dojo-type="dijit.DropDownMenu">
    7                 <div data-dojo-type="rft.ui.MenuLink" class="blue bgColorHover" data-dojo-props="pageId:'surveys', iconClass:'rftIcon rftIconSurvey'">Surveys</div>
    8                 <div data-dojo-type="rft.ui.MenuLink" class="orange bgColorHover" data-dojo-props="pageId:'questions', iconClass:'rftIcon rftIconQuestion'">Questions</div>
    9                 <div data-dojo-type="rft.ui.MenuLink" class="purple bgColorHover" data-dojo-props="pageId:'applications', iconClass: 'rftIcon rftIconApplication'">Applications</div>
    10                 <div data-dojo-type="rft.ui.MenuLink" class="red bgColorHover" data-dojo-props="pageId:'dashboards', iconClass: 'rftIcon rftIconDashboard'">Dashboards</div>
     6            <div data-dojo-type="dijit/DropDownMenu">
     7                <div data-dojo-type="rft/ui/MenuLink" class="blue bgColorHover" data-dojo-props="path:'/surveys', iconClass:'rftIcon rftIconSurvey'">Surveys</div>
     8                <div data-dojo-type="rft/ui/MenuLink" class="orange bgColorHover" data-dojo-props="path:'/questions', iconClass:'rftIcon rftIconQuestion'">Questions</div>
     9                <div data-dojo-type="rft/ui/MenuLink" class="purple bgColorHover" data-dojo-props="path:'/applications', iconClass: 'rftIcon rftIconApplication'">Applications</div>
     10                <div data-dojo-type="rft/ui/MenuLink" class="red bgColorHover" data-dojo-props="path:'/dashboards', iconClass: 'rftIcon rftIconDashboard'">Dashboards</div>
    1111            </div>
    1212        </div>
    13         <div class="rftMainMenuButton" data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'results'">Results</div>
    14         <div class="rftMainMenuButton" data-dojo-type="rft.ui.MenuBarLink" id="loginMenu">Logout</div>
     13        <div class="rftMainMenuButton" data-dojo-type="rft/ui/MenuBarLink" data-dojo-props="path:'/results'">Results</div>
     14        <div class="rftMainMenuButton" data-dojo-type="rft/ui/MenuBarLink" id="loginMenu">Logout</div>
    1515    </div>
    1616</div>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/MultipleChoiceWidget.html

    r311 r407  
    33    </div>
    44    <div data-dojo-attach-point="buttons" class="row">
    5         <div><span class="rowBox"/><span class="rowText"/><span class="rowBtn"/><button data-dojo-type="dijit.form.Button" type="button" data-dojo-attach-event="onClick:_onAddRow" class="rowBtn">+</button></div>
     5        <div><span class="rowBox"/><span class="rowText"/><span class="rowBtn"/><button data-dojo-type="dijit/form/Button" type="button" data-dojo-attach-event="onClick:_onAddRow" class="rowBtn">+</button></div>
    66    </div>
    77</div>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/QuestionEditorPreviewItem.html

    r397 r407  
    33                <span class="title" data-dojo-attach-point="titleNode">Default title</span>
    44                <span class="floatRight" data-dojo-attach-point="buttonsNode">
    5                         <button class="trans bg inheritBgColor" data-dojo-type="dijit.form.Button" data-dojo-attach-point="editButtonNode" data-dojo-props="baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconEdit'">Edit</button>
    6                         <button class="trans bg inheritBgColor" data-dojo-type="dijit.form.Button" data-dojo-attach-point="foldButtonNode" data-dojo-props="baseClass: 'rftBlockButton', showLabel: false, iconClass: 'rftIcon rftIconHalfArrowUp'">Fold</button>
    7                         <button class="trans bg inheritBgColor" data-dojo-type="dijit.form.Button" data-dojo-attach-point="removeButtonNode" data-dojo-props="baseClass: 'rftBlockButton', showLabel: false, iconClass: 'rftIcon rftIconDelete'">Remove</button>
     5                        <button class="trans bg inheritBgColor" data-dojo-type="dijit/form/Button" data-dojo-attach-point="editButtonNode" data-dojo-props="baseClass: 'rftBlockButton', iconClass: 'rftIcon rftIconEdit'">Edit</button>
     6                        <button class="trans bg inheritBgColor" data-dojo-type="dijit/form/Button" data-dojo-attach-point="foldButtonNode" data-dojo-props="baseClass: 'rftBlockButton', showLabel: false, iconClass: 'rftIcon rftIconHalfArrowUp'">Fold</button>
     7                        <button class="trans bg inheritBgColor" data-dojo-type="dijit/form/Button" data-dojo-attach-point="removeButtonNode" data-dojo-props="baseClass: 'rftBlockButton', showLabel: false, iconClass: 'rftIcon rftIconDelete'">Remove</button>
    88                </span>
    99        </div>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/QuestionEditorToolkit.html

    r404 r407  
    11<div>
    2         <div data-dojo-type="dojox.widget.TitleGroup">
    3                 <div data-dojo-type="dijit.TitlePane" class="orange" data-dojo-props="open:true" title="Properties" data-dojo-props="iconClass:'rftIcon rftIconProperties'">
    4             <div data-dojo-type="dijit.form.Form" data-dojo-attach-point="propertiesForm">
     2        <div data-dojo-type="dojox/widget/TitleGroup">
     3                <div data-dojo-type="dijit/TitlePane" class="orange" data-dojo-props="open:true" title="Properties" data-dojo-props="iconClass:'rftIcon rftIconProperties'">
     4            <div data-dojo-type="dijit/form/Form" data-dojo-attach-point="propertiesForm">
    55                                <fieldset class="align">
    6                                         <label>Title:</label><input data-dojo-type="dijit.form.TextBox" name="title"/>
    7                                         <label>Code:</label><input data-dojo-type="dijit.form.TextBox" name= "code"/>
     6                                        <label>Title:</label><input data-dojo-type="dijit/form/TextBox" name="title"/>
     7                                        <label>Code:</label><input data-dojo-type="dijit/form/TextBox" name= "code"/>
    88                                        <label>Categories:</label>
    99                                        <div data-dojo-attach-point="listNode" class="rftLineListView"></div>
    1010                                        <div data-dojo-attach-point="categoriesBoxNode"></div>
    11                                         <button class="inheritBgColor" data-dojo-type="dijit.form.Button" data-dojo-attach-event="onClick:onCategoryAdd" data-dojo-props="baseClass:'rftBlockButton', iconClass: 'rftIcon rftIconPlus'">Add</button><br>
     11                                        <button class="inheritBgColor" data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:onCategoryAdd" data-dojo-props="baseClass:'rftBlockButton', iconClass: 'rftIcon rftIconPlus'">Add</button><br>
    1212                                        <label>Topic:</label>
    1313                                        <div data-dojo-attach-point="topicBoxNode"></div>
    14                                         <label>Description:</label><textarea data-dojo-type="dijit.form.Textarea" name="description"></textarea>
     14                                        <label>Description:</label><textarea data-dojo-type="dijit/form/Textarea" name="description"></textarea>
    1515                                </fieldset>
    1616                        </div>
    1717                </div>
    1818
    19                 <div data-dojo-type="dijit.TitlePane" title="Content" data-dojo-props="iconClass:'rftIcon rftIconPlus', open:false">
     19                <div data-dojo-type="dijit/TitlePane" title="Content" data-dojo-props="iconClass:'rftIcon rftIconPlus', open:false">
    2020                        <div data-dojo-attach-point="ToolkitContentSourceNode">
    2121                               
     
    2323                </div>
    2424
    25                 <div data-dojo-type="dijit.TitlePane" title="Inputs" data-dojo-props="iconClass:'rftIcon rftIconInput', open:false">
     25                <div data-dojo-type="dijit/TitlePane" title="Inputs" data-dojo-props="iconClass:'rftIcon rftIconInput', open:false">
    2626                        <div data-dojo-attach-point="ToolkitInputsSourceNode">
    2727                               
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/QuestionWidget.html

    r343 r407  
    11<div>
    2     <form data-dojo-type="dijit.form.Form" data-dojo-attach-point="ourForm">
     2    <form data-dojo-type="dijit/form/Form" data-dojo-attach-point="ourForm">
    33        <fieldset>
    44            <label for="code" class="loginLabel">Code</label>
    5             <input data-dojo-type="dijit.form.TextBox" name="code" type="text" class="loginInput" />
     5            <input data-dojo-type="dijit/form/TextBox" name="code" type="text" class="loginInput" />
    66            <label for="question" class="loginLabel">Title</label>
    7             <input data-dojo-type="dijit.form.TextBox" name="title" type="text" class="loginInput" />
     7            <input data-dojo-type="dijit/form/TextBox" name="title" type="text" class="loginInput" />
    88            <label for="question" class="loginLabel">Description</label>
    9             <input data-dojo-type="dijit.form.Textarea" name="description" type="text" class="loginInput"/>
     9            <input data-dojo-type="dijit/form/Textarea" name="description" type="text" class="loginInput"/>
    1010            <label for="category" class="loginLabel">Category</label>
    11             <input data-dojo-type="dijit.form.TextBox" name="category" type="text" class="loginInput" />
     11            <input data-dojo-type="dijit/form/TextBox" name="category" type="text" class="loginInput" />
    1212        </fieldset>
    1313        <fieldset>
    14             <select data-dojo-type="dijit.form.Select" data-dojo-attach-point="scaleSelector" data-dojo-attach-event="onChange:_onTypeChange" name="scale">
     14            <select data-dojo-type="dijit/form/Select" data-dojo-attach-point="scaleSelector" data-dojo-attach-event="onChange:_onTypeChange" name="scale">
    1515                <option value="string" selected>String</option>
    1616                <option value="text">Text</option>
  • Dev/branches/rest-dojo-ui/client/rft/ui/templates/SessionBar.html

    r396 r407  
    11<div class="${baseClass}">
    22    <span class="rftIcon rftIconSession" data-dojo-attach-point="iconNode"></span>
    3     <div data-dojo-type="rft.ui.LineWithActionsWidget" data-dojo-attach-point="upperNode" data-dojo-props="actions: {'inspect':{callback: inspect, properties: {blockButton: true}}}"></div>
    4     <div data-dojo-type="rft.ui.LineWithActionsWidget" data-dojo-attach-point="lowerNode"></div>
     3    <div data-dojo-type="rft/ui/LineWithActionsWidget" data-dojo-attach-point="upperNode" data-dojo-props="actions: {'inspect':{callback: inspect, properties: {blockButton: true}}}"></div>
     4    <div data-dojo-type="rft/ui/LineWithActionsWidget" data-dojo-attach-point="lowerNode"></div>
    55</div>
  • Dev/branches/rest-dojo-ui/client/rft/view.js

    r399 r407  
    11require([
    22    'dojo/parser',
    3     'rft/auth',
    4     'rft/content',
    53    'rft/stddeps',
    6     'rft/viewContent',
    74    'dojo/domReady!'
    8 ],function(parser,auth,content) {
     5],function(parser) {
    96    parser.parse();
    10     content.init();
    11 
    12     auth.restore()
    13     .then(function(){
    14         content.initial();
    15     },function(){
    16     });
    17 
     7    // read options from hash/url
     8    // authenticate
     9    // set content
     10    // go for it
    1811});
  • Dev/branches/rest-dojo-ui/client/view.html

    r399 r407  
    22<html>
    33    <head>
     4        <title>Survey</title>
    45        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    5         <title>Survey</title>
    6         <link rel="stylesheet" type="text/css" href="dojotoolkit/dijit/themes/claro/claro.css" />
    7         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/Grid.css" />
    8         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/claroGrid.css" />
    9         <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/widget/Toaster/Toaster.css" />
    106        <link rel="stylesheet" type="text/css" href="rft/css/main.css" />
    11         <script type="text/javascript" src="dojotoolkit/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, tlmSiblingOfDojo: false, isDebug: true, baseUrl: '', packagePaths: {'dojotoolkit':['dojo','dijit', 'dojox'], '.':['rft']}"></script>
    12         <script type="text/javascript" src="rft/view.js"></script>
    137    </head>
    148    <body class="dijitReset claro">
    15         <div class="page" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="region:'center'" style="width: 100%; height: 100%;">
    16             <div class="topbar" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
     9        <script type="text/javascript" src="dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, isDebug: true"></script>
     10        <script type="text/javascript" src="rft/view.js"></script>
     11        <div class="page" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region:'center'" style="width: 100%; height: 100%;">
     12            <div class="topbar" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">
    1713                <h1>Survey</h1>
    1814            </div>
    19             <div id="content" class="content" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
     15            <div id="content" class="content" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
    2016            </div>
    2117        </div>
    22         <div id="toaster" data-dojo-type="rft.ui.Notifications">
     18        <div id="toaster" data-dojo-type="rft/ui/Notifications">
    2319        </div>
    2420    </body>
Note: See TracChangeset for help on using the changeset viewer.