src/pyams_content/skin/resources/js/pyams_content.js
changeset 141 643417150ee3
parent 70 ba26f4023bc2
child 171 13db231ca918
equal deleted inserted replaced
140:67bad9f880ee 141:643417150ee3
    16 				settings.link_list = PyAMS_content.TinyMCE.getLinksList;
    16 				settings.link_list = PyAMS_content.TinyMCE.getLinksList;
    17 				return settings;
    17 				return settings;
    18 			},
    18 			},
    19 
    19 
    20 			getImagesList: function(callback) {
    20 			getImagesList: function(callback) {
    21 				return MyAMS.ajax.post('get-images-list.json', {}, callback);
    21 				var form = $(document.activeElement).parents('form');
       
    22 				if (form.exists()) {
       
    23 					var base = form.attr('data-ams-form-handler') || form.attr('action');
       
    24 					var target = base.substr(0, base.lastIndexOf('/') + 1);
       
    25 					return MyAMS.ajax.post(target + 'get-images-list.json', {}, callback);
       
    26 				}
    22 			},
    27 			},
    23 
    28 
    24 			getLinksList: function(callback) {
    29 			getLinksList: function(callback) {
    25 				return MyAMS.ajax.post('get-links-list.json', {}, callback);
    30 				var form = $(document.activeElement).parents('form');
       
    31 				if (form.exists()) {
       
    32 					var base = form.attr('data-ams-form-handler') || form.attr('action');
       
    33 					var target = base.substr(0, base.lastIndexOf('/')+1);
       
    34 					return MyAMS.ajax.post(target + 'get-links-list.json', {}, callback);
       
    35 				}
    26 			}
    36 			}
    27 		},
    37 		},
    28 
    38 
    29 		/**
    39 		/**
    30 		 * User profile management
    40 		 * User profile management
    47 								});
    57 								});
    48 			}
    58 			}
    49 		},
    59 		},
    50 
    60 
    51 		/**
    61 		/**
    52 		 * External files management
       
    53 		 */
       
    54 		extfiles: {
       
    55 
       
    56 			refresh: function(options) {
       
    57 				if (typeof(options) === 'string') {
       
    58 					options = JSON.parse(options);
       
    59 				}
       
    60 				var select = $('select[name="form.widgets.files:list"]');
       
    61 				var plugin = select.data('select2');
       
    62 				$('<option></option>').attr('value', options.new_file.id)
       
    63 									  .attr('selected', 'selected')
       
    64 									  .text(options.new_file.text)
       
    65 									  .appendTo(select);
       
    66 				var data = select.select2('data');
       
    67 				data.push(options.new_file);
       
    68 				select.select2('data', data);
       
    69 				plugin.results.empty();
       
    70 				plugin.opts.populateResults.call(plugin, plugin.results, options.files, {term: ''});
       
    71 			},
       
    72 
       
    73 			refreshContainer: function(changes) {
       
    74 				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]');
       
    75 				var counter = $('span.count', $('div.action.extfiles', para));
       
    76 				if (changes.nb_files > 0) {
       
    77 					counter.text('(' + changes.nb_files + ')');
       
    78 				} else {
       
    79 					counter.text('');
       
    80 				}
       
    81 			}
       
    82 		},
       
    83 
       
    84 
       
    85 		/**
       
    86 		 * Links management
       
    87 		 */
       
    88 		links: {
       
    89 
       
    90 			init: function() {
       
    91 
       
    92 				function initElements(data, status) {
       
    93 					var plugin = select.data('select2');
       
    94 					plugin.results.empty();
       
    95 					plugin.opts.populateResults.call(plugin, plugin.results, data, {term: ''});
       
    96 				}
       
    97 
       
    98 				var select = $(this);
       
    99 				MyAMS.ajax.post('get-links.json', {
       
   100 					keyFieldName: 'id',
       
   101 					valueFieldName: 'text'
       
   102 				}, initElements);
       
   103 			},
       
   104 
       
   105 			refresh: function(options) {
       
   106 				if (typeof(options) === 'string') {
       
   107 					options = JSON.parse(options);
       
   108 				}
       
   109 				var select = $('input[name="form.widgets.link"], select[name="form.widgets.links:list"]');
       
   110 				var plugin = select.data('select2');
       
   111 				if (select.attr('type') === 'select') {
       
   112 					$('<option></option>').attr('value', options.new_link.id)
       
   113 										  .attr('selected', 'selected')
       
   114 										  .text(options.new_link.text)
       
   115 										  .appendTo(select);
       
   116 				}
       
   117 				var data;
       
   118 				if (select.prop('multiple')) {
       
   119 					data = select.select2('data');
       
   120 					data.push(options.new_link);
       
   121 					select.select2('data', data);
       
   122 					plugin.results.empty();
       
   123 					plugin.opts.populateResults.call(plugin, plugin.results, options.links, {term: ''});
       
   124 				} else {
       
   125 					select.select2('data', [options.new_link]);
       
   126 					plugin.results.empty();
       
   127 					plugin.opts.populateResults.call(plugin, plugin.results, options.links, {term: ''});
       
   128 					select.val(options.new_link.id);
       
   129 				}
       
   130 			},
       
   131 
       
   132 			refreshContainer: function(changes) {
       
   133 				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]');
       
   134 				var counter = $('span.count', $('div.action.links', para));
       
   135 				if (changes.nb_links > 0) {
       
   136 					counter.text('(' + changes.nb_links + ')');
       
   137 				} else {
       
   138 					counter.text('');
       
   139 				}
       
   140 			}
       
   141 		},
       
   142 
       
   143 
       
   144 		/**
       
   145 		 * Galleries management
    62 		 * Galleries management
   146 		 */
    63 		 */
   147 		galleries: {
    64 		galleries: {
       
    65 
       
    66 			switchImageVisibility: function(element) {
       
    67 				return function() {
       
    68 					var source = $(this);
       
    69 					var image = source.parents('.image');
       
    70 					var gallery = image.parents('.gallery');
       
    71 					MyAMS.ajax.post(gallery.data('ams-location') + '/set-image-visibility.json',
       
    72 									{object_name: image.data('ams-element-name')},
       
    73 									function(result, status) {
       
    74 										if (result.visible) {
       
    75 											$('i', source).attr('class', 'fa fa-fw fa-eye');
       
    76 										} else {
       
    77 											$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
       
    78 										}
       
    79 									});
       
    80 				};
       
    81 			},
   148 
    82 
   149 			refresh: function(options) {
    83 			refresh: function(options) {
   150 				if (typeof(options) === 'string') {
    84 				if (typeof(options) === 'string') {
   151 					options = JSON.parse(options);
    85 					options = JSON.parse(options);
   152 				}
    86 				}
   262 			},
   196 			},
   263 
   197 
   264 			refreshParagraph: function(changes) {
   198 			refreshParagraph: function(changes) {
   265 				var container = $('table[id="paragraphs_list"]');
   199 				var container = $('table[id="paragraphs_list"]');
   266 				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container);
   200 				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container);
   267 				if (changes.visible) {
   201 				$('span.title', para).html(changes.title || ' - - - - - - - -');
   268 					$('i', $('td.switcher', para)).removeClass('fa-eye-slash text-danger')
       
   269 												  .addClass('fa-eye');
       
   270 				} else {
       
   271 					$('i', $('td.switcher', para)).removeClass('fa-eye')
       
   272 												  .addClass('fa-eye-slash text-danger');
       
   273 				}
       
   274 				$('span.title', para).text(changes.title || '--');
       
   275 			},
   202 			},
   276 
   203 
   277 			switchEditor: function(element) {
   204 			switchEditor: function(element) {
   278 				var source = $(this);
   205 				var source = $(this);
   279 				var switcher = $('i', source);
   206 				var switcher = $('i', source);
   344 			}
   271 			}
   345 		},
   272 		},
   346 
   273 
   347 
   274 
   348 		/**
   275 		/**
       
   276 		 * Associations management
       
   277 		 */
       
   278 		associations: {
       
   279 
       
   280 			afterUpdateCallback: function(options) {
       
   281 				// Reload widget
       
   282 				var widget = $('#' + options.parent).parent('.ams-widget');
       
   283 				widget.replaceWith($(options.table));
       
   284 				widget = $('#' + options.parent).parent('.ams-widget');
       
   285 				MyAMS.initContent(widget);
       
   286 				// Check fieldset state
       
   287 				var legend = widget.siblings('legend');
       
   288 				if (legend.parents('fieldset:first').hasClass('switched')) {
       
   289 					legend.click();
       
   290 				}
       
   291 			},
       
   292 
       
   293 			switchVisibility: function (element) {
       
   294 				return function () {
       
   295 					var source = $(this);
       
   296 					var association = source.parents('tr');
       
   297 					var container = association.parents('table');
       
   298 					MyAMS.ajax.post(container.data('ams-location') + '/set-association-visibility.json',
       
   299 						{object_name: association.data('ams-element-name')},
       
   300 						function (result, status) {
       
   301 							if (result.visible) {
       
   302 								$('i', source).attr('class', 'fa fa-fw fa-eye');
       
   303 							} else {
       
   304 								$('i', source).attr('class', 'fa fa-fw fa-eye-slash text-danger');
       
   305 							}
       
   306 						});
       
   307 				};
       
   308 			}
       
   309 		},
       
   310 
       
   311 
       
   312 		/**
       
   313 		 * Illustration management
       
   314 		 */
       
   315 		illustration: {
       
   316 
       
   317 			afterUpdateCallback: function(options) {
       
   318 				var parent = $('#' + options.parent);
       
   319 				parent.replaceWith($(options.form));
       
   320 				parent = $('#' + options.parent);
       
   321 				MyAMS.initContent(parent);
       
   322 			}
       
   323 		},
       
   324 
       
   325 
       
   326 		/**
   349 		 * Themes management
   327 		 * Themes management
   350 		 */
   328 		 */
   351 		themes: {
   329 		themes: {
   352 
   330 
   353 			initExtracts: function(element) {
   331 			initExtracts: function(element) {
   473 	$(globals.document).on('PyAMS_content.changed_item', function(event, settings) {
   451 	$(globals.document).on('PyAMS_content.changed_item', function(event, settings) {
   474 		switch (settings.object_type) {
   452 		switch (settings.object_type) {
   475 			case 'paragraph':
   453 			case 'paragraph':
   476 				PyAMS_content.paragraphs.refreshParagraph(settings);
   454 				PyAMS_content.paragraphs.refreshParagraph(settings);
   477 				break;
   455 				break;
   478 			case 'extfiles_container':
       
   479 				PyAMS_content.extfiles.refreshContainer(settings);
       
   480 				break;
       
   481 			case 'links_container':
       
   482 				PyAMS_content.links.refreshContainer(settings);
       
   483 				break;
       
   484 			case 'galleries_container':
       
   485 				PyAMS_content.galleries.refreshContainer(settings);
       
   486 				break;
       
   487 			case 'review_comments':
   456 			case 'review_comments':
   488 				PyAMS_content.review.updateComments();
   457 				PyAMS_content.review.updateComments();
   489 				break;
   458 				break;
   490 		}
   459 		}
   491 	});
   460 	});