AssetResolver
extends AssetTree
in package
Template asset management class.
Tags
Table of Contents
Constants
- BOOTSTRAP = 'BOOTSTRAP'
- BOOTSTRAP_COLORPICKER = 'BOOTSTRAP_COLORPICKER'
- CHART_JS = 'CHART_JS'
- CODEMIRROR = 'CODEMIRROR'
- DATATABLES = 'DATATABLES'
- DROPZONE = 'DROPZONE'
- FOMANTIC_UI = 'FOMANTIC_UI'
- FONT_AWESOME = 'FONT_AWESOME'
- IMAGE_PICKER = 'IMAGE_PICKER'
- JQUERY = 'JQUERY'
- JQUERY_COOKIE = 'JQUERY_COOKIE'
- JQUERY_UI = 'JQUERY_UI'
- MOMENT = 'MOMENT'
- PRISM_DARK = 'PRISM_DARK'
- PRISM_LIGHT = 'PRISM_LIGHT'
- SELECT2 = 'SELECT2'
- TINYMCE = 'TINYMCE'
- TINYMCE_SPOILER = 'TINYMCE_SPOILER'
- ASSET_TREE = [self::FONT_AWESOME => ['css' => ['vendor/@fortawesome/fontawesome-free/css/all.min.css']], self::BOOTSTRAP => ['css' => ['vendor/bootstrap/dist/css/bootstrap.min.css'], 'js' => ['vendor/bootstrap/dist/js/bootstrap.bundle.min.js'], 'after' => [self::JQUERY_UI]], self::BOOTSTRAP_COLORPICKER => ['css' => ['vendor/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css'], 'js' => ['vendor/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js'], 'depends' => [self::BOOTSTRAP]], self::CHART_JS => ['js' => ['vendor/chart.js/dist/Chart.min.js'], 'depends' => [self::JQUERY]], self::CODEMIRROR => ['css' => ['vendor/codemirror/lib/codemirror.css'], 'js' => ['vendor/codemirror/lib/codemirror.js', 'vendor/codemirror/mode/smarty/smarty.js', 'vendor/codemirror/mode/javascript/javascript.js', 'vendor/codemirror/mode/css/css.js', 'vendor/codemirror/mode/htmlmixed/htmlmixed.js']], self::DATATABLES => ['css' => ['vendor/datatables.net-bs4/css/dataTables.bootstrap4.css'], 'js' => ['vendor/datatables.net/js/jquery.dataTables.min.js', 'vendor/datatables.net-bs4/js/dataTables.bootstrap4.min.js'], 'depends' => [self::JQUERY]], self::DROPZONE => ['css' => ['vendor/dropzone/dist/min/dropzone.min.css'], 'js' => ['vendor/dropzone/dist/min/dropzone.min.js']], self::IMAGE_PICKER => ['css' => ['vendor/image-picker/image-picker/image-picker.css'], 'js' => ['vendor/image-picker/image-picker/image-picker.min.js'], 'depends' => [self::JQUERY]], self::JQUERY => ['js' => ['vendor/jquery/dist/jquery.min.js']], self::JQUERY_UI => ['js' => ['vendor/jquery-ui-dist/jquery-ui.min.js'], 'depends' => [self::JQUERY]], self::JQUERY_COOKIE => ['js' => ['vendor/jquery.cookie/jquery.cookie.js'], 'depends' => [self::JQUERY]], self::MOMENT => ['js' => ['vendor/moment/min/moment.min.js']], self::PRISM_DARK => ['js' => ['plugins/prism/prism.js'], 'css' => ['plugins/prism/prism_dark.css']], self::PRISM_LIGHT => ['js' => ['plugins/prism/prism.js'], 'css' => ['plugins/prism/prism_light_default.css']], self::SELECT2 => ['js' => ['vendor/select2/dist/js/select2.min.js'], 'css' => ['vendor/select2/dist/css/select2.min.css'], 'depends' => [self::JQUERY]], self::TINYMCE => ['js' => ['vendor/tinymce/tinymce.min.js'], 'depends' => [ // Not included here: Prism light/dark, since we cannot // check dark_mode const here in PHP 8.0+, // it is added in AssetResolver instead. self::TINYMCE_SPOILER, ]], self::TINYMCE_SPOILER => ['css' => ['plugins/tinymce_spoiler/css/spoiler.css'], 'js' => ['plugins/tinymce_spoiler/js/spoiler.js'], 'depends' => [self::JQUERY]], self::FOMANTIC_UI => ['css' => ['vendor/fomantic-ui/dist/semantic.min.css'], 'js' => ['vendor/fomantic-ui/dist/semantic.min.js'], 'after' => [self::JQUERY]]]
Properties
- $_assets : array<string|int, array<string|int, mixed>>
Methods
- compile() : array<string|int, array<string|int, string>>
- Resolve all the assets as an array of CSS file and JS files to add to the template as `link` or `script` elements respectively.
- include() : void
- Add assets to be put in the response HTML.
- buildPath() : string
- Build an HTML tag for the given asset.
- gatherAsset() : void
- Generate URLs for the given asset, and add them to the CSS and JS URL arrays as needed.
- validateAsset() : bool
- Validate that an asset name is valid.
Constants
BOOTSTRAP
public
string
BOOTSTRAP
= 'BOOTSTRAP'
Bootstrap bundle v4.5 (CSS + JS)
BOOTSTRAP_COLORPICKER
public
string
BOOTSTRAP_COLORPICKER
= 'BOOTSTRAP_COLORPICKER'
Bootstrap Colorpicker v3.4 (CSS + JS)
CHART_JS
public
string
CHART_JS
= 'CHART_JS'
Chart.js v2.7 (JS)
CODEMIRROR
public
string
CODEMIRROR
= 'CODEMIRROR'
Codemirror (CSS + JS, as well as modes for Smarty, CSS, HTML & JS)
DATATABLES
public
string
DATATABLES
= 'DATATABLES'
DataTables JQuery v1.10 (CSS + JS)
DROPZONE
public
string
DROPZONE
= 'DROPZONE'
Dropzone v5.9 (CSS + JS)
FOMANTIC_UI
public
string
FOMANTIC_UI
= 'FOMANTIC_UI'
Fomantic-UI bundle v2.8 (CSS + JS)
FONT_AWESOME
public
string
FONT_AWESOME
= 'FONT_AWESOME'
Font Awesome v6.1 (CSS)
IMAGE_PICKER
public
string
IMAGE_PICKER
= 'IMAGE_PICKER'
Image-Picker v0.2 (CSS + JS)
JQUERY
public
string
JQUERY
= 'JQUERY'
JQuery v3.5 (JS)
JQUERY_COOKIE
public
string
JQUERY_COOKIE
= 'JQUERY_COOKIE'
JQuery-Cookie v1.4 (JS)
JQUERY_UI
public
string
JQUERY_UI
= 'JQUERY_UI'
JQuery-UI v2.12 (JS)
MOMENT
public
string
MOMENT
= 'MOMENT'
Moment v2.29 (JS)
PRISM_DARK
public
string
PRISM_DARK
= 'PRISM_DARK'
PrismJS v1.27 (CSS + JS, and the dark theme)
PRISM_LIGHT
public
string
PRISM_LIGHT
= 'PRISM_LIGHT'
PrismJS v1.27 (CSS + JS, and the Default light theme)
SELECT2
public
string
SELECT2
= 'SELECT2'
Select2 v4.0 (CSS + JS)
TINYMCE
public
string
TINYMCE
= 'TINYMCE'
TinyMCE v5.10 (JS, and the light/dark theme of Prism, as well as the spoiler plugin)
TINYMCE_SPOILER
public
string
TINYMCE_SPOILER
= 'TINYMCE_SPOILER'
TinyMCE Spoiler plugin. Used individually when posts will be shown but not created (home page for example)
ASSET_TREE
protected
mixed
ASSET_TREE
= [self::FONT_AWESOME => ['css' => ['vendor/@fortawesome/fontawesome-free/css/all.min.css']], self::BOOTSTRAP => ['css' => ['vendor/bootstrap/dist/css/bootstrap.min.css'], 'js' => ['vendor/bootstrap/dist/js/bootstrap.bundle.min.js'], 'after' => [self::JQUERY_UI]], self::BOOTSTRAP_COLORPICKER => ['css' => ['vendor/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css'], 'js' => ['vendor/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js'], 'depends' => [self::BOOTSTRAP]], self::CHART_JS => ['js' => ['vendor/chart.js/dist/Chart.min.js'], 'depends' => [self::JQUERY]], self::CODEMIRROR => ['css' => ['vendor/codemirror/lib/codemirror.css'], 'js' => ['vendor/codemirror/lib/codemirror.js', 'vendor/codemirror/mode/smarty/smarty.js', 'vendor/codemirror/mode/javascript/javascript.js', 'vendor/codemirror/mode/css/css.js', 'vendor/codemirror/mode/htmlmixed/htmlmixed.js']], self::DATATABLES => ['css' => ['vendor/datatables.net-bs4/css/dataTables.bootstrap4.css'], 'js' => ['vendor/datatables.net/js/jquery.dataTables.min.js', 'vendor/datatables.net-bs4/js/dataTables.bootstrap4.min.js'], 'depends' => [self::JQUERY]], self::DROPZONE => ['css' => ['vendor/dropzone/dist/min/dropzone.min.css'], 'js' => ['vendor/dropzone/dist/min/dropzone.min.js']], self::IMAGE_PICKER => ['css' => ['vendor/image-picker/image-picker/image-picker.css'], 'js' => ['vendor/image-picker/image-picker/image-picker.min.js'], 'depends' => [self::JQUERY]], self::JQUERY => ['js' => ['vendor/jquery/dist/jquery.min.js']], self::JQUERY_UI => ['js' => ['vendor/jquery-ui-dist/jquery-ui.min.js'], 'depends' => [self::JQUERY]], self::JQUERY_COOKIE => ['js' => ['vendor/jquery.cookie/jquery.cookie.js'], 'depends' => [self::JQUERY]], self::MOMENT => ['js' => ['vendor/moment/min/moment.min.js']], self::PRISM_DARK => ['js' => ['plugins/prism/prism.js'], 'css' => ['plugins/prism/prism_dark.css']], self::PRISM_LIGHT => ['js' => ['plugins/prism/prism.js'], 'css' => ['plugins/prism/prism_light_default.css']], self::SELECT2 => ['js' => ['vendor/select2/dist/js/select2.min.js'], 'css' => ['vendor/select2/dist/css/select2.min.css'], 'depends' => [self::JQUERY]], self::TINYMCE => ['js' => ['vendor/tinymce/tinymce.min.js'], 'depends' => [
// Not included here: Prism light/dark, since we cannot
// check dark_mode const here in PHP 8.0+,
// it is added in AssetResolver instead.
self::TINYMCE_SPOILER,
]], self::TINYMCE_SPOILER => ['css' => ['plugins/tinymce_spoiler/css/spoiler.css'], 'js' => ['plugins/tinymce_spoiler/js/spoiler.js'], 'depends' => [self::JQUERY]], self::FOMANTIC_UI => ['css' => ['vendor/fomantic-ui/dist/semantic.min.css'], 'js' => ['vendor/fomantic-ui/dist/semantic.min.js'], 'after' => [self::JQUERY]]]
Tree of all available assets, with their applicable CSS/JS files. In the case an asset depends on other assets within the tree, they are defined as "depends".
Properties
$_assets
private
array<string|int, array<string|int, mixed>>
$_assets
= []
Array of assets currently resolved.
Methods
compile()
Resolve all the assets as an array of CSS file and JS files to add to the template as `link` or `script` elements respectively.
public
compile() : array<string|int, array<string|int, string>>
Return values
array<string|int, array<string|int, string>> —The resolved assets ready to be added to the template.
include()
Add assets to be put in the response HTML.
public
include(string|array<string|int, string> $assets) : void
Parameters
- $assets : string|array<string|int, string>
-
The asset(s) to resolve and add. Must be a constant from the
AssetTree
class.
buildPath()
Build an HTML tag for the given asset.
private
buildPath(string $file, string $type) : string
Parameters
- $file : string
-
The file to build the path for.
- $type : string
-
The type of the file, either 'css' or 'js'
Return values
string —Script or Link HTML tag with a URL to the asset.
gatherAsset()
Generate URLs for the given asset, and add them to the CSS and JS URL arrays as needed.
private
gatherAsset(string $name, array<string|int, mixed> $asset, array<string|int, mixed> &$css, array<string|int, mixed> &$js) : void
This will also resolve and gather dependencies for the asset if applicable.
Parameters
- $name : string
-
The name of the asset.
- $asset : array<string|int, mixed>
-
The asset to gather.
- $css : array<string|int, mixed>
-
Array of CSS assets already resolved to add to.
- $js : array<string|int, mixed>
-
Array of JS assets already resolved to add to.
validateAsset()
Validate that an asset name is valid.
private
validateAsset(string $assetName[, bool $throw = true ]) : bool
This checks that it exists in the asset tree, and that it has not already been resolved.
Parameters
- $assetName : string
-
The asset name to validate.
- $throw : bool = true
Tags
Return values
bool —False if the asset name is invalid, true otherwise.