123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- jQuery(document).ready(function() {
- jQuery('html').removeClass('no-js');
- Admin.add_pretty_errors(document);
- Admin.add_collapsed_toggle();
- Admin.add_filters(document);
- Admin.set_object_field_value(document);
- Admin.setup_collection_buttons(document);
- });
- var Admin = {
- /**
- * render log message
- * @param mixed
- */
- log: function() {
- var msg = '[Sonata.Admin] ' + Array.prototype.join.call(arguments,', ');
- if (window.console && window.console.log) {
- window.console.log(msg);
- } else if (window.opera && window.opera.postError) {
- window.opera.postError(msg);
- }
- },
- /**
- * display related errors messages
- *
- * @param subject
- */
- add_pretty_errors: function(subject) {
- jQuery('div.sonata-ba-field-error', subject).each(function(index, element) {
- var input = jQuery('input, textarea, select', element);
- var message = jQuery('div.sonata-ba-field-error-messages', element).html();
- jQuery('div.sonata-ba-field-error-messages', element).html('');
- if (!message) {
- message = '';
- }
- if (message.length == 0) {
- return;
- }
- var target;
- /* Hack to handle qTip on select */
- if(jQuery(input).is("select")) {
- jQuery(element).prepend("<span></span>");
- target = jQuery('span', element);
- jQuery(input).appendTo(target);
- }
- else {
- target = input;
- }
- target.qtip({
- content: message,
- show: 'focusin',
- hide: 'focusout',
- position: {
- corner: {
- target: 'rightMiddle',
- tooltip: 'leftMiddle'
- }
- },
- style: {
- name: 'red',
- border: {
- radius: 2
- },
- tip: 'leftMiddle'
- }
- });
- });
- },
- /**
- * Add the collapsed toggle option to the admin
- *
- * @param subject
- */
- add_collapsed_toggle: function(subject) {
- jQuery('fieldset.sonata-ba-fielset-collapsed').has('.error').addClass('sonata-ba-collapsed-fields-close');
- jQuery('fieldset.sonata-ba-fielset-collapsed div.sonata-ba-collapsed-fields').not(':has(.error)').hide();
- jQuery('fieldset legend a.sonata-ba-collapsed', subject).live('click', function(event) {
- event.preventDefault();
- var fieldset = jQuery(this).closest('fieldset');
- jQuery('div.sonata-ba-collapsed-fields', fieldset).slideToggle();
- fieldset.toggleClass('sonata-ba-collapsed-fields-close');
- });
- },
- stopEvent: function(event) {
- // https://github.com/sonata-project/SonataAdminBundle/issues/151
- //if it is a standard browser use preventDefault otherwise it is IE then return false
- if(event.preventDefault) {
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- //if it is a standard browser get target otherwise it is IE then adapt syntax and get target
- if (typeof event.target != 'undefined') {
- targetElement = event.target;
- } else {
- targetElement = event.srcElement;
- }
- return targetElement;
- },
- add_filters: function(subject) {
- jQuery('div.filter_container.inactive', subject).hide();
- jQuery('fieldset.filter_legend', subject).click(function(event) {
- jQuery('div.filter_container', jQuery(event.target).parent()).toggle();
- });
- },
- /**
- * Change object field value
- * @param subject
- */
- set_object_field_value: function(subject) {
- this.log(jQuery('a.sonata-ba-edit-inline', subject));
- jQuery('a.sonata-ba-edit-inline', subject).click(function(event) {
- Admin.stopEvent(event);
- var subject = jQuery(this);
- jQuery.ajax({
- url: subject.attr('href'),
- type: 'POST',
- success: function(json) {
- if(json.status === "OK") {
- var elm = jQuery(subject).parent();
- elm.children().remove();
- // fix issue with html comment ...
- elm.html(jQuery(json.content.replace(/<!--[\s\S]*?-->/g, "")).html());
- elm.effect("highlight", {'color' : '#57A957'}, 2000);
- Admin.set_object_field_value(elm);
- } else {
- jQuery(subject).parent().effect("highlight", {'color' : '#C43C35'}, 2000);
- }
- }
- });
- });
- },
- setup_collection_buttons: function(subject) {
- jQuery(subject).on('click', '.sonata-collection-add', function(event) {
- Admin.stopEvent(event);
- var container = jQuery(this).closest('[data-prototype]');
- var proto = container.attr('data-prototype');
- proto = proto.replace(/\$\$name\$\$/g, container.children().length);
- jQuery(proto).insertBefore(jQuery(this).parent());
-
- jQuery(this).trigger('sonata-collection-item-added');
- });
- jQuery(subject).on('click', '.sonata-collection-delete', function(event) {
- Admin.stopEvent(event);
- jQuery(this).closest('.sonata-collection-row').remove();
-
- jQuery(this).trigger('sonata-collection-item-deleted');
- });
- }
- }
|