summaryrefslogtreecommitdiffstats
path: root/lib/template
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2013-03-16 23:02:51 +0100
committerBart Visscher <bartv@thisnet.nl>2013-07-21 21:36:15 +0200
commit5965f3ecead424bb969261a33279dd592e5b799e (patch)
tree7d47897dbdca8fce1dd4f4fa074bd3d222d6efd7 /lib/template
parent37a731bcad4636f682a2cbcc59dabc9e60494b01 (diff)
downloadnextcloud-server-5965f3ecead424bb969261a33279dd592e5b799e.tar.gz
nextcloud-server-5965f3ecead424bb969261a33279dd592e5b799e.zip
Split locating JS and CSS files to their own class
Diffstat (limited to 'lib/template')
-rw-r--r--lib/template/cssresourcelocator.php43
-rw-r--r--lib/template/jsresourcelocator.php43
-rw-r--r--lib/template/resourcelocator.php70
3 files changed, 156 insertions, 0 deletions
diff --git a/lib/template/cssresourcelocator.php b/lib/template/cssresourcelocator.php
new file mode 100644
index 00000000000..e27296d9f5f
--- /dev/null
+++ b/lib/template/cssresourcelocator.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class CSSResourceLocator extends ResourceLocator {
+ public function doFind( $style ) {
+ if (strpos($style, '3rdparty') === 0
+ && $this->appendIfExist($this->thirdpartyroot, $style.'.css')
+ || $this->appendIfExist($this->serverroot, $style.$this->form_factor.'.css')
+ || $this->appendIfExist($this->serverroot, $style.'.css')
+ || $this->appendIfExist($this->serverroot, 'core/'.$style.$this->form_factor.'.css')
+ || $this->appendIfExist($this->serverroot, 'core/'.$style.'.css')
+ ) {
+ return;
+ }
+ $app = substr($style, 0, strpos($style, '/'));
+ $style = substr($style, strpos($style, '/')+1);
+ $app_path = OC_App::getAppPath($app);
+ $app_url = $this->webroot . '/index.php/apps/' . $app;
+ if ($this->appendIfExist($app_path, $style.$this->form_factor.'.css', $app_url)
+ || $this->appendIfExist($app_path, $style.'.css', $ap_url)
+ ) {
+ return;
+ }
+ throw new \Exception('css file not found: style:'.$style);
+ }
+
+ public function doFindTheme( $style ) {
+ $theme_dir = 'themes/'.$this->theme.'/';
+ $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.$this->form_factor.'.css')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.'.css')
+ || $this->appendIfExist($this->serverroot, $theme_dir.$style.$this->form_factor.'.css')
+ || $this->appendIfExist($this->serverroot, $theme_dir.$style.'.css')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.$this->form_factor.'.css')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.'.css');
+ }
+}
diff --git a/lib/template/jsresourcelocator.php b/lib/template/jsresourcelocator.php
new file mode 100644
index 00000000000..a1382edf2d5
--- /dev/null
+++ b/lib/template/jsresourcelocator.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class JSResourceLocator extends ResourceLocator {
+ public function doFind( $script ) {
+ $theme_dir = 'themes/'.$this->theme.'/';
+ if (strpos($script, '3rdparty') === 0
+ && $this->appendIfExist($this->thirdpartyroot, $script.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.$this->form_factor.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.$script.$this->form_factor.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.$script.'.js')
+ || $this->appendIfExist($this->serverroot, $script.$this->form_factor.'.js')
+ || $this->appendIfExist($this->serverroot, $script.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.$this->form_factor.'.js')
+ || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.'.js')
+ || $this->appendIfExist($this->serverroot, 'core/'.$script.$this->form_factor.'.js')
+ || $this->appendIfExist($this->serverroot, 'core/'.$script.'.js')
+ ) {
+ return;
+ }
+ $app = substr($script, 0, strpos($script, '/'));
+ $script = substr($script, strpos($script, '/')+1);
+ $app_path = OC_App::getAppPath($app);
+ $app_url = OC_App::getAppWebPath($app);
+ if ($this->appendIfExist($app_path, $script.$this->form_factor.'.js', $app_url)
+ || $this->appendIfExist($app_path, $script.'.js', $ap_url)
+ ) {
+ return;
+ }
+ throw new \Exception('js file not found: script:'.$script);
+ }
+
+ public function doFindTheme( $script ) {
+ }
+}
diff --git a/lib/template/resourcelocator.php b/lib/template/resourcelocator.php
new file mode 100644
index 00000000000..9f83673664d
--- /dev/null
+++ b/lib/template/resourcelocator.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+abstract class ResourceLocator {
+ protected $theme;
+ protected $form_factor;
+
+ protected $mapping;
+ protected $serverroot;
+ protected $thirdpartyroot;
+ protected $webroot;
+
+ protected $resources = array();
+
+ public function __construct( $theme, $form_factor, $core_map, $party_map ) {
+ $this->theme = $theme;
+ $this->form_factor = $form_factor;
+ $this->mapping = $core_map + $party_map;
+ $this->serverroot = key($core_map);
+ $this->thirdpartyroot = key($party_map);
+ $this->webroot = $this->mapping[$this->serverroot];
+ }
+
+ abstract public function doFind( $resource );
+ abstract public function doFindTheme( $resource );
+
+ public function find( $resources ) {
+ try {
+ foreach($resources as $resource) {
+ $this->doFind($resource);
+ }
+ if (!empty($this->theme)) {
+ foreach($resources as $resource) {
+ $this->doFindTheme($resource);
+ }
+ }
+ } catch (\Exception $e) {
+ throw new \Exception($e->getMessage().' formfactor:'.$this->form_factor
+ .' serverroot:'.$this->serverroot);
+ }
+ }
+
+ /*
+ * @brief append the $file resource if exist at $root
+ * @param $root path to check
+ * @param $file the filename
+ * @param $web base for path, default map $root to $webroot
+ */
+ protected function appendIfExist($root, $file, $webroot = null) {
+ if (is_file($root.'/'.$file)) {
+ if (!$webroot) {
+ $webroot = $this->mapping[$root];
+ }
+ $this->resources[] = array($root, $webroot, $file);
+ return true;
+ }
+ return false;
+ }
+
+ public function getResources() {
+ return $this->resources;
+ }
+}