resolve('css',$expression); }); Blade::directive('js',function($expression,string $options=NULL) { return $this->resolve('js',$expression); }); } private function resolve(string $content,string $expression): string { if (str_contains($expression,',')) { [$type,$arguments] = explode(',',$expression,2); $arguments = explode('|',$arguments); } else { $type = $expression; $arguments = []; } $return = collect(); $urls = collect(); switch ($type) { case 'datatables': switch ($content) { case 'css': // Base $urls->put($type,'https://cdn.datatables.net/1.10.23/css/jquery.dataTables.min.css'); foreach ($arguments as $option) { $key = $type.':'.$option; switch ($option) { case 'bootstrap4': $urls->put($key,'/plugin/dataTables/dataTables.bootstrap4.css'); break; case 'buttons': $urls->put($key,'https://cdn.datatables.net/buttons/1.6.5/css/buttons.dataTables.min.css'); break; case 'fixedheader': $urls->put($key,'https://cdn.datatables.net/fixedheader/3.1.7/css/fixedHeader.dataTables.min.css'); break; case 'rowgroup': $urls->put($key,'https://cdn.datatables.net/rowgroup/1.1.2/css/rowGroup.dataTables.min.css'); break; case 'responsive': $urls->put($key,'http://cdn.datatables.net/responsive/2.2.6/css/responsive.dataTables.min.css'); break; case 'searchpanes': $urls->put($key,'https://cdn.datatables.net/searchpanes/1.2.1/css/searchPanes.dataTables.min.css'); break; case 'searchpanes-left': $urls->put('searchpanes:searchpanes-left','/plugin/dataTables/leftSearchPanes.css'); break; case 'select': $urls->put($key,'https://cdn.datatables.net/select/1.3.1/css/select.dataTables.min.css'); break; default: throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option)); } } break; case 'js': // Base $urls->put($type,'https://cdn.datatables.net/1.10.23/js/jquery.dataTables.min.js'); foreach ($arguments as $option) { $key = $type.':'.$option; switch ($option) { case 'bootstrap4': $urls->put($key,'/plugin/dataTables/dataTables.bootstrap4.js'); break; case 'buttons': $urls->put($key,'https://cdn.datatables.net/buttons/1.6.5/js/dataTables.buttons.min.js'); $urls->put($key.'html5','https://cdn.datatables.net/buttons/1.6.5/js/buttons.html5.min.js'); $urls->put($key.'jszip','https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js'); break; case 'fixedheader': $urls->put($key,'https://cdn.datatables.net/fixedheader/3.1.7/js/dataTables.fixedHeader.min.js'); break; case 'responsive': $urls->put($key,'https://cdn.datatables.net/responsive/2.2.6/js/dataTables.responsive.min.js'); break; case 'rowgroup': $urls->put($key,'https://cdn.datatables.net/rowgroup/1.1.2/js/dataTables.rowGroup.min.js'); break; case 'searchpanes': $urls->put($key,'https://cdn.datatables.net/searchpanes/1.2.1/js/dataTables.searchPanes.min.js'); break; case 'select': $urls->put($key,'https://cdn.datatables.net/select/1.3.1/js/dataTables.select.min.js'); break; default: throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option)); } } } break; case 'datepick': switch ($content) { case 'css': $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css'); break; case 'js': $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js'); } break; case 'debounce': switch ($content) { case 'js': $urls->put($type,'js/debounce.js'); } break; case 'highcharts': switch ($content) { case 'js': // Base $urls->put($type,'https://code.highcharts.com/highcharts.js'); foreach ($arguments as $option) { $key = $type.':'.$option; switch ($option) { case '3d': $urls->put($key,'https://code.highcharts.com/highcharts-3d.js'); $urls->put($key.'mouseover','/plugin/highcharts/3dmouseover.js'); break; case 'data': $urls->put($key,'https://code.highcharts.com/modules/data.js'); break; case 'defaults': $urls->put($key,'/plugin/highcharts/defaults.js'); break; case 'drilldown': $urls->put($key,'https://code.highcharts.com/modules/drilldown.js'); break; case 'export': $urls->put($key,'https://code.highcharts.com/modules/exporting.js'); $urls->put($key.'data','https://code.highcharts.com/modules/export-data.js'); break; case 'funnel': $urls->put($key,'https://code.highcharts.com/modules/funnel.js'); break; case 'heatmap': $urls->put($key,'https://code.highcharts.com/modules/heatmap.js'); break; case 'solidguage': $urls->put($key,'https://code.highcharts.com/highcharts-more.js'); $urls->put($key.'accessiblity','https://code.highcharts.com/modules/accessibility.js'); $urls->put($key.'solid-guage','https://code.highcharts.com/modules/solid-gauge.js'); break; case 'theme-dark': $urls->put($key,'https://code.highcharts.com/themes/dark-unica.js'); break; default: throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option)); } } } break; case 'highcharts-stock': switch ($content) { case 'js': // Base $urls->put($type,'https://code.highcharts.com/stock/highstock.js'); foreach ($arguments as $option) { $key = $type.':'.$option; switch ($option) { case 'data': $urls->put($key,'https://code.highcharts.com/stock/modules/data.js'); break; case 'export': $urls->put($key,'https://code.highcharts.com/stock/modules/exporting.js'); break; default: throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option)); } } } break; case 'select2': switch ($content) { case 'css': // Base $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'); break; case 'js': // Base $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js'); foreach ($arguments as $option) { $key = $type.':'.$option; switch ($option) { case 'autofocus': $urls->put($key,'plugin/select2/fix-autofocus.js'); break; default: throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option)); } } } break; case 'simplemde': switch ($content) { case 'css': // Base $urls->put($type,'https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css'); break; case 'js': // Base $urls->put($type,'https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js'); } break; case 'summernote': switch ($content) { case 'css': // Base $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.18/summernote-bs4.css'); break; case 'js': // Base $urls->put($type,'https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.18/summernote-bs4.js'); } break; case 'validation': switch ($content) { case 'js': // Base $urls->put('validate','https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js'); $urls->put('validate.additional','https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/additional-methods.min.js'); } break; default: throw new \Exception(sprintf('Unknown Expression: [%s]',$expression)); } if ($urls->count()) return $urls->map(function($item,$key) { $dependancy=''; if (str_contains($key,':')) [$dependancy,$key] = explode(':',$key); return ""; })->join(''); } }