de2d0bf8e334c5fd15fdbb4a6f84d2ef48b100e1
[redakcja.git] / project / static / js / editor.ui.js
1 /*\r
2  * UI related Editor methods\r
3  */\r
4 Editor.prototype.setupUI = function() {\r
5 //     // set up the UI visually and attach callbacks\r
6 //     var self = this;\r
7 // \r
8 //     var resize_start = function(event, mydata) {\r
9 //         $(document).bind('mousemove', mydata, resize_changed).\r
10 //         bind('mouseup', mydata, resize_stop);\r
11 // \r
12 //         $('.panel-overlay', mydata.root).css('display', 'block');\r
13 //         return false;\r
14 //     }\r
15 //     var resize_changed =  function(event) {\r
16 //         var old_width = parseInt(event.data.overlay.css('width'));\r
17 //         var delta = event.pageX + event.data.hotspot_x - old_width;\r
18 // \r
19 //         if(old_width + delta < 12) delta = 12 - old_width;\r
20 //         if(old_width + delta > $(window).width()) \r
21 //             delta = $(window).width() - old_width;\r
22 //         \r
23 //         event.data.overlay.css({\r
24 //             'width': old_width + delta\r
25 //         });\r
26 // \r
27 //         if(event.data.overlay.next) {\r
28 //             var left = parseInt(event.data.overlay.next.css('left'));\r
29 //             event.data.overlay.next.css('left', left+delta);\r
30 //         }\r
31 // \r
32 //         return false;\r
33 //     };\r
34 // \r
35 //     var resize_stop = function(event) {\r
36 //         $(document).unbind('mousemove', resize_changed).unbind('mouseup', resize_stop);\r
37 //         // $('.panel-content', event.data.root).css('display', 'block');\r
38 //         var overlays = $('.panel-content-overlay', event.data.root);\r
39 //         $('.panel-content-overlay', event.data.root).each(function(i) {\r
40 //             if( $(this).data('panel').hasClass('last-panel') )\r
41 //                 $(this).data('panel').css({\r
42 //                     'left': $(this).css('left'),\r
43 //                     'right': $(this).css('right')\r
44 //                 });\r
45 //             else\r
46 //                 $(this).data('panel').css({\r
47 //                     'left': $(this).css('left'),\r
48 //                     'width': $(this).css('width')\r
49 //                 });\r
50 //         });\r
51 //         $('.panel-overlay', event.data.root).css('display', 'none');\r
52 //         $(event.data.root).trigger('stopResize');\r
53 //     };\r
54 // \r
55 //     /*\r
56 //      * Prepare panels (overlays & stuff)\r
57 //      */\r
58 //     /* create an overlay */\r
59 //     var panel_root = self.rootDiv;\r
60 //     var overlay_root = $("<div class='panel-overlay'></div>");\r
61 //     panel_root.append(overlay_root);\r
62 // \r
63 //     var prev = null;\r
64 // \r
65 //     $('*.panel-wrap', panel_root).each( function()\r
66 //     {\r
67 //         var panel = $(this);\r
68 //         var handle = $('.panel-slider', panel);\r
69 //         var overlay = $("<div class='panel-content-overlay panel-wrap'>&nbsp;</div>");\r
70 //         overlay_root.append(overlay);\r
71 //         overlay.data('panel', panel);\r
72 //         overlay.data('next', null);\r
73 // \r
74 //         if (prev) prev.next = overlay;\r
75 // \r
76 //         if( panel.hasClass('last-panel') )\r
77 //         {\r
78 //             overlay.css({\r
79 //                 'left': panel.css('left'),\r
80 //                 'right': panel.css('right')\r
81 //             });\r
82 //         }\r
83 //         else {\r
84 //             overlay.css({\r
85 //                 'left': panel.css('left'),\r
86 //                 'width': panel.css('width')\r
87 //             });\r
88 //             // $.log('Has handle: ' + panel.attr('id'));\r
89 //             overlay.append(handle.clone());\r
90 //             /* attach the trigger */\r
91 //             handle.mousedown(function(event) {\r
92 //                 var touch_data = {\r
93 //                     root: panel_root,\r
94 //                     overlay: overlay,\r
95 //                     hotspot_x: event.pageX - handle.position().left\r
96 //                 };\r
97 // \r
98 //                 $(this).trigger('hpanel:panel-resize-start', touch_data);\r
99 //                 return false;\r
100 //             });\r
101 //             $('.panel-content', panel).css('right',\r
102 //                 (handle.outerWidth() || 10) + 'px');\r
103 //             $('.panel-content-overlay', panel).css('right',\r
104 //                 (handle.outerWidth() || 10) + 'px');\r
105 //         };\r
106 // \r
107 //         prev = overlay;\r
108 //     });\r
109 // \r
110 //     panel_root.bind('hpanel:panel-resize-start', resize_start);\r
111 //     self.rootDiv.bind('stopResize', function() {\r
112 //         self.savePanelOptions();      \r
113 //     });\r
114 //     \r
115 //     /*\r
116 //      * Connect panel actions\r
117 //      */\r
118 //     $('#panels > *.panel-wrap').each(function() {\r
119 //         var panelWrap = $(this);\r
120 //         // $.log('wrap: ', panelWrap);\r
121 //         var panel = new Panel(panelWrap);\r
122 //         panelWrap.data('ctrl', panel); // attach controllers to wraps\r
123 //         panel.load($('.panel-toolbar select', panelWrap).val());\r
124 // \r
125 //         $('.panel-toolbar select', panelWrap).change(function() {\r
126 //             var url = $(this).val();\r
127 //             panelWrap.data('ctrl').load(url);\r
128 //             self.savePanelOptions();\r
129 //         });\r
130 // \r
131 //         $('.panel-toolbar button.refresh-button', panelWrap).click(\r
132 //             function() {\r
133 //                 panel.refresh();\r
134 //             } );\r
135 // \r
136 //         self.rootDiv.bind('stopResize', function() {\r
137 //             panel.callHook('toolbarResized');\r
138 //         });\r
139 //     });\r
140 // \r
141 //     $(document).bind('panel:contentChanged', function() {\r
142 //         self.onContentChanged.apply(self, arguments)\r
143 //     });  \r
144 // \r
145 //     /*\r
146 //      * Connect various buttons\r
147 //      */\r
148 // \r
149 //     $('#toolbar-button-quick-save').click( function (event, data) {\r
150 //         self.saveToBranch();\r
151 //     } );\r
152 // \r
153 //     $('#toolbar-button-save').click( function (event, data) {\r
154 //         $('#commit-dialog').jqmShow( {callback: $.fbind(self, self.saveToBranch)} );\r
155 //     } );\r
156 // \r
157 //     $('#toolbar-button-update').click( function (event, data) {\r
158 //         if (self.updateUserBranch()) {\r
159 //             // commit/update can be called only after proper, save\r
160 //             // this means all panels are clean, and will get refreshed\r
161 //             // do this only, when there are any changes to local branch\r
162 //             self.refreshPanels();\r
163 //         }\r
164 //     } );\r
165 // \r
166 //     /* COMMIT DIALOG */\r
167 //     $('#commit-dialog').\r
168 //     jqm({\r
169 //         modal: true,\r
170 //         onShow: $.fbind(self, self.loadRelatedIssues)        \r
171 //     });\r
172 // \r
173 //     $('#toolbar-button-commit').click( function (event, data) {\r
174 //         $('#commit-dialog').jqmShow( {callback: $.fbind(self, self.sendMergeRequest)} );\r
175 //     } );\r
176 //     \r
177 //     /* STATIC BINDS */\r
178 //     $('#commit-dialog-cancel-button').click(function() {\r
179 //         $('#commit-dialog-error-empty-message').hide();\r
180 //         $('#commit-dialog').jqmHide();\r
181 //     });   \r
182 //     \r
183 // \r
184 //     /* SPLIT DIALOG */\r
185 //     $('#split-dialog').jqm({\r
186 //         modal: true,\r
187 //         onShow: $.fbind(self, self.loadSplitDialog)\r
188 //     }).\r
189 //     jqmAddClose('button.dialog-close-button');\r
190 // \r
191 // // $('#split-dialog').   \r
192 }\r
193 \r
194 Editor.prototype.loadRelatedIssues = function(hash)\r
195 {\r
196     var self = this;\r
197     var c = $('#commit-dialog-related-issues');\r
198 \r
199     $('#commit-dialog-save-button').click( function (event, data)\r
200     {\r
201         if( $('#commit-dialog-message').val().match(/^\s*$/)) {\r
202             $('#commit-dialog-error-empty-message').fadeIn();\r
203         }\r
204         else {\r
205             $('#commit-dialog-error-empty-message').hide();\r
206             $('#commit-dialog').jqmHide();\r
207 \r
208             var message = $('#commit-dialog-message').val();\r
209             $('#commit-dialog-related-issues input:checked').\r
210                 each(function() { message += ' refs #' + $(this).val(); });\r
211             $.log("COMMIT APROVED", hash.t);\r
212             hash.t.callback(message);\r
213         }\r
214 \r
215         return false;\r
216     });\r
217 \r
218     $("div.loading-box", c).show();\r
219     $("div.fatal-error-box", c).hide();\r
220     $("div.container-box", c).hide();\r
221     \r
222     $.getJSON( c.attr('ui:ajax-src') + '?callback=?',\r
223     function(data, status)\r
224     {\r
225         var fmt = '';\r
226         $(data).each( function() {\r
227             fmt += '<label><input type="checkbox" checked="checked"'\r
228             fmt += ' value="' + this.id + '" />' + this.subject +'</label>\n'\r
229         });\r
230         $("div.container-box", c).html(fmt);\r
231         $("div.loading-box", c).hide();\r
232         $("div.container-box", c).show();        \r
233     });   \r
234     \r
235     hash.w.show();\r
236 }\r
237 \r
238 Editor.prototype.loadSplitDialog = function(hash)\r
239 {\r
240     var self = this;    \r
241     \r
242     $("div.loading-box", hash.w).show();\r
243     $("div.fatal-error-box", hash.w).hide();\r
244     $('div.container-box', hash.w).hide();\r
245     hash.w.show();\r
246 \r
247     function onFailure(rq, tstat, err) {\r
248         $('div.container-box', hash.w).html('');\r
249         $("div.loading-box", hash.w).hide();\r
250         $("div.fatal-error-box", hash.w).show();\r
251         hash.t.failure();\r
252     };\r
253 \r
254     function onSuccess(data, status) {\r
255         // put the form into the window\r
256         $('div.container-box', hash.w).html(data);\r
257         $("div.loading-box", hash.w).hide();\r
258         $('form input[name=splitform-splittext]', hash.w).val(hash.t.selection);\r
259         $('form input[name=splitform-fulltext]', hash.w).val(hash.t.fulltext);\r
260         $('div.container-box', hash.w).show();\r
261 \r
262         // connect buttons\r
263         $('#split-dialog-button-accept').click(function() {\r
264             self.postSplitRequest(onSuccess, onFailure);\r
265             return false;\r
266         });\r
267 \r
268         $('#split-dialog-button-close').click(function() {\r
269             hash.w.jqmHide();\r
270             $('div.container-box', hash.w).html('');\r
271             hash.t.failure();\r
272         });\r
273 \r
274         $('#split-dialog-button-dismiss').click(function() {\r
275             hash.w.jqmHide();\r
276             $('div.container-box', hash.w).html('');\r
277             hash.t.success();\r
278         });\r
279 \r
280         if($('#id_splitform-autoxml').is(':checked'))\r
281             $('#split-form-dc-subform').show();\r
282         else\r
283             $('#split-form-dc-subform').hide();\r
284 \r
285         $('#id_splitform-autoxml').change(function() {            \r
286             if( $(this).is(':checked') )\r
287                 $('#split-form-dc-subform').show();\r
288             else\r
289                 $('#split-form-dc-subform').hide();\r
290         });\r
291     };   \r
292 \r
293     $.ajax({\r
294         url: 'split',\r
295         dataType: 'html',\r
296         success: onSuccess,\r
297         error: onFailure,\r
298         type: 'GET',\r
299         data: {}\r
300     });\r
301 }\r
302 \r
303 /* Refreshing routine */\r
304 Editor.prototype.refreshPanels = function() {\r
305     var self = this;\r
306 \r
307     self.allPanels().each(function() {\r
308         var panel = $(this).data('ctrl');\r
309         $.log('Refreshing: ', this, panel);\r
310         if ( panel.changed() )\r
311             panel.unmarkChanged();\r
312         else\r
313             panel.refresh();\r
314     });\r
315 \r
316     $('button.provides-save').attr('disabled', 'disabled');\r
317     $('button.requires-save').removeAttr('disabled');\r
318 };\r
319 \r
320 /*\r
321  * Pop-up messages\r
322  */\r
323 Editor.prototype.showPopup = function(name, text, timeout)\r
324 {\r
325     timeout = timeout || 4000;\r
326     var self = this;\r
327     self.popupQueue.push( [name, text, timeout] )\r
328 \r
329     if( self.popupQueue.length > 1)\r
330         return;\r
331 \r
332     var box = $('#message-box > #' + name);\r
333     $('*.data', box).html(text || '');\r
334     box.fadeIn(100);\r
335 \r
336     if(timeout > 0)\r
337         setTimeout( $.fbind(self, self.advancePopupQueue), timeout);\r
338 };\r
339 \r
340 Editor.prototype.advancePopupQueue = function() {\r
341     var self = this;\r
342     var elem = this.popupQueue.shift();\r
343     if(elem) {\r
344         var box = $('#message-box > #' + elem[0]);\r
345 \r
346         box.fadeOut(100, function()\r
347         {\r
348             $('*.data', box).html('');\r
349 \r
350             if( self.popupQueue.length > 0) {\r
351                 var ibox = $('#message-box > #' + self.popupQueue[0][0]);\r
352                 $('*.data', ibox).html(self.popupQueue[0][1] || '');\r
353                 ibox.fadeIn(100);\r
354                 if(self.popupQueue[0][2] > 0)\r
355                     setTimeout( $.fbind(self, self.advancePopupQueue), self.popupQueue[0][2]);\r
356             }\r
357         });\r
358     }\r
359 };\r
360 \r
361 \r