-
Notifications
You must be signed in to change notification settings - Fork 68
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #82 from jtpalmer/generate-asset-html-tags
Generate asset html tags
- Loading branch information
Showing
7 changed files
with
155 additions
and
155 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
<?php | ||
/** | ||
* Generates HTML tags for module assets. | ||
*/ | ||
|
||
namespace OpenXdmod; | ||
|
||
use Xdmod\Config; | ||
|
||
class Assets | ||
{ | ||
|
||
/** | ||
* Assets configuration array. | ||
* | ||
* @var array | ||
*/ | ||
private static $assetsConfig = null; | ||
|
||
/** | ||
* Generate JS and CSS HTML tags. | ||
* | ||
* @param string $section Either "portal" or "internal_dashboard". | ||
* | ||
* @return string HTML script and link tags. | ||
*/ | ||
public static function generateAssetTags($section) | ||
{ | ||
$tags = ''; | ||
|
||
foreach (static::getAssetsPaths($section, 'css') as $path) { | ||
$tags .= '<link rel="stylesheet" type="text/css" href="' . $path . '" />' . "\n"; | ||
} | ||
|
||
foreach (static::getAssetsPaths($section, 'js') as $path) { | ||
$tags .= '<script type="text/javascript" src="' . $path . '"></script>' . "\n"; | ||
} | ||
|
||
return $tags; | ||
} | ||
|
||
/** | ||
* Construct a list of unique assets for the given section and type. | ||
* | ||
* @param string $section Either "portal" or "internal_dashboard". | ||
* @param string $type Either "js" or "css". | ||
* | ||
* @return array | ||
*/ | ||
private static function getAssetsPaths($section, $type) | ||
{ | ||
$config = static::getConfiguration(); | ||
|
||
$files = array(); | ||
|
||
foreach ($config as $module => $sections) { | ||
|
||
if (isset($sections[$section])) { | ||
$sectionData = $sections[$section]; | ||
|
||
if (isset($sectionData[$type])) { | ||
foreach ($sectionData[$type] as $file) { | ||
|
||
// Check for duplicates. Avoiding use of `array_unique` | ||
// since that sorts the array and file order may be | ||
// important. | ||
if (!in_array($file, $files)) { | ||
$files[] = $file; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
return $files; | ||
} | ||
|
||
/** | ||
* Get the assets configuration object. | ||
* | ||
* @return array | ||
*/ | ||
private static function getConfiguration() | ||
{ | ||
if (static::$assetsConfig === null) { | ||
$config = Config::factory(); | ||
|
||
if (isset($config['assets'])) { | ||
static::$assetsConfig = $config['assets']; | ||
} else { | ||
static::$assetsConfig = array(); | ||
} | ||
} | ||
|
||
return static::$assetsConfig; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
{ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# Open XDMoD Module Assets | ||
|
||
An Open XDMoD module may contain JavaScript and CSS assets that will be | ||
included in the portal or internal (admin) dashboard. | ||
|
||
The `portal` JavaScript and CSS paths must be relative to the `html` directory | ||
and the `internal_dashboard` paths must be relative to the | ||
`html/internal_dashboard` directory. | ||
|
||
For a module named `example` create a file named `example.json` in the | ||
`assets.d` directory. e.g.: | ||
|
||
```json | ||
{ | ||
"example": { | ||
"portal": { | ||
"js": [ | ||
"gui/js/modules/Example.js", | ||
"gui/js/modules/example/ExamplePanel.js" | ||
], | ||
"css": [ | ||
"gui/css/example.css" | ||
] | ||
}, | ||
"internal_dashboard": { | ||
"js": [ | ||
"js/Example/ExampleAdmin.js", | ||
"../gui/js/modules/example/ExamplePanel.js" | ||
], | ||
"css": [ | ||
"css/example.css", | ||
"../gui/css/example.css" | ||
] | ||
} | ||
} | ||
} | ||
``` | ||
|
||
This example includes the following JavaScript and CSS files in the portal: | ||
|
||
- `html/gui/js/modules/Example.js` | ||
- `html/gui/js/modules/example/ExamplePanel.js` | ||
- `html/gui/css/example.css` | ||
|
||
And the following files in the internal dashboard: | ||
|
||
- `html/internal_dashboard/js/Example/ExampleAdmin.js` | ||
- `html/gui/js/modules/example/ExamplePanel.js` | ||
- `html/internal_dashboard/css/example.css` | ||
- `html/gui/css/example.css` | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters