base.js 5.2 KB

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