1 (function($, globals) { |
|
2 |
|
3 "use strict"; |
|
4 |
|
5 var MyAMS = globals.MyAMS; |
|
6 |
|
7 var PyAMS_content = { |
|
8 |
|
9 /** |
|
10 * Custom widgets management |
|
11 */ |
|
12 widget: { |
|
13 |
|
14 /** Treeview widget */ |
|
15 treeview: { |
|
16 |
|
17 selectFolder: function(event, node) { |
|
18 var target = $(event.target); |
|
19 target.siblings('input[type="hidden"]').val(node.id); |
|
20 }, |
|
21 |
|
22 unselectFolder: function(event, node) { |
|
23 var target = $(event.target); |
|
24 target.siblings('input[type="hidden"]').val(null); |
|
25 } |
|
26 } |
|
27 }, |
|
28 |
|
29 /** |
|
30 * TinyMCE editor configuration |
|
31 */ |
|
32 TinyMCE: { |
|
33 |
|
34 initEditor: function(settings) { |
|
35 |
|
36 // Update TinyMCE translations |
|
37 tinyMCE.addI18n('fr', { |
|
38 "Link list": "Liste de liens", |
|
39 "Toggle h3 header": "En-tête H3", |
|
40 "Toggle h4 header": "En-tête H4", |
|
41 "Insert internal link": "Insérer un lien interne", |
|
42 "Link title": "Texte à afficher", |
|
43 "Internal number": "N° interne" |
|
44 }); |
|
45 |
|
46 // Declare internal link input plug-in |
|
47 tinymce.PluginManager.add('internal_links', function(editor, url) { |
|
48 editor.addButton('internal_links', { |
|
49 icon: 'cloud-check', |
|
50 tooltip: "Insert internal link", |
|
51 image: '/--static--/pyams_content/img/internal-link.png', |
|
52 onclick: function() { |
|
53 editor.windowManager.open({ |
|
54 title: "Insert internal link", |
|
55 body: [ |
|
56 { |
|
57 type: 'textbox', |
|
58 name: 'oid', |
|
59 label:'Internal number' |
|
60 }, { |
|
61 type: 'textbox', |
|
62 name: 'title', |
|
63 label: 'Link title', |
|
64 value: editor.selection.getContent() |
|
65 } |
|
66 ], |
|
67 onsubmit: function(e) { |
|
68 editor.insertContent('<a href="oid://' + e.data.oid + '">' + e.data.title + '</a>'); |
|
69 } |
|
70 }); |
|
71 } |
|
72 }) |
|
73 }); |
|
74 |
|
75 // Declare direct H3 and H4 style formatter |
|
76 tinyMCE.PluginManager.add('headers', function (editor, url) { |
|
77 ['h3', 'h4'].forEach(function (name) { |
|
78 editor.addButton("header-" + name, { |
|
79 tooltip: "Toggle " + name + " header", |
|
80 text: name.toUpperCase(), |
|
81 onClick: function () { |
|
82 editor.execCommand('mceToggleFormat', false, name); |
|
83 }, |
|
84 onPostRender: function () { |
|
85 var self = this, |
|
86 setup = function () { |
|
87 editor.formatter.formatChanged(name, function (state) { |
|
88 self.active(state); |
|
89 }); |
|
90 }; |
|
91 editor.formatter ? setup() : editor.on('init', setup); |
|
92 } |
|
93 }) |
|
94 }); |
|
95 }); |
|
96 |
|
97 // Update TinyMCE settings |
|
98 settings.image_list = PyAMS_content.TinyMCE.getImagesList; |
|
99 settings.link_list = PyAMS_content.TinyMCE.getLinksList; |
|
100 settings.style_formats = [ |
|
101 { |
|
102 title: 'Inline', |
|
103 items: [ |
|
104 {title: 'Bold', icon: 'bold', format: 'bold'}, |
|
105 {title: 'Italic', icon: 'italic', format: 'italic'}, |
|
106 {title: 'Underline', icon: 'underline', format: 'underline'}, |
|
107 {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, |
|
108 {title: 'Superscript', icon: 'superscript', format: 'superscript'}, |
|
109 {title: 'Subscript', icon: 'subscript', format: 'subscript'}, |
|
110 {title: 'Code', icon: 'code', format: 'code'} |
|
111 ] |
|
112 }, |
|
113 { |
|
114 title: 'Blocks', |
|
115 items: [ |
|
116 {title: 'Paragraph', format: 'p'}, |
|
117 {title: 'Blockquote', format: 'blockquote'}, |
|
118 {title: 'Div', format: 'div'}, |
|
119 {title: 'Pre', format: 'pre'} |
|
120 ] |
|
121 }, |
|
122 { |
|
123 title: 'Alignment', |
|
124 items: [ |
|
125 {title: 'Left', icon: 'alignleft', format: 'alignleft'}, |
|
126 {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, |
|
127 {title: 'Right', icon: 'alignright', format: 'alignright'}, |
|
128 {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} |
|
129 ] |
|
130 } |
|
131 ]; |
|
132 settings.plugins += ' internal_links headers'; |
|
133 if (settings.toolbar1) { |
|
134 settings.toolbar1 = "undo redo | header-h3 header-h4 styleselect | bold italic | " + |
|
135 "alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"; |
|
136 } |
|
137 if (settings.toolbar2) { |
|
138 settings.toolbar2 = "forecolor backcolor | charmap internal_links link | fullscreen preview print | code"; |
|
139 } |
|
140 return settings; |
|
141 }, |
|
142 |
|
143 getImagesList: function(callback) { |
|
144 var form = $(document.activeElement).parents('form'); |
|
145 if (form.exists()) { |
|
146 var base = form.attr('data-ams-form-handler') || form.attr('action'); |
|
147 var target = base.substr(0, base.lastIndexOf('/') + 1); |
|
148 return MyAMS.ajax.post(target + 'get-images-list.json', {}, callback); |
|
149 } |
|
150 }, |
|
151 |
|
152 getLinksList: function(callback) { |
|
153 var form = $(document.activeElement).parents('form'); |
|
154 if (form.exists()) { |
|
155 var base = form.attr('data-ams-form-handler') || form.attr('action'); |
|
156 var target = base.substr(0, base.lastIndexOf('/')+1); |
|
157 return MyAMS.ajax.post(target + 'get-links-list.json', {}, callback); |
|
158 } |
|
159 } |
|
160 }, |
|
161 |
|
162 /** |
|
163 * Galleries management |
|
164 */ |
|
165 galleries: { |
|
166 |
|
167 addMediaCallback: function(options) { |
|
168 var gallery = $('.gallery', $('[id="' + options.parent + '"]')); |
|
169 var switcher = gallery.siblings('.switcher'); |
|
170 if (switcher.parents('fieldset:first').hasClass('switched')) { |
|
171 switcher.click(); |
|
172 } |
|
173 for (var i=0; i < options.medias.length; i++) { |
|
174 gallery.append(options.medias[i]); |
|
175 } |
|
176 gallery.sortable({ |
|
177 helper: 'clone', |
|
178 stop: PyAMS_content.galleries.setOrder |
|
179 }) |
|
180 }, |
|
181 |
|
182 updateMediaTitle: function(options) { |
|
183 $('img[id="' + options.media_id + '"]').attr('original-title', options.title); |
|
184 }, |
|
185 |
|
186 switchMediaVisibility: function(element) { |
|
187 return function() { |
|
188 var source = $(this); |
|
189 var media = source.parents('.media'); |
|
190 var gallery = media.parents('.gallery'); |
|
191 $('i', source).attr('class', 'fa fa-fw fa-spinner fa-pulse'); |
|
192 MyAMS.ajax.post(gallery.data('ams-location') + '/set-media-visibility.json', |
|
193 {object_name: media.data('ams-element-name')}, |
|
194 function(result, status) { |
|
195 if (result.visible) { |
|
196 $('i', source).attr('class', 'fa fa-fw fa-eye'); |
|
197 source.parents('.btn-group').siblings('a.fancyimg').removeClass('not-visible'); |
|
198 } else { |
|
199 $('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger'); |
|
200 source.parents('.btn-group').siblings('a.fancyimg').addClass('not-visible'); |
|
201 } |
|
202 }); |
|
203 }; |
|
204 }, |
|
205 |
|
206 setOrder: function(event, ui) { |
|
207 if (ui && ui.item.hasClass('already-dropped')) { |
|
208 return; |
|
209 } |
|
210 var gallery = ui.item.parents('.gallery'); |
|
211 var ids = $('.media', gallery).listattr('data-ams-element-name'); |
|
212 MyAMS.ajax.post(gallery.data('ams-location') + '/set-medias-order.json', |
|
213 {medias: JSON.stringify(ids)}); |
|
214 }, |
|
215 |
|
216 removeMedia: function(element) { |
|
217 return function() { |
|
218 var link = $(this); |
|
219 MyAMS.skin.bigBox({ |
|
220 title: MyAMS.i18n.WARNING, |
|
221 content: '<i class="text-danger fa fa-2x fa-bell shake animated"></i> ' + MyAMS.i18n.DELETE_WARNING, |
|
222 buttons: MyAMS.i18n.BTN_OK_CANCEL |
|
223 }, function(button) { |
|
224 if (button === MyAMS.i18n.BTN_OK) { |
|
225 var gallery = link.parents('.gallery'); |
|
226 var location = gallery.data('ams-location'); |
|
227 var media = link.parents('.media'); |
|
228 var object_name = media.data('ams-element-name'); |
|
229 MyAMS.ajax.post(location + '/delete-element.json', |
|
230 {object_name: object_name}, |
|
231 function(result, status) { |
|
232 media.remove(); |
|
233 if (result.handle_json) { |
|
234 MyAMS.ajax.handleJSON(result); |
|
235 } |
|
236 }); |
|
237 } |
|
238 }); |
|
239 }; |
|
240 }, |
|
241 |
|
242 afterFancyboxLoad: function(current, previous) { |
|
243 var element = current.element; |
|
244 if (element.hasClass('not-visible')) { |
|
245 current.inner.prepend('<div class="hidden-mask"></div>'); |
|
246 } |
|
247 } |
|
248 }, |
|
249 |
|
250 /** |
|
251 * Illustrations management |
|
252 */ |
|
253 illustration: { |
|
254 |
|
255 addIllustration: function() { |
|
256 var source = $(this); |
|
257 var group = source.parents('.btn-group'); |
|
258 var legend = group.siblings('legend.switcher'); |
|
259 $('i.fa-plus', legend).click(); |
|
260 source.hide(); |
|
261 $('input[type="file"]', legend.siblings('.form-group:first')).click(); |
|
262 } |
|
263 }, |
|
264 |
|
265 /** |
|
266 * Paragraphs management |
|
267 */ |
|
268 paragraphs: { |
|
269 |
|
270 /* Store and restore paragraphs state on reload */ |
|
271 preReload: function() { |
|
272 PyAMS_content.paragraphs.switched = $('i.switch.fa-minus-square-o', '#paragraphs_list').parents('tr').listattr('id'); |
|
273 }, |
|
274 |
|
275 postReload: function() { |
|
276 $(PyAMS_content.paragraphs.switched).each(function() { |
|
277 $('i.switch.fa-plus-square-o', '[id="' + this + '"]').parents('div').first().click(); |
|
278 }); |
|
279 delete PyAMS_content.paragraphs.switched; |
|
280 }, |
|
281 |
|
282 refreshParagraph: function(changes) { |
|
283 var para = $('tr[id="' + changes.object_id + '"]'); |
|
284 $('span.title', para).html(changes.title || ' - - - - - - - -'); |
|
285 }, |
|
286 |
|
287 switchEditor: function(element) { |
|
288 var source = $(this); |
|
289 var switcher = $('i.switch', source); |
|
290 var td = source.parents('td'); |
|
291 var editor = $('.editor', td); |
|
292 var para = source.parents('tr'); |
|
293 if (switcher.hasClass('fa-plus-square-o')) { |
|
294 var container = para.parents('table'); |
|
295 editor.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'); |
|
296 MyAMS.ajax.post(container.data('ams-location') + '/get-paragraph-editor.json', |
|
297 {object_name: para.data('ams-element-name')}, |
|
298 function(result) { |
|
299 editor.html(result); |
|
300 if (result) { |
|
301 MyAMS.initContent(editor); |
|
302 switcher.removeClass('fa-plus-square-o') |
|
303 .addClass('fa-minus-square-o'); |
|
304 para.data('ams-disabled-handlers', true); |
|
305 MyAMS.skin.scrollTo(editor, { |
|
306 offset: editor.height() - para.height() |
|
307 }); |
|
308 } |
|
309 }); |
|
310 } else { |
|
311 MyAMS.skin.cleanContainer(editor); |
|
312 editor.empty(); |
|
313 switcher.removeClass('fa-minus-square-o') |
|
314 .addClass('fa-plus-square-o'); |
|
315 para.removeData('ams-disabled-handlers'); |
|
316 } |
|
317 }, |
|
318 |
|
319 switchLastEditor: function(table_id) { |
|
320 var table = $('table[id="' + table_id + '"]'); |
|
321 var tr = $('tr:last', table); |
|
322 $('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]', tr).click(); |
|
323 }, |
|
324 |
|
325 switchAllEditors: function(element) { |
|
326 var source = $(this); |
|
327 var switcher = $('i', source); |
|
328 var container = source.parents('table'); |
|
329 if (switcher.hasClass('fa-plus-square-o')) { |
|
330 switcher.removeClass('fa-plus-square-o') |
|
331 .addClass('fa-cog fa-spin'); |
|
332 MyAMS.ajax.post(container.data('ams-location') + '/get-paragraphs-editors.json', |
|
333 {}, |
|
334 function(result) { |
|
335 for (var para_id in result) { |
|
336 if (!result.hasOwnProperty(para_id)) { |
|
337 continue; |
|
338 } |
|
339 var para = $('tr[data-ams-element-name="' + para_id + '"]', container); |
|
340 var editor = $('.editor', para); |
|
341 if (editor.is(':empty')) { |
|
342 editor.html(result[para_id]); |
|
343 } |
|
344 $('.fa-plus-square-o', para).removeClass('fa-plus-square-o') |
|
345 .addClass('fa-minus-square-o'); |
|
346 para.data('ams-disabled-handlers', true); |
|
347 } |
|
348 if (!$('i.fa-plus-square-o', $('tbody', container)).exists()) { |
|
349 switcher.removeClass('fa-cog fa-spin') |
|
350 .addClass('fa-minus-square-o'); |
|
351 } |
|
352 MyAMS.initContent(container); |
|
353 }); |
|
354 } else { |
|
355 $('.editor', container).each(function() { |
|
356 MyAMS.skin.cleanContainer($(this)); |
|
357 $(this).empty(); |
|
358 }); |
|
359 $('.fa-minus-square-o', container).removeClass('fa-minus-square-o') |
|
360 .addClass('fa-plus-square-o'); |
|
361 $('tr', container).removeData('ams-disabled-handlers'); |
|
362 } |
|
363 }, |
|
364 |
|
365 updateToolbar: function(settings) { |
|
366 var para = $('tr[id="' + settings.object_id + '"]'); |
|
367 var toolbar = $('.title-toolbar', para); |
|
368 toolbar.replaceWith(settings.toolbar_tag); |
|
369 toolbar = $('.title-toolbar', para); |
|
370 MyAMS.initContent(toolbar); |
|
371 }, |
|
372 |
|
373 updateMarkers: function(settings) { |
|
374 var para = $('tr[id="' + settings.object_id + '"]'); |
|
375 var toolbar = $('.title-toolbar', para); |
|
376 var marker = $('DIV.action.' + settings.marker_type, toolbar); |
|
377 if (marker.exists()) { |
|
378 marker.replaceWith(settings.marker_tag); |
|
379 } else { |
|
380 $(settings.marker_tag).appendTo(toolbar); |
|
381 } |
|
382 if (settings.marker_tag) { |
|
383 marker = $('DIV.action.' + settings.marker_type, toolbar); |
|
384 MyAMS.initContent(marker); |
|
385 } |
|
386 MyAMS.helpers.sort(toolbar, 'weight'); |
|
387 } |
|
388 }, |
|
389 |
|
390 /** |
|
391 * Pictograms management |
|
392 */ |
|
393 pictograms: { |
|
394 |
|
395 initManagerSelection: function() { |
|
396 var form = $(this); |
|
397 var selected = $('input[type="hidden"]', $('.selected-pictograms', form)).listattr('value'); |
|
398 return { |
|
399 selected: JSON.stringify(selected) |
|
400 }; |
|
401 }, |
|
402 |
|
403 switchPictogram: function() { |
|
404 var pictogram = $(this); |
|
405 var parent = pictogram.parents('.pictograms'); |
|
406 var manager = parent.parents('.pictograms-manager'); |
|
407 if (parent.hasClass('available-pictograms')) { |
|
408 $('.selected-pictograms', manager).append(pictogram); |
|
409 } else { |
|
410 $('.available-pictograms', manager).append(pictogram); |
|
411 } |
|
412 } |
|
413 }, |
|
414 |
|
415 /** |
|
416 * Themes management |
|
417 */ |
|
418 themes: { |
|
419 |
|
420 initExtracts: function(element) { |
|
421 var thesaurus = $('select[name="manager_themes.widgets.thesaurus_name:list"]', element); |
|
422 var thesaurus_name = thesaurus.val(); |
|
423 var extract = $('select[name="manager_themes.widgets.extract_name:list"]', element); |
|
424 var extract_name = extract.val(); |
|
425 if (thesaurus_name) { |
|
426 MyAMS.jsonrpc.post('getExtracts', |
|
427 {thesaurus_name: thesaurus_name}, |
|
428 {url: '/api/thesaurus/json'}, |
|
429 function(data) { |
|
430 extract.empty(); |
|
431 $(data.result).each(function() { |
|
432 $('<option></option>').attr('value', this.id) |
|
433 .attr('selected', this.id === extract_name) |
|
434 .text(this.text) |
|
435 .appendTo(extract); |
|
436 }); |
|
437 }); |
|
438 } |
|
439 }, |
|
440 |
|
441 getExtracts: function(event) { |
|
442 var select = $(event.currentTarget); |
|
443 var form = select.parents('form'); |
|
444 var thesaurus_name = $('select[name="manager_themes.widgets.thesaurus_name:list"]', form).val(); |
|
445 var extract = $('select[name="manager_themes.widgets.extract_name:list"]', form); |
|
446 var plugin = extract.data('select2'); |
|
447 if (thesaurus_name && (thesaurus_name !== '--NOVALUE--')) { |
|
448 MyAMS.jsonrpc.post('getExtracts', |
|
449 {thesaurus_name: thesaurus_name}, |
|
450 {url: '/api/thesaurus/json'}, |
|
451 function(data) { |
|
452 plugin.results.empty(); |
|
453 plugin.opts.populateResults.call(plugin, plugin.results, data.result, |
|
454 {term: ''}); |
|
455 }); |
|
456 } else { |
|
457 extract.select2('data', null); |
|
458 plugin.results.empty(); |
|
459 plugin.opts.populateResults.call(plugin, plugin.results, [], {term: ''}); |
|
460 } |
|
461 } |
|
462 }, |
|
463 |
|
464 /** |
|
465 * Form fields management |
|
466 */ |
|
467 fields: { |
|
468 |
|
469 refreshField: function(changes) { |
|
470 var container = $('table[id="form_fields_list"]'); |
|
471 var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container); |
|
472 $('td:nth-child(4)', para).html(changes.title); |
|
473 } |
|
474 }, |
|
475 |
|
476 /** |
|
477 * Image map management |
|
478 */ |
|
479 imgmap: { |
|
480 |
|
481 init: function() { |
|
482 var image = $(this); |
|
483 MyAMS.ajax.check($.fn.canvasAreaDraw, |
|
484 '/--static--/pyams_content/js/jquery-canvasAreaDraw' + MyAMS.devext + '.js', |
|
485 function() { |
|
486 image.canvasAreaDraw({imageUrl: image.data('ams-image-url')}); |
|
487 }); |
|
488 }, |
|
489 |
|
490 initPreview: function() { |
|
491 var image = $(this); |
|
492 MyAMS.ajax.check($.fn.mapster, |
|
493 '/--static--/pyams_content/js/jquery-imagemapster-1.2.10' + MyAMS.devext + '.js', |
|
494 function() { |
|
495 image.mapster({ |
|
496 fillColor: 'ff0000', |
|
497 fillOpacity: 0.35, |
|
498 selected: true, |
|
499 highlight: true, |
|
500 staticState: true |
|
501 }); |
|
502 }); |
|
503 } |
|
504 }, |
|
505 |
|
506 /** |
|
507 * Site management |
|
508 */ |
|
509 site: { |
|
510 |
|
511 switchVisibility: function() { |
|
512 return function() { |
|
513 var source = $(this); |
|
514 var content = source.parents('tr').first(); |
|
515 MyAMS.ajax.post(content.data('ams-location') + '/switch-content-visibility.json', |
|
516 {object_name: content.data('ams-element-name')}, |
|
517 function(result, status) { |
|
518 var klass = 'fa-eye'; |
|
519 if (!result.visible) { |
|
520 klass += '-slash'; |
|
521 } |
|
522 if (!result.published) { |
|
523 klass += ' text-danger'; |
|
524 } |
|
525 $('i', source).attr('class', 'fa fa-fw ' + klass); |
|
526 }); |
|
527 }; |
|
528 } |
|
529 }, |
|
530 |
|
531 /** |
|
532 * Review comments management |
|
533 */ |
|
534 review: { |
|
535 |
|
536 timer: null, |
|
537 timer_duration: { |
|
538 general: 30000, |
|
539 chat: 5000 |
|
540 }, |
|
541 |
|
542 initComments: function(element) { |
|
543 var chat = $('.chat-body', element); |
|
544 chat.animate({scrollTop: chat[0].scrollHeight}, 1000); |
|
545 clearInterval(PyAMS_content.review.timer); |
|
546 PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, |
|
547 PyAMS_content.review.timer_duration.chat); |
|
548 MyAMS.skin.registerCleanCallback(PyAMS_content.review.cleanCommentsCallback); |
|
549 }, |
|
550 |
|
551 cleanCommentsCallback: function() { |
|
552 clearInterval(PyAMS_content.review.timer); |
|
553 PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, |
|
554 PyAMS_content.review.timer_duration.general); |
|
555 }, |
|
556 |
|
557 updateComments: function() { |
|
558 var badge = $('.badge', 'nav a[href="#review-comments.html"]'), |
|
559 count; |
|
560 var chat = $('.chat-body', '.widget-body'); |
|
561 if (chat.exists()) { |
|
562 count = $('.message', chat).length; |
|
563 } else { |
|
564 count = parseInt(badge.text()); |
|
565 } |
|
566 MyAMS.ajax.post('get-last-review-comments.json', {count: count}, function(result) { |
|
567 if (chat.exists()) { |
|
568 badge.removeClass('bg-color-danger') |
|
569 .addClass('bg-color-info'); |
|
570 } |
|
571 if (count !== result.count) { |
|
572 badge.text(result.count).removeClass('hidden'); |
|
573 if (chat.exists()) { |
|
574 $('.messages', chat).append(result.content); |
|
575 chat.animate({scrollTop: chat[0].scrollHeight}, 1000); |
|
576 } |
|
577 if (!chat.exists()) { |
|
578 badge.removeClass('bg-color-info') |
|
579 .addClass('bg-color-danger') |
|
580 .animate({'padding': '3px 12px 2px', |
|
581 'margin-right': '9px'}, 'slow', function() { |
|
582 $(this).animate({'padding': '3px 6px 2px', |
|
583 'margin-right': '15px'}, 'slow'); |
|
584 }); |
|
585 } |
|
586 } |
|
587 }); |
|
588 }, |
|
589 |
|
590 initCommentData: function(veto) { |
|
591 var chat = $('.chat-body', '.widget-body'); |
|
592 return {count: $('.message', chat).length}; |
|
593 }, |
|
594 |
|
595 addCommentAction: function() { |
|
596 return function() { |
|
597 $('textarea[name="comment"]').focus(); |
|
598 }; |
|
599 }, |
|
600 |
|
601 addCommentCallback: function(options) { |
|
602 var form = $(this); |
|
603 var widget = form.parents('.widget-body'); |
|
604 $('.messages', widget).append(options.content); |
|
605 $('textarea[name="comment"]', form).val(''); |
|
606 var chat = $('.chat-body', widget); |
|
607 chat.animate({scrollTop: chat[0].scrollHeight}, 1000); |
|
608 $('.badge', 'nav a[href="#review-comments.html"]').text(options.count).removeClass('hidden'); |
|
609 } |
|
610 }, |
|
611 |
|
612 /** |
|
613 * Header management |
|
614 */ |
|
615 header: { |
|
616 |
|
617 submitEditForm: function() { |
|
618 var form = $(this).parents('form').first(); |
|
619 MyAMS.form.submit(form, {form_data: {'autosubmit': true}}); |
|
620 } |
|
621 }, |
|
622 |
|
623 /** |
|
624 * Footer management |
|
625 */ |
|
626 footer: { |
|
627 |
|
628 submitEditForm: function() { |
|
629 var form = $(this).parents('form').first(); |
|
630 MyAMS.form.submit(form, {form_data: {'autosubmit': true}}); |
|
631 } |
|
632 }, |
|
633 |
|
634 /** |
|
635 * User profile management |
|
636 */ |
|
637 profile: { |
|
638 |
|
639 switchFavorite: function() { |
|
640 var star = $(this); |
|
641 var oid = star.data('sequence-oid'); |
|
642 MyAMS.ajax.post('switch-user-favorite.json', |
|
643 {oid: oid}, |
|
644 function(result, status) { |
|
645 if (result.favorite) { |
|
646 star.removeClass('fa-star-o') |
|
647 .addClass('fa-star'); |
|
648 } else { |
|
649 star.removeClass('fa-star') |
|
650 .addClass('fa-star-o'); |
|
651 } |
|
652 }); |
|
653 } |
|
654 } |
|
655 }; |
|
656 |
|
657 var badge = $('.badge', 'nav a[href="#review-comments.html"]'); |
|
658 if (badge.exists()) { |
|
659 PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, |
|
660 PyAMS_content.review.timer_duration.general); |
|
661 } |
|
662 |
|
663 globals.PyAMS_content = PyAMS_content; |
|
664 |
|
665 })(jQuery, this); |
|