comparison static-files/wiki.js @ 27:a42400d52a1e

Changed recent changes heading to two separate 'unpublished changes' and 'published changes' sections.
author Atul Varma <varmaa@toolness.com>
date Thu, 12 Feb 2009 23:00:03 -0800
parents 0aecc756ea18
children
comparison
equal deleted inserted replaced
26:52f02c6edfa9 27:a42400d52a1e
36 36
37 var App = { 37 var App = {
38 PART_SEPARATOR: "\n\n", 38 PART_SEPARATOR: "\n\n",
39 creole: null, 39 creole: null,
40 editingElement: null, 40 editingElement: null,
41 latestRemoteChangeset: null, 41 latestPublishedChangeset: null,
42 localChanges: [], 42 localChanges: [],
43 eventHandlers: {} 43 eventHandlers: {}
44 }; 44 };
45 45
46 App.eventHandlers.editPart = function editPart(aEvt) { 46 App.eventHandlers.editPart = function editPart(aEvt) {
59 ); 59 );
60 60
61 return partsMarkup.join(App.PART_SEPARATOR); 61 return partsMarkup.join(App.PART_SEPARATOR);
62 }; 62 };
63 63
64 App.saveChanges = function saveChanges(isUserChange) { 64 App.saveChanges = function saveChanges(options) {
65 var isUserChange = options.isUserChange;
66 var date = options.date ? new Date(options.date) : new Date();
67 var container;
68 if (isUserChange)
69 container = $('#unpublished-changes');
70 else
71 container = $('#published-changes');
72
65 var markup = App.getMarkup($(window.document)); 73 var markup = App.getMarkup($(window.document));
66 var changeset = {date: new Date(), 74 var changeset = {date: date,
67 content: markup, 75 content: markup};
68 parentRemoteChangeset: App.latestRemoteChangeset};
69 App.localChanges.push(changeset); 76 App.localChanges.push(changeset);
70 var changesetElem = $('<div class="changeset selected"></div>'); 77 var changesetElem = $('<div class="changeset selected"></div>');
71 function setText() { 78 function setText() {
72 changesetElem.text(jQuery.timeago(changeset.date)); 79 changesetElem.text(jQuery.timeago(changeset.date));
73 } 80 }
76 changesetElem.mousedown( 83 changesetElem.mousedown(
77 function(aEvt) { 84 function(aEvt) {
78 85
79 aEvt.preventDefault(); 86 aEvt.preventDefault();
80 if (aEvt.shiftKey) { 87 if (aEvt.shiftKey) {
81 $('#recent-changes').find('.changeset').removeClass('diffed'); 88 $(window.document).find('.changeset').removeClass('diffed');
82 var newerVersion = App.getMarkup($("#content")); 89 var newerVersion = App.getMarkup($("#content"));
83 var diff = $('<div class="diff"></div>'); 90 var diff = $('<div class="diff"></div>');
84 var markupDiv = $('<div class="creole-markup"></div>'); 91 var markupDiv = $('<div class="creole-markup"></div>');
85 markupDiv.text(newerVersion); 92 markupDiv.text(newerVersion);
86 diff.html(diffString(changeset.content, newerVersion)); 93 diff.html(diffString(changeset.content, newerVersion));
87 $("#content").empty(); 94 $("#content").empty();
88 $("#content").append(diff); 95 $("#content").append(diff);
89 $("#content").append(markupDiv); 96 $("#content").append(markupDiv);
90 $(this).addClass('diffed'); 97 $(this).addClass('diffed');
91 } else { 98 } else {
92 $('#recent-changes').find('.changeset').removeClass('selected'); 99 $(window.document).find('.changeset').removeClass('selected')
93 $('#recent-changes').find('.changeset').removeClass('diffed'); 100 .removeClass('diffed');
94 $(this).addClass('selected'); 101 $(this).addClass('selected');
95 $("#content").empty(); 102 $("#content").empty();
96 $("#content").append(App.createParts(changeset.content)); 103 $("#content").append(App.createParts(changeset.content));
97 } 104 }
98 } 105 }
99 ); 106 );
100 $('#recent-changes').find('.changeset').removeClass('selected'); 107 $(window.document).find('.changeset').removeClass('selected')
101 $('#recent-changes').find('.changeset').removeClass('diffed'); 108 .removeClass('diffed');
102 $('#recent-changes').find('h1').after(changesetElem); 109 container.find('h1').after(changesetElem);
103 if (isUserChange) { 110 if (isUserChange) {
104 $('#recent-changes').fadeIn(); 111 var maybeNewChangeset = App.latestPublishedChangeset + 1;
105 var maybeNewChangeset = App.latestRemoteChangeset + 1;
106 var jsonData = JSON.stringify({date: changeset.date.toString(), 112 var jsonData = JSON.stringify({date: changeset.date.toString(),
107 content: changeset.content}); 113 content: changeset.content});
108 jQuery.ajax({url: '/' + maybeNewChangeset, 114 jQuery.ajax({url: '/' + maybeNewChangeset,
109 type: 'PUT', 115 type: 'PUT',
110 success: function() { 116 success: function() {
111 // TODO: Because we're running asynchronously, 117 // TODO: Because we're running asynchronously,
112 // weird things can happen here, e.g. if the user 118 // weird things can happen here, e.g. if the user
113 // makes another edit while the XHR is being 119 // makes another edit while the XHR is being
114 // processed. 120 // processed.
115 App.latestRemoteChangeset = maybeNewChangeset; 121 App.latestPublishedChangeset = maybeNewChangeset;
122 $('#published-changes').find('h1').after(changesetElem);
116 }, 123 },
117 error: function(xhr, textStatus, errorThrown) { 124 error: function(xhr, textStatus, errorThrown) {
118 // TODO: Do something here. 125 // TODO: Do something here.
119 }, 126 },
120 dataType: 'text', 127 dataType: 'text',
140 147
141 function exitEditMode() { 148 function exitEditMode() {
142 var markup = $(this).attr("value"); 149 var markup = $(this).attr("value");
143 $(this).replaceWith(App.createParts(markup)); 150 $(this).replaceWith(App.createParts(markup));
144 if (markup != originalMarkup) { 151 if (markup != originalMarkup) {
145 App.saveChanges(true); 152 App.saveChanges({isUserChange: true});
146 } 153 }
147 } 154 }
148 155
149 function editSiblings(aEvt) { 156 function editSiblings(aEvt) {
150 if (!aEvt.shiftKey || level == 0) 157 if (!aEvt.shiftKey || level == 0)
212 }, 219 },
213 linkFormat: '' 220 linkFormat: ''
214 }); 221 });
215 222
216 function onStatus(status) { 223 function onStatus(status) {
217 App.latestRemoteChangeset = status.max_changeset; 224 App.latestPublishedChangeset = status.max_changeset;
218 jQuery.get("/" + status.max_changeset, 225 jQuery.get("/" + status.max_changeset,
219 {}, 226 {},
220 function(obj) { 227 function(obj) {
221 var text = obj.content; 228 var text = obj.content;
222 $("#content").append(App.createParts(text)); 229 $("#content").append(App.createParts(text));
223 App.saveChanges(false); 230 App.saveChanges({isUserChange: false,
231 date: obj.date});
224 }, 232 },
225 "json"); 233 "json");
226 } 234 }
227 235
228 jQuery.get('/status', {}, onStatus, "json"); 236 jQuery.get('/status', {}, onStatus, "json");