template.blade.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <span class="ie-wrap">
  2. <a
  3. href="javascript:void(0);"
  4. class="{{ $class }}"
  5. data-editinline="popover"
  6. data-temp="grid-editinline-{{ $type }}-{{ $name }}"
  7. data-value="{{ $value }}"
  8. data-original="{{ $value }}"
  9. data-key="{{ $key }}"
  10. data-name="{{ $name }}"
  11. data-url="{!! $url !!}"
  12. data-refresh="{{ $refresh }}"
  13. >
  14. <span class="ie-display">{{ $display }}</span>
  15. </a>
  16. </span>
  17. <template>
  18. <template id="grid-editinline-{{ $type }}-{{ $name }}">
  19. <div class="ie-content ie-content-{{ $name }}" data-type="{{ $type }}">
  20. <div class="ie-container">
  21. @yield('field')
  22. <div class="error"></div>
  23. </div>
  24. <div class="ie-action">
  25. <button class="btn btn-primary btn-sm ie-submit">{{ __('admin.submit') }}</button>
  26. <button class="btn btn-white btn-sm ie-cancel">{{ __('admin.cancel') }}</button>
  27. </div>
  28. </div>
  29. </template>
  30. </template>
  31. <style>
  32. .ie-action button {
  33. margin: 10px 0 10px 10px;
  34. float: right;
  35. }
  36. [data-editinline="popover"] {
  37. border-bottom:dashed 1px @primary;
  38. color: @primary;
  39. display: inline-block;
  40. }
  41. body.dark-mode [data-editinline="popover"] {
  42. color: @primary;
  43. border-color: @primary;
  44. }
  45. </style>
  46. <script>
  47. function hide() {
  48. $('[data-editinline="popover"]').popover('hide');
  49. }
  50. $('.{{ $class }}').popover({
  51. html: true,
  52. container: 'body',
  53. trigger: 'manual',
  54. sanitize: false,
  55. placement: function (context, source) {
  56. var position = $(source).position();
  57. if (position.left < 100) return "right";
  58. if (position.top < 110) return "bottom";
  59. if ($(window).height() - $(source).offset().top < 370) {
  60. return 'top';
  61. }
  62. return "bottom";
  63. },
  64. content: function () {
  65. var $trigger = $(this);
  66. var $template = $($('template#'+$(this).data('temp')).html());
  67. @yield('popover-content')
  68. return $template.prop("outerHTML");
  69. }
  70. }).on('shown.bs.popover', function (e) {
  71. var $popover = $($(this).data('bs.popover').tip).find('.ie-content');
  72. var $display = $(this).parents('.ie-wrap').find('.ie-display');
  73. var $trigger = $(this);
  74. $popover.data('display', $display);
  75. $popover.data('trigger', $trigger);
  76. @yield('popover-shown')
  77. }).click(function () {
  78. hide();
  79. $(this).popover('toggle');
  80. });
  81. </script>
  82. <script>
  83. function hide() {
  84. $('[data-editinline="popover"]').popover('hide');
  85. }
  86. $(document).off('click', '.ie-content .ie-cancel').on('click', '.ie-content .ie-cancel', hide)
  87. $(document).off('click', '.ie-content .ie-submit').on('click', '.ie-content .ie-submit', function () {
  88. var $popover = $(this).closest('.ie-content'),
  89. $trigger = $popover.data('trigger'),
  90. original = $trigger.data('original'),
  91. refresh = $trigger.data('refresh'),
  92. val,
  93. label;
  94. switch($popover.data('type')) {
  95. case 'input':
  96. case 'textarea':
  97. val = $popover.find('.ie-input').val();
  98. label = val;
  99. break;
  100. }
  101. if (val == original) {
  102. hide();
  103. return;
  104. }
  105. Dcat.NP.start();
  106. var data = {};
  107. data[$trigger.data('name')] = val;
  108. data['_inline_edit_'] = 1;
  109. $.put({
  110. url: $trigger.data('url'),
  111. data: data,
  112. error:function(a,b,c) {
  113. Dcat.handleAjaxError(a, b, c);
  114. },
  115. }).done(function (res) {
  116. Dcat.NP.done();
  117. var data = res.data;
  118. if (res.status === true) {
  119. Dcat.success(data.message);
  120. $popover.data('display').html(label);
  121. $trigger.data('value', val).data('original', val);
  122. hide();
  123. refresh && Dcat.reload();
  124. } else {
  125. Dcat.error(data.message);
  126. }
  127. });
  128. });
  129. </script>