src/pyams_content/skin/resources/js/pyams_content.js
changeset 527 5dd1aa8bedd9
parent 505 e60b9a60b546
child 535 d01efcb4d332
--- a/src/pyams_content/skin/resources/js/pyams_content.js	Wed Apr 11 16:44:46 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.js	Wed Apr 11 16:46:31 2018 +0200
@@ -32,19 +32,73 @@
 		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: 'Headings',
-						items: [
-							{title: 'Heading 3', format: 'h3'},
-							{title: 'Heading 4', format: 'h4'},
-							{title: 'Heading 5', format: 'h5'},
-							{title: 'Heading 6', format: 'h6'}
-						]
-					},
-					{
 						title: 'Inline',
 						items: [
 							{title: 'Bold', icon: 'bold', format: 'bold'},
@@ -75,29 +129,13 @@
 						]
 					}
 				];
-				// Declare direct H3 style formatter
-				tinyMCE.PluginManager.add('styles', function (editor, url) {
-					['h3'].forEach(function (name) {
-						editor.addButton("style-" + 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);
-							}
-						})
-					});
-				});
-				settings.plugins += ' styles';
+				settings.plugins += ' internal_links headers';
 				if (settings.toolbar1) {
-					settings.toolbar1 = "undo redo | styleselect style-h3 style-h4 | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent";
+					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;
 			},
@@ -122,29 +160,6 @@
 		},
 
 		/**
-		 * Alerts management
-		 */
-		alerts: {
-
-			switchVisibility: function (element) {
-				return function () {
-					var source = $(this);
-					var association = source.parents('tr');
-					var container = association.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-alert-visibility.json',
-						{object_name: association.data('ams-element-name')},
-						function (result, status) {
-							if (result.visible) {
-								$('i', source).attr('class', 'fa fa-fw fa-eye');
-							} else {
-								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-							}
-						});
-				};
-			}
-		},
-
-		/**
 		 * Galleries management
 		 */
 		galleries: {
@@ -228,39 +243,6 @@
 		},
 
 		/**
-		 * Associations management
-		 */
-		associations: {
-
-			refreshAssociations: function(options) {
-				// Reload widget
-				var widget = MyAMS.skin.refreshTable(options);
-				// Check fieldset state
-				var legend = widget.siblings('legend');
-				if (legend.parents('fieldset:first').hasClass('switched')) {
-					legend.click();
-				}
-			},
-
-			switchVisibility: function (element) {
-				return function () {
-					var source = $(this);
-					var association = source.parents('tr');
-					var container = association.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-association-visibility.json',
-						{object_name: association.data('ams-element-name')},
-						function (result, status) {
-							if (result.visible) {
-								$('i', source).attr('class', 'fa fa-fw fa-eye');
-							} else {
-								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-							}
-						});
-				};
-			}
-		},
-
-		/**
 		 * Paragraphs management
 		 */
 		paragraphs: {
@@ -277,36 +259,8 @@
 				delete PyAMS_content.paragraphs.switched;
 			},
 
-			switchVisibility: function(element) {
-				return function() {
-					var source = $(this);
-					var para = source.parents('tr');
-					var container = para.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-paragraph-visibility.json',
-									{object_name: para.data('ams-element-name')},
-									function(result, status) {
-										if (result.visible) {
-											$('i', source).attr('class', 'fa fa-fw fa-eye');
-										} else {
-											$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-										}
-									});
-				};
-			},
-
-			refreshParagraphs: function(options) {
-				// Reload widget
-				var widget = MyAMS.skin.refreshTable(options);
-				// Check fieldset state
-				var legend = widget.siblings('legend');
-				if (legend.parents('fieldset:first').hasClass('switched')) {
-					legend.click();
-				}
-			},
-
 			refreshParagraph: function(changes) {
-				var container = $('table[id="paragraphs_list"]');
-				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container);
+				var para = $('tr[id="' + changes.object_id + '"]');
 				$('span.title', para).html(changes.title || ' - - - - - - - -');
 			},
 
