Mercurial > wiki
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"); |