HasAssets.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <?php
  2. namespace Dcat\Admin\Traits;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Form\Field;
  5. trait HasAssets
  6. {
  7. /**
  8. * @var array
  9. */
  10. public static $script = [];
  11. /**
  12. * @var array
  13. */
  14. public static $style = [];
  15. /**
  16. * @var array
  17. */
  18. public static $css = [];
  19. /**
  20. * @var array
  21. */
  22. public static $js = [];
  23. /**
  24. * @var array
  25. */
  26. public static $html = [];
  27. /**
  28. * @var array
  29. */
  30. public static $headerJs = [];
  31. /**
  32. * @var array
  33. */
  34. public static $baseCss = [
  35. 'bootstrap' => 'vendor/dcat-admin/AdminLTE/bootstrap/css/bootstrap.min.css',
  36. 'adminLTE' => 'vendor/dcat-admin/AdminLTE/dist/css/AdminLTE.min.css',
  37. 'font-awesome' => 'vendor/dcat-admin/font-awesome/css/font-awesome.min.css',
  38. 'icons' => 'vendor/dcat-admin/dcat-admin/icons.css',
  39. 'main' => 'vendor/dcat-admin/dcat-admin/main.min.css',
  40. ];
  41. /**
  42. * @var array
  43. */
  44. public static $baseJs = [
  45. 'bootstrap' => 'vendor/dcat-admin/AdminLTE/bootstrap/js/bootstrap.min.js',
  46. 'validator' => 'vendor/dcat-admin/bootstrap-validator/validator.min.js',
  47. 'jquery.slimscroll' => 'vendor/dcat-admin/AdminLTE/plugins/slimScroll/jquery.slimscroll.min.js',
  48. 'adminLTE' => 'vendor/dcat-admin/AdminLTE/dist/js/app.min.js',
  49. 'layer' => 'vendor/dcat-admin/layer/layer.js',
  50. 'jquery.form' => 'vendor/dcat-admin/jquery-form/dist/jquery.form.min.js',
  51. 'waves' => 'vendor/dcat-admin/waves/waves.min.js',
  52. 'main' => 'vendor/dcat-admin/dcat-admin/main.min.js',
  53. ];
  54. /**
  55. * @var array
  56. */
  57. public static $componentsAssets = [
  58. 'select2' => [
  59. 'js' => 'vendor/dcat-admin/AdminLTE/plugins/select2/select2.full.min.js',
  60. 'css' => 'vendor/dcat-admin/AdminLTE/plugins/select2/select2.min.css',
  61. ],
  62. 'jquery.bootstrap-duallistbox' => [
  63. 'js' => 'vendor/dcat-admin/bootstrap-duallistbox/dist/jquery.bootstrap-duallistbox.min.js',
  64. 'css' => 'vendor/dcat-admin/bootstrap-duallistbox/dist/bootstrap-duallistbox.min.css',
  65. ],
  66. 'jquery.inputmask' => [
  67. 'js' => 'vendor/dcat-admin/AdminLTE/plugins/input-mask/jquery.inputmask.bundle.min.js',
  68. ],
  69. 'bootstrap-datetimepicker' => [
  70. 'js' => 'vendor/dcat-admin/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js',
  71. 'css' => 'vendor/dcat-admin/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
  72. ],
  73. 'moment' => [
  74. 'js' => 'vendor/dcat-admin/moment/min/moment-with-locales.min.js',
  75. ],
  76. 'fontawesome-iconpicker' => [
  77. 'js' => 'vendor/dcat-admin/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.min.js',
  78. 'css' => 'vendor/dcat-admin/fontawesome-iconpicker/dist/css/fontawesome-iconpicker.min.css',
  79. ],
  80. 'jstree' => [
  81. 'js' => 'vendor/dcat-admin/jstree-theme/jstree.min.js',
  82. ],
  83. 'jquery.nestable' => [
  84. 'js' => 'vendor/dcat-admin/nestable/jquery.nestable.min.js',
  85. 'css' => 'vendor/dcat-admin/nestable/nestable.css'
  86. ],
  87. 'switchery' => [
  88. 'css' => 'vendor/dcat-admin/switchery/switchery.min.css',
  89. 'js' => 'vendor/dcat-admin/switchery/switchery.min.js'
  90. ],
  91. 'editable' => [
  92. 'css' => 'vendor/dcat-admin/bootstrap3-editable/css/bootstrap-editable.css',
  93. 'js' => 'vendor/dcat-admin/bootstrap3-editable/js/bootstrap-editable.min.js'
  94. ],
  95. 'chartjs' => [
  96. 'js' => 'vendor/dcat-admin/chart.js/chart.bundle.min.js'
  97. ],
  98. 'jquery.sparkline' => [
  99. 'js' => 'vendor/dcat-admin/jquery.sparkline/jquery.sparkline.min.js'
  100. ],
  101. 'jquery.counterup' => [
  102. 'js' => 'vendor/dcat-admin/jquery.counterup/jquery.counterup.min.js',
  103. ],
  104. 'waypoints' => [
  105. 'js' => 'vendor/dcat-admin/waypoints/waypoints.min.js',
  106. ],
  107. ];
  108. /**
  109. * @var string
  110. */
  111. public static $jQuery = 'vendor/dcat-admin/AdminLTE/plugins/jQuery/jQuery-2.1.4.min.js';
  112. /**
  113. * @var string
  114. */
  115. public static $fonts = 'https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,800,800i,900,900i';
  116. /**
  117. * @var bool
  118. */
  119. public static $disableSkinCss = false;
  120. /**
  121. * Enable cdnjs.
  122. *
  123. * @see https://cdnjs.com/
  124. * @see https://www.bootcdn.cn
  125. */
  126. public static function cdn()
  127. {
  128. static::$jQuery = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js';
  129. static::$baseCss['adminLTE'] = 'https://cdn.bootcss.com/admin-lte/2.3.2/css/AdminLTE.min.css';
  130. static::$baseCss['font-awesome'] = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.0/css/font-awesome.min.css';
  131. static::$baseCss['bootstrap'] = 'https://cdn.bootcss.com/twitter-bootstrap/3.3.4/css/bootstrap.min.css';
  132. static::$baseJs['adminLTE'] = 'https://cdn.bootcss.com/admin-lte/2.3.2/js/app.min.js';
  133. static::$baseJs['bootstrap'] = 'https://cdn.bootcss.com/twitter-bootstrap/3.3.4/js/bootstrap.min.js';
  134. static::$baseJs['jquery.form'] = 'https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js';
  135. static::$baseJs['jquery.slimscroll'] = 'https://cdnjs.cloudflare.com/ajax/libs/jQuery-slimScroll/1.3.8/jquery.slimscroll.min.js';
  136. static::$baseJs['waves'] = 'https://cdnjs.cloudflare.com/ajax/libs/node-waves/0.7.6/waves.min.js';
  137. static::$componentsAssets['select2']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js';
  138. static::$componentsAssets['select2']['css'] = 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css';
  139. static::$componentsAssets['jquery.bootstrap-duallistbox']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap4-duallistbox/3.0.7/jquery.bootstrap-duallistbox.min.js';
  140. static::$componentsAssets['jquery.inputmask']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.3.0/jquery.inputmask.bundle.min.js';
  141. static::$componentsAssets['bootstrap-datetimepicker']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js';
  142. static::$componentsAssets['bootstrap-datetimepicker']['css'] = 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css';
  143. static::$componentsAssets['moment']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js';
  144. static::$componentsAssets['fontawesome-iconpicker']['css'] = 'https://cdnjs.cloudflare.com/ajax/libs/fontawesome-iconpicker/3.0.0/css/fontawesome-iconpicker.min.css';
  145. static::$componentsAssets['jstree']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.4/jstree.min.js';
  146. static::$componentsAssets['switchery']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.js';
  147. static::$componentsAssets['switchery']['css'] = 'https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.css';
  148. static::$componentsAssets['editable']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js';
  149. static::$componentsAssets['editable']['css'] = 'https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap-editable/css/bootstrap-editable.css';
  150. static::$componentsAssets['chartjs']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js';
  151. static::$componentsAssets['jquery.sparkline']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/jquery-sparklines/2.1.2/jquery.sparkline.min.js';
  152. static::$componentsAssets['waypoints']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/waypoints/3.1.1/jquery.waypoints.min.js';
  153. static::$componentsAssets['jquery.counterup']['js'] = 'https://cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0.0/jquery.counterup.min.js';
  154. }
  155. /**
  156. * @param string $name
  157. */
  158. public static function collectComponentAssets(string $name)
  159. {
  160. $js = static::$componentsAssets[$name]['js'] ?? null;
  161. $css = static::$componentsAssets[$name]['css'] ?? null;
  162. $js && static::js($js);
  163. $css && static::css($css);
  164. }
  165. /**
  166. * Add css or get all css.
  167. *
  168. * @param null $css
  169. *
  170. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|void
  171. */
  172. public static function css($css = null)
  173. {
  174. if (!is_null($css)) {
  175. self::$css = array_merge(self::$css, (array) $css);
  176. return;
  177. }
  178. static::$css = array_merge(static::$css, (array) $css);
  179. if (!request()->pjax()) {
  180. static::$css = array_merge(static::baseCss(), static::$css);
  181. }
  182. $css = '';
  183. foreach (array_unique(static::$css) as &$v) {
  184. $v = admin_asset($v);
  185. $css .= "<link rel=\"stylesheet\" href=\"{$v}\">";
  186. }
  187. return $css;
  188. }
  189. /**
  190. * @param null $css
  191. *
  192. * @return array|void
  193. */
  194. public static function baseCss($css = null)
  195. {
  196. if (!is_null($css)) {
  197. static::$baseCss = $css;
  198. return;
  199. }
  200. if (!static::$disableSkinCss) {
  201. $skin = config('admin.skin', 'skin-blue-light');
  202. array_unshift(static::$baseCss, "vendor/dcat-admin/AdminLTE/dist/css/skins/{$skin}.min.css");
  203. }
  204. static::$fonts && (static::$baseCss[] = static::$fonts);
  205. return static::$baseCss;
  206. }
  207. /**
  208. * Add js or get all js.
  209. *
  210. * @param null $js
  211. *
  212. * @return mixed
  213. */
  214. public static function js($js = null)
  215. {
  216. if (!is_null($js)) {
  217. self::$js = array_merge(self::$js, (array) $js);
  218. return;
  219. }
  220. static::$js = array_merge(static::$js, (array) $js);
  221. if (!request()->pjax()) {
  222. static::$js = array_merge(static::baseJs(), static::$js);
  223. }
  224. $js = '';
  225. foreach (array_unique(static::$js) as &$v) {
  226. $v = admin_asset($v);
  227. $js .= "<script src=\"$v\"></script>";
  228. }
  229. return $js;
  230. }
  231. /**
  232. * @param string $html
  233. *
  234. * @return null|string
  235. */
  236. public static function html($html = '')
  237. {
  238. if (!empty($html)) {
  239. static::$html = array_merge(static::$html, (array) $html);
  240. return;
  241. }
  242. return implode('', array_unique(static::$html));
  243. }
  244. /**
  245. * Add js or get all js.
  246. *
  247. * @param null $js
  248. *
  249. * @return mixed
  250. */
  251. public static function headerJs($js = null)
  252. {
  253. if (!is_null($js)) {
  254. self::$headerJs = array_merge(self::$headerJs, (array) $js);
  255. return;
  256. }
  257. $js = '';
  258. foreach (array_unique(static::$headerJs) as &$v) {
  259. $v = admin_asset($v);
  260. $js .= "<script src=\"$v\"></script>";
  261. }
  262. return $js;
  263. }
  264. /**
  265. * @param null $js
  266. *
  267. * @return array|void
  268. */
  269. public static function baseJs($js = null)
  270. {
  271. if (!is_null($js)) {
  272. static::$baseJs = $js;
  273. return;
  274. }
  275. return static::$baseJs;
  276. }
  277. /**
  278. * @param string $script
  279. *
  280. * @return mixed
  281. */
  282. public static function script($script = null)
  283. {
  284. if ($script !== null) {
  285. if ($script) {
  286. self::$script = array_merge(self::$script, (array) $script);
  287. }
  288. return;
  289. }
  290. $script = join(';', array_unique(self::$script));
  291. return "<script data-exec-on-popstate>LA.ready(function () { {$script} });</script>";
  292. }
  293. /**
  294. * @param string $style
  295. *
  296. * @return string|void
  297. */
  298. public static function style($style = '')
  299. {
  300. if (!empty($style)) {
  301. self::$style = array_merge(self::$style, (array) $style);
  302. return;
  303. }
  304. $style = join('', array_unique(self::$style));
  305. return "<style>$style</style>";
  306. }
  307. /**
  308. * @return string
  309. */
  310. public static function jQuery()
  311. {
  312. return admin_asset(static::$jQuery);
  313. }
  314. }