--- 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('<a href="oid://' + e.data.oid + '">' + e.data.title + '</a>');
- }
- });
- }
- })
- });
-
- // 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: '<i class="text-danger fa fa-2x fa-bell shake animated"></i> ' + 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('<div class="hidden-mask"></div>');
- }
- }
- },
-
- /**
- * 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('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>');
- 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() {
- $('<option></option>').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);