From d0c34d5e3b8f2b11fcabfe5552644b51ee16e499 Mon Sep 17 00:00:00 2001
From: Chris Hallberg <crhallberg@gmail.com>
Date: Mon, 14 Jul 2014 12:58:15 -0400
Subject: [PATCH] Sidebar on left fix.

---
 .../View/Helper/Bootstrap3/LayoutClass.php    |  4 +-
 .../src/VuFindTheme/Initializer.php           |  2 +-
 .../src/VuFindTheme/ResourceContainer.php     | 98 ++++++++++++++++---
 .../View/Helper/HeadThemeResources.php        |  6 +-
 themes/bootprint3/less/icons.less             |  2 +-
 themes/bootstrap3/less/bootstrap.less         |  5 +
 themes/bootstrap3/theme.config.php            |  6 +-
 7 files changed, 98 insertions(+), 25 deletions(-)

diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
index ff9fad33c23..31a4017d4c6 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
@@ -53,10 +53,10 @@ class LayoutClass extends \VuFind\View\Helper\AbstractLayoutClass
     {
         switch ($class) {
         case 'mainbody':
-            return $this->left ? 'col-md-9 col-md-pull-3' : 'col-md-9';
+            return $this->left ? 'col-md-9 col-md-push-3' : 'col-md-9';
         case 'sidebar':
             return $this->left
-                ? 'sidebar col-md-3 col-md-push-9 hidden-print'
+                ? 'sidebar col-md-3 col-md-pull-9 hidden-print'
                 : 'sidebar col-md-3 hidden-print';
         }
     }
diff --git a/module/VuFindTheme/src/VuFindTheme/Initializer.php b/module/VuFindTheme/src/VuFindTheme/Initializer.php
index 36035ee2481..a0185b7b495 100644
--- a/module/VuFindTheme/src/VuFindTheme/Initializer.php
+++ b/module/VuFindTheme/src/VuFindTheme/Initializer.php
@@ -341,7 +341,7 @@ class Initializer
                 $resources->addLessCss($currentThemeInfo['less']);
             }
             if (isset($currentThemeInfo['scss'])) {
-                $resources->addSassCss($currentThemeInfo['scss']);
+                $resources->addScssCss($currentThemeInfo['scss']);
             }
             if (isset($currentThemeInfo['css'])) {
                 $resources->addCss($currentThemeInfo['css']);
diff --git a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
index 213e491e2a0..9a06ac11646 100644
--- a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
+++ b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
@@ -44,13 +44,25 @@ class ResourceContainer
      * @var array
      */
     protected $less = array();
-    
     /**
-     * Sass CSS files
+     * Less CSS active boolean
      *
      * @var array
      */
-    protected $sass = array();
+    protected $lessActive = false;
+
+    /**
+     * scss CSS files
+     *
+     * @var array
+     */
+    protected $scss = array();
+    /**
+     * SCSS CSS active boolean
+     *
+     * @var array
+     */
+    protected $scssActive = false;
 
     /**
      * CSS files
@@ -99,25 +111,35 @@ class ResourceContainer
         if (!is_array($less) && !is_a($less, 'Traversable')) {
             $less = array($less);
         }
-        foreach ($less as $current) {
-            $this->less[] = $current;
+        $this->lessActive = !isset($less['active']) || $less['active'] === true;
+        if ($this->lessActive) {
+            unset($less['active']);
+            foreach ($less as $index=>$current) {
+                $this->less[$index] = $current;
+                $this->removeCSS($current);
+            }
         }
     }
 
     /**
-     * Add a Sass CSS file.
+     * Add a scss CSS file.
      *
-     * @param array|string $sass Sass CSS file (or array of Sass CSS files) to add
+     * @param array|string $scss scss CSS file (or array of scss CSS files) to add
      *
      * @return void
      */
-    public function addSassCss($sass)
+    public function addScssCss($scss)
     {
-        if (!is_array($sass) && !is_a($sass, 'Traversable')) {
-            $sass = array($sass);
+        if (!is_array($scss) && !is_a($scss, 'Traversable')) {
+            $scss = array($scss);
         }
-        foreach ($sass as $current) {
-            $this->sass[] = $current;
+        $this->scssActive = !isset($scss['active']) || $scss['active'] === true;
+        if ($this->scssActive) {
+            unset($scss['active']);
+            foreach ($scss as $index=>$current) {
+                $this->scss[$index] = $current;
+                $this->removeCSS($current);
+            }
         }
     }
 
@@ -135,7 +157,9 @@ class ResourceContainer
             $css = array($css);
         }
         foreach ($css as $current) {
-            $this->css[] = $current;
+            if (!$this->activeInLess($current) && !$this->activeInScss($current)) {
+                $this->css[] = $current;
+            }
         }
     }
 
@@ -167,13 +191,13 @@ class ResourceContainer
         return array_unique($this->less);
     }
     /**
-     * Get Sass CSS files.
+     * Get SCSS CSS files.
      *
      * @return array
      */
-    public function getSassCss()
+    public function getScssCss()
     {
-        return array_unique($this->sass);
+        return array_unique($this->scss);
     }
 
     /**
@@ -261,4 +285,46 @@ class ResourceContainer
     {
         return $this->generator;
     }
+
+    /**
+     * Check if a CSS file is being dynamically compiled in LESS
+     *
+     * @return boolean
+     */
+    private function activeInLess($file)
+    {
+        if (empty($this->less) || $this->lessActive === false) {
+            return false;
+        }
+        list($lessFile,) = explode('.', $file);
+        $lessFile .= '.less';
+        return in_array($lessFile, $this->less, true) ? true : false;
+    }
+
+    /**
+     * Check if a CSS file is being dynamically compiled in SCSS
+     *
+     * @return boolean
+     */
+    private function activeInScss($file)
+    {
+        if (empty($this->scss) || $this->scssActive === false) {
+            return false;
+        }
+        list($scssFile,) = explode('.', $file);
+        $scssFile .= '.scss';
+        return in_array($scssFile, $this->scss, true) ? true : false;
+    }
+
+    /**
+     * Check if a CSS file is being dynamically compiled in SCSS
+     *
+     * @return boolean
+     */
+    private function removeCSS($file)
+    {
+        list($name, ) = explode('.', $file);
+        $name .= '.css';
+        unset($this->css[array_search($name, $this->css)]);
+    }
 }
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
index 8e274faf518..3500a2fa4c6 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
@@ -87,7 +87,7 @@ class HeadThemeResources extends \Zend\View\Helper\AbstractHelper
                 isset($parts[2]) ? trim($parts[2]) : false
             );
         }
-        
+
         // Compile and load LESS (make sure we prepend them in the appropriate order
         // theme resources should load before extras added by individual templates):
         foreach (array_reverse($this->container->getLessCss()) as $current) {
@@ -96,8 +96,8 @@ class HeadThemeResources extends \Zend\View\Helper\AbstractHelper
 
         // Compile and load SASS (make sure we prepend them in the appropriate order
         // theme resources should load before extras added by individual templates):
-        foreach (array_reverse($this->container->getSassCss()) as $current) {
-            $headLink()->addSassStylesheet($current);
+        foreach (array_reverse($this->container->getScssCss()) as $current) {
+            $headLink()->addScssStylesheet($current);
         }
 
         // Load Javascript (same ordering considerations as CSS, above):
diff --git a/themes/bootprint3/less/icons.less b/themes/bootprint3/less/icons.less
index 7b47d305f12..b424c63a927 100644
--- a/themes/bootprint3/less/icons.less
+++ b/themes/bootprint3/less/icons.less
@@ -14,7 +14,7 @@
 .fa-x {background-image:url('../../images/icons/page_white.png'); &:extend(.bp-icon);}
 i.fa-archive {background-image:url('../../images/icons/package.png'); &:extend(.bp-icon);}
 i.fa-asterisk {background-image:url('../../images/icons/list.png'); &:extend(.bp-icon);}
-i.fa-atlas          {background-image:url('../../images/icons/map.png'); &:extend(.bp-icon);}
+i.fa-atlas {background-image:url('../../images/icons/map.png'); &:extend(.bp-icon);}
 i.fa-bell {background-image:url('../../images/icons/bell.png'); &:extend(.bp-icon);}
 i.fa-book {background-image:url('../../images/icons/book.png'); &:extend(.bp-icon);}
 i.fa-bookbag-add {background-image:url('../../images/icons/bookbag_add.png'); &:extend(.bp-icon);}
diff --git a/themes/bootstrap3/less/bootstrap.less b/themes/bootstrap3/less/bootstrap.less
index 0be356a5bd6..6aee9ca1eaa 100644
--- a/themes/bootstrap3/less/bootstrap.less
+++ b/themes/bootstrap3/less/bootstrap.less
@@ -138,6 +138,11 @@ label.list-group-item {border-radius:0;font-weight:normal;margin-top:0;padding-l
     }
   }
 }
+.list-group-item.active, .badge {
+  i.fa {
+    cursor:inherit;
+  }
+}
 
 /* --- Slider accessibility --- */
 .slider {
diff --git a/themes/bootstrap3/theme.config.php b/themes/bootstrap3/theme.config.php
index d7469ac25a4..c6421cc660f 100644
--- a/themes/bootstrap3/theme.config.php
+++ b/themes/bootstrap3/theme.config.php
@@ -20,10 +20,12 @@ return array(
         'lightbox.js',
     ),
     'less' => array(
-        //'compiled.less'
+        'active' => true,
+        'compiled.less'
     ),
     'scss' => array(
-        //'compiled.scss'
+        'active' => false,
+        'compiled.scss'
     ),
     'favicon' => 'vufind-favicon.ico',
     'helpers' => array(
-- 
GitLab