Implemented new timeline functionality client-side.
* Fixed returned information in ts_api:put_timeline/3 * Added UI for new timeline button. * Added client-side implementation of new timeline creation. There is a problem on the server-side, PUT should support creating new items and updating existing items.
This commit is contained in:
parent
76083b5972
commit
89336e844f
7
doc/issues/desktop/0017tn2.rst
Normal file
7
doc/issues/desktop/0017tn2.rst
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Implement timeline creation.
|
||||||
|
============================
|
||||||
|
|
||||||
|
========= ==========
|
||||||
|
Created: 2011-05-15
|
||||||
|
Resolved: YYYY-MM-DD
|
||||||
|
========= ==========
|
1
doc/issues/mobile/0000tn5.rst
Normal file
1
doc/issues/mobile/0000tn5.rst
Normal file
@ -0,0 +1 @@
|
|||||||
|
Prototype out mobile workflow.
|
@ -321,7 +321,7 @@ put_timeline(YArg, Username, TimelineId) ->
|
|||||||
|
|
||||||
no_record -> make_json_404(YArg,
|
no_record -> make_json_404(YArg,
|
||||||
[{error, "no such timeline"},
|
[{error, "no such timeline"},
|
||||||
{see_docs, "/ts_api_doc/timelines.html#POST"}]);
|
{see_docs, "/ts_api_doc/timelines.html#PUT"}]);
|
||||||
|
|
||||||
Error ->
|
Error ->
|
||||||
error_logger:error_report("Unable update timeline: ~p", [Error]),
|
error_logger:error_report("Unable update timeline: ~p", [Error]),
|
||||||
|
@ -74,8 +74,13 @@ input {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
right: 0;
|
right: 0;
|
||||||
width: 172.41%; }
|
width: 172.41%; }
|
||||||
#timeline .drop-menu .drop-menu-items .timeline-link {
|
#timeline .drop-menu .drop-menu-items .new-timeline-link, #timeline .drop-menu .drop-menu-items .timeline-link {
|
||||||
|
padding-left: 0.5em;
|
||||||
font-size: medium; }
|
font-size: medium; }
|
||||||
|
#timeline .drop-menu .drop-menu-items .new-timeline-link img, #timeline .drop-menu .drop-menu-items .timeline-link img {
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: -4px; }
|
||||||
|
|
||||||
.dialog {
|
.dialog {
|
||||||
background: white;
|
background: white;
|
||||||
|
@ -100,8 +100,15 @@ input {
|
|||||||
right: 0;
|
right: 0;
|
||||||
width: 172.41%;
|
width: 172.41%;
|
||||||
|
|
||||||
.timeline-link {
|
.new-timeline-link, .timeline-link {
|
||||||
|
padding-left: 0.5em;
|
||||||
font-size: medium;
|
font-size: medium;
|
||||||
|
|
||||||
|
img {
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: -4px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,8 @@ out(YArg) ->
|
|||||||
<div class="timeline-id">( {{id}} )</div>
|
<div class="timeline-id">( {{id}} )</div>
|
||||||
<input class="timeline-id-input" type="text" value='{{id}}'/>
|
<input class="timeline-id-input" type="text" value='{{id}}'/>
|
||||||
<ul class="drop-menu-items">
|
<ul class="drop-menu-items">
|
||||||
|
<li class="new-timeline-link"><a href="#">
|
||||||
|
<img src="/img/round_plus_icon_16.png"/>new</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
25
www/js/ts.js
25
www/js/ts.js
@ -356,7 +356,8 @@ $(document).ready(function(){
|
|||||||
"dblclick .timeline-id" : "editId",
|
"dblclick .timeline-id" : "editId",
|
||||||
"dblclick .timeline-desc" : "editDesc",
|
"dblclick .timeline-desc" : "editDesc",
|
||||||
"keypress .timeline-id-input" : "updateOnEnter",
|
"keypress .timeline-id-input" : "updateOnEnter",
|
||||||
"keypress .timeline-desc-input" : "updateOnEnter"
|
"keypress .timeline-desc-input" : "updateOnEnter",
|
||||||
|
"click .new-timeline-link" : "showNewTimelineDialog"
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
@ -406,6 +407,10 @@ $(document).ready(function(){
|
|||||||
this.render();
|
this.render();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
showNewTimelineDialog: function() {
|
||||||
|
TS.app.newTimelineDialog.show();
|
||||||
|
},
|
||||||
|
|
||||||
updateOnEnter: function(e) {
|
updateOnEnter: function(e) {
|
||||||
if (e.keyCode == 13) { this.close(); this.save() }
|
if (e.keyCode == 13) { this.close(); this.save() }
|
||||||
}
|
}
|
||||||
@ -468,9 +473,6 @@ $(document).ready(function(){
|
|||||||
// create the login dialog
|
// create the login dialog
|
||||||
this.loginDialog = new TS.LoginView
|
this.loginDialog = new TS.LoginView
|
||||||
|
|
||||||
// create the new timeline dialog
|
|
||||||
this.newTimelineDialog = new TS.NewTimelineView
|
|
||||||
|
|
||||||
// initialize data, either from boostrapped data, or via user login
|
// initialize data, either from boostrapped data, or via user login
|
||||||
if (window.bootstrap) { this.initializeData(window.bootstrap()) }
|
if (window.bootstrap) { this.initializeData(window.bootstrap()) }
|
||||||
else {
|
else {
|
||||||
@ -500,6 +502,10 @@ $(document).ready(function(){
|
|||||||
{collection: this.timelines.collection,
|
{collection: this.timelines.collection,
|
||||||
initialTimelineId: data.initialTimelineId});
|
initialTimelineId: data.initialTimelineId});
|
||||||
|
|
||||||
|
// create the new timeline dialog
|
||||||
|
this.newTimelineDialog = new TS.NewTimelineView(
|
||||||
|
{timelineCollection: this.timelines.collection});
|
||||||
|
|
||||||
// create entry models from the bootstrapped data
|
// create entry models from the bootstrapped data
|
||||||
var entryModels = _.map(data.entries, function(entry) {
|
var entryModels = _.map(data.entries, function(entry) {
|
||||||
return new TS.EntryModel(entry);
|
return new TS.EntryModel(entry);
|
||||||
@ -614,8 +620,7 @@ $(document).ready(function(){
|
|||||||
if (options.timelineCollection == undefined) {
|
if (options.timelineCollection == undefined) {
|
||||||
throw "Can not create the NewTimelineView without the timeline collection."
|
throw "Can not create the NewTimelineView without the timeline collection."
|
||||||
} else {
|
} else {
|
||||||
this.timelineCollection = this.collection.get(
|
this.timelineCollection = options.timelineCollection;
|
||||||
options.timelineCollection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -624,14 +629,16 @@ $(document).ready(function(){
|
|||||||
var timelineId = this.$("#new-timeline-id").val();
|
var timelineId = this.$("#new-timeline-id").val();
|
||||||
var timelineDesc = this.$("#new-timeline-desc").val();
|
var timelineDesc = this.$("#new-timeline-desc").val();
|
||||||
this.timelineCollection.create(
|
this.timelineCollection.create(
|
||||||
{id: timelineId, description: timelineDesc});
|
{id: timelineId, description: timelineDesc,
|
||||||
|
created: getUTCTimestamp()});
|
||||||
|
this.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
hide: function() { $(this.el).addClass('hidden'); },
|
hide: function() { $(this.el).addClass('hidden'); },
|
||||||
|
|
||||||
show: function() {
|
show: function() {
|
||||||
this.$("#new-timeline-id".val('');
|
this.$("#new-timeline-id").val("");
|
||||||
this.$("#new-timeline-desc".val('');
|
this.$("#new-timeline-desc").val("");
|
||||||
$(this.el).removeClass('hidden');
|
$(this.el).removeClass('hidden');
|
||||||
this.$("#new-timeline-id").focus();
|
this.$("#new-timeline-id").focus();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user