template.blade.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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">
  15. {{ $display }}
  16. @if(! $display)
  17. <i class="feather icon-edit-2"></i>
  18. @endif
  19. </span>
  20. </a>
  21. </span>
  22. <template>
  23. <template id="grid-editinline-{{ $type }}-{{ $name }}">
  24. <div class="ie-content ie-content-{{ $name }}" data-type="{{ $type }}">
  25. <div class="ie-container">
  26. @yield('field')
  27. <div class="error"></div>
  28. </div>
  29. <div class="ie-action">
  30. <button class="btn btn-primary btn-sm ie-submit">{{ __('admin.submit') }}</button>
  31. <button class="btn btn-white btn-sm ie-cancel">{{ __('admin.cancel') }}</button>
  32. </div>
  33. </div>
  34. </template>
  35. </template>
  36. <style>
  37. .ie-action button {
  38. margin: 10px 0 10px 10px;
  39. float: right;
  40. }
  41. [data-editinline="popover"] {
  42. border-bottom:dashed 1px @primary;
  43. color: @primary;
  44. display: inline-block;
  45. }
  46. body.dark-mode [data-editinline="popover"] {
  47. color: @primary;
  48. border-color: @primary;
  49. }
  50. </style>
  51. <script>
  52. function hide() {
  53. $('[data-editinline="popover"]').popover('hide');
  54. }
  55. $('.{{ $class }}').popover({
  56. html: true,
  57. container: 'body',
  58. trigger: 'manual',
  59. sanitize: false,
  60. placement: function (context, source) {
  61. var position = $(source).position();
  62. if (position.left < 100) return "right";
  63. if (position.top < 110) return "bottom";
  64. if ($(window).height() - $(source).offset().top < 370) {
  65. return 'top';
  66. }
  67. return "bottom";
  68. },
  69. content: function () {
  70. var $trigger = $(this);
  71. var $template = $($('template#'+$(this).data('temp')).html());
  72. @yield('popover-content')
  73. return $template.prop("outerHTML");
  74. }
  75. }).on('shown.bs.popover', function (e) {
  76. var $popover = $($(this).data('bs.popover').tip).find('.ie-content');
  77. var $display = $(this).parents('.ie-wrap').find('.ie-display');
  78. var $trigger = $(this);
  79. $popover.data('display', $display);
  80. $popover.data('trigger', $trigger);
  81. @yield('popover-shown')
  82. }).click(function () {
  83. hide();
  84. $(this).popover('toggle');
  85. });
  86. </script>
  87. <script>
  88. function hide() {
  89. $('[data-editinline="popover"]').popover('hide');
  90. }
  91. $(document).off('click', '.ie-content .ie-cancel').on('click', '.ie-content .ie-cancel', hide)
  92. $(document).off('click', '.ie-content .ie-submit').on('click', '.ie-content .ie-submit', function () {
  93. var $popover = $(this).closest('.ie-content'),
  94. $trigger = $popover.data('trigger'),
  95. name = $trigger.data('name'),
  96. original = $trigger.data('original'),
  97. refresh = $trigger.data('refresh'),
  98. val,
  99. label;
  100. switch($popover.data('type')) {
  101. case 'input':
  102. case 'textarea':
  103. val = $popover.find('.ie-input').val();
  104. label = val;
  105. break;
  106. case 'checkbox':
  107. val = [];
  108. label = [];
  109. $popover.find('.ie-input:checked').each(function(){
  110. val.push($(this).val());
  111. label.push($(this).parent().text());
  112. });
  113. label = label.join(';');
  114. break;
  115. case 'radio':
  116. val = $popover.find('.ie-input:checked').val();
  117. label = $popover.find('.ie-input:checked').parent().text();
  118. break;
  119. }
  120. if (val == original) {
  121. hide();
  122. return;
  123. }
  124. Dcat.NP.start();
  125. var data = {};
  126. if (name.indexOf('.') === -1) {
  127. data[name] = val;
  128. } else {
  129. name = name.split('.');
  130. data[name[0]] = {};
  131. data[name[0]][name[1]] = val;
  132. }
  133. data['_inline_edit_'] = 1;
  134. $.put({
  135. url: $trigger.data('url'),
  136. data: data,
  137. error:function(a,b,c) {
  138. Dcat.handleAjaxError(a, b, c);
  139. },
  140. }).done(function (res) {
  141. Dcat.NP.done();
  142. var data = res.data;
  143. if (res.status === true) {
  144. Dcat.success(data.message);
  145. var $display = $popover.data('display');
  146. $display.text(label);
  147. if (! label) {
  148. $display.html('<i class="feather icon-edit-2"></i>');
  149. }
  150. $trigger.data('value', val).data('original', val);
  151. hide();
  152. refresh && Dcat.reload();
  153. } else {
  154. Dcat.error(data.message);
  155. }
  156. });
  157. });
  158. </script>