diff -r abd11be23718 -r ea0c7ac589c4 src/pyams_content/skin/resources/js/pyams_content.js --- a/src/pyams_content/skin/resources/js/pyams_content.js Thu Nov 08 08:46:58 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,665 +0,0 @@ -(function($, globals) { - - "use strict"; - - var MyAMS = globals.MyAMS; - - var PyAMS_content = { - - /** - * Custom widgets management - */ - widget: { - - /** Treeview widget */ - treeview: { - - selectFolder: function(event, node) { - var target = $(event.target); - target.siblings('input[type="hidden"]').val(node.id); - }, - - unselectFolder: function(event, node) { - var target = $(event.target); - target.siblings('input[type="hidden"]').val(null); - } - } - }, - - /** - * TinyMCE editor configuration - */ - TinyMCE: { - - initEditor: function(settings) { - - // Update TinyMCE translations - tinyMCE.addI18n('fr', { - "Link list": "Liste de liens", - "Toggle h3 header": "En-tête H3", - "Toggle h4 header": "En-tête H4", - "Insert internal link": "Insérer un lien interne", - "Link title": "Texte à afficher", - "Internal number": "N° interne" - }); - - // Declare internal link input plug-in - tinymce.PluginManager.add('internal_links', function(editor, url) { - editor.addButton('internal_links', { - icon: 'cloud-check', - tooltip: "Insert internal link", - image: '/--static--/pyams_content/img/internal-link.png', - onclick: function() { - editor.windowManager.open({ - title: "Insert internal link", - body: [ - { - type: 'textbox', - name: 'oid', - label:'Internal number' - }, { - type: 'textbox', - name: 'title', - label: 'Link title', - value: editor.selection.getContent() - } - ], - onsubmit: function(e) { - editor.insertContent('' + e.data.title + ''); - } - }); - } - }) - }); - - // Declare direct H3 and H4 style formatter - tinyMCE.PluginManager.add('headers', function (editor, url) { - ['h3', 'h4'].forEach(function (name) { - editor.addButton("header-" + name, { - tooltip: "Toggle " + name + " header", - text: name.toUpperCase(), - onClick: function () { - editor.execCommand('mceToggleFormat', false, name); - }, - onPostRender: function () { - var self = this, - setup = function () { - editor.formatter.formatChanged(name, function (state) { - self.active(state); - }); - }; - editor.formatter ? setup() : editor.on('init', setup); - } - }) - }); - }); - - // Update TinyMCE settings - settings.image_list = PyAMS_content.TinyMCE.getImagesList; - settings.link_list = PyAMS_content.TinyMCE.getLinksList; - settings.style_formats = [ - { - title: 'Inline', - items: [ - {title: 'Bold', icon: 'bold', format: 'bold'}, - {title: 'Italic', icon: 'italic', format: 'italic'}, - {title: 'Underline', icon: 'underline', format: 'underline'}, - {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, - {title: 'Superscript', icon: 'superscript', format: 'superscript'}, - {title: 'Subscript', icon: 'subscript', format: 'subscript'}, - {title: 'Code', icon: 'code', format: 'code'} - ] - }, - { - title: 'Blocks', - items: [ - {title: 'Paragraph', format: 'p'}, - {title: 'Blockquote', format: 'blockquote'}, - {title: 'Div', format: 'div'}, - {title: 'Pre', format: 'pre'} - ] - }, - { - title: 'Alignment', - items: [ - {title: 'Left', icon: 'alignleft', format: 'alignleft'}, - {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, - {title: 'Right', icon: 'alignright', format: 'alignright'}, - {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} - ] - } - ]; - settings.plugins += ' internal_links headers'; - if (settings.toolbar1) { - settings.toolbar1 = "undo redo | header-h3 header-h4 styleselect | bold italic | " + - "alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"; - } - if (settings.toolbar2) { - settings.toolbar2 = "forecolor backcolor | charmap internal_links link | fullscreen preview print | code"; - } - return settings; - }, - - getImagesList: function(callback) { - var form = $(document.activeElement).parents('form'); - if (form.exists()) { - var base = form.attr('data-ams-form-handler') || form.attr('action'); - var target = base.substr(0, base.lastIndexOf('/') + 1); - return MyAMS.ajax.post(target + 'get-images-list.json', {}, callback); - } - }, - - getLinksList: function(callback) { - var form = $(document.activeElement).parents('form'); - if (form.exists()) { - var base = form.attr('data-ams-form-handler') || form.attr('action'); - var target = base.substr(0, base.lastIndexOf('/')+1); - return MyAMS.ajax.post(target + 'get-links-list.json', {}, callback); - } - } - }, - - /** - * Galleries management - */ - galleries: { - - addMediaCallback: function(options) { - var gallery = $('.gallery', $('[id="' + options.parent + '"]')); - var switcher = gallery.siblings('.switcher'); - if (switcher.parents('fieldset:first').hasClass('switched')) { - switcher.click(); - } - for (var i=0; i < options.medias.length; i++) { - gallery.append(options.medias[i]); - } - gallery.sortable({ - helper: 'clone', - stop: PyAMS_content.galleries.setOrder - }) - }, - - updateMediaTitle: function(options) { - $('img[id="' + options.media_id + '"]').attr('original-title', options.title); - }, - - switchMediaVisibility: function(element) { - return function() { - var source = $(this); - var media = source.parents('.media'); - var gallery = media.parents('.gallery'); - $('i', source).attr('class', 'fa fa-fw fa-spinner fa-pulse'); - MyAMS.ajax.post(gallery.data('ams-location') + '/set-media-visibility.json', - {object_name: media.data('ams-element-name')}, - function(result, status) { - if (result.visible) { - $('i', source).attr('class', 'fa fa-fw fa-eye'); - source.parents('.btn-group').siblings('a.fancyimg').removeClass('not-visible'); - } else { - $('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger'); - source.parents('.btn-group').siblings('a.fancyimg').addClass('not-visible'); - } - }); - }; - }, - - setOrder: function(event, ui) { - if (ui && ui.item.hasClass('already-dropped')) { - return; - } - var gallery = ui.item.parents('.gallery'); - var ids = $('.media', gallery).listattr('data-ams-element-name'); - MyAMS.ajax.post(gallery.data('ams-location') + '/set-medias-order.json', - {medias: JSON.stringify(ids)}); - }, - - removeMedia: function(element) { - return function() { - var link = $(this); - MyAMS.skin.bigBox({ - title: MyAMS.i18n.WARNING, - content: '  ' + MyAMS.i18n.DELETE_WARNING, - buttons: MyAMS.i18n.BTN_OK_CANCEL - }, function(button) { - if (button === MyAMS.i18n.BTN_OK) { - var gallery = link.parents('.gallery'); - var location = gallery.data('ams-location'); - var media = link.parents('.media'); - var object_name = media.data('ams-element-name'); - MyAMS.ajax.post(location + '/delete-element.json', - {object_name: object_name}, - function(result, status) { - media.remove(); - if (result.handle_json) { - MyAMS.ajax.handleJSON(result); - } - }); - } - }); - }; - }, - - afterFancyboxLoad: function(current, previous) { - var element = current.element; - if (element.hasClass('not-visible')) { - current.inner.prepend('
'); - } - } - }, - - /** - * Illustrations management - */ - illustration: { - - addIllustration: function() { - var source = $(this); - var group = source.parents('.btn-group'); - var legend = group.siblings('legend.switcher'); - $('i.fa-plus', legend).click(); - source.hide(); - $('input[type="file"]', legend.siblings('.form-group:first')).click(); - } - }, - - /** - * Paragraphs management - */ - paragraphs: { - - /* Store and restore paragraphs state on reload */ - preReload: function() { - PyAMS_content.paragraphs.switched = $('i.switch.fa-minus-square-o', '#paragraphs_list').parents('tr').listattr('id'); - }, - - postReload: function() { - $(PyAMS_content.paragraphs.switched).each(function() { - $('i.switch.fa-plus-square-o', '[id="' + this + '"]').parents('div').first().click(); - }); - delete PyAMS_content.paragraphs.switched; - }, - - refreshParagraph: function(changes) { - var para = $('tr[id="' + changes.object_id + '"]'); - $('span.title', para).html(changes.title || ' - - - - - - - -'); - }, - - switchEditor: function(element) { - var source = $(this); - var switcher = $('i.switch', source); - var td = source.parents('td'); - var editor = $('.editor', td); - var para = source.parents('tr'); - if (switcher.hasClass('fa-plus-square-o')) { - var container = para.parents('table'); - editor.html('

'); - MyAMS.ajax.post(container.data('ams-location') + '/get-paragraph-editor.json', - {object_name: para.data('ams-element-name')}, - function(result) { - editor.html(result); - if (result) { - MyAMS.initContent(editor); - switcher.removeClass('fa-plus-square-o') - .addClass('fa-minus-square-o'); - para.data('ams-disabled-handlers', true); - MyAMS.skin.scrollTo(editor, { - offset: editor.height() - para.height() - }); - } - }); - } else { - MyAMS.skin.cleanContainer(editor); - editor.empty(); - switcher.removeClass('fa-minus-square-o') - .addClass('fa-plus-square-o'); - para.removeData('ams-disabled-handlers'); - } - }, - - switchLastEditor: function(table_id) { - var table = $('table[id="' + table_id + '"]'); - var tr = $('tr:last', table); - $('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]', tr).click(); - }, - - switchAllEditors: function(element) { - var source = $(this); - var switcher = $('i', source); - var container = source.parents('table'); - if (switcher.hasClass('fa-plus-square-o')) { - switcher.removeClass('fa-plus-square-o') - .addClass('fa-cog fa-spin'); - MyAMS.ajax.post(container.data('ams-location') + '/get-paragraphs-editors.json', - {}, - function(result) { - for (var para_id in result) { - if (!result.hasOwnProperty(para_id)) { - continue; - } - var para = $('tr[data-ams-element-name="' + para_id + '"]', container); - var editor = $('.editor', para); - if (editor.is(':empty')) { - editor.html(result[para_id]); - } - $('.fa-plus-square-o', para).removeClass('fa-plus-square-o') - .addClass('fa-minus-square-o'); - para.data('ams-disabled-handlers', true); - } - if (!$('i.fa-plus-square-o', $('tbody', container)).exists()) { - switcher.removeClass('fa-cog fa-spin') - .addClass('fa-minus-square-o'); - } - MyAMS.initContent(container); - }); - } else { - $('.editor', container).each(function() { - MyAMS.skin.cleanContainer($(this)); - $(this).empty(); - }); - $('.fa-minus-square-o', container).removeClass('fa-minus-square-o') - .addClass('fa-plus-square-o'); - $('tr', container).removeData('ams-disabled-handlers'); - } - }, - - updateToolbar: function(settings) { - var para = $('tr[id="' + settings.object_id + '"]'); - var toolbar = $('.title-toolbar', para); - toolbar.replaceWith(settings.toolbar_tag); - toolbar = $('.title-toolbar', para); - MyAMS.initContent(toolbar); - }, - - updateMarkers: function(settings) { - var para = $('tr[id="' + settings.object_id + '"]'); - var toolbar = $('.title-toolbar', para); - var marker = $('DIV.action.' + settings.marker_type, toolbar); - if (marker.exists()) { - marker.replaceWith(settings.marker_tag); - } else { - $(settings.marker_tag).appendTo(toolbar); - } - if (settings.marker_tag) { - marker = $('DIV.action.' + settings.marker_type, toolbar); - MyAMS.initContent(marker); - } - MyAMS.helpers.sort(toolbar, 'weight'); - } - }, - - /** - * Pictograms management - */ - pictograms: { - - initManagerSelection: function() { - var form = $(this); - var selected = $('input[type="hidden"]', $('.selected-pictograms', form)).listattr('value'); - return { - selected: JSON.stringify(selected) - }; - }, - - switchPictogram: function() { - var pictogram = $(this); - var parent = pictogram.parents('.pictograms'); - var manager = parent.parents('.pictograms-manager'); - if (parent.hasClass('available-pictograms')) { - $('.selected-pictograms', manager).append(pictogram); - } else { - $('.available-pictograms', manager).append(pictogram); - } - } - }, - - /** - * Themes management - */ - themes: { - - initExtracts: function(element) { - var thesaurus = $('select[name="manager_themes.widgets.thesaurus_name:list"]', element); - var thesaurus_name = thesaurus.val(); - var extract = $('select[name="manager_themes.widgets.extract_name:list"]', element); - var extract_name = extract.val(); - if (thesaurus_name) { - MyAMS.jsonrpc.post('getExtracts', - {thesaurus_name: thesaurus_name}, - {url: '/api/thesaurus/json'}, - function(data) { - extract.empty(); - $(data.result).each(function() { - $('').attr('value', this.id) - .attr('selected', this.id === extract_name) - .text(this.text) - .appendTo(extract); - }); - }); - } - }, - - getExtracts: function(event) { - var select = $(event.currentTarget); - var form = select.parents('form'); - var thesaurus_name = $('select[name="manager_themes.widgets.thesaurus_name:list"]', form).val(); - var extract = $('select[name="manager_themes.widgets.extract_name:list"]', form); - var plugin = extract.data('select2'); - if (thesaurus_name && (thesaurus_name !== '--NOVALUE--')) { - MyAMS.jsonrpc.post('getExtracts', - {thesaurus_name: thesaurus_name}, - {url: '/api/thesaurus/json'}, - function(data) { - plugin.results.empty(); - plugin.opts.populateResults.call(plugin, plugin.results, data.result, - {term: ''}); - }); - } else { - extract.select2('data', null); - plugin.results.empty(); - plugin.opts.populateResults.call(plugin, plugin.results, [], {term: ''}); - } - } - }, - - /** - * Form fields management - */ - fields: { - - refreshField: function(changes) { - var container = $('table[id="form_fields_list"]'); - var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container); - $('td:nth-child(4)', para).html(changes.title); - } - }, - - /** - * Image map management - */ - imgmap: { - - init: function() { - var image = $(this); - MyAMS.ajax.check($.fn.canvasAreaDraw, - '/--static--/pyams_content/js/jquery-canvasAreaDraw' + MyAMS.devext + '.js', - function() { - image.canvasAreaDraw({imageUrl: image.data('ams-image-url')}); - }); - }, - - initPreview: function() { - var image = $(this); - MyAMS.ajax.check($.fn.mapster, - '/--static--/pyams_content/js/jquery-imagemapster-1.2.10' + MyAMS.devext + '.js', - function() { - image.mapster({ - fillColor: 'ff0000', - fillOpacity: 0.35, - selected: true, - highlight: true, - staticState: true - }); - }); - } - }, - - /** - * Site management - */ - site: { - - switchVisibility: function() { - return function() { - var source = $(this); - var content = source.parents('tr').first(); - MyAMS.ajax.post(content.data('ams-location') + '/switch-content-visibility.json', - {object_name: content.data('ams-element-name')}, - function(result, status) { - var klass = 'fa-eye'; - if (!result.visible) { - klass += '-slash'; - } - if (!result.published) { - klass += ' text-danger'; - } - $('i', source).attr('class', 'fa fa-fw ' + klass); - }); - }; - } - }, - - /** - * Review comments management - */ - review: { - - timer: null, - timer_duration: { - general: 30000, - chat: 5000 - }, - - initComments: function(element) { - var chat = $('.chat-body', element); - chat.animate({scrollTop: chat[0].scrollHeight}, 1000); - clearInterval(PyAMS_content.review.timer); - PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, - PyAMS_content.review.timer_duration.chat); - MyAMS.skin.registerCleanCallback(PyAMS_content.review.cleanCommentsCallback); - }, - - cleanCommentsCallback: function() { - clearInterval(PyAMS_content.review.timer); - PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, - PyAMS_content.review.timer_duration.general); - }, - - updateComments: function() { - var badge = $('.badge', 'nav a[href="#review-comments.html"]'), - count; - var chat = $('.chat-body', '.widget-body'); - if (chat.exists()) { - count = $('.message', chat).length; - } else { - count = parseInt(badge.text()); - } - MyAMS.ajax.post('get-last-review-comments.json', {count: count}, function(result) { - if (chat.exists()) { - badge.removeClass('bg-color-danger') - .addClass('bg-color-info'); - } - if (count !== result.count) { - badge.text(result.count).removeClass('hidden'); - if (chat.exists()) { - $('.messages', chat).append(result.content); - chat.animate({scrollTop: chat[0].scrollHeight}, 1000); - } - if (!chat.exists()) { - badge.removeClass('bg-color-info') - .addClass('bg-color-danger') - .animate({'padding': '3px 12px 2px', - 'margin-right': '9px'}, 'slow', function() { - $(this).animate({'padding': '3px 6px 2px', - 'margin-right': '15px'}, 'slow'); - }); - } - } - }); - }, - - initCommentData: function(veto) { - var chat = $('.chat-body', '.widget-body'); - return {count: $('.message', chat).length}; - }, - - addCommentAction: function() { - return function() { - $('textarea[name="comment"]').focus(); - }; - }, - - addCommentCallback: function(options) { - var form = $(this); - var widget = form.parents('.widget-body'); - $('.messages', widget).append(options.content); - $('textarea[name="comment"]', form).val(''); - var chat = $('.chat-body', widget); - chat.animate({scrollTop: chat[0].scrollHeight}, 1000); - $('.badge', 'nav a[href="#review-comments.html"]').text(options.count).removeClass('hidden'); - } - }, - - /** - * Header management - */ - header: { - - submitEditForm: function() { - var form = $(this).parents('form').first(); - MyAMS.form.submit(form, {form_data: {'autosubmit': true}}); - } - }, - - /** - * Footer management - */ - footer: { - - submitEditForm: function() { - var form = $(this).parents('form').first(); - MyAMS.form.submit(form, {form_data: {'autosubmit': true}}); - } - }, - - /** - * User profile management - */ - profile: { - - switchFavorite: function() { - var star = $(this); - var oid = star.data('sequence-oid'); - MyAMS.ajax.post('switch-user-favorite.json', - {oid: oid}, - function(result, status) { - if (result.favorite) { - star.removeClass('fa-star-o') - .addClass('fa-star'); - } else { - star.removeClass('fa-star') - .addClass('fa-star-o'); - } - }); - } - } - }; - - var badge = $('.badge', 'nav a[href="#review-comments.html"]'); - if (badge.exists()) { - PyAMS_content.review.timer = setInterval(PyAMS_content.review.updateComments, - PyAMS_content.review.timer_duration.general); - } - - globals.PyAMS_content = PyAMS_content; - -})(jQuery, this);