@@ -380,8 +334,7 @@
 			},
 
 			updateToolbar: function(settings) {
-				var container = $('table[id="paragraphs_list"]');
-				var para = $('tr[data-ams-element-name="' + settings.object_name + '"]', container);
+				var para = $('tr[id="' + settings.object_id + '"]');
 				var toolbar = $('.title-toolbar', para);
 				toolbar.replaceWith(settings.toolbar_tag);
 				toolbar = $('.title-toolbar', para);
@@ -389,8 +342,8 @@
 			},
 
 			updateMarkers: function(settings) {
-				var container = $('table[id="paragraphs_list"]');
-				var para = $('tr[data-ams-element-name="' + settings.object_name + '"]', container);
+				debugger;
+				var para = $('tr[id="' + settings.object_id + '"]');
 				var toolbar = $('.title-toolbar', para);
 				var marker = $('DIV.action.' + settings.marker_type, toolbar);
 				if (marker.exists()) {
@@ -407,39 +360,6 @@
 		},
 
 		/**
-		 * Milestones paragraph management
-		 */
-		milestones: {
-
-			refreshMilestones: function(options) {
-				// Reload widget
-				var widget = MyAMS.skin.refreshTable(options);
-				// Check fieldset state
-				var legend = widget.siblings('legend');
-				if (legend.parents('fieldset:first').hasClass('switched')) {
-					legend.click();
-				}
-			},
-
-			switchVisibility: function (element) {
-				return function () {
-					var source = $(this);
-					var milestone = source.parents('tr');
-					var container = milestone.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-milestone-visibility.json',
-						{object_name: milestone.data('ams-element-name')},
-						function (result, status) {
-							if (result.visible) {
-								$('i', source).attr('class', 'fa fa-fw fa-eye');
-							} else {
-								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-							}
-						});
-				};
-			}
-		},
-
-		/**
 		 * Pictograms management
 		 */
 		pictograms: {
@@ -461,33 +381,6 @@
 				} else {
 					$('.available-pictograms', manager).append(pictogram);
 				}
-			},
-
-			refreshPictograms: function(options) {
-				// Reload widget
-				var widget = MyAMS.skin.refreshTable(options);
-				// Check fieldset state
-				var legend = widget.siblings('legend');
-				if (legend.parents('fieldset:first').hasClass('switched')) {
-					legend.click();
-				}
-			},
-
-			switchVisibility: function (element) {
-				return function () {
-					var source = $(this);
-					var pictogram = source.parents('tr');
-					var container = pictogram.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-pictogram-visibility.json',
-						{object_name: pictogram.data('ams-element-name')},
-						function (result, status) {
-							if (result.visible) {
-								$('i', source).attr('class', 'fa fa-fw fa-eye');
-							} else {
-								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-							}
-						});
-				};
 			}
 		},
 
@@ -546,23 +439,6 @@
 				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);
-			},
-
-			switchVisibility: function (element) {
-				return function () {
-					var source = $(this);
-					var association = source.parents('tr');
-					var container = association.parents('table');
-					MyAMS.ajax.post(container.data('ams-location') + '/set-form-field-visibility.json',
-						{object_name: association.data('ams-element-name')},
-						function (result, status) {
-							if (result.visible) {
-								$('i', source).attr('class', 'fa fa-fw fa-eye');
-							} else {
-								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
-							}
-						});
-				};
 			}
 		},
 
@@ -638,14 +514,12 @@
 				return function() {
 					var source = $(this);
 					var content = source.parents('tr').first();
-					MyAMS.ajax.post(content.data('ams-location') + '/set-content-visibility.json',
+					MyAMS.ajax.post(content.data('ams-location') + '/switch-content-visibility.json',
 									{object_name: content.data('ams-element-name')},
 									function(result, status) {
-										var klass;
-										if (result.visible) {
-											klass = 'fa-eye';
-										} else {
-											klass = 'fa-eye-slash';
+										var klass = 'fa-eye';
+										if (!result.visible) {
+											klass += '-slash';
 										}
 										if (!result.published) {
 											klass += ' text-danger';