design
[angular-mojolicious.git] / templates / conference / Work.html.ep
index 7ca50ee..e1d73c8 100644 (file)
@@ -9,10 +9,10 @@ function Work($resource){
                abstract: '',
                authors:[ { name:'', surname:'', inst:'', email:'' } ],
                symposium: { organizer: [ {name:'', surname:'', inst:'', email:'' } ], work_nr: 1, },
-               _changes: 0,
        };
-       this.Work = $resource( '/data/conference/Work/:_id', { _id:'' } );
-       this.Symposium = $resource( '/data/conference/Symposium/:_id', { _id:'' } );
+       this.last_saved_work = {};
+       this.Work = $resource( '/data/conference/Work/:id', { id:'' } );
+       this.Symposium = $resource( '/data/conference/Symposium/:id', { id:'' } );
        this.reset();
        this.$watch('$location.hashPath', this.hash_change);
 }
@@ -21,17 +21,17 @@ Work.$inject=['$resource'];
 Work.prototype = {
        hash_change: function() {
                var id = this.$location.hashPath;
-console.debug( 'hash_change', id, this.work._id );
-               if ( id != this.work._id ) {
+console.debug( 'hash_change', id, this.work.$id );
+               if ( id != this.work.$id ) {
                        if (id) {
                                var self = this;
-                               this.work = this.Work.get({ _id: id }, function(work) {
-                                       work._changes = -1
+                               this.work = this.Work.get({ id: id }, function(work) {
+                                       self.last_saved_work = angular.copy(work);
                                        if ( work.type == 'symposium' ) {
-                                               var s_id = work.symposium._id || work._id;
-                                               // first work doesn't have symposium._id, but we used same _id
+                                               var s_id = work.symposium.$id || work.$id;
+                                               // first work doesn't have symposium.$id, but we used same $id
 console.debug( 'load symposium ', s_id );
-                                               self.symposium = self.Symposium.get({ _id: s_id }, function() { self.work._changes-- });
+                                               self.symposium = self.Symposium.get({ id: s_id });
                                        }
                                });
                        }
@@ -43,8 +43,7 @@ console.debug( 'load symposium ', s_id );
                var current_symposium = null;
                if ( this.work && this.work.type == 'symposium' ) {
                        current_symposium = this.work.symposium;
-                       if ( this.work._id ) current_symposium.work_nr++;
-                       // if is required because reset is called twice -- once with saved records and once with new empty one
+                       if ( this.work.$id ) current_symposium.work_nr++; // only if saved
 console.debug( 'current_symposium', current_symposium, this.work )
                }
                this.work = new this.Work( this.master );
@@ -52,24 +51,27 @@ console.debug( 'current_symposium', current_symposium, this.work )
                        this.work.symposium = current_symposium;
                        this.work.type = 'symposium';
                }
+               this.last_saved_work = {};
 console.debug( 'reset', current_symposium, this.work, this.$location.hashPath );
        },
        save: function(){
                var self = this;
                this.work.$save(function(work){
-                       self.$location.hashPath = work._id;
-                       work._changes = -1;     // it seems that save call issues one ng:eval
+                       self.$location.hashPath = work.$id;
 
                        // save symposium to separate resource
-                       if ( work.type != 'symposium' ) return;
-                       if ( ! self.symposium ) { 
-                               self.work.symposium._id = work._id; // reuse _id of first work for symposium
-                               self.symposium = new self.Symposium( work.symposium );
-                               self.symposium.works = [];
+                       if ( work.type == 'symposium' ) {
+                               if ( ! self.symposium ) { 
+                                       self.work.symposium.$id = work.$id; // reuse $id of first work for symposium
+                                       self.symposium = new self.Symposium( work.symposium );
+                                       self.symposium.works = [];
+                               }
+                               self.symposium.works[ work.symposium.work_nr - 1 ] = work;
+               console.debug('save_symposium', self.symposium );
+                               self.symposium.$save();
                        }
-                       self.symposium.works[ work.symposium.work_nr - 1 ] = work;
-       console.debug('save_symposium', self.symposium );
-                       self.symposium.$save(function() { work._changes-- });
+
+                       self.last_saved_work = angular.copy(work);
                });
        },
        get_symposium: function() { this.symposium },
@@ -80,17 +82,12 @@ console.debug( 'reset', current_symposium, this.work, this.$location.hashPath );
 
 <h1>Conference work submission</h1>
 
-<div ng:controller="Work" ng:init="$window.$root = this; work._changes = 0" ng:eval="work._changes = work._changes + 1">
+<div ng:controller="Work" ng:init="$window.$root = this;">
 
 <h2>Type of work:</h2>
 <label><input type="radio" name="work.type" value="symposium"> Symposium</label>
 
 <div ng:show="work.type == 'symposium'" style="background:#f0f0f0">
-<!--
-<select name="work.symposium_id" ng:show="work.type == 'symposium'" ng:controller="Symposium">
-<option ng:repeat="s in symposiums" value="{{s._id}}">{{s.title}}</option>
-</select>
--->
 
 <label>Topic of symposium: <input name="work.symposium.title" size="60" ng:required></label><br/>
    
@@ -105,7 +102,7 @@ Organizer:
 <input name="author.name" ng:required>
 <input name="author.surname" ng:required>
 <input name="author.inst" >
-<input name="author.email" ng:required>
+<input name="author.email" ng:required ng:validate="email">
 </div>
 [<a href="" ng:click="work.symposium.organizer.$add()">Add another organizer</a>]
 
@@ -122,7 +119,10 @@ Organizer:
 <div ng:show="symposium">
 Works which are part of this symposium:
 <ol>
-<li ng:repeat="w in symposium.works"><a href="#{{w._id}}">{{w.title}}</a></li>
+<li ng:repeat="w in symposium.works">
+<a ng:show="work.$id != w.$id" href="#{{w.$id}}" >{{w.title}}</a>
+<b ng:show="work.$id == w.$id">{{w.title}}</b>
+</li>
 </ol>
 
 </div>
@@ -134,36 +134,9 @@ Works which are part of this symposium:
 <input name="author.name" ng:required>
 <input name="author.surname" ng:required>
 <input name="author.inst" >
-<input name="author.email" ng:required>
+<input name="author.email" ng:required ng:validate="email">
 </div>
 [<a href="" ng:click="work.authors.$add()">Add another author</a>]
-<!--
-
-    <table>
-      <tr>
-        <th> </th>
-        <th>Ime</th>
-        <th>Prezime</th>
-        <th>Ustanova</th>
-        <th>email</th>
-      </tr>
-      <tr ng:repeat="author in work.authors">
-        <td>[<a href="" ng:click="work.authors.$remove(author)">X</a>]</td>
-        <td><input name="author.name" ng:required></td>
-        <td><input name="author.surname" ng:required></td>
-        <td><input name="author.inst" ></td>
-        <td><input name="author.email" ng:required></td>
-      </tr>
-      <tr>
-        <td> </td>
-        <td>[<a href="" ng:click="work.authors.$add()">Add another author</a>]</td>
-        <td> </td>
-        <td> </td>
-        <td> </td>
-      </tr>
-    </table>
-
--->
 
 <hr>    
 
@@ -176,26 +149,31 @@ Works which are part of this symposium:
 <br/>
 
 <span ng:show="$invalidWidgets.visible() == 0">
-<input type="submit" value="Save" ng:click="work.symposium_id=symposium._id; save();" ng:show="work._changes" title="{{work._changes}} changes">
-<input type="reset" value="Add another work" ng:click="reset()" ng:show="work && work._id">
+<input type="submit" value="Save" ng:click="save();" ng:show="! last_saved_work.$equals(work)">
+<input type="reset" value="Add another work" ng:click="reset()" ng:show="work && work.$id">
 </span>
 
 <b ng:show="$invalidWidgets.visible() &gt; 0" style="color:#800">{{$invalidWidgets.visible()}} errors to fix in submission form</b>
 
-<div ng:show="work._id">
-Permalink to <a href="#{{work._id}}">{{work.title}}</a> which you can bookmark
+<div ng:show="work.$id">
+Permalink to <a href="#{{work.$id}}">{{work.title}}</a> which you can bookmark
 </div>
 
 <hr>
 Debug Information:
 {{$window.location.href}}
-<pre>work = {{work}}</pre>
-<pre>master = {{master}}</pre>
-
 <pre>
+work = {{work}}
+
+dirty={{! last_saved_work.$equals(work)}}
+
+last_saved_work = {{last_saved_work}}
+
+master = {{master}}
+
 $id={{$id}}
 work.$id={{work.$id}}
-work._id={{work._id}}
+work.$id={{work.$id}}
 </pre>
 
 </div>