base.js 4.2 KB

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