base.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. jQuery(document).ready(function() {
  2. Admin.add_pretty_errors(document);
  3. Admin.add_collapsed_toggle();
  4. Admin.add_filters(document);
  5. Admin.set_object_field_value(document);
  6. });
  7. var Admin = {
  8. /**
  9. * render log message
  10. * @param mixed
  11. */
  12. log: function() {
  13. var msg = '[Sonata.Admin] ' + Array.prototype.join.call(arguments,', ');
  14. if (window.console && window.console.log) {
  15. window.console.log(msg);
  16. } else if (window.opera && window.opera.postError) {
  17. window.opera.postError(msg);
  18. }
  19. },
  20. /**
  21. * display related errors messages
  22. *
  23. * @param subject
  24. */
  25. add_pretty_errors: function(subject) {
  26. jQuery('div.sonata-ba-field-error', subject).each(function(index, element) {
  27. var input = jQuery('input, textarea, select', element);
  28. var message = jQuery('div.sonata-ba-field-error-messages', element).html();
  29. jQuery('div.sonata-ba-field-error-messages', element).html('');
  30. if (!message) {
  31. message = '';
  32. }
  33. if (message.length == 0) {
  34. return;
  35. }
  36. var target;
  37. /* Hack to handle qTip on select */
  38. if(jQuery(input).is("select")) {
  39. jQuery(element).prepend("<span></span>");
  40. target = jQuery('span', element);
  41. jQuery(input).appendTo(target);
  42. }
  43. else {
  44. target = input;
  45. }
  46. target.qtip({
  47. content: message,
  48. show: 'focusin',
  49. hide: 'focusout',
  50. position: {
  51. corner: {
  52. target: 'rightMiddle',
  53. tooltip: 'leftMiddle'
  54. }
  55. },
  56. style: {
  57. name: 'red',
  58. border: {
  59. radius: 2
  60. },
  61. tip: 'leftMiddle'
  62. }
  63. });
  64. });
  65. },
  66. /**
  67. * Add the collapsed toggle option to the admin
  68. *
  69. * @param subject
  70. */
  71. add_collapsed_toggle: function(subject) {
  72. jQuery('fieldset legend a.sonata-ba-collapsed', subject).live('click', function(event) {
  73. event.preventDefault();
  74. var fieldset = jQuery(this).closest('fieldset');
  75. jQuery('div.sonata-ba-collapsed-fields', fieldset).toggle();
  76. fieldset.toggleClass('sonata-ba-collapsed-fields-close');
  77. }).click();
  78. },
  79. stopEvent: function(event) {
  80. // https://github.com/sonata-project/SonataAdminBundle/issues/151
  81. //if it is a standard browser use preventDefault otherwise it is IE then return false
  82. if(event.preventDefault) {
  83. event.preventDefault();
  84. } else {
  85. event.returnValue = false;
  86. }
  87. //if it is a standard browser get target otherwise it is IE then adapt syntax and get target
  88. if (typeof event.target != 'undefined') {
  89. targetElement = event.target;
  90. } else {
  91. targetElement = event.srcElement;
  92. }
  93. return targetElement;
  94. },
  95. add_filters: function(subject) {
  96. jQuery('div.filter_container', subject).hide();
  97. jQuery('fieldset.filter_legend', subject).click(function(event) {
  98. jQuery('div.filter_container', jQuery(event.target).parent()).toggle();
  99. });
  100. },
  101. /**
  102. * Change object field value
  103. * @param subject
  104. */
  105. set_object_field_value: function(subject) {
  106. this.log(jQuery('a.sonata-ba-edit-inline', subject));
  107. jQuery('a.sonata-ba-edit-inline', subject).click(function(event) {
  108. Admin.stopEvent(event);
  109. var subject = jQuery(this);
  110. jQuery.ajax({
  111. url: subject.attr('href'),
  112. type: 'POST',
  113. success: function(json) {
  114. if(json.status === "OK") {
  115. var elm = jQuery(subject).parent();
  116. elm.children().remove();
  117. // fix issue with html comment ...
  118. elm.html(jQuery(json.content.replace(/<!--[\s\S]*?-->/g, "")).html());
  119. elm.effect("highlight", {'color' : '#57A957'}, 2000);
  120. Admin.set_object_field_value(elm);
  121. } else {
  122. jQuery(a).parent().effect("highlight", {'color' : '#C43C35'}, 2000);
  123. }
  124. }
  125. });
  126. });
  127. }
  128. }