Skip to content

Commit

Permalink
Merge pull request #82 from jtpalmer/generate-asset-html-tags
Browse files Browse the repository at this point in the history
Generate asset html tags
  • Loading branch information
jtpalmer authored Apr 4, 2017
2 parents 571957d + 22fae21 commit 4b606aa
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 155 deletions.
97 changes: 97 additions & 0 deletions classes/OpenXdmod/Assets.php
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;
}
}
2 changes: 2 additions & 0 deletions configuration/assets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
51 changes: 51 additions & 0 deletions docs/module-assets.md
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`

71 changes: 0 additions & 71 deletions html/gui/css/Allocations.css

This file was deleted.

41 changes: 1 addition & 40 deletions html/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,6 @@ function isReferrer($referrer)
<?php endif; ?>

<?php if ($userLoggedIn): ?>
<link rel="stylesheet" type="text/css" href="gui/css/compliance.css" />

<script type="text/javascript" src="gui/lib/moment/moment.min.js"></script>
<script type="text/javascript" src="gui/lib/moment-timezone/moment-timezone-with-data.min.js"></script>
<?php endif; ?>
Expand Down Expand Up @@ -437,12 +435,6 @@ function isReferrer($referrer)

<script type="text/javascript" src="gui/js/ExportPanel.js"></script>

<?php if ($userLoggedIn): ?>
<!-- Custom query panel for one-off queries -->

<link rel="stylesheet" type="text/css" href="gui/css/Allocations.css" />
<?php endif; ?>

<script type="text/javascript" src="gui/js/CaptchaField.js"></script>
<?php if (!$userLoggedIn): ?>
<script type="text/javascript" src="gui/js/SignUpDialog.js"></script>
Expand All @@ -451,7 +443,6 @@ function isReferrer($referrer)
<?php if ($userLoggedIn): ?>
<script type="text/javascript" src="gui/js/RealTimeValidatingTextField.js"></script>
<?php endif; ?>
<!-- Modules -->

<script type="text/javascript" src="gui/js/PortalModule.js"></script>

Expand All @@ -469,25 +460,6 @@ function isReferrer($referrer)
<script type="text/javascript" src="gui/js/modules/metric_explorer/StatusButton.js"></script>
<script type="text/javascript" src="gui/js/ChangeStack.js"></script>


<?php /* App Kernel modules. */ ?>
<?php if (xd_utilities\getConfiguration('features', 'appkernels') == 'on'): ?>

<script type="text/javascript" src="gui/js/modules/AppKernels.js"></script>
<script type="text/javascript" src="gui/js/modules/app_kernels/AppKernelViewer.js"></script>
<script type="text/javascript" src="gui/js/modules/app_kernels/AppKernelExplorer.js"></script>
<script type="text/javascript" src="gui/js/modules/app_kernels/AppKernelNotificationPanel.js"></script>

<?php endif; ?>

<?php /* Modules that are only part of XSEDE XDMoD. */ ?>
<?php if (xd_utilities\getConfiguration('features', 'xsede') == 'on'): ?>
<script type="text/javascript" src="gui/js/modules/Allocations.js"></script>
<script type="text/javascript" src="gui/js/modules/Compliance.js"></script>
<script type="text/javascript" src="gui/js/modules/CustomQueries.js"></script>
<script type="text/javascript" src="gui/js/modules/SciImpact.js"></script>
<?php endif; ?>

<?php /* Single Job Viewer */ ?>
<?php if (xd_utilities\getConfiguration('features', 'singlejobviewer') == 'on'): ?>
<script type="text/javascript" src="gui/js/modules/job_viewer/JobViewer.js"></script>
Expand Down Expand Up @@ -515,7 +487,7 @@ function isReferrer($referrer)
require_once dirname(__FILE__).'/gaq.php';
?>


<?php echo \OpenXdmod\Assets::generateAssetTags('portal'); ?>

<script type="text/javascript">

Expand Down Expand Up @@ -612,17 +584,6 @@ function isReferrer($referrer)
<script type="text/javascript">Ext.onReady(xdmodviewer.init, xdmodviewer);</script>
<?php endif; ?>

<?php /* App Kernel files. */ ?>
<?php if (xd_utilities\getConfiguration('features', 'appkernels') == 'on'): ?>
<?php if ($userLoggedIn): ?>
<script type="text/javascript" src="internal_dashboard/js/AppKernel/InstancePanel.js"></script>
<script type="text/javascript" src="internal_dashboard/js/AppKernel/InstanceWindow.js"></script>
<script type="text/javascript" src="internal_dashboard/js/AppKernel/InstanceStore.js"></script>
<script type="text/javascript" src="internal_dashboard/js/Arr/ErrorMessageStore.js"></script>
<script type="text/javascript" src="internal_dashboard/js/Arr/ErrorMessagePanel.js"></script>
<?php endif; ?>
<?php endif; ?>

</head>

<body>
Expand Down
47 changes: 3 additions & 44 deletions html/internal_dashboard/index.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?php

require_once __DIR__ . '/../../configuration/linker.php';
require_once 'user_check.php';

if (isset($_POST['direct_to'])) {
Expand Down Expand Up @@ -192,7 +193,6 @@

<link rel="stylesheet" type="text/css" href="../gui/lib/extjs/examples/ux/css/ColumnHeaderGroup.css"/>
<link rel="stylesheet" type="text/css" href="../gui/css/GroupTab.css"/>
<link rel="stylesheet" type="text/css" href="css/appKer.css"/>

<script type="text/javascript" src="../gui/lib/extjs/examples/ux/ColumnHeaderGroup.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/GroupTabPanel.js"></script>
Expand All @@ -201,56 +201,15 @@
<script type="text/javascript" src="../gui/js/ExportPanel.js"></script>
<script type="text/javascript" src="../gui/js/PortalModule.js"></script>

<?php /* App Kernel files. */ ?>
<?php if (xd_utilities\getConfiguration('features', 'appkernels') == 'on'): ?>

<script type="text/javascript" src="js/Arr/SummaryStore.js"></script>
<script type="text/javascript" src="js/Arr/SummaryPortlet.js"></script>
<script type="text/javascript" src="js/Arr/ActiveTasksStore.js"></script>
<script type="text/javascript" src="js/Arr/ActiveTasksGrid.js"></script>

<script type="text/javascript" src="js/Arr/AppKerSuccessRateStore.js"></script>
<script type="text/javascript" src="js/Arr/AppKerSuccessRateGrid.js"></script>
<script type="text/javascript" src="js/Arr/AppKerSuccessRatePanel.js"></script>
<script type="text/javascript" src="js/Arr/AppKerPerformanceMapPanel.js"></script>

<script type="text/javascript" src="js/Arr/StatusPanel.js"></script>
<script type="text/javascript" src="js/Arr/ErrorMessageStore.js"></script>
<script type="text/javascript" src="js/Arr/ErrorMessagePanel.js"></script>
<script type="text/javascript" src="js/Arr/ControlRegionsPanel.js"></script>
<script type="text/javascript" src="js/Arr/SchedulePanel.js"></script>
<script type="text/javascript" src="js/Arr/AppKernelDashboardPanel.js"></script>
<script type="text/javascript" src="js/Arr/WalltimePanel.js"></script>
<script type="text/javascript" src="js/Arr/WalltimeNewEntryPanel.js"></script>
<script type="text/javascript" src="js/Arr/WalltimeEditEntryPanel.js"></script>

<script type="text/javascript" src="js/AppKernel/InstancePanel.js"></script>
<script type="text/javascript" src="js/AppKernel/InstanceWindow.js"></script>
<script type="text/javascript" src="js/Arr/ActiveTasksPanel.js"></script>
<script type="text/javascript" src="js/Arr/EditActiveTaskPanel.js"></script>
<script type="text/javascript" src="js/Arr/CreateSchedulePanel.js"></script>
<script type="text/javascript" src="js/Arr/EditSchedulePanel.js"></script>

<script type="text/javascript" src="js/Ingestion/AppKernelStore.js"></script>
<script type="text/javascript" src="js/Ingestion/AppKernelGrid.js"></script>
<?php endif; ?>

<!-- Open XDMoD Install List -->
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGridColumnResizer.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGridSorter.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGridNodeUI.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGridLoader.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGridColumns.js"></script>
<script type="text/javascript" src="../gui/lib/extjs/examples/ux/treegrid/TreeGrid.js"></script>
<script type="text/javascript" src="js/OpenXdmod/InstallsPanel.js"></script>

<script type="text/javascript" src="js/Ingestion/ReportsPanel.js"></script>

<script type="text/javascript" src="js/Dashboard/Factory.js"></script>
<script type="text/javascript" src="js/Dashboard/MenuStore.js"></script>
<script type="text/javascript" src="js/Dashboard/FramePanel.js"></script>
<script type="text/javascript" src="js/Dashboard/Viewport.js"></script>

<?php echo \OpenXdmod\Assets::generateAssetTags('internal_dashboard'); ?>

<script type="text/javascript" src="js/dashboard.js"></script>

<?php /* App Kernel code. */ ?>
Expand Down
1 change: 1 addition & 0 deletions open_xdmod/modules/xdmod/build.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
"configuration/rest.d",
"configuration/setup.json",
"configuration/update_check.json",
"configuration/assets.json",
"email_templates"
],
"etc/httpd": {
Expand Down

0 comments on commit 4b606aa

Please sign in to comment.