Эх сурвалжийг харах

增加 admin_javascript_json 函数

jqh 5 жил өмнө
parent
commit
0d83a92732

+ 1 - 1
resources/views/filter/between-datetime.blade.php

@@ -14,7 +14,7 @@
 </div>
 
 <script require="@moment,@bootstrap-datetimepicker">
-    var options = {!! json_encode($dateOptions) !!};
+    var options = {!! admin_javascript_json($dateOptions) !!};
 
     $('#{{ $id['start'] }}').datetimepicker(options);
     $('#{{ $id['end'] }}').datetimepicker($.extend(options, {useCurrent: false}));

+ 1 - 1
resources/views/filter/datetime.blade.php

@@ -22,5 +22,5 @@
 </div>
 
 <script require="@moment,@bootstrap-datetimepicker">
-    $('#{{ $id }}').datetimepicker({!! json_encode($options) !!});
+    $('#{{ $id }}').datetimepicker({!! admin_javascript_json($options) !!});
 </script>

+ 4 - 4
resources/views/filter/select.blade.php

@@ -16,15 +16,15 @@
 @include('admin::scripts.select')
 
 <script require="@select2">
-    var configs = {!! json_encode($configs) !!};
+    var configs = {!! admin_javascript_json($configs) !!};
 
     @yield('admin.select-ajax')
 
     @if(isset($remote))
-    $.ajax({!! $remote['ajaxOptions'] !!}).done(function(data) {
-        $("{{ $selector }}").select2($.extend({!! json_encode($configs) !!}, {
+    $.ajax({!! admin_javascript_json($remote['ajaxOptions']) !!}).done(function(data) {
+        $("{{ $selector }}").select2($.extend({!! admin_javascript_json($configs) !!}, {
             data: data,
-        })).val({!! $remote['values'] !!}).trigger("change");
+        })).val({!! json_encode($remote['values']) !!}).trigger("change");
     });
     @else
     $("{!! $selector !!}").select2(configs);

+ 1 - 1
resources/views/form/color.blade.php

@@ -26,7 +26,7 @@
 </div>
 
 <script require="@color">
-    $('{{ $selector }}').colorpicker({!! json_encode($options) !!}).on('colorpickerChange', function(event) {
+    $('{{ $selector }}').colorpicker({!! admin_javascript_json($options) !!}).on('colorpickerChange', function(event) {
         $(this).parents('.input-group').find('.input-group-prepend i').css('background-color', event.color.toString());
     });
 </script>

+ 1 - 1
resources/views/form/daterange.blade.php

@@ -32,7 +32,7 @@
 </div>
 
 <script require="@moment,@bootstrap-datetimepicker">
-    var options = {!! json_encode($options) !!};
+    var options = {!! admin_javascript_json($options) !!};
 
     $('{{ $selector['start'] }}').datetimepicker(options);
     $('{{ $selector['end'] }}').datetimepicker($.extend(options, {useCurrent: false}));

+ 1 - 1
resources/views/form/listbox.blade.php

@@ -19,5 +19,5 @@
 </div>
 
 <script require="@jquery.bootstrap-duallistbox">
-    $("{{ $selector }}").bootstrapDualListbox({!! $settings !!});
+    $("{{ $selector }}").bootstrapDualListbox({!! admin_javascript_json($settings) !!});
 </script>

+ 1 - 1
resources/views/form/number.blade.php

@@ -32,5 +32,5 @@
 <script require="@number-input">
     $('{{ $selector }}:not(.initialized)')
         .addClass('initialized')
-        .bootstrapNumber({!! json_encode($options) !!});
+        .bootstrapNumber({!! admin_javascript_json($options) !!});
 </script>

+ 2 - 2
resources/views/form/select-script.blade.php

@@ -2,12 +2,12 @@
 @include('admin::scripts.select')
 
 <script require="@select2">
-    var configs = {!! json_encode($configs) !!};
+    var configs = {!! admin_javascript_json($configs) !!};
 
     @yield('admin.select-ajax')
 
     @if(isset($remoteOptions))
-    $.ajax({!! json_encode($remoteOptions) !!}).done(function(data) {
+    $.ajax({!! admin_javascript_json($remoteOptions) !!}).done(function(data) {
         configs.data = data;
 
         $("{!! $selector !!}").each(function (_, select) {

+ 1 - 1
resources/views/form/selecttable.blade.php

@@ -33,6 +33,6 @@
         multiple: true,
         max: {{ $max }},
         @endif
-        values: {!! $options !!},
+        values: {!! json_encode($options) !!},
     });
 </script>

+ 1 - 1
resources/views/form/slider.blade.php

@@ -15,6 +15,6 @@
 
 <script require="@ionslider">
     setTimeout(function () {
-        $('{{ $selector }}').ionRangeSlider({!! $options !!})
+        $('{{ $selector }}').ionRangeSlider({!! admin_javascript_json($options) !!})
     }, 400);
 </script>

+ 3 - 3
resources/views/form/tree.blade.php

@@ -27,11 +27,11 @@
         tree = selector+' .jstree-wrapper .da-tree',
         $tree = $(tree),
         $input = $(selector+' .hidden-input'),
-        opts = {!! $options !!},
-        parents = {!! $parents !!};
+        opts = {!! admin_javascript_json($options) !!},
+        parents = {!! json_encode($parents) !!};
 
     opts.core = opts.core || {};
-    opts.core.data = {!! $nodes !!};
+    opts.core.data = {!! json_encode($nodes) !!};
 
     $(document).on("click", selector+" input[value=1]", function () {
         $(this).parents('.jstree-wrapper').find('.da-tree').jstree($(this).prop("checked") ? "check_all" : "uncheck_all");

+ 1 - 1
resources/views/grid/displayer/dialogtree.blade.php

@@ -104,7 +104,7 @@
 
 <script require="@jstree">
     var nodes = {!! json_encode($nodes) !!};
-    var options = {!! json_encode($options) !!};
+    var options = {!! admin_javascript_json($options) !!};
     var area = {!! json_encode($area) !!};
 
     $('.grid-dialog-tree').off('click').on('click', function () {

+ 1 - 1
resources/views/partials/toastr.blade.php

@@ -3,7 +3,7 @@
         $toastr  = Session::get('dcat-admin-toastr');
         $type    = $toastr->get('type')[0] ?? 'success';
         $message = $toastr->get('message')[0] ?? '';
-        $options = json_encode($toastr->get('options', []));
+        $options = admin_javascript_json($toastr->get('options', []));
     @endphp
     <script>$(function () { toastr.{{$type}}('{!!  $message  !!}', null, {!! $options !!}); })</script>
 @endif

+ 1 - 1
resources/views/widgets/form.blade.php

@@ -38,7 +38,7 @@
 <script>
     $('#{{ $elementId }}').form({
         validate: true,
-        confirm: {!! json_encode($confirm) !!},
+        confirm: {!! admin_javascript_json($confirm) !!},
         success: function (data) {
             {!! $savedScript !!}
         },

+ 1 - 1
resources/views/widgets/markdown.blade.php

@@ -1,5 +1,5 @@
 <div {!! $attributes !!}><textarea style="display:none;">{!! $content !!}</textarea></div>
 
 <script require="@editor-md">
-    editormd.markdownToHTML('{{ $id }}', {!! json_encode($options) !!});
+    editormd.markdownToHTML('{{ $id }}', {!! admin_javascript_json($options) !!});
 </script>

+ 3 - 3
resources/views/widgets/tree.blade.php

@@ -1,11 +1,11 @@
 <div  {!! $attributes !!}><div class="da-tree"></div></div>
 
 <script require="@jstree">
-    var opts = {!! json_encode($options) !!}, tree = $('#{{$id}}').find('.da-tree');
+    var opts = {!! admin_javascript_json($options) !!}, $tree = $('#{{$id}}').find('.da-tree');
 
     opts.core.data = {!! json_encode($nodes) !!};
 
-    tree.on("loaded.jstree", function () {
-        tree.jstree('open_all');
+    $tree.on("loaded.jstree", function () {
+        $tree.jstree('open_all');
     }).jstree(opts);
 </script>

+ 1 - 1
src/Actions/HasActionHandler.php

@@ -76,7 +76,7 @@ trait HasActionHandler
     {
         $data = json_encode($this->parameters());
         $confirm = $this->confirm();
-        $confirm = $confirm ? json_encode((array) $confirm) : 'false';
+        $confirm = $confirm ? admin_javascript_json((array) $confirm) : 'false';
 
         $script = <<<JS
 Dcat.Action({

+ 1 - 1
src/Admin.php

@@ -391,7 +391,7 @@ class Admin
         $jsVariables['sidebar_dark'] = config('admin.layout.sidebar_dark') || ($sidebarStyle === 'dark');
         $jsVariables['sidebar_light_style'] = in_array($sidebarStyle, ['dark', 'light'], true) ? 'sidebar-light-primary' : 'sidebar-primary';
 
-        return json_encode($jsVariables);
+        return admin_javascript_json($jsVariables);
     }
 
     /**

+ 1 - 1
src/Form/Builder.php

@@ -821,7 +821,7 @@ EOF;
      */
     protected function addSubmitScript()
     {
-        $confirm = json_encode($this->confirm);
+        $confirm = admin_javascript_json($this->confirm);
 
         Admin::script(
             <<<JS

+ 1 - 1
src/Form/Field/Date.php

@@ -36,7 +36,7 @@ class Date extends Text
         $this->options['locale'] = config('app.locale');
         $this->options['allowInputToggle'] = true;
 
-        $this->script = "$('{$this->getElementClassSelector()}').datetimepicker(".json_encode($this->options).');';
+        $this->script = "$('{$this->getElementClassSelector()}').datetimepicker(".admin_javascript_json($this->options).');';
 
         $this->prepend('<i class="fa fa-calendar fa-fw"></i>')
             ->defaultAttribute('style', 'width: 200px;flex:none');

+ 1 - 1
src/Form/Field/Listbox.php

@@ -28,7 +28,7 @@ class Listbox extends MultipleSelect
             'filterPlaceHolder' => trans('admin.listbox.filter_placeholder'),
         ]);
 
-        $this->addVariables(['settings' => json_encode($settings)]);
+        $this->addVariables(['settings' => $settings]);
 
         return parent::render();
     }

+ 1 - 1
src/Form/Field/SelectTable.php

@@ -121,7 +121,7 @@ class SelectTable extends Field
             }
         }
 
-        $this->options = json_encode($values);
+        $this->options = $values;
     }
 
     protected function setUpTable()

+ 0 - 7
src/Form/Field/Slider.php

@@ -11,11 +11,4 @@ class Slider extends Field
         'prettify' => false,
         'hasGrid'  => true,
     ];
-
-    public function render()
-    {
-        $this->addVariables(['options' => json_encode($this->options)]);
-
-        return parent::render();
-    }
 }

+ 1 - 19
src/Form/Field/Text.php

@@ -146,31 +146,13 @@ JS
     {
         Admin::js('@jquery.inputmask');
 
-        $options = $this->jsonEncodeOptions($options);
+        $options = admin_javascript_json($options);
 
         $this->script = "$('{$this->getElementClassSelector()}').inputmask($options);";
 
         return $this;
     }
 
-    /**
-     * Encode options to Json.
-     *
-     * @param array $options
-     *
-     * @return $json
-     */
-    protected function jsonEncodeOptions($options)
-    {
-        $data = $this->formatOptions($options);
-
-        $json = json_encode($data['options']);
-
-        $json = str_replace($data['toReplace'], $data['original'], $json);
-
-        return $json;
-    }
-
     /**
      * @param array $options
      *

+ 9 - 8
src/Form/Field/Tree.php

@@ -69,19 +69,21 @@ class Tree extends Field
     }
 
     /**
+     * 禁止过滤父节点.
+     *
+     * @param bool $value
+     *
      * @return $this
      */
-    public function disableFilterParents()
+    public function disableFilterParents(bool $value = true)
     {
-        $this->filterParents = false;
+        $this->filterParents = ! $value;
 
         return $this;
     }
 
     /**
-     * Set the field as readonly mode.
-     *
-     * @return $this
+     * {@inheritDoc}
      */
     public function readOnly()
     {
@@ -244,11 +246,10 @@ class Tree extends Field
 
         $this->addVariables([
             'checkboxes' => $checkboxes,
-            'options'    => json_encode($this->options),
-            'nodes'      => json_encode($this->nodes),
+            'nodes'      => $this->nodes,
             'expand'     => $this->expand,
             'disabled'   => empty($this->attributes['disabled']) ? '' : 'disabled',
-            'parents'    => json_encode($this->parents),
+            'parents'    => $this->parents,
         ]);
 
         return parent::render();

+ 1 - 1
src/Grid/Column/Filter/Equal.php

@@ -80,7 +80,7 @@ class Equal extends Filter
             'format'           => $this->dateFormat,
         ];
 
-        $options = json_encode($options);
+        $options = admin_javascript_json($options);
 
         Admin::script("$('.{$this->class}').datetimepicker($options);");
     }

+ 2 - 4
src/Grid/Filter/Presenter/Select.php

@@ -171,11 +171,9 @@ class Select extends Presenter
             ],
         ]);
 
-        $ajaxOptions = json_encode(array_merge($ajaxOptions, $options), JSON_UNESCAPED_UNICODE);
+        $ajaxOptions = array_merge($ajaxOptions, $options);
 
-        $values = (array) $this->filter->getValue();
-        $values = array_filter($values);
-        $values = json_encode($values);
+        $values = array_filter((array) $this->filter->getValue());
 
         return $this->addVariables([
             'remote' => compact('ajaxOptions', 'values'),

+ 4 - 2
src/Grid/Filter/Presenter/SelectTable.php

@@ -142,11 +142,13 @@ class SelectTable extends Presenter
             }
         }
 
-        $this->options = json_encode($values);
+        $this->options = $values;
     }
 
     protected function addScript()
     {
+        $options = json_encode($this->options);
+
         Admin::script(
             <<<JS
 {$this->dialog->getScript()}
@@ -155,7 +157,7 @@ Dcat.grid.SelectTable({
     dialog: '#{$this->dialog->id()}',
     container: '#{$this->id}',
     input: '#hidden-{$this->id}',
-    values: {$this->options},
+    values: {$options},
 });
 JS
         );

+ 1 - 1
src/Support/JavaScript.php

@@ -16,7 +16,7 @@ class JavaScript
 
     public function __construct($script)
     {
-        $this->id = Str::random();
+        $this->id = 'js('.Str::random().')';
 
         $this->value($script);
     }

+ 24 - 0
src/Support/helpers.php

@@ -493,3 +493,27 @@ if (! function_exists('admin_color')) {
         return Admin::color()->get($color);
     }
 }
+
+if (! function_exists('admin_javascript')) {
+    /**
+     * @param string|null $color
+     *
+     * @return string|\Dcat\Admin\Color
+     */
+    function admin_javascript($data)
+    {
+        return new Dcat\Admin\Support\JavaScript($data);
+    }
+}
+
+if (! function_exists('admin_javascript_json')) {
+    /**
+     * @param string|null $color
+     *
+     * @return string
+     */
+    function admin_javascript_json($data)
+    {
+        return Dcat\Admin\Support\JavaScript::format($data);
+    }
+}