Browse Source

Merge branch '2.0' into gitee2

jqh 4 years ago
parent
commit
caf8eedba0

+ 2 - 1
.gitattributes

@@ -1 +1,2 @@
-resources/assets/* linguist-vendored
+resources/* linguist-vendored
+*.js linguist-language=php

+ 44 - 44
resources/views/grid/displayer/select.blade.php

@@ -1,44 +1,44 @@
-<div class="input-group input-group-sm">
-    <select style="width: 100%;" class="grid-column-select" data-url="{{ $url }}" data-name="{{ $column }}">
-        @foreach($options as $k => $v)
-            @php($selected = Dcat\Admin\Support\Helper::equal($k, $value)  ? 'selected' : '')
-
-            <option value="{{ $k }}" {{ $selected }}>{{ $v }}</option>
-        @endforeach
-
-    </select>
-</div>
-
-<script require="@select2?lang={{ config('app.locale') === 'en' ? '' : str_replace('_', '-', config('app.locale')) }}">
-    $('.grid-column-select').off('change').select2().on('change', function(){
-        var value = $(this).val(),
-            name = $(this).data('name'),
-            url = $(this).data('url'),
-            data = {},
-            reload = '{{ $refresh }}';
-
-        if (name.indexOf('.') === -1) {
-            data[name] = value;
-        } else {
-            name = name.split('.');
-
-            data[name[0]] = {};
-            data[name[0]][name[1]] = value;
-        }
-
-        Dcat.NP.start();
-        $.put({
-            url: url,
-            data: data,
-            success: function (d) {
-                Dcat.NP.done();
-                if (d.status) {
-                    Dcat.success(d.data.message);
-                    reload && Dcat.reload();
-                } else {
-                    Dcat.error(d.data.message);
-                }
-            }
-        });
-    });
-</script>
+<div class="input-group input-group-sm">
+    <select style="width: 100%;" class="grid-column-select" data-reload="{{ $refresh }}" data-url="{{ $url }}" data-name="{{ $column }}">
+        @foreach($options as $k => $v)
+            @php($selected = Dcat\Admin\Support\Helper::equal($k, $value)  ? 'selected' : '')
+
+            <option value="{{ $k }}" {{ $selected }}>{{ $v }}</option>
+        @endforeach
+
+    </select>
+</div>
+
+<script require="@select2?lang={{ config('app.locale') === 'en' ? '' : str_replace('_', '-', config('app.locale')) }}">
+    $('.grid-column-select').off('change').select2().on('change', function(){
+        var value = $(this).val(),
+            name = $(this).data('name'),
+            url = $(this).data('url'),
+            data = {},
+            reload = $(this).data('reload');
+
+        if (name.indexOf('.') === -1) {
+            data[name] = value;
+        } else {
+            name = name.split('.');
+
+            data[name[0]] = {};
+            data[name[0]][name[1]] = value;
+        }
+
+        Dcat.NP.start();
+        $.put({
+            url: url,
+            data: data,
+            success: function (d) {
+                Dcat.NP.done();
+                if (d.status) {
+                    Dcat.success(d.data.message);
+                    reload && Dcat.reload();
+                } else {
+                    Dcat.error(d.data.message);
+                }
+            }
+        });
+    });
+</script>

+ 51 - 51
resources/views/grid/displayer/switch.blade.php

@@ -1,51 +1,51 @@
-<input class="grid-column-switch" data-url="{{ $url }}" data-size="small" name="{{ $column }}" {{ $checked }} type="checkbox" data-color="{{ $color }}"/>
-
-<script require="@switchery">
-    var swt = $('.grid-column-switch'),
-        that,
-        reload = '{{ $refresh }}';
-    function initSwitchery() {
-        swt.parent().find('.switchery').remove();
-        swt.each(function () {
-            that = $(this);
-            new Switchery(that[0], that.data())
-        })
-    }
-    initSwitchery();
-
-    swt.off('change').on('change', function(e) {
-        var that = $(this),
-            url = that.data('url'),
-            checked = that.is(':checked'),
-            name = that.attr('name'),
-            data = {},
-            value = checked ? 1 : 0;
-
-        if (name.indexOf('.') === -1) {
-            data[name] = value;
-        } else {
-            name = name.split('.');
-
-            data[name[0]] = {};
-            data[name[0]][name[1]] = value;
-        }
-
-        Dcat.NP.start();
-
-        $.put({
-            url: url,
-            data: data,
-            success: function (d) {
-                Dcat.NP.done();
-                var msg = d.data.message || d.message;
-
-                if (d.status) {
-                    Dcat.success(msg);
-                    reload && Dcat.reload();
-                } else {
-                    Dcat.error(msg);
-                }
-            }
-        });
-    });
-</script>
+<input class="grid-column-switch" data-url="{{ $url }}" data-reload="{{ $refresh }}}" data-size="small" name="{{ $column }}" {{ $checked }} type="checkbox" data-color="{{ $color }}"/>
+
+<script require="@switchery">
+    var swt = $('.grid-column-switch'),
+        that;
+    function initSwitchery() {
+        swt.parent().find('.switchery').remove();
+        swt.each(function () {
+            that = $(this);
+            new Switchery(that[0], that.data())
+        })
+    }
+    initSwitchery();
+
+    swt.off('change').on('change', function(e) {
+        var that = $(this),
+            url = that.data('url'),
+            reload = that.data('reload'),
+            checked = that.is(':checked'),
+            name = that.attr('name'),
+            data = {},
+            value = checked ? 1 : 0;
+
+        if (name.indexOf('.') === -1) {
+            data[name] = value;
+        } else {
+            name = name.split('.');
+
+            data[name[0]] = {};
+            data[name[0]][name[1]] = value;
+        }
+
+        Dcat.NP.start();
+
+        $.put({
+            url: url,
+            data: data,
+            success: function (d) {
+                Dcat.NP.done();
+                var msg = d.data.message || d.message;
+
+                if (d.status) {
+                    Dcat.success(msg);
+                    reload && Dcat.reload();
+                } else {
+                    Dcat.error(msg);
+                }
+            }
+        });
+    });
+</script>

+ 2 - 2
resources/views/tree/branch.blade.php

@@ -1,4 +1,4 @@
-<li class="dd-item" data-id="{{ $branch[$keyName] }}">
+<li class="dd-item {!! $expand ? '' : 'dd-collapsed' !!}" data-id="{{ $branch[$keyName] }}">
     <div class="dd-handle">
         {!! $branchCallback($branch) !!}
         <span class="pull-right dd-nodrag">
@@ -12,4 +12,4 @@
         @endforeach
     </ol>
     @endif
-</li>
+</li>

+ 87 - 83
resources/views/tree/container.blade.php

@@ -1,83 +1,87 @@
-<div class="card-header pb-1 with-border" style="padding:.9rem 1rem">
-
-    <div>
-        <div class="btn-group" style="margin-right:3px">
-            <button class="btn btn-primary btn-sm {{ $id }}-tree-tools" data-action="expand">
-                <i class="feather icon-plus-square"></i>&nbsp;<span class="d-none d-sm-inline">{{ trans('admin.expand') }}</span>
-            </button>
-            <button class="btn btn-primary btn-sm {{ $id }}-tree-tools" data-action="collapse">
-                <i class="feather icon-minus-square"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.collapse') }}</span>
-            </button>
-        </div>
-
-        @if($useSave)
-            &nbsp;<div class="btn-group" style="margin-right:3px">
-                <button class="btn btn-primary btn-sm {{ $id }}-save" ><i class="feather icon-save"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.save') }}</span></button>
-            </div>
-        @endif
-
-        @if($useRefresh)
-            &nbsp;<div class="btn-group" style="margin-right:3px">
-                <button class="btn btn-outline-primary btn-sm" data-action="refresh" ><i class="feather icon-refresh-cw"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.refresh') }}</span></button>
-            </div>
-        @endif
-
-        @if($tools)
-            &nbsp;<div class="btn-group" style="margin-right:3px">
-                {!! $tools !!}
-            </div>
-        @endif
-    </div>
-
-    <div>
-        {!! $createButton !!}
-    </div>
-
-</div>
-
-<div class="card-body table-responsive">
-    <div class="dd" id="{{ $id }}">
-        <ol class="dd-list">
-            @if($items)
-                @foreach($items as $branch)
-                    @include($branchView)
-                @endforeach
-            @else
-                <span class="help-block" style="margin-bottom:0"><i class="feather icon-alert-circle"></i>&nbsp;{{ trans('admin.no_data') }}</span>
-            @endif
-        </ol>
-    </div>
-</div>
-
-<script require="@jquery.nestable">
-    var id = '{{ $id }}';
-    var tree = $('#'+id);
-
-    tree.nestable({!! admin_javascript_json($nestableOptions) !!});
-
-    $('.'+id+'-save').on('click', function () {
-        var serialize = tree.nestable('serialize'), _this = $(this);
-        _this.buttonLoading();
-        $.post({
-            url: '{{ $url }}',
-            data: {
-                '{{ \Dcat\Admin\Tree::SAVE_ORDER_NAME }}': JSON.stringify(serialize)
-            },
-            success: function (data) {
-                _this.buttonLoading(false);
-
-                Dcat.handleJsonResponse(data)
-            }
-        });
-    });
-
-    $('.'+id+'-tree-tools').on('click', function(e){
-        var action = $(this).data('action');
-        if (action === 'expand') {
-            tree.nestable('expandAll');
-        }
-        if (action === 'collapse') {
-            tree.nestable('collapseAll');
-        }
-    });
-</script>
+<div class="card-header pb-1 with-border" style="padding:.9rem 1rem">
+
+    <div>
+        <div class="btn-group" style="margin-right:3px">
+            <button class="btn btn-primary btn-sm {{ $id }}-tree-tools" data-action="expand">
+                <i class="feather icon-plus-square"></i>&nbsp;<span class="d-none d-sm-inline">{{ trans('admin.expand') }}</span>
+            </button>
+            <button class="btn btn-primary btn-sm {{ $id }}-tree-tools" data-action="collapse">
+                <i class="feather icon-minus-square"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.collapse') }}</span>
+            </button>
+        </div>
+
+        @if($useSave)
+            &nbsp;<div class="btn-group" style="margin-right:3px">
+                <button class="btn btn-primary btn-sm {{ $id }}-save" ><i class="feather icon-save"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.save') }}</span></button>
+            </div>
+        @endif
+
+        @if($useRefresh)
+            &nbsp;<div class="btn-group" style="margin-right:3px">
+                <button class="btn btn-outline-primary btn-sm" data-action="refresh" ><i class="feather icon-refresh-cw"></i><span class="d-none d-sm-inline">&nbsp;{{ trans('admin.refresh') }}</span></button>
+            </div>
+        @endif
+
+        @if($tools)
+            &nbsp;<div class="btn-group" style="margin-right:3px">
+                {!! $tools !!}
+            </div>
+        @endif
+    </div>
+
+    <div>
+        {!! $createButton !!}
+    </div>
+
+</div>
+
+<div class="card-body table-responsive">
+    <div class="dd" id="{{ $id }}">
+        <ol class="dd-list">
+            @if($items)
+                @foreach($items as $branch)
+                    @include($branchView)
+                @endforeach
+            @else
+                <span class="help-block" style="margin-bottom:0"><i class="feather icon-alert-circle"></i>&nbsp;{{ trans('admin.no_data') }}</span>
+            @endif
+        </ol>
+    </div>
+</div>
+
+<script require="@jquery.nestable">
+    var id = '{{ $id }}';
+    var tree = $('#'+id);
+
+    tree.nestable({!! admin_javascript_json($nestableOptions) !!});
+
+    $('.'+id+'-save').on('click', function () {
+        var serialize = tree.nestable('serialize'), _this = $(this);
+        _this.buttonLoading();
+        $.post({
+            url: '{{ $url }}',
+            data: {
+                '{{ \Dcat\Admin\Tree::SAVE_ORDER_NAME }}': JSON.stringify(serialize)
+            },
+            success: function (data) {
+                _this.buttonLoading(false);
+
+                Dcat.handleJsonResponse(data)
+            }
+        });
+    });
+
+    $('.'+id+'-tree-tools').on('click', function(e){
+        var action = $(this).data('action');
+        if (action === 'expand') {
+            tree.nestable('expandAll');
+        }
+        if (action === 'collapse') {
+            tree.nestable('collapseAll');
+        }
+    });
+
+    @if(! $expand)
+    tree.nestable('collapseAll')
+    @endif
+</script>

+ 6 - 5
src/Form/Field.php

@@ -967,11 +967,12 @@ class Field implements Renderable
      */
     public function getElementClass()
     {
-        if (! $this->elementClass) {
-            $this->elementClass = $this->getDefaultElementClass();
-        }
-
-        return $this->elementClass;
+        return array_values(
+            array_unique(
+                $this->elementClass,
+                $this->getDefaultElementClass()
+            )
+        );
     }
 
     /**

+ 2 - 2
src/Form/Field/HasMany.php

@@ -522,7 +522,7 @@ class HasMany extends Field
         }
 
         // specify a view to render.
-        $this->view = $this->views[$this->viewMode];
+        $this->view = $this->view ?: $this->views[$this->viewMode];
 
         $this->addVariables([
             'forms'          => $this->buildRelatedForms(),
@@ -573,7 +573,7 @@ class HasMany extends Field
         $template .= '<td class="hidden">'.implode('', $hidden).'</td>';
 
         // specify a view to render.
-        $this->view = $this->views[$this->viewMode];
+        $this->view = $this->view ?: $this->views[$this->viewMode];
 
         $this->addVariables([
             'headers'      => $headers,

+ 1 - 1
src/Grid.php

@@ -1130,6 +1130,6 @@ JS
 
     public function __toString()
     {
-        return $this->render();
+        return (string) $this->render();
     }
 }

+ 1 - 3
src/Grid/Concerns/HasFilter.php

@@ -150,9 +150,7 @@ trait HasFilter
             <<<JS
 var count = {$this->filter()->countConditions()};
 
-if (count > 0) {
-    $('.async-{$this->getTableId()}').find('.filter-count').text('('+count+')');
-}
+$('.async-{$this->getTableId()}').find('.filter-count').text(count > 0 ? ('('+count+')') : '');
 JS
         );
 

+ 3 - 1
src/Http/Controllers/PermissionController.php

@@ -33,7 +33,9 @@ class PermissionController extends AdminController
             $tree->disableEditButton();
 
             $tree->branch(function ($branch) {
-                $payload = "<div class='pull-left' style='min-width:310px'><b>{$branch['name']}</b>&nbsp;&nbsp;[<span class='text-primary'>{$branch['slug']}</span>]";
+                $branchName = htmlspecialchars($branch['name']);
+                $branchSlug = htmlspecialchars($branch['slug']);
+                $payload = "<div class='pull-left' style='min-width:310px'><b>{$branchName}</b>&nbsp;&nbsp;[<span class='text-primary'>{$branchSlug}</span>]";
 
                 $path = array_filter($branch['http_path']);
 

+ 0 - 4
src/Support/Helper.php

@@ -97,10 +97,6 @@ class Helper
             $value = $value(...(array) $params);
         }
 
-        if ($value instanceof Grid) {
-            return (string) $value->render();
-        }
-
         if ($value instanceof Renderable) {
             return (string) $value->render();
         }

+ 16 - 0
src/Tree.php

@@ -89,6 +89,11 @@ class Tree implements Renderable
      */
     public $useCreate = true;
 
+    /**
+     * @var bool
+     */
+    public $expand = true;
+
     /**
      * @var bool
      */
@@ -261,6 +266,16 @@ class Tree implements Renderable
         return $this;
     }
 
+    /**
+     * @param bool $value
+     *
+     * @return void
+     */
+    public function expand(bool $value = true)
+    {
+        $this->expand = $value;
+    }
+
     /**
      * Disable create.
      *
@@ -532,6 +547,7 @@ class Tree implements Renderable
             'nestableOptions' => $this->nestableOptions,
             'url'             => $this->url,
             'resolveAction'   => $this->resolveAction(),
+            'expand'          => $this->expand,
         ];
     }
 

+ 1 - 1
tests/bin/install-admin.sh

@@ -4,6 +4,6 @@ cd ./laravel-tests
 php artisan admin:publish --force
 php artisan admin:install
 php artisan migrate:rollback
-php artisan dusk:chrome-driver 89
+php artisan dusk:chrome-driver
 cp -f ./tests/routes.php ./app/Admin/
 cp -rf ./tests/resources/config ./config/