diff --git a/src/_h5ai/client/themes/fallback/icons/file.png b/src/_h5ai/client/images/fallback/file.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/file.png rename to src/_h5ai/client/images/fallback/file.png diff --git a/src/_h5ai/client/themes/fallback/icons/file.svg b/src/_h5ai/client/images/fallback/file.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/file.svg rename to src/_h5ai/client/images/fallback/file.svg diff --git a/src/_h5ai/client/themes/fallback/icons/folder-page.png b/src/_h5ai/client/images/fallback/folder-page.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-page.png rename to src/_h5ai/client/images/fallback/folder-page.png diff --git a/src/_h5ai/client/themes/fallback/icons/folder-page.svg b/src/_h5ai/client/images/fallback/folder-page.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-page.svg rename to src/_h5ai/client/images/fallback/folder-page.svg diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent-0.png b/src/_h5ai/client/images/fallback/folder-parent-0.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent-0.png rename to src/_h5ai/client/images/fallback/folder-parent-0.png diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent-0.svg b/src/_h5ai/client/images/fallback/folder-parent-0.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent-0.svg rename to src/_h5ai/client/images/fallback/folder-parent-0.svg diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent-1.png b/src/_h5ai/client/images/fallback/folder-parent-1.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent-1.png rename to src/_h5ai/client/images/fallback/folder-parent-1.png diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent-1.svg b/src/_h5ai/client/images/fallback/folder-parent-1.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent-1.svg rename to src/_h5ai/client/images/fallback/folder-parent-1.svg diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent.png b/src/_h5ai/client/images/fallback/folder-parent.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent.png rename to src/_h5ai/client/images/fallback/folder-parent.png diff --git a/src/_h5ai/client/themes/fallback/icons/folder-parent.svg b/src/_h5ai/client/images/fallback/folder-parent.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder-parent.svg rename to src/_h5ai/client/images/fallback/folder-parent.svg diff --git a/src/_h5ai/client/themes/fallback/icons/folder.png b/src/_h5ai/client/images/fallback/folder.png similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder.png rename to src/_h5ai/client/images/fallback/folder.png diff --git a/src/_h5ai/client/themes/fallback/icons/folder.svg b/src/_h5ai/client/images/fallback/folder.svg similarity index 100% rename from src/_h5ai/client/themes/fallback/icons/folder.svg rename to src/_h5ai/client/images/fallback/folder.svg diff --git a/src/_h5ai/client/js/inc/core/resource.js b/src/_h5ai/client/js/inc/core/resource.js index 562f9c88..d5d799bc 100644 --- a/src/_h5ai/client/js/inc/core/resource.js +++ b/src/_h5ai/client/js/inc/core/resource.js @@ -1,14 +1,29 @@ modulejs.define('core/resource', ['config', 'core/settings'], function (config, settings) { - var image = function (id) { + var imagesHref = settings.appHref + 'client/images/', + fallbackHref = settings.appHref + 'client/images/fallback/', + themesHref = settings.appHref + 'client/themes/', + fallbacks = ['file', 'folder', 'folder-page', 'folder-parent'], - return settings.appHref + 'client/images/' + id + '.svg'; + image = function (id) { + + return imagesHref + id + '.svg'; }, icon = function (id) { - return settings.appHref + 'client/themes/' + config.theme[id]; + var baseId = id.split('-')[0], + href = config.theme[id] || config.theme[baseId]; + + if (href) { + return themesHref + href; + } + + if (fallbacks.indexOf(id) >= 0) { + return fallbackHref + id + '.svg'; + } + return fallbackHref + 'file.svg'; }; return { diff --git a/src/_h5ai/server/php/inc/class-app.php b/src/_h5ai/server/php/inc/class-app.php index 9e394aa1..94d3ec24 100644 --- a/src/_h5ai/server/php/inc/class-app.php +++ b/src/_h5ai/server/php/inc/class-app.php @@ -36,36 +36,22 @@ class App { } - public function get_icon($theme, $type, $fallback = null) { - - foreach (App::$ICON_EXTS as $ext) { - $icon = "${theme}/icons/${type}.${ext}"; - if (is_file(APP_PATH . "/client/themes/${icon}")) { - return $icon; - } - } - - return $fallback; - } - - public function get_theme() { $theme = $this->options["view"]["theme"]; - $types = $this->get_types(); + $theme_path = APP_PATH . "/client/themes/${theme}/icons"; $icons = array(); - foreach (array("file", "folder", "folder-page", "folder-parent") as $type) { - $icons[$type] = $this->get_icon($theme, $type, "fallback/icons/${type}.svg"); - } - foreach ($types as $type => $exts) { - if (!array_key_exists($type, $icons)) { - $icon = $this->get_icon($theme, $type); - if ($icon === null) { - $type_parts = explode('-', $type); - $icon = $this->get_icon($theme, $type_parts[0], $icons["file"]); + + if (is_dir($theme_path)) { + if ($dir = opendir($theme_path)) { + while (($name = readdir($dir)) !== false) { + $path_parts = pathinfo($name); + if (in_array($path_parts["extension"], App::$ICON_EXTS)) { + $icons[$path_parts["filename"]] = "${theme}/icons/${name}"; + } } - $icons[$type] = $icon; + closedir($dir); } } @@ -218,7 +204,7 @@ class App { if ($folder->get_parent($cache)) { $html .= "