From a3be07a50ab6be4c3dfb4b60c43c39833c443fe0 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Sun, 19 Jul 2015 19:27:48 +0200 Subject: [PATCH] * [ADD] Preparing for theme selection. --- ajax/ajax_configSave.php | 2 + css/chosen-sprite.png | Bin 646 -> 538 bytes css/chosen-sprite@2x.png | Bin 0 -> 738 bytes css/chosen.css | 84 +++++---- css/css.php | 10 +- inc/Base.php | 4 +- inc/Init.class.php | 178 +++++++++--------- inc/Session.class.php | 20 ++ inc/Template.class.php | 128 ++++++------- inc/{tpl => themes/default}/account.inc | 0 inc/{tpl => themes/default}/backup.inc | 0 inc/{tpl => themes/default}/body.inc | 0 inc/{tpl => themes/default}/categories.inc | 0 inc/{tpl => themes/default}/config.inc | 33 ++-- .../themes/default/css}/search-grid.css | 0 {css => inc/themes/default/css}/styles.css | 0 inc/{tpl => themes/default}/customers.inc | 0 inc/{tpl => themes/default}/debug.inc | 0 inc/{tpl => themes/default}/editpass.inc | 0 inc/{tpl => themes/default}/encryption.inc | 0 inc/{tpl => themes/default}/error.inc | 0 inc/{tpl => themes/default}/errorfancy.inc | 0 inc/{tpl => themes/default}/eventlog.inc | 0 inc/{tpl => themes/default}/files.inc | 0 inc/{tpl => themes/default}/footer.inc | 0 inc/{tpl => themes/default}/groups.inc | 0 inc/{tpl => themes/default}/header.inc | 0 inc/{tpl => themes/default}/import.inc | 14 +- inc/themes/default/index.php | 30 +++ inc/{tpl => themes/default}/info.inc | 0 inc/{tpl => themes/default}/install.inc | 0 inc/{tpl => themes/default}/js-common.inc | 17 ++ inc/{tpl => themes/default}/login.inc | 2 +- inc/{tpl => themes/default}/menu.inc | 0 inc/{tpl => themes/default}/mgmttabs.inc | 0 inc/{tpl => themes/default}/passreset.inc | 0 inc/{tpl => themes/default}/profiles.inc | 0 inc/{tpl => themes/default}/request.inc | 0 inc/{tpl => themes/default}/search.inc | 0 inc/{tpl => themes/default}/searchbox.inc | 0 inc/{tpl => themes/default}/sessionbar.inc | 0 inc/{tpl => themes/default}/tabs-end.inc | 0 inc/{tpl => themes/default}/tabs-start.inc | 0 inc/{tpl => themes/default}/upgrade.inc | 0 inc/{tpl => themes/default}/users.inc | 0 inc/{tpl => themes/default}/userspass.inc | 0 js/chosen.jquery.min.js | 4 +- web/ConfigC.class.php | 16 +- 48 files changed, 318 insertions(+), 224 deletions(-) create mode 100644 css/chosen-sprite@2x.png rename inc/{tpl => themes/default}/account.inc (100%) rename inc/{tpl => themes/default}/backup.inc (100%) rename inc/{tpl => themes/default}/body.inc (100%) rename inc/{tpl => themes/default}/categories.inc (100%) rename inc/{tpl => themes/default}/config.inc (95%) rename {css => inc/themes/default/css}/search-grid.css (100%) rename {css => inc/themes/default/css}/styles.css (100%) rename inc/{tpl => themes/default}/customers.inc (100%) rename inc/{tpl => themes/default}/debug.inc (100%) rename inc/{tpl => themes/default}/editpass.inc (100%) rename inc/{tpl => themes/default}/encryption.inc (100%) rename inc/{tpl => themes/default}/error.inc (100%) rename inc/{tpl => themes/default}/errorfancy.inc (100%) rename inc/{tpl => themes/default}/eventlog.inc (100%) rename inc/{tpl => themes/default}/files.inc (100%) rename inc/{tpl => themes/default}/footer.inc (100%) rename inc/{tpl => themes/default}/groups.inc (100%) rename inc/{tpl => themes/default}/header.inc (100%) rename inc/{tpl => themes/default}/import.inc (92%) create mode 100644 inc/themes/default/index.php rename inc/{tpl => themes/default}/info.inc (100%) rename inc/{tpl => themes/default}/install.inc (100%) rename inc/{tpl => themes/default}/js-common.inc (62%) rename inc/{tpl => themes/default}/login.inc (98%) rename inc/{tpl => themes/default}/menu.inc (100%) rename inc/{tpl => themes/default}/mgmttabs.inc (100%) rename inc/{tpl => themes/default}/passreset.inc (100%) rename inc/{tpl => themes/default}/profiles.inc (100%) rename inc/{tpl => themes/default}/request.inc (100%) rename inc/{tpl => themes/default}/search.inc (100%) rename inc/{tpl => themes/default}/searchbox.inc (100%) rename inc/{tpl => themes/default}/sessionbar.inc (100%) rename inc/{tpl => themes/default}/tabs-end.inc (100%) rename inc/{tpl => themes/default}/tabs-start.inc (100%) rename inc/{tpl => themes/default}/upgrade.inc (100%) rename inc/{tpl => themes/default}/users.inc (100%) rename inc/{tpl => themes/default}/userspass.inc (100%) diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index dd009877..f4a33d63 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -47,6 +47,7 @@ $doActionOnClose = "doAction($actionId,'',$activeTab);"; if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_GENERAL) { $siteLang = SP\Request::analyze('sitelang'); + $siteTheme = SP\Request::analyze('sitetheme'); $sessionTimeout = SP\Request::analyze('session_timeout', 300); $logEnabled = SP\Request::analyze('log_enabled', false, false, true); $debugEnabled = SP\Request::analyze('debug', false, false, true); @@ -147,6 +148,7 @@ if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_GENERAL) { SP\Config::setValue('account_link', $accountLinkEnabled); SP\Config::setValue('account_count', $accountCount); SP\Config::setValue('sitelang', $siteLang); + SP\Config::setValue('sitetheme', $siteTheme); SP\Config::setValue('session_timeout', $sessionTimeout); SP\Config::setValue('log_enabled', $logEnabled); SP\Config::setValue('debug', $debugEnabled); diff --git a/css/chosen-sprite.png b/css/chosen-sprite.png index 3611ae4ace1c4b1cbeacd6145b5a79cbc72e0bdc..c57da70b4b5b1e08a6977ddde182677af0e5e1b8 100644 GIT binary patch delta 524 zcmV+n0`vWb1)2nq8Gi%-005`^0$u?L1Ovf>#mznP zBoOFgg>T6uC@55+NO!xa2r7ul{jJ3!Zgp@F1VNWTAW(>ZL2z*tib^DKAy6Fj9S0xb zO)<5cF8aOY^4>e=$HzVIu{U5gYkC8^D3hPlsI!3 zP?h1V2D~cmV}JKg-BeLm#jL5Jfogv-QS(TBnUb;))KrqmD}uDDeVLNhm1G*pFB`O? ziA=dnWBEpqHk8Yh%Qu45EIG=&F-dDmt|;|nN@|3lOkVZ7>z*~a1?_t?U)c+&|JFJke1`+rmjA;k0X8aJnY_{itt z__F0T;PFCy$p?n0!>LoK~#9!?bg3*6LA=T@l(OYLa-1FRNUN8 zB7s1cR>+b`uwbAHMY@|sC6EYWeyqhJZaO#=1VNWTAW(>ZL2+>uib^DK5GW3MuTS9( zyo4*2YYcs%2Oq9?;hOj1zPTh2kyEeJ=}ctMMIM1szyMiqL4SP+A`?~AV?p0r&?*j0 z)P{)}B6Jm`mNAAP*8K<}0(U`b6S0Y^OkOh=94o~eCpu|R@rXN=pGVNbjDu`UgmpwV z%3kmqlHh&Hpe(-P+6;qwCZ?e0@){!;*b5f14>3l_r3`upL2rgZ8T2MGMu=VHrY|T% zjC(1U+#QJV;D01RrBdmi*+Hh4-iMT*p+yWKMueq#2ibx4u#_@r2a=#WgP;t$$WMh7 zFhDlN(`l}c?dhOC1d)j<>an1oVvxDBL8~}0Q5z;^2p>Ov7}Q$E7=l>$BZLUt1*uKM zCaQwKYf$lsJCyerWMd+%BeGH6f_f&Vpy%=$BN%uK%736Yi7`U#BIhjVcxOSU+*#0n zW4C6rd5ND|R}VEBjq^eB<|BxR$M^wJd+m06&0UbjY(ogxXa59S5IuL_RS*NO=-{7N za+d?$IKF|Oyf$vNT36fzG4Klp7lsb)&>Hnn@6>HiL2np5uGMN66M|MWsN!kKJ=dYv z5`tcFK5@n^H$g15>kRxG5r3Df)#|y!$2T!m&i%pndcA(Z+f(i?ga~2(1>YdXma8CL zUN`ZU;Xmtl&@=We^Z4HO6g0ir(5EKqB^F!oJoIWh{eAG@xkM<0ryd(K3(} zP8JV&;uuIJ4nL%g8!wSG9E$P+3QVMGgj><+00}M5I5kMzaT<~M;uJ`UhLfbp9Ahdsrux5(g+(>Q*+9wU{AuYPH0}W_u4`|q(9c->{ zt>Jn|lbhH<_x5jU6prFi#S}&XMZ=~Y5VyC3+ZN%hXciz8 zPcLpJgbIK#a49e31-%wf2zh2F&&(Nq;AL%4zA(=QJRGq`sx3y3#0_cg9Fim739XTOu1NKKjlWs`52Q+3 Uja*K~(*OVf07*qoM6N<$g3mu-GXMYp literal 0 HcmV?d00001 diff --git a/css/chosen.css b/css/chosen.css index 8e10bd59..e7ea0922 100644 --- a/css/chosen.css +++ b/css/chosen.css @@ -1,23 +1,37 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.2 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + /* @group Base */ .chosen-container { position: relative; display: inline-block; vertical-align: middle; - font-size: 12px; + font-size: 13px; zoom: 1; *display: inline; -webkit-user-select: none; -moz-user-select: none; user-select: none; } +.chosen-container * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} .chosen-container .chosen-drop { position: absolute; top: 100%; left: -9999px; z-index: 1010; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; width: 100%; border: 1px solid #aaa; border-top: 0; @@ -30,6 +44,19 @@ .chosen-container a { cursor: pointer; } +.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name { + margin-right: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: normal; + color: #999999; +} +.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after { + content: ":"; + padding-left: 2px; + vertical-align: top; +} /* @end */ /* @group Single Chosen */ @@ -38,7 +65,7 @@ display: block; overflow: hidden; padding: 0 0 0 8px; - height: 23px; + height: 25px; border: 1px solid #aaa; border-radius: 5px; background-color: #fff; @@ -105,9 +132,6 @@ white-space: nowrap; } .chosen-container-single .chosen-search input[type="text"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; margin: 1px 0; padding: 4px 20px 4px 5px; width: 100%; @@ -115,11 +139,7 @@ outline: 0; border: 1px solid #aaa; background: white url('chosen-sprite.png') no-repeat 100% -20px; - background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat 100% -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat 100% -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat 100% -20px, linear-gradient(#eeeeee 1%, #ffffff 15%); + background: url('chosen-sprite.png') no-repeat 100% -20px; font-size: 1em; font-family: sans-serif; line-height: normal; @@ -138,6 +158,7 @@ /* @end */ /* @group Results */ .chosen-container .chosen-results { + color: #444; position: relative; overflow-x: hidden; overflow-y: auto; @@ -152,6 +173,8 @@ padding: 5px 6px; list-style: none; line-height: 15px; + word-wrap: break-word; + -webkit-touch-callout: none; } .chosen-container .chosen-results li.active-result { display: list-item; @@ -172,6 +195,7 @@ color: #fff; } .chosen-container .chosen-results li.no-results { + color: #777; display: list-item; background: #f4f4f4; } @@ -193,11 +217,8 @@ .chosen-container-multi .chosen-choices { position: relative; overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; margin: 0; - padding: 0; + padding: 0 5px; width: 100%; height: auto !important; height: 1%; @@ -221,39 +242,42 @@ } .chosen-container-multi .chosen-choices li.search-field input[type="text"] { margin: 1px 0; - padding: 5px; - height: 15px; + padding: 0; + height: 25px; outline: 0; border: 0 !important; background: transparent !important; box-shadow: none; - color: #666; + color: #999; font-size: 100%; font-family: sans-serif; line-height: normal; border-radius: 0; } -.chosen-container-multi .chosen-choices li.search-field .default { - color: #999; -} .chosen-container-multi .chosen-choices li.search-choice { position: relative; - margin: 3px 0 3px 5px; + margin: 3px 5px 3px 0; padding: 3px 20px 3px 5px; border: 1px solid #aaa; + max-width: 100%; border-radius: 3px; - background-color: #e4e4e4; + background-color: #eeeeee; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-size: 100% 19px; + background-repeat: repeat-x; background-clip: padding-box; box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); color: #333; line-height: 13px; cursor: default; } +.chosen-container-multi .chosen-choices li.search-choice span { + word-wrap: break-word; +} .chosen-container-multi .chosen-choices li.search-choice .search-choice-close { position: absolute; top: 4px; @@ -325,7 +349,7 @@ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); } .chosen-container-active .chosen-choices li.search-field input[type="text"] { - color: #111 !important; + color: #222 !important; } /* @end */ @@ -398,11 +422,7 @@ .chosen-rtl .chosen-search input[type="text"] { padding: 4px 5px 4px 20px; background: white url('chosen-sprite.png') no-repeat -30px -20px; - background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat -30px -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat -30px -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%); - background: url('chosen-sprite.png') no-repeat -30px -20px, linear-gradient(#eeeeee 1%, #ffffff 15%); + background: url('chosen-sprite.png') no-repeat -30px -20px; direction: rtl; } .chosen-rtl.chosen-container-single .chosen-single div b { @@ -414,7 +434,7 @@ /* @end */ /* @group Retina compatibility */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) { +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { .chosen-rtl .chosen-search input[type="text"], .chosen-container-single .chosen-single abbr, .chosen-container-single .chosen-single div b, diff --git a/css/css.php b/css/css.php index 07d6937b..354fcfbb 100644 --- a/css/css.php +++ b/css/css.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -27,6 +27,8 @@ define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; +$themeUri = 'inc/themes/' . \SP\Session::getTheme(); + $cssFiles = array( array('href' => 'css/reset.css', 'min' => true), array('href' => 'css/jquery-ui.min.css', 'min' => false), @@ -39,11 +41,11 @@ $cssFiles = array( array('href' => 'css/alertify.default.css', 'min' => true), array('href' => 'css/jquery.tagsinput.css', 'min' => true), array('href' => 'js/fancybox/jquery.fancybox.css', 'min' => true), - array('href' => 'css/styles.css', 'min' => true) + array('href' => $themeUri . '/css/styles.css', 'min' => true) ); if (!SP\Util::resultsCardsIsEnabled()) { - array_push($cssFiles, array('href' => 'css/search-grid.css', 'min' => true)); + array_push($cssFiles, array('href' => $themeUri . '/css/search-grid.css', 'min' => true)); } SP\Util::getMinified('css', $cssFiles); \ No newline at end of file diff --git a/inc/Base.php b/inc/Base.php index 61b48a26..e1af564b 100644 --- a/inc/Base.php +++ b/inc/Base.php @@ -25,8 +25,8 @@ define('MODEL_PATH', __DIR__); define('CONTROLLER_PATH', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'web'); -define('VIEW_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'tpl'); -define('EXTENSIONS_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ext'); +define('VIEW_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'themes'); +define('EXTENSIONS_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'ext'); define('DEBUG', false); require_once MODEL_PATH . DIRECTORY_SEPARATOR . 'Init.class.php'; diff --git a/inc/Init.class.php b/inc/Init.class.php index 9ddcce47..3089f944 100644 --- a/inc/Init.class.php +++ b/inc/Init.class.php @@ -63,7 +63,10 @@ class Init * @var bool True if sysPass has been updated. Only for notices. */ public static $UPDATED = false; - + /** + * @var string + */ + public static $_THEME = ''; /** * @var string */ @@ -165,6 +168,9 @@ class Init // Comprobar la configuración self::checkConfig(); + // Establecer el tema de sysPass + self::selectTheme(); + // Comprobar si está instalado self::checkInstalled(); @@ -214,31 +220,41 @@ class Init } } - if (self::isLoggedIn() || Request::analyze('isAjax', false, true)){ + if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) { return; } // El usuario no está logado y no es una petición, redirigir al login self::goLogin(); + } - // El usuario no está logado y no es una petición, redirigir al login - /* if (isset($_GET["logout"]) && $_GET["logout"]) { - self::logout(); + /** + * Establecer las rutas de sysPass en el PATH de PHP + */ + public static function setIncludes() + { + set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . get_include_path()); + } - if (count($_GET) > 1) { - foreach ($_GET as $param => $value) { - if ($param == 'logout') { - continue; - } + /** + * Cargador de clases de sysPass + * + * @param $class string El nombre de la clase a cargar + */ + public static function loadClass($class) + { + // Eliminar \\ para las clases con namespace definido + $class = (strripos($class, '\\')) ? substr($class, strripos($class, '\\') + 1) : $class; - $params[] = Html::sanitize($param) . '=' . Html::sanitize($value); - } +// error_log($class); - header("Location: " . self::$WEBROOT . '/index.php?' . implode('&', $params)); - } else { - header("Location: " . self::$WEBROOT . '/'); - } - }*/ + // Buscar la clase en los directorios de include + foreach (explode(':', get_include_path()) as $iPath) { + $classFile = $iPath . DIRECTORY_SEPARATOR . $class . '.class.php'; + if (is_readable($classFile)) { + require_once $classFile; + } + } } /** @@ -439,6 +455,55 @@ class Init return false; } + /** + * Comprobar si es necesario cerrar la sesión + */ + private static function checkLogout() + { + if (Request::analyze('logout', false, true)) { + self::logout(); + self::goLogin(); + } + } + + /** + * Deslogar el usuario actual y eliminar la información de sesión. + */ + private static function logout() + { + self::wrLogoutInfo(); + + session_unset(); + session_destroy(); + } + + /** + * Escribir la información de logout en el registro de eventos. + */ + private static function wrLogoutInfo() + { + $inactiveTime = round(((time() - Session::getLastActivity()) / 60), 2); + $totalTime = round(((time() - Session::getStartActivity()) / 60), 2); + $ulogin = Session::getUserLogin(); + + $log = new Log(_('Finalizar sesión')); + $log->addDescription(_('Usuario') . ": " . $ulogin); + $log->addDescription(_('Tiempo inactivo') . ": " . $inactiveTime . " min."); + $log->addDescription(_('Tiempo total') . ": " . $totalTime . " min."); + $log->writeLog(); + } + + /** + * Mostrar la página de login + */ + private static function goLogin() + { + $controller = new Controller\MainC(); + $controller->getLogin(); + $controller->view(); + exit; + } + /** * Comrpueba y actualiza la versión de la aplicación. */ @@ -553,22 +618,6 @@ class Init return Session::getSessionTimeout(); } - /** - * Escribir la información de logout en el registro de eventos. - */ - private static function wrLogoutInfo() - { - $inactiveTime = round(((time() - Session::getLastActivity()) / 60), 2); - $totalTime = round(((time() - Session::getStartActivity()) / 60), 2); - $ulogin = Session::getUserLogin(); - - $log = new Log(_('Finalizar sesión')); - $log->addDescription(_('Usuario') . ": " . $ulogin); - $log->addDescription(_('Tiempo inactivo') . ": " . $inactiveTime . " min."); - $log->addDescription(_('Tiempo total') . ": " . $totalTime . " min."); - $log->writeLog(); - } - /** * Comprobar si hay que ejecutar acciones de URL. * @@ -595,17 +644,6 @@ class Init exit(); } - /** - * Deslogar el usuario actual y eliminar la información de sesión. - */ - private static function logout() - { - self::wrLogoutInfo(); - - session_unset(); - session_destroy(); - } - /** * Comprobar si el usuario está logado. * @@ -621,35 +659,6 @@ class Init return false; } - /** - * Establecer las rutas de sysPass en el PATH de PHP - */ - public static function setIncludes() - { - set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . get_include_path()); - } - - /** - * Cargador de clases de sysPass - * - * @param $class string El nombre de la clase a cargar - */ - public static function loadClass($class) - { - // Eliminar \\ para las clases con namespace definido - $class = (strripos($class, '\\')) ? substr($class, strripos($class, '\\') + 1) : $class; - -// error_log($class); - - // Buscar la clase en los directorios de include - foreach (explode(':', get_include_path()) as $iPath) { - $classFile = $iPath . DIRECTORY_SEPARATOR . $class . '.class.php'; - if (is_readable($classFile)) { - require_once $classFile; - } - } - } - /** * Devuelve el tiempo actual en coma flotante. * Esta función se utiliza para calcular el tiempo de renderizado con coma flotante @@ -663,22 +672,15 @@ class Init } /** - * Comprobar si es necesario cerrar la sesión + * Establecer el tema visual de sysPass desde la configuración */ - private static function checkLogout(){ - if (Request::analyze('logout', false, true)) { - self::logout(); - self::goLogin(); + private static function selectTheme() + { + if (!empty(Session::getTheme())){ + self::$_THEME = Session::getTheme(); + } else { + self::$_THEME = Config::getValue('theme', 'default'); + Session::setTheme(self::$_THEME); } } - - /** - * Mostrar la página de login - */ - private static function goLogin(){ - $controller = new Controller\MainC(); - $controller->getLogin(); - $controller->view(); - exit; - } } \ No newline at end of file diff --git a/inc/Session.class.php b/inc/Session.class.php index d45e485a..8634f970 100644 --- a/inc/Session.class.php +++ b/inc/Session.class.php @@ -508,4 +508,24 @@ class Session { $_SESSION['lastAccountId'] = $id; } + + /** + * Devuelve el tema visual utilizado en sysPass + * + * @return string + */ + public static function getTheme() + { + return (isset($_SESSION['theme'])) ? $_SESSION['theme'] : ''; + } + + /** + * Establece el tema visual utilizado en sysPass + * + * @param $theme string El tema visual a utilizar + */ + public static function setTheme($theme) + { + $_SESSION['theme'] = $theme; + } } \ No newline at end of file diff --git a/inc/Template.class.php b/inc/Template.class.php index bfc96bef..c4bc9104 100644 --- a/inc/Template.class.php +++ b/inc/Template.class.php @@ -60,17 +60,59 @@ class Template } /** - * Overloading para añadir nuevas variables en al array de variables dela plantilla - * pasadas como atributos dinámicos de la clase + * Añadir una nueva plantilla al array de plantillas de la clase * - * @param string $name Nombre del atributo - * @param string $value Valor del atributo - * @return null + * @param string $file Con el nombre del archivo de plantilla + * @return bool */ - public function __set($name, $value) + public function addTemplate($file) { - $this->_vars[$name] = $value; - return null; + if (!is_null($file) && $this->checkTemplate($file)) { + return true; + } + + return false; + } + + /** + * Comprobar si un archivo de plantilla existe y se puede leer + * + * @param string $file Con el nombre del archivo + * @return bool + * @throws InvalidArgumentException + */ + private function checkTemplate($file) + { + $template = VIEW_PATH . DIRECTORY_SEPARATOR . Init::$_THEME . DIRECTORY_SEPARATOR . $file . '.inc'; + + if (!is_readable($template)) { + throw new InvalidArgumentException('No es posible obtener la plantilla "' . $file . '"'); + } + + $this->setTemplate($template); + return true; + } + + /** + * Añadir un nuevo archivo de plantilla al array de plantillas de la clase. + * + * @param string $file Con el nombre del archivo + */ + private function setTemplate($file) + { + $this->_file[] = $file; + } + + /** + * Establecer los atributos de la clase a partir de un array. + * + * @param array $vars Con los atributos de la clase + */ + private function setVars(&$vars) + { + foreach ($vars as $name => $value) { + $this->$name = $value; + } } /** @@ -89,6 +131,20 @@ class Template return $this->_vars[$name]; } + /** + * Overloading para añadir nuevas variables en al array de variables dela plantilla + * pasadas como atributos dinámicos de la clase + * + * @param string $name Nombre del atributo + * @param string $value Valor del atributo + * @return null + */ + public function __set($name, $value) + { + $this->_vars[$name] = $value; + return null; + } + /** * Overloading para comprobar si el atributo solicitado está declarado como variable * en el array de variables de la plantilla. @@ -139,62 +195,6 @@ class Template return ob_get_clean(); } - /** - * Comprobar si un archivo de plantilla existe y se puede leer - * - * @param string $file Con el nombre del archivo - * @return bool - * @throws InvalidArgumentException - */ - private function checkTemplate($file) - { - $template = Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'tpl' . DIRECTORY_SEPARATOR . $file . '.inc'; - - if (!is_readable($template)) { - throw new InvalidArgumentException('No es posible obtener la plantilla "' . $file . '"'); - } - - $this->setTemplate($template); - return true; - } - - /** - * Añadir un nuevo archivo de plantilla al array de plantillas de la clase. - * - * @param string $file Con el nombre del archivo - */ - private function setTemplate($file) - { - $this->_file[] = $file; - } - - /** - * Establecer los atributos de la clase a partir de un array. - * - * @param array $vars Con los atributos de la clase - */ - private function setVars(&$vars) - { - foreach ($vars as $name => $value) { - $this->$name = $value; - } - } - - /** - * Añadir una nueva plantilla al array de plantillas de la clase - * - * @param string $file Con el nombre del archivo de plantilla - * @return bool - */ - public function addTemplate($file) - { - if (!is_null($file) && $this->checkTemplate($file)) { - return true; - } - - return false; - } - /** * Crear la variable y asignarle un valor en el array de variables * diff --git a/inc/tpl/account.inc b/inc/themes/default/account.inc similarity index 100% rename from inc/tpl/account.inc rename to inc/themes/default/account.inc diff --git a/inc/tpl/backup.inc b/inc/themes/default/backup.inc similarity index 100% rename from inc/tpl/backup.inc rename to inc/themes/default/backup.inc diff --git a/inc/tpl/body.inc b/inc/themes/default/body.inc similarity index 100% rename from inc/tpl/body.inc rename to inc/themes/default/body.inc diff --git a/inc/tpl/categories.inc b/inc/themes/default/categories.inc similarity index 100% rename from inc/tpl/categories.inc rename to inc/themes/default/categories.inc diff --git a/inc/tpl/config.inc b/inc/themes/default/config.inc similarity index 95% rename from inc/tpl/config.inc rename to inc/themes/default/config.inc index 2ac42d21..ecf31f6b 100644 --- a/inc/tpl/config.inc +++ b/inc/themes/default/config.inc @@ -11,14 +11,25 @@ - + $langValue): ?> + + + + + + @@ -274,7 +285,7 @@ required> + class="select-box sel-chosen-profile" required> $name): ?> '; ?> @@ -446,8 +457,6 @@ diff --git a/inc/tpl/menu.inc b/inc/themes/default/menu.inc similarity index 100% rename from inc/tpl/menu.inc rename to inc/themes/default/menu.inc diff --git a/inc/tpl/mgmttabs.inc b/inc/themes/default/mgmttabs.inc similarity index 100% rename from inc/tpl/mgmttabs.inc rename to inc/themes/default/mgmttabs.inc diff --git a/inc/tpl/passreset.inc b/inc/themes/default/passreset.inc similarity index 100% rename from inc/tpl/passreset.inc rename to inc/themes/default/passreset.inc diff --git a/inc/tpl/profiles.inc b/inc/themes/default/profiles.inc similarity index 100% rename from inc/tpl/profiles.inc rename to inc/themes/default/profiles.inc diff --git a/inc/tpl/request.inc b/inc/themes/default/request.inc similarity index 100% rename from inc/tpl/request.inc rename to inc/themes/default/request.inc diff --git a/inc/tpl/search.inc b/inc/themes/default/search.inc similarity index 100% rename from inc/tpl/search.inc rename to inc/themes/default/search.inc diff --git a/inc/tpl/searchbox.inc b/inc/themes/default/searchbox.inc similarity index 100% rename from inc/tpl/searchbox.inc rename to inc/themes/default/searchbox.inc diff --git a/inc/tpl/sessionbar.inc b/inc/themes/default/sessionbar.inc similarity index 100% rename from inc/tpl/sessionbar.inc rename to inc/themes/default/sessionbar.inc diff --git a/inc/tpl/tabs-end.inc b/inc/themes/default/tabs-end.inc similarity index 100% rename from inc/tpl/tabs-end.inc rename to inc/themes/default/tabs-end.inc diff --git a/inc/tpl/tabs-start.inc b/inc/themes/default/tabs-start.inc similarity index 100% rename from inc/tpl/tabs-start.inc rename to inc/themes/default/tabs-start.inc diff --git a/inc/tpl/upgrade.inc b/inc/themes/default/upgrade.inc similarity index 100% rename from inc/tpl/upgrade.inc rename to inc/themes/default/upgrade.inc diff --git a/inc/tpl/users.inc b/inc/themes/default/users.inc similarity index 100% rename from inc/tpl/users.inc rename to inc/themes/default/users.inc diff --git a/inc/tpl/userspass.inc b/inc/themes/default/userspass.inc similarity index 100% rename from inc/tpl/userspass.inc rename to inc/themes/default/userspass.inc diff --git a/js/chosen.jquery.min.js b/js/chosen.jquery.min.js index ad430c46..22e38658 100644 --- a/js/chosen.jquery.min.js +++ b/js/chosen.jquery.min.js @@ -1,2 +1,2 @@ -/* Chosen v1.0.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ -!function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=""!==a.style.cssText?' style="'+a.style+'"':"",'
  • '+a.search_text+"
  • "):"":""},AbstractChosen.prototype.result_add_group=function(a){return a.search_match||a.group_match?a.active_options>0?'
  • '+a.search_text+"
  • ":"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+""+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+""+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
    ",c),this.is_multiple?this.container.html('
      '):this.container.html(''+this.default_text+'
        '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(document).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b,c,d;return b=-(null!=(c=a.originalEvent)?c.wheelDelta:void 0)||(null!=(d=a.originialEvent)?d.detail:void 0),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(document).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){return this.container.is(a(b.target).closest(".chosen-container"))?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results())},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
      • ",{"class":"search-choice"}).html(""+b.html+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.form_field.options[0].selected=!0,this.selected_option_count=null,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c,d;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):(this.result_single_selected&&(this.result_single_selected.removeClass("result-selected"),d=this.result_single_selected[0].getAttribute("data-option-array-index"),this.results_data[d].selected=!1),this.result_single_selected=b),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
        ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
      • '+this.results_none_found+' ""
      • '),c.find("span").first().html(b),this.search_results.append(c)},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
        ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this); \ No newline at end of file +/* Chosen v1.4.2 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(this.choice_label(c)));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),b.search_text=b.group?b.label:b.html,(!b.group||this.group_search)&&(b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+""+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
        ",c),this.is_multiple?this.container.html('
          '):this.container.html('
          '+this.default_text+'
            '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){return a.container_mousedown(b),b.preventDefault()}),this.container.bind("touchend.chosen",function(b){return a.container_mouseup(b),b.preventDefault()}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
          • ",{"class":"search-choice"}).html(""+this.choice_label(b)+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return a("
            ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
          • '+this.results_none_found+' ""
          • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
            ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php index 067cb80e..4d3b3a45 100644 --- a/web/ConfigC.class.php +++ b/web/ConfigC.class.php @@ -64,16 +64,28 @@ class ConfigC extends Controller implements ActionsInterface return; } + $themesAvailable = array(); + + $dirThemes = dir(VIEW_PATH); + + while (false !== ($theme = $dirThemes->read())) { + if($theme != '.' && $theme != '..') { + $themesAvailable[] = $theme; + } + } + + $dirThemes->close(); + $this->view->addTemplate('config'); - $this->view->assign('arrLangAvailable', + $this->view->assign('langsAvailable', array('Español' => 'es_ES', 'English' => 'en_US', 'Deutsch' => 'de_DE', 'Magyar' => 'hu_HU', 'Français' => 'fr_FR') ); - $this->view->assign('arrAccountCount', array(6, 9, 12, 15, 21, 27, 30, 51, 99)); + $this->view->assign('themesAvailable', $themesAvailable); $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled()); $this->view->assign('isDisabled', (\SP\Util::demoIsEnabled()) ? 'DISABLED' : ''); $this->view->assign('chkLog', (\SP\Config::getValue('log_enabled')) ? 'checked="checked"' : '');