src/pyams_content/skin/resources/js/pyams_content.js
changeset 1070 ea0c7ac589c4
parent 1069 abd11be23718
child 1071 e202798d3732
--- 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>&nbsp; ' + 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);