From 9b8dace833ff476b1d2b17ca1b062488c0380213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guy=20Couronn=C3=A9?= Date: Fri, 15 Mar 2019 11:17:58 +0100 Subject: [PATCH 001/200] :zap: Optimize Column load when using api core/get Getting in SQL only desired columns to show Used when output_fields != '*' || '*+' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Guy Couronné --- core/restservices.class.inc.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/restservices.class.inc.php b/core/restservices.class.inc.php index c052799c5..5288714d2 100644 --- a/core/restservices.class.inc.php +++ b/core/restservices.class.inc.php @@ -467,6 +467,12 @@ class CoreServices implements iRestServiceProvider } else { + if (!$bExtendedOutput && RestUtils::GetOptionalParam($aParams, 'output_fields', '*') != '*') + { + $aAttToLoad = array($oObjectSet->GetClassAlias() => $aShowFields[$sClass]); + $oObjectSet->OptimizeColumnLoad($aAttToLoad); + } + while ($oObject = $oObjectSet->Fetch()) { $oResult->AddObject(0, '', $oObject, $aShowFields, $bExtendedOutput); From 618326d01f1c20e0a5c2ecf8f81c6dd72689e896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guy=20Couronn=C3=A9?= Date: Mon, 18 Mar 2019 08:53:50 +0100 Subject: [PATCH 002/200] Correction unknown attribute id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit operation : "core/get" class : "NetworkDevice" output_fields : "id,friendlyname" key : "SELECT NetworkDevice" Code 100 “Error: Unknown attribute id from class NetworkDevice” --- core/restservices.class.inc.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/restservices.class.inc.php b/core/restservices.class.inc.php index 5288714d2..03ad1ba95 100644 --- a/core/restservices.class.inc.php +++ b/core/restservices.class.inc.php @@ -469,7 +469,13 @@ class CoreServices implements iRestServiceProvider { if (!$bExtendedOutput && RestUtils::GetOptionalParam($aParams, 'output_fields', '*') != '*') { - $aAttToLoad = array($oObjectSet->GetClassAlias() => $aShowFields[$sClass]); + $aFields = $aShowFields[$sClass]; + //Id is not a valid attribute to optimize + if (in_array('id', $aFields)) + { + unset($aFields[array_search('id', $aFields)]); + } + $aAttToLoad = array($oObjectSet->GetClassAlias() => $aFields); $oObjectSet->OptimizeColumnLoad($aAttToLoad); } From 1ab09702d96f4341b3dffa4ae855bad2d9cddb7c Mon Sep 17 00:00:00 2001 From: bruno DA SILVA Date: Tue, 26 Mar 2019 14:49:19 +0100 Subject: [PATCH 003/200] [POC] reduce metamodel serialized size by storing class name instead of class instance. This could be extended to more properties --- core/metamodel.class.php | 83 ++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 24 deletions(-) diff --git a/core/metamodel.class.php b/core/metamodel.class.php index c37083da1..810db9a38 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -2764,7 +2764,7 @@ abstract class MetaModel $aInterfaces = array('iApplicationUIExtension', 'iApplicationObjectExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface', 'iNewsroomProvider'); foreach($aInterfaces as $sInterface) { - self::$m_aExtensionClasses[$sInterface] = array(); + self::$m_aExtensionClassNames[$sInterface] = array(); } foreach(get_declared_classes() as $sPHPClass) @@ -2775,11 +2775,7 @@ abstract class MetaModel { if ($oRefClass->implementsInterface($sInterface) && $oRefClass->isInstantiable()) { - if (is_null($oExtensionInstance)) - { - $oExtensionInstance = new $sPHPClass; - } - self::$m_aExtensionClasses[$sInterface][$sPHPClass] = $oExtensionInstance; + self::$m_aExtensionClassNames[$sInterface][$sPHPClass] = $sPHPClass; } } } @@ -6298,7 +6294,7 @@ abstract class MetaModel if (is_array($result)) { // todo - verifier que toutes les classes mentionnees ici sont chargees dans InitClasses() - self::$m_aExtensionClasses = $result['m_aExtensionClasses']; + self::$m_aExtensionClassNames = $result['m_aExtensionClassNames']; self::$m_Category2Class = $result['m_Category2Class']; self::$m_aRootClasses = $result['m_aRootClasses']; self::$m_aParentClasses = $result['m_aParentClasses']; @@ -6335,7 +6331,7 @@ abstract class MetaModel $oKPI = new ExecutionKPI(); $aCache = array(); - $aCache['m_aExtensionClasses'] = self::$m_aExtensionClasses; + $aCache['m_aExtensionClassNames'] = self::$m_aExtensionClassNames; $aCache['m_Category2Class'] = self::$m_Category2Class; $aCache['m_aRootClasses'] = self::$m_aRootClasses; // array of "classname" => "rootclass" $aCache['m_aParentClasses'] = self::$m_aParentClasses; // array of ("classname" => array of "parentclass") @@ -6421,6 +6417,8 @@ abstract class MetaModel /** @var array */ protected static $m_aExtensionClasses = array(); + /** @var array */ + protected static $m_aExtensionClassNames = array(); /** * @param string $sToInclude @@ -7257,30 +7255,53 @@ abstract class MetaModel return str_replace($aSearches, $aReplacements, $sInput); } - /** - * @param string $sInterface - * - * @return array classes=>instance implementing the given interface - */ - public static function EnumPlugins($sInterface) + /** + * @param string $sInterface + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * + * @return array classes=>instance implementing the given interface + */ + public static function EnumPlugins($sInterface, $bCanInstantiatePlugins = true) { if (array_key_exists($sInterface, self::$m_aExtensionClasses)) { return self::$m_aExtensionClasses[$sInterface]; } - else + else if ($bCanInstantiatePlugins && array_key_exists($sInterface, self::$m_aExtensionClassNames)) { - return array(); - } + self::InstantiatePlugins($sInterface); + + return self::EnumPlugins($sInterface, false); + } + + return array(); } - /** - * @param string $sInterface - * @param string $sClassName - * - * @return mixed the instance of the specified plug-ins for the given interface - */ - public static function GetPlugins($sInterface, $sClassName) + private static function InstantiatePlugins($sInterface) + { + if (!array_key_exists($sInterface, self::$m_aExtensionClassNames)) + { + return; + } + if (array_key_exists($sInterface, self::$m_aExtensionClasses)) + { + return; + } + + foreach (self::$m_aExtensionClassNames[$sInterface] as $sClassName) + { + self::$m_aExtensionClasses[$sInterface][$sClassName] = new $sClassName(); + } + } + + /** + * @param string $sInterface + * @param string $sClassName + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * + * @return mixed the instance of the specified plug-ins for the given interface + */ + public static function GetPlugins($sInterface, $sClassName, $bCanInstantiatePlugins = true) { $oInstance = null; if (array_key_exists($sInterface, self::$m_aExtensionClasses)) @@ -7290,6 +7311,20 @@ abstract class MetaModel return self::$m_aExtensionClasses[$sInterface][$sClassName]; } } + else if ($bCanInstantiatePlugins) + { + if (array_key_exists($sInterface, self::$m_aExtensionClassNames)) + { + if (array_key_exists($sClassName, self::$m_aExtensionClassNames[$sInterface])) + { + self::InstantiatePlugins($sInterface); + + return self::GetPlugins($sInterface, $sClassName, false); + } + } + + } + return $oInstance; } From 75ba9101a64e2d00c477bb6df7bbb88184f10e83 Mon Sep 17 00:00:00 2001 From: odain Date: Fri, 20 Dec 2019 16:13:52 +0100 Subject: [PATCH 004/200] add tests to cover this change --- core/metamodel.class.php | 165 ++++++++++++++++++++++++++++-------- test/core/MetaModelTest.php | 130 ++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+), 35 deletions(-) diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 2f79cc98b..39d185cd9 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -126,6 +126,13 @@ abstract class MetaModel /** @var string */ protected static $m_sEnvironment = 'production'; + /** + * MetaModel constructor. + */ + public function __construct() + { + } + /** * @return array */ @@ -2797,7 +2804,7 @@ abstract class MetaModel $aInterfaces = array('iApplicationUIExtension', 'iPreferencesExtension', 'iApplicationObjectExtension', 'iLoginFSMExtension', 'iLoginUIExtension', 'iLogoutExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface', 'iNewsroomProvider', 'iModuleExtension'); foreach($aInterfaces as $sInterface) { - self::$m_aExtensionClasses[$sInterface] = array(); + self::$m_aExtensionClassNames[$sInterface] = array(); } foreach(get_declared_classes() as $sPHPClass) @@ -2808,11 +2815,7 @@ abstract class MetaModel { if ($oRefClass->implementsInterface($sInterface) && $oRefClass->isInstantiable()) { - if (is_null($oExtensionInstance)) - { - $oExtensionInstance = new $sPHPClass; - } - self::$m_aExtensionClasses[$sInterface][$sPHPClass] = $oExtensionInstance; + self::$m_aExtensionClassNames[$sInterface][$sPHPClass] = $sPHPClass; } } } @@ -6351,7 +6354,7 @@ abstract class MetaModel if (is_array($result)) { // todo - verifier que toutes les classes mentionnees ici sont chargees dans InitClasses() - self::$m_aExtensionClasses = $result['m_aExtensionClasses']; + self::$m_aExtensionClassNames = $result['m_aExtensionClassNames']; self::$m_Category2Class = $result['m_Category2Class']; self::$m_aRootClasses = $result['m_aRootClasses']; self::$m_aParentClasses = $result['m_aParentClasses']; @@ -6388,7 +6391,7 @@ abstract class MetaModel $oKPI = new ExecutionKPI(); $aCache = array(); - $aCache['m_aExtensionClasses'] = self::$m_aExtensionClasses; + $aCache['m_aExtensionClassNames'] = self::$m_aExtensionClassNames; $aCache['m_Category2Class'] = self::$m_Category2Class; $aCache['m_aRootClasses'] = self::$m_aRootClasses; // array of "classname" => "rootclass" $aCache['m_aParentClasses'] = self::$m_aParentClasses; // array of ("classname" => array of "parentclass") @@ -6474,6 +6477,8 @@ abstract class MetaModel /** @var array */ protected static $m_aExtensionClasses = array(); + /** @var array */ + protected static $m_aExtensionClassNames = array(); /** * @param string $sToInclude @@ -7352,25 +7357,9 @@ abstract class MetaModel */ public static function EnumPlugins($sInterface, $sFilterInstanceOf = null) { - if (!array_key_exists($sInterface, self::$m_aExtensionClasses)) - { - return array(); - } + $pluginManager = new PluginManager(self::$m_aExtensionClassNames, self::$m_aExtensionClasses); - if (is_null($sFilterInstanceOf)) - { - return self::$m_aExtensionClasses[$sInterface]; - } - - $fFilterCallback = function ($instance) use ($sFilterInstanceOf) - { - return $instance instanceof $sFilterInstanceOf; - }; - - return array_filter( - self::$m_aExtensionClasses[$sInterface], - $fFilterCallback - ); + return $pluginManager->EnumPlugins($sInterface, $sFilterInstanceOf); } /** @@ -7381,16 +7370,9 @@ abstract class MetaModel */ public static function GetPlugins($sInterface, $sClassName) { - $oInstance = null; - if (array_key_exists($sInterface, self::$m_aExtensionClasses)) - { - if (array_key_exists($sClassName, self::$m_aExtensionClasses[$sInterface])) - { - return self::$m_aExtensionClasses[$sInterface][$sClassName]; - } - } + $pluginManager = new PluginManager(self::$m_aExtensionClassNames, self::$m_aExtensionClasses); - return $oInstance; + return $pluginManager->GetPlugins($sInterface, $sClassName); } /** @@ -7540,6 +7522,119 @@ abstract class MetaModel } } +class PluginManager +{ + + private $m_aExtensionClassNames; + private $m_aExtensionClasses; + private $m_pluginInstantiationManager ; + + public function __construct($m_aExtensionClassNames, $m_aExtensionClasses, $m_pluginInstanciationManager=null) + { + $this->m_aExtensionClasses = $m_aExtensionClasses; + $this->m_aExtensionClassNames = $m_aExtensionClassNames; + + if ($m_pluginInstanciationManager==null) + { + $this->m_pluginInstantiationManager = new PluginInstanciationManager(); + } + else + { + $this->m_pluginInstantiationManager = $m_pluginInstanciationManager; + } + } + + /** + * @param string $sInterface + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * @param string|null $sFilterInstanceOf [optional] if given, only instance of this string will be returned + * @return array classes=>instance implementing the given interface + */ + public function EnumPlugins($sInterface, $sFilterInstanceOf = null, $bCanInstantiatePlugins = true) + { + $aPlugins = array(); + if (array_key_exists($sInterface, $this->m_aExtensionClasses)) + { + $aAllPlugins = array_values($this->m_aExtensionClasses[$sInterface]); + + if (is_null($sFilterInstanceOf)) + { + return $aAllPlugins; + }; + + $aPlugins = array(); + foreach ($aAllPlugins as $instance) + { + if ($instance instanceof $sFilterInstanceOf) + { + $aPlugins[] = $instance; + } + } + } + else if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) + { + $this->InstantiatePlugins($sInterface); + + return $this->EnumPlugins($sInterface, $sFilterInstanceOf, false); + } + return $aPlugins; + } + + public function InstantiatePlugins($sInterface) + { + $this->m_aExtensionClasses[$sInterface] = $this->m_pluginInstantiationManager->InstantiatePlugins($this->m_aExtensionClassNames, $sInterface); + } + + /** + * @param string $sInterface + * @param string $sClassName + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * + * @return mixed the instance of the specified plug-ins for the given interface + */ + public function GetPlugins($sInterface, $sClassName, $bCanInstantiatePlugins = true) + { + $oInstance = null; + if (array_key_exists($sInterface, $this->m_aExtensionClasses)) + { + if (array_key_exists($sClassName, $this->m_aExtensionClasses[$sInterface])) + { + return $this->m_aExtensionClasses[$sInterface][$sClassName]; + } + } + else if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) + { + $this->InstantiatePlugins($sInterface); + return $this->GetPlugins($sInterface, $sClassName, false); + } + + return $oInstance; + } +} //PluginManager class + +class PluginInstanciationManager +{ + public function InstantiatePlugins($m_aExtensionClassNames, $sInterface) + { + $newPerInstanceClasses = array(); + if (array_key_exists($sInterface, $m_aExtensionClassNames)) + { + foreach ($m_aExtensionClassNames[$sInterface] as $sClassName) + { + if (class_exists($sClassName)) + { + $class = new ReflectionClass($sClassName); + + if ($class->isInstantiable()) + { + $newPerInstanceClasses[$sClassName] = new $sClassName(); + } + } + } + } + return $newPerInstanceClasses; + } +} // Standard attribute lists MetaModel::RegisterZList("noneditable", array("description" => "non editable fields", "type" => "attributes")); diff --git a/test/core/MetaModelTest.php b/test/core/MetaModelTest.php index cfef62313..455b89cd4 100644 --- a/test/core/MetaModelTest.php +++ b/test/core/MetaModelTest.php @@ -83,4 +83,134 @@ class MetaModelTest extends ItopDataTestCase ), ); } + + /** + * @dataProvider enumPluginsProvider + * + * @param $expectedResults + * @param $m_aExtensionClassNames + * @param $m_aExtensionClasses + * @param $interface + * @param null $sFilterInstanceOf + */ + public function testEnumPlugins($expectedInstanciationCalls, $expectedResults, $m_aExtensionClassNames, $m_aExtensionClasses, $interface, $sFilterInstanceOf=null) + { + $pluginInstanciationManager = new \PluginInstanciationManager(); + $res = $pluginInstanciationManager->InstantiatePlugins($m_aExtensionClassNames, $interface); + + $mPluginInstanciationManager = $this->createMock(\PluginInstanciationManager::class); + $mPluginInstanciationManager->expects($this->exactly($expectedInstanciationCalls)) + ->method('InstantiatePlugins') + ->willReturn($res); + $m_PluginManager = new \PluginManager($m_aExtensionClassNames, $m_aExtensionClasses, $mPluginInstanciationManager); + + //warning: called twice on purpose + $m_PluginManager->EnumPlugins($interface, $sFilterInstanceOf); + $pluginInstances = $m_PluginManager->EnumPlugins($interface, $sFilterInstanceOf); + + $this->assertCount(sizeof($expectedResults), $pluginInstances); + foreach($pluginInstances as $pluginInstance) + { + if ($sFilterInstanceOf!==null) + { + $this->assertTrue($pluginInstance instanceof $sFilterInstanceOf); + } + } + $index=0; + foreach($expectedResults as $expectedInterface) + { + $this->assertTrue(is_a($pluginInstances[$index], $expectedInterface)); + $index++; + } + } + + public function enumPluginsProvider(){ + $aInterfaces = [ + "empty conf" => [ 0, [], [], [], 'Wizzard'], + "simple instance retrieval" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class]], [], 'Wizzard'], + "check instanceof parameter" => [ 1, [Gryffindor::class, Slytherin::class], [ 'Wizzard' => [ Gryffindor::class, Slytherin::class]], [], 'Wizzard'], + "try to retrieve a non instanciable object" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class ], + ]; + return $aInterfaces; + } + + /** + * @dataProvider getPluginsProvider + * + * @param $expectedInstanciationCalls + * @param $expectedResults + * @param $m_aExtensionClassNames + * @param $m_aExtensionClasses + * @param $interface + * @param $className + */ + public function testGetPlugins($expectedInstanciationCalls, $expectedResults, $m_aExtensionClassNames, $m_aExtensionClasses, $interface, $className) + { + $pluginInstanciationManager = new \PluginInstanciationManager(); + $res = $pluginInstanciationManager->InstantiatePlugins($m_aExtensionClassNames, $interface); + + $mPluginInstanciationManager = $this->createMock(\PluginInstanciationManager::class); + $mPluginInstanciationManager->expects($this->exactly($expectedInstanciationCalls)) + ->method('InstantiatePlugins') + ->willReturn($res); + $m_PluginManager = new \PluginManager($m_aExtensionClassNames, $m_aExtensionClasses, $mPluginInstanciationManager); + + //warning: called twice on purpose + $m_PluginManager->GetPlugins($interface, $className); + $pluginInstance = $m_PluginManager->GetPlugins($interface, $className); + + if (sizeof($expectedResults)==0) + { + $this->assertNull($pluginInstance); + return; + } + + $this->assertTrue($pluginInstance instanceof $className); + $this->assertTrue(is_a($pluginInstance, $expectedResults[0])); + } + + public function getPluginsProvider(){ + $aInterfaces = [ + "empty conf" => [ 0, [], [], [], 'Wizzard', Gryffindor::class], + "simple instance retrieval" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class]], [], 'Wizzard', Gryffindor::class], + "check instanceof parameter" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Slytherin::class]], [], 'Wizzard', Gryffindor::class], + "try to retrieve a non instanciable object" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class ], + ]; + return $aInterfaces; + } + } + +abstract class Wizzard +{ + + /** + * Wizzard constructor. + */ + public function __construct() + { + } +} + +class Gryffindor extends Wizzard +{ + +} +class Hufflepuff extends Wizzard +{ + +} +class Ravenclaw extends Wizzard +{ + +} + +class Slytherin extends Wizzard +{ + +} + +class Muggle +{ + +} \ No newline at end of file From 427326d0749076de9d2dfcf50597586dec626f9d Mon Sep 17 00:00:00 2001 From: Lars Hippler Date: Wed, 8 Apr 2020 17:24:12 +0200 Subject: [PATCH 005/200] Enable external classes (i.e. iApplicationObjectExtension) to use bypass function as well --- application/cmdbabstract.class.inc.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index e4ba02414..3fd5527a5 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -4090,6 +4090,16 @@ EOF $this->bAllowWrite = $bAllow; } + /** + * Whether to bypass the checks of user rights when writing this object, could be used in {@link \iApplicationObjectExtension::OnCheckToWrite()} + * + * @return bool + */ + public function GetAllowWrite() + { + return $this->bAllowWrite; + } + /** * Bypass the check of the user rights when deleting this object * From 5cfa06e36f652d084855e38eb7362d02bc5f4353 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Wed, 22 Apr 2020 16:11:02 +0200 Subject: [PATCH 006/200] Faster compilation of themes - Ability to provided precompiled themes in the datamodel - Check that a precompiled theme is still up-to-date based on a signature --- application/themehandler.class.inc.php | 121 +- .../datamodel.itop-config-mgmt.xml | 2 + .../precompiled-themes/light-grey/main.css | 5217 ++++++++++++++++ .../precompiled-themes/test-red/main.css | 5246 +++++++++++++++++ setup/compiler.class.inc.php | 19 +- 5 files changed, 10596 insertions(+), 9 deletions(-) create mode 100644 datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css create mode 100644 datamodels/2.x/itop-config-mgmt/precompiled-themes/test-red/main.css diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index de2fb21ca..c300fae0e 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -116,7 +116,9 @@ class ThemeHandler } /** - * Compile the $sThemeId theme + * Compile the $sThemeId theme, the actual compilation is skipped when either + * 1) The produced CSS file exists and is more recent than any of its components (imports, stylesheets) + * 2) The produced CSS file exists and its signature is equal to the expected signature (imports, stylesheets, variables) * * @param string $sThemeId * @param array|null $aThemeParameters Parameters (variables, imports, stylesheets) for the theme, if not passed, will be retrieved from compiled DM @@ -168,23 +170,130 @@ class ThemeHandler { $sTmpThemeScssContent .= '@import "'.$sImport.'";'."\n"; - $iImportLastModified = @filemtime($sWorkingPath.$sImport); + $sFile = static::FindStylesheetFile($sImport, $aImportsPaths); + $iImportLastModified = @filemtime($sFile); $iStyleLastModified = $iStyleLastModified < $iImportLastModified ? $iImportLastModified : $iStyleLastModified; } foreach ($aThemeParameters['stylesheets'] as $sStylesheet) { $sTmpThemeScssContent .= '@import "'.$sStylesheet.'";'."\n"; - $iStylesheetLastModified = @filemtime($sWorkingPath.$sStylesheet); + $sFile = static::FindStylesheetFile($sStylesheet, $aImportsPaths); + $iStylesheetLastModified = @filemtime($sFile); $iStyleLastModified = $iStyleLastModified < $iStylesheetLastModified ? $iStylesheetLastModified : $iStyleLastModified; } // Checking if our compiled css is outdated - if (!file_exists($sThemeCssPath) || (is_writable($sThemeFolderPath) && (@filemtime($sThemeCssPath) < $iStyleLastModified))) + $iFilemetime = @filemtime($sThemeCssPath); + if (!file_exists($sThemeCssPath) || (is_writable($sThemeFolderPath) && ($iFilemetime < $iStyleLastModified))) { - $sTmpThemeCssContent = utils::CompileCSSFromSASS($sTmpThemeScssContent, $aImportsPaths, $aThemeParameters['variables']); - file_put_contents($sThemeCssPath, $sTmpThemeCssContent); + // Dates don't match. Second chance: check if the already compiled stylesheet exists and is consistent based on its signature + $sActualSignature = static::ComputeSignature($aThemeParameters, $aImportsPaths); + if (file_exists($sThemeCssPath)) + { + $sPrecompiledSignature = static::GetSignature($sThemeCssPath); + if($sActualSignature == $sPrecompiledSignature) + { + touch($sThemeCssPath); // Stylesheet is up to date, mark it as more recent to speedup next time + } + } + else + { + // Alas, we really need to recompile + // Add the signature to the generated CSS file so that the file can be used as a precompiled stylesheet if needed + $sSignatureComment = +<< md5(json_encode($aThemeParameters['variables'])), + 'stylesheets' => array(), + 'imports' => array(), + ); + + foreach ($aThemeParameters['imports'] as $key => $sImport) + { + $sFile = static::FindStylesheetFile($sImport, $aImportsPaths); + $aSignature['stylesheets'][$key] = md5_file($sFile); + } + foreach ($aThemeParameters['stylesheets'] as $key => $sStylesheet) + { + $sFile = static::FindStylesheetFile($sStylesheet, $aImportsPaths); + $aSignature['stylesheets'][$key] = md5_file($sFile); + } + return json_encode($aSignature); + } + + /** + * Extract the signature for a generated CSS file. The signature MUST be alone one line immediately + * followed (on the next line) by the === SIGNATURE END === pattern + * + * Note the signature can be place anywhere in the CSS file (obviously inside a CSS comment !) but the + * function will be faster if the signature is at the beginning of the file (since the file is scanned from the start) + * + * @param string $sFile + * @return string + */ + private static function GetSignature($sFilepath) + { + $sPreviousLine = ''; + $hFile = @fopen($sFilepath, "r"); + if ($hFile !== false) + { + $sLine = ''; + do + { + $sPreviousLine = $sLine; + $sLine = rtrim(fgets($hFile)); // Remove the trailing \n + } + while (($sLine !== false) && ($sLine != '=== SIGNATURE END ===')); + fclose($hFile); + } + return $sPreviousLine; + } + + /** + * Find the given file in the list of ImportsPaths directory + * @param string $sFile + * @param string[] $aImportsPaths + * @throws Exception + * @return string + */ + private static function FindStylesheetFile($sFile, $aImportsPaths) + { + foreach($aImportsPaths as $sPath) + { + $sImportedFile = realpath($sPath.'/'.$sFile); + if (file_exists($sImportedFile)) + { + return $sImportedFile; + } + } + return ''; // Not found, fail silently, maybe the SCSS compiler knowns better... + } } diff --git a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml index aa7a002ed..bdea5402f 100755 --- a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml +++ b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml @@ -8529,6 +8529,7 @@ ../css/ui-lightness/jqueryui.scss ../css/light-grey.scss + itop-config-mgmt/precompiled-themes/light-grey/main.css @@ -8544,6 +8545,7 @@ ../css/light-grey.scss ../css/backoffice-environment-banner.scss + itop-config-mgmt/precompiled-themes/test-red/main.css diff --git a/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css b/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css new file mode 100644 index 000000000..eb2e38767 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css @@ -0,0 +1,5217 @@ +/* +=== SIGNATURE BEGIN === +{"variables":"d751713988987e9331980363e24189ce","stylesheets":{"css-variables":"934888ebb4991d4c76555be6b6d1d5cc","jqueryui":"78cfafc3524dac98e61fc2460918d4e5","main":"52d8a7c5530ceb3a4d777364fa4e1eea"},"imports":[]} +=== SIGNATURE END === + */ + /*! + * Copyright (C) 2013-2020 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ +/*! jQuery UI - v1.12.1 - 2018-02-20 + * http://jqueryui.com + * Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css + * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=18&bgImgOpacityHighlight=75&bgImgOpacityActive=65&bgImgOpacityHover=100&bgImgOpacityDefault=100&bgImgOpacityContent=100&bgImgOpacityHeader=35&cornerRadiusShadow=5px&offsetLeftShadow=-5px&offsetTopShadow=-5px&thicknessShadow=5px&opacityShadow=20&bgImgOpacityShadow=10&bgTextureShadow=flat&bgColorShadow=%23000000&opacityOverlay=50&bgImgOpacityOverlay=20&bgTextureOverlay=diagonals_thick&bgColorOverlay=%23666666&iconColorError=%23ffd27a&fcError=%23ffffff&borderColorError=%23cd0a0a&bgTextureError=diagonals_thick&bgColorError=%23b81900&iconColorHighlight=%231c94c4&fcHighlight=%23363636&borderColorHighlight=%23fed22f&bgTextureHighlight=flat&bgColorHighlight=%23ffe45c&iconColorActive=%23E87C1E&fcActive=%23E87C1E&borderColorActive=%23E87C1E&bgTextureActive=flat&bgColorActive=%23ffffff&iconColorHover=%23E87C1E&fcHover=%23E87C1E&borderColorHover=%23E87C1E&bgTextureHover=flat&bgColorHover=%23fde17c&iconColorDefault=%23F26522&fcDefault=%23555555&borderColorDefault=%23cccccc&bgTextureDefault=flat&bgColorDefault=%23f1f1f1&iconColorContent=%23222222&fcContent=%23333333&borderColorContent=%23dddddd&bgTextureContent=flat&bgColorContent=%23eeeeee&iconColorHeader=%23ffffff&fcHeader=%23ffffff&borderColorHeader=%23F26522&bgTextureHeader=flat&bgColorHeader=%23E87C1E&cornerRadius=0&fwDefault=bold&fsDefault=1.1em&ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif + * Copyright jQuery Foundation and other contributors; Licensed MIT + * The original css file has been scssized (through www.css2scss.com) + */ +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); +} +.ui-front { + z-index: 100; +} +.ui-state-disabled { + cursor: default !important; + pointer-events: none; + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35); +} +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -0.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + width: 16px; + height: 16px; + background-image: url("../../../../../css/ui-lightness/images/ui-icons_222222_256x240.png?v=v2.7.0-1"); + filter: hue-rotate(0deg); +} +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #666666 url("../../../../../css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png?v=v2.7.0-1") 50% 50% repeat; + opacity: 0.5; + filter: Alpha(Opacity=50); +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle { + display: none; +} +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: 0.5em 0.5em 0.5em 0.7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7?v=v2.7.0-1"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px 0.4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus { + margin: -1px; +} +.ui-menu .ui-state-active { + margin: -1px; +} +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: 0.2em; + margin: auto 0; +} +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} +.ui-button { + padding: 0.4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: 0.1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: visible; + text-decoration: none; + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +.ui-button:link { + text-decoration: none; +} +.ui-button:visited { + text-decoration: none; +} +.ui-button:hover { + text-decoration: none; + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:hover .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-button:active { + text-decoration: none; + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:active .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-button:focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:focus .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-button .ui-state-highlight.ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_1c94c4_256x240.png?v=v2.7.0-1"); +} +.ui-button .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_F26522_256x240.png?v=v2.7.0-1"); +} +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} +input.ui-button.ui-button-icon-only { + text-indent: 0; +} +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; +} +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: 0.4em 1em; +} +input.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus { + z-index: 9999; +} +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup .ui-controlgroup-label { + padding: 0.4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} +.ui-controlgroup-vertical .ui-spinner-input { + width: calc(100% - 2.4em); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: 0.12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: 0.2em 0.2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: 0.2em 0; +} +.ui-datepicker .ui-datepicker-prev { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + left: 2px; +} +.ui-datepicker .ui-datepicker-prev span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + right: 2px; +} +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-prev-hover { + top: 1px; + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; + right: 1px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month { + width: 45%; +} +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: 0.9em; + border-collapse: collapse; + margin: 0 0 0.4em; +} +.ui-datepicker th { + padding: 0.7em 0.3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span { + display: block; + padding: 0.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker td a { + display: block; + padding: 0.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: 0.7em 0 0 0; + padding: 0 0.2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: 0.5em 0.2em 0.4em; + cursor: pointer; + padding: 0.2em 0.6em 0.3em 0.6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: 0.5em; + top: 0.3em; +} +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto 0.4em; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: 0.2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: 0.4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: 0.1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: 0.3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: 0.5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: 0.5em; + padding: 0.3em 1em 0.5em 0.4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: 0.5em 0.4em 0.5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se { + width: 7px; + height: 7px; + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + width: 7px; + height: 7px; + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + width: 7px; + height: 7px; + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: 0.7em; + display: block; + border: 0; + background-position: 0 0; +} +.ui-slider.ui-state-disabled .ui-slider-handle { + filter: inherit; +} +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} +.ui-slider-horizontal { + height: 0.8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -0.3em; + margin-left: -0.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} +.ui-slider-vertical { + width: 0.8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -0.3em; + margin-left: 0; + margin-bottom: -0.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0.222em 0; + margin: 0.2em 0; + vertical-align: middle; + margin-left: 0.4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: 0.5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative; + padding: 0.2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 0.2em 0.2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px 0.2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: 0.5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} +.ui-widget { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget select { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget textarea { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget button { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #cccccc; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #eeeeee; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-content .ui-state-default { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +.ui-widget-content .ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-widget-content .ui-state-highlight a { + color: #363636; +} +.ui-widget-content .ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=v2.7.0-1") 50% 50% repeat; + color: #FFFFFF; +} +.ui-widget-content .ui-state-error a { + color: #FFFFFF; +} +.ui-widget-content .ui-state-error-text { + color: #FFFFFF; +} +.ui-widget-content .ui-priority-primary { + font-weight: bold; +} +.ui-widget-content .ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-widget-content .ui-state-disabled { + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-widget-content .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_222222_256x240.png?v=v2.7.0-1"); +} +.ui-widget-header { + border: 1px solid #d56e14; + background: #EA7D1E; + color: #FFFFFF; + font-weight: bold; +} +.ui-widget-header a { + color: #FFFFFF; +} +.ui-widget-header .ui-state-default { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +.ui-widget-header .ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=v2.7.0-1") 50% 50% repeat; + color: #FFFFFF; +} +.ui-widget-header .ui-state-error a { + color: #FFFFFF; +} +.ui-widget-header .ui-state-error-text { + color: #FFFFFF; +} +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-widget-header .ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-widget-header .ui-state-disabled { + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-widget-header .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_ffffff_256x240.png?v=v2.7.0-1"); +} +.ui-state-default { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +.ui-state-default a { + color: #555555; + text-decoration: none; +} +.ui-state-default a:link { + color: #555555; + text-decoration: none; +} +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-default .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_F26522_256x240.png?v=v2.7.0-1"); +} +html .ui-button.ui-state-disabled:hover { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +html .ui-button.ui-state-disabled:active { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +a.ui-button { + color: #555555; + text-decoration: none; +} +a.ui-button:hover { + color: #EA7D1E; + text-decoration: none; +} +a.ui-button:focus { + color: #EA7D1E; + text-decoration: none; +} +a.ui-button:active { + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +a:link.ui-button { + color: #555555; + text-decoration: none; +} +a:visited.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-hover a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-focus a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-visual-focus { + box-shadow: 0 0 3px 1px #5e9ed6; +} +.ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-active .ui-icon-background { + border: #EA7D1E; + background-color: #EA7D1E; +} +.ui-state-active a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=v2.7.0-1"); +} +.ui-button.ui-state-active:hover { + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +.ui-icon-background { + border: #EA7D1E; + background-color: #EA7D1E; +} +.ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-state-highlight a { + color: #363636; +} +.ui-state-highlight .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_1c94c4_256x240.png?v=v2.7.0-1"); +} +.ui-state-checked { + border: 1px solid #fed22f; + background: #ffe45c; +} +.ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=v2.7.0-1") 50% 50% repeat; + color: #FFFFFF; +} +.ui-state-error a { + color: #FFFFFF; +} +.ui-state-error .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_ffd27a_256x240.png?v=v2.7.0-1"); +} +.ui-state-error-text { + color: #FFFFFF; +} +.ui-state-error-text .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_ffd27a_256x240.png?v=v2.7.0-1"); +} +.ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-icon-blank { + background-position: 16px 16px; +} +.ui-icon-caret-1-n { + background-position: 0 0; +} +.ui-icon-caret-1-ne { + background-position: -16px 0; +} +.ui-icon-caret-1-e { + background-position: -32px 0; +} +.ui-icon-caret-1-se { + background-position: -48px 0; +} +.ui-icon-caret-1-s { + background-position: -65px 0; +} +.ui-icon-caret-1-sw { + background-position: -80px 0; +} +.ui-icon-caret-1-w { + background-position: -96px 0; +} +.ui-icon-caret-1-nw { + background-position: -112px 0; +} +.ui-icon-caret-2-n-s { + background-position: -128px 0; +} +.ui-icon-caret-2-e-w { + background-position: -144px 0; +} +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} +.ui-icon-triangle-1-s { + background-position: -65px -16px; +} +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} +.ui-icon-arrow-1-s { + background-position: -65px -32px; +} +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} +.ui-icon-arrowthick-1-n { + background-position: 1px -48px; +} +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} +.ui-icon-arrow-4 { + background-position: 0 -80px; +} +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} +.ui-icon-extlink { + background-position: -32px -80px; +} +.ui-icon-newwin { + background-position: -48px -80px; +} +.ui-icon-refresh { + background-position: -64px -80px; +} +.ui-icon-shuffle { + background-position: -80px -80px; +} +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} +.ui-icon-folder-open { + background-position: -16px -96px; +} +.ui-icon-document { + background-position: -32px -96px; +} +.ui-icon-document-b { + background-position: -48px -96px; +} +.ui-icon-note { + background-position: -64px -96px; +} +.ui-icon-mail-closed { + background-position: -80px -96px; +} +.ui-icon-mail-open { + background-position: -96px -96px; +} +.ui-icon-suitcase { + background-position: -112px -96px; +} +.ui-icon-comment { + background-position: -128px -96px; +} +.ui-icon-person { + background-position: -144px -96px; +} +.ui-icon-print { + background-position: -160px -96px; +} +.ui-icon-trash { + background-position: -176px -96px; +} +.ui-icon-locked { + background-position: -192px -96px; +} +.ui-icon-unlocked { + background-position: -208px -96px; +} +.ui-icon-bookmark { + background-position: -224px -96px; +} +.ui-icon-tag { + background-position: -240px -96px; +} +.ui-icon-home { + background-position: 0 -112px; +} +.ui-icon-flag { + background-position: -16px -112px; +} +.ui-icon-calendar { + background-position: -32px -112px; +} +.ui-icon-cart { + background-position: -48px -112px; +} +.ui-icon-pencil { + background-position: -64px -112px; +} +.ui-icon-clock { + background-position: -80px -112px; +} +.ui-icon-disk { + background-position: -96px -112px; +} +.ui-icon-calculator { + background-position: -112px -112px; +} +.ui-icon-zoomin { + background-position: -128px -112px; +} +.ui-icon-zoomout { + background-position: -144px -112px; +} +.ui-icon-search { + background-position: -160px -112px; +} +.ui-icon-wrench { + background-position: -176px -112px; +} +.ui-icon-gear { + background-position: -192px -112px; +} +.ui-icon-heart { + background-position: -208px -112px; +} +.ui-icon-star { + background-position: -224px -112px; +} +.ui-icon-link { + background-position: -240px -112px; +} +.ui-icon-cancel { + background-position: 0 -128px; +} +.ui-icon-plus { + background-position: -16px -128px; +} +.ui-icon-plusthick { + background-position: -32px -128px; +} +.ui-icon-minus { + background-position: -48px -128px; +} +.ui-icon-minusthick { + background-position: -64px -128px; +} +.ui-icon-close { + background-position: -80px -128px; +} +.ui-icon-closethick { + background-position: -96px -128px; +} +.ui-icon-key { + background-position: -112px -128px; +} +.ui-icon-lightbulb { + background-position: -128px -128px; +} +.ui-icon-scissors { + background-position: -144px -128px; +} +.ui-icon-clipboard { + background-position: -160px -128px; +} +.ui-icon-copy { + background-position: -176px -128px; +} +.ui-icon-contact { + background-position: -192px -128px; +} +.ui-icon-image { + background-position: -208px -128px; +} +.ui-icon-video { + background-position: -224px -128px; +} +.ui-icon-script { + background-position: -240px -128px; +} +.ui-icon-alert { + background-position: 0 -144px; +} +.ui-icon-info { + background-position: -16px -144px; +} +.ui-icon-notice { + background-position: -32px -144px; +} +.ui-icon-help { + background-position: -48px -144px; +} +.ui-icon-check { + background-position: -64px -144px; +} +.ui-icon-bullet { + background-position: -80px -144px; +} +.ui-icon-radio-on { + background-position: -96px -144px; +} +.ui-icon-radio-off { + background-position: -112px -144px; +} +.ui-icon-pin-w { + background-position: -128px -144px; +} +.ui-icon-pin-s { + background-position: -144px -144px; +} +.ui-icon-play { + background-position: 0 -160px; +} +.ui-icon-pause { + background-position: -16px -160px; +} +.ui-icon-seek-next { + background-position: -32px -160px; +} +.ui-icon-seek-prev { + background-position: -48px -160px; +} +.ui-icon-seek-end { + background-position: -64px -160px; +} +.ui-icon-seek-start { + background-position: -80px -160px; +} +.ui-icon-seek-first { + background-position: -80px -160px; +} +.ui-icon-stop { + background-position: -96px -160px; +} +.ui-icon-eject { + background-position: -112px -160px; +} +.ui-icon-volume-off { + background-position: -128px -160px; +} +.ui-icon-volume-on { + background-position: -144px -160px; +} +.ui-icon-power { + background-position: 0 -176px; +} +.ui-icon-signal-diag { + background-position: -16px -176px; +} +.ui-icon-signal { + background-position: -32px -176px; +} +.ui-icon-battery-0 { + background-position: -48px -176px; +} +.ui-icon-battery-1 { + background-position: -64px -176px; +} +.ui-icon-battery-2 { + background-position: -80px -176px; +} +.ui-icon-battery-3 { + background-position: -96px -176px; +} +.ui-icon-circle-plus { + background-position: 0 -192px; +} +.ui-icon-circle-minus { + background-position: -16px -192px; +} +.ui-icon-circle-close { + background-position: -32px -192px; +} +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} +.ui-icon-circle-check { + background-position: -208px -192px; +} +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} +.ui-corner-all { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-top { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.ui-corner-left { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.ui-corner-tl { + border-top-left-radius: 0; +} +.ui-corner-right { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-tr { + border-top-right-radius: 0; +} +.ui-corner-bottom { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-bl { + border-bottom-left-radius: 0; +} +.ui-corner-br { + border-bottom-right-radius: 0; +} +.ui-widget-shadow { + -webkit-box-shadow: -5px -5px 5px #000000; + box-shadow: -5px -5px 5px #000000; +} +/*! + * Copyright (C) 2013-2020 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ +/* CSS Document */ +body { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 10pt; + background-color: #FFFFFF; + color: #000; + margin: 0; + /* Remove body margin/padding */ + padding: 0; + overflow: hidden; + /* Remove scroll bars on browser window */ +} +body.printable-version { + margin: 1.5em; + overflow: auto; +} +/* to prevent flicker, hide the pane's content until it's ready */ +.ui-layout-center, .ui-layout-north, .ui-layout-south { + display: none; +} +.ui-layout-content { + padding-left: 10px; +} +.ui-layout-content .ui-tabs-nav li { + /* Overriding jQuery UI theme to see active tab better */ + margin-bottom: 2px; +} +.ui-layout-content .ui-tabs-nav li.ui-tabs-active { + padding-bottom: 3px; +} +.raw_output { + font-family: Courier-New, Courier, Arial, Helvetica; + font-size: 8pt; + background-color: #eeeeee; + color: #000; + border: 1px dashed #000; + padding: 0.25em; + margin-top: 1em; +} +h1 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: bold; + font-size: 12pt; +} +h2 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: normal; + font-size: 12pt; +} +h3 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: normal; + font-size: 10pt; +} +label { + cursor: pointer; +} +.hilite, .hilite a, .hilite a:visited { + color: #EA7D1E; + text-decoration: none; +} +table.datatable { + width: 100%; + border: 0; + padding: 0; +} +td.menucontainer { + text-align: right; +} +table.listResults { + padding: 0px; + border-top: 3px solid #F1F1F1; + border-left: 3px solid #F1F1F1; + border-bottom: 3px solid #e6e6e1; + border-right: 3px solid #e6e6e1; + width: 100%; + background-color: #FFFFFF; +} +table.listResults td { + padding: 2px; +} +table.listResults td .view-image { + width: inherit !important; + height: inherit !important; +} +table.listResults td .view-image img { + max-width: 48px !important; + max-height: 48px !important; + display: block; + margin-left: auto; + margin-right: auto; +} +table.listResults > tbody > tr > * { + transition: background-color 400ms linear; +} +table.listResults > tbody > tr:hover > * { + cursor: pointer; +} +table.listResults > tbody > tr.selected:hover > * { + /* hover on lines is currently done toggling td.hover, and having a rule for links */ + background-color: #f1a564; + color: #000; +} +table.listResults > tbody > tr:hover > * { + /* hover on lines is currently done toggling td.hover, and having a rule for links */ + background-color: #fdf5d0; + color: #000; +} +.edit-image .view-image { + display: inline-block; +} +.edit-image .view-image img[src=""], .edit-image .view-image img[src="null"] { + visibility: hidden; +} +.edit-image .view-image.dirty.compat { + background-image: url("../../../../../css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png?v=v2.7.0-1"); +} +.edit-image .view-image.dirty.compat img { + opacity: 0.3; +} +.edit-image .edit-buttons { + display: inline-block; + vertical-align: top; + margin-top: 4px; + margin-left: 3px; +} +.edit-image .edit-buttons .button { + cursor: pointer; + margin-bottom: 3px; + padding: 2px; + background-color: #EA7D1E; +} +.edit-image .edit-buttons .button.disabled { + cursor: default; + background-color: #555555; + opacity: 0.3; +} +.edit-image .edit-buttons .button .ui-icon { + background-image: url("../../../../../css/ui-lightness/images/ui-icons_ffffff_256x240.png?v=v2.7.0-1"); +} +.edit-image .file-input { + display: block; +} +/* Center the image both horizontally and vertically, withing a box which size is fixed (depends on the attribute definition) */ +.details .view-image { + text-align: center; + padding: 2px; + border: 2px solid #ddd; + border-radius: 6px; +} +.details .view-image img { + display: inline-block; + vertical-align: middle; + max-width: 90% !important; + max-height: 90% !important; + cursor: zoom-in; +} +.details .view-image .helper-middle { + display: inline-block; + height: 100%; + vertical-align: middle; +} +table.listContainer { + border: 0; + padding: 0; + margin: 0; + width: 100%; + clear: both; +} +tr.containerHeader, tr.containerHeader td { + background: transparent; +} +tr.even td, .wizContainer tr.even td { + background-color: #F1F1F1; +} +tr.red_even td, .wizContainer tr.red_even td { + background-color: #f97e75; + color: #FFFFFF; +} +tr.red td, .wizContainer tr.red td { + background-color: #f9a397; + color: #FFFFFF; +} +tr.orange_even td, .wizContainer tr.orange_even td { + background-color: #f4d07a; +} +tr.orange td, .wizContainer tr.orange td { + background-color: #f4e96c; +} +tr.green_even td, .wizContainer tr.green_even td { + background-color: #bee5a3; +} +tr.green td, .wizContainer tr.green td { + background-color: #b3e5b4; +} +tr td.hover, tr.even td.hover, .hover a, .hover a:visited, .hover a:hover, .wizContainer tr.even td.hover, .wizContainer tr td.hover { + color: #000; +} +th { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 8pt; + color: #1c94c4; + height: 20px; + background: #F1F1F1 bottom repeat-x; +} +th.header { + cursor: pointer; + background-repeat: no-repeat; + background-position: center right; + background-repeat: no-repeat; + padding-right: 16px; +} +th.headerSortUp { + text-decoration: underline; + cursor: pointer; + padding-right: 5px; +} +th.headerSortUp::after { + font-family: "Font Awesome 5 Free"; + text-align: right; + content: '\f0d7'; + color: #1c94c4; + float: right; +} +th.headerSortDown { + text-decoration: underline; + cursor: pointer; + padding-right: 5px; +} +th.headerSortDown::after { + font-family: "Font Awesome 5 Free"; + text-align: right; + content: '\f0d8'; + color: #1c94c4; + float: right; +} +td { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + color: #696969; + nobackground-color: #ffffff; + padding: 0px; +} +tr.clicked td { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: smaller; + background-color: #ffcfe8; +} +td.label { + vertical-align: top; +} +td.label span { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + color: #000; + padding: 5px; + padding-right: 10px; + font-weight: bold; + vertical-align: top; + text-align: right; + display: block; +} +fieldset td.label span { + padding: 3px; + padding-right: 10px; +} +fieldset { + margin-top: 3px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; + border-style: solid; + border-color: #ddd; +} +legend { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + padding: 8px; + color: #fff; + background-color: #1c94c4; + font-weight: bold; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; +} +legend.transparent { + background: transparent; + color: #333333; + font-size: 1em; + font-weight: normal; + padding: 0; +} +.ui-widget-content td legend a, .ui-widget-content td legend a:hover, .ui-widget-content td legend a:visited { + color: #fff; +} +.ui-widget-content td a, p a, p a:visited, td a, td a:visited { + text-decoration: none; + color: #1c94c4; +} +.ui-widget-content td a.cke_button, .ui-widget-content td a.cke_toolbox_collapser, .ui-widget-content td a.cke_combo_button, cke_dialog a { + padding-left: 0; + background-image: none; +} +.ui-widget-content td a:hover, p a:hover, td a:hover { + text-decoration: underline; + color: #EA7D1E; +} +.cke_reset_all *:hover { + text-decoration: none; + color: #000; +} +table.cke_dialog_contents a.cke_dialog_ui_button_ok { + color: #000; + border-color: #EA7D1E; + background: #EA7D1E; +} +.cke_notifications_area { + display: none; +} +.hljs { + padding: 0.9em !important; + box-shadow: 0 0px 3px 2px inset rgba(0, 0, 0, 0.4); + border-radius: 3px; +} +td a.no-arrow, td a.no-arrow:visited, .SearchDrawer a.no-arrow, .SearchDrawer a.no-arrow:visited { + text-decoration: none; + color: #000; + padding-left: 0px; + background: inherit; +} +td a.no-arrow:hover { + text-decoration: underline; + color: #d81515; + padding-left: 0px; + background: inherit; +} +td a:hover .text_decoration, td a:visited:hover .text_decoration { + color: #d56e14; +} +td a .text_decoration, td a:visited .text_decoration { + vertical-align: baseline; + text-decoration: none; + color: #EA7D1E; + margin-right: 8px; + transition: color 0.2s ease-in-out; +} +a.small_action { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 8pt; + color: #000; + text-decoration: none; +} +.display_block { + padding: 0.25em; +} +.actions_details { + float: right; + margin-top: 10px; + margin-right: 10px; + padding-left: 5px; + padding-top: 2px; + padding-bottom: 2px; + background: #EA7D1E; +} +.actions_details span { + background: url("../../../../../images/actions_right.png?v=v2.7.0-1") no-repeat right; + color: #fff; + font-weight: bold; + padding-top: 2px; + padding-bottom: 2px; + padding-right: 12px; +} +.actions_details a { + text-decoration: none; +} +.loading { + noborder: 1px dashed #CCC; + background: #b9c1c8; + padding: 0.25em; +} +input.textSearch { + border: 1px solid #000; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000; +} +.ac_input { + border: 1px solid #7f9db9; + background: #fff url("../../../../../images/ac-background.gif?v=v2.7.0-1") no-repeat right; +} +/* By Rom */ +.csvimport_createobj { + color: #AA0000; + background-color: #EEEEEE; +} +.csvimport_error { + font-weight: bold; + color: #FF0000; + background-color: #EEEEEE; +} +.csvimport_warning { + color: #CC8888; + background-color: #EEEEEE; +} +.csvimport_ok { + color: #000; + background-color: #BBFFBB; +} +.csvimport_reconkey { + font-style: italic; + color: #888888; + background-color: #FFFFFF; +} +.csvimport_extreconkey { + color: #888888; + background-color: #FFFFFF; +} +#accordion { + display: none; +} +#accordion h3 { + padding: 10px; +} +.ui-accordion-content ul { + list-style: none; + list-style-image: none; + padding-left: 16px; + margin-top: 8px; +} +.ui-accordion-content li.submenu { + margin-top: 8px; +} +.ui-accordion-content ul ul { + padding: 8px 0px 8px 8px; + margin: 0; + list-style: none; + list-style-image: none; + border: 0; +} +.nothing { + noborder-top: 1px solid #8b8b8b; + padding: 4px 0px 0px 16px; + font-size: 8pt; + background: url("../../../../../images/green-square.gif?v=v2.7.0-1") no-repeat bottom left; + color: #83b217; + font-weight: bold; + text-decoration: none; +} +div.ui-accordion-content { + padding-top: 10px; + padding-left: 10px; +} +.ui-accordion-content a, ui-accordion-content a:visited { + color: #1c94c4; + text-decoration: none; +} +.ui-accordion-content a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-accordion-content ul { + padding-left: 0; + margin-top: 0; +} +.ui-accordion-content li { + color: #555555; + text-decoration: none; + margin: 0; + padding: 0px 0pt 0px 6px; + font-size: 9pt; + font-weight: normal; + border: 0; +} +.ui-accordion-content li::before { + font-family: "Font Awesome 5 Free"; + content: "\f0da"; + color: #EA7D1E; + font-weight: 900; + margin-right: 6px; + font-size: 10px; +} +td a.CollapsibleLabel, a.CollapsibleLabel { + margin: 0; + padding: 0; + font-size: 8pt; + text-decoration: none; + color: #555555; +} +td a.CollapsibleLabel::before, a.CollapsibleLabel::before { + font-family: "Font Awesome 5 Free"; + color: #EA7D1E; + content: "\f0da"; + font-weight: 900; + margin: 0 5px; + font-size: 10px; +} +/* Beware: IE6 does not support multiple selector with multiple classes, only the last class is used */ +td a.CollapsibleLabel.open, a.CollapsibleLabel.open { + margin: 0; + padding: 0px 0pt 0px 16px; + font-size: 8pt; + text-decoration: none; + color: #EA7D1E; +} +td a.CollapsibleLabel.open::before, a.CollapsibleLabel.open::before { + font-family: "Font Awesome 5 Free"; + color: #EA7D1E; + content: '\f0d7'; + margin-right: 6px; + font-size: 10px; +} +.page_header { + background-color: #F1F1F1; + padding: 5px; +} +/* move up a header immediately following a display block (i.e. "actions" menu) */ +.display_block + .page_header { + margin-top: -8px; +} +.notreeview li { + background: url("../../../../../images/tv-item.gif?v=v2.7.0-1") 0 0 no-repeat; +} +.notreeview .collapsable { + background-image: url("../../../../../images/tv-collapsable.gif?v=v2.7.0-1"); +} +.notreeview .expandable { + background-image: url("../../../../../images/tv-expandable.gif?v=v2.7.0-1"); +} +.notreeview .last { + background-image: url("../../../../../images/tv-item-last.gif?v=v2.7.0-1"); +} +.notreeview .lastCollapsable { + background-image: url("../../../../../images/tv-collapsable-last.gif?v=v2.7.0-1"); +} +.notreeview .lastExpandable { + background-image: url("../../../../../images/tv-expandable-last.gif?v=v2.7.0-1"); +} +#OrganizationSelection { + padding: 5px 0px 16px 20px; +} +/* popup menus */ +div.itop_popup { + margin: 0; + padding: 0; + float: right; +} +div.itop_popup > ul > li { + list-style: none; + cursor: pointer; + position: relative; +} +div.actions_menu > ul { + height: 19px; + line-height: 17px; + vertical-align: middle; + display: block; + nowidth: 70px; + padding-left: 5px; + /* Nasty work-around for IE... en attendant mieux */ + background: #EA7D1E; + cursor: pointer; + margin: 0; +} +div.actions_menu > ul > li { + float: left; + list-style: none; + font-size: 11px; + font-family: Tahoma, sans-serif; + height: 17px; + padding-right: 10px; + padding-left: 4px; + font-weight: bold; + color: #fff; + vertical-align: middle; + margin: 0; +} +div.actions_menu > ul > li > i { + margin-left: 5px; +} +#logOffBtn > ul > li { + list-style: none; + vertical-align: middle; + margin: 0; + padding-left: 10px; + padding-right: 10px; + cursor: pointer; +} +#logOffBtn > ul { + list-style: none; + vertical-align: middle; + margin: 0; + padding: 0; + height: 25px; +} +.itop_popup > ul > li > ul, #logOffBtn > ul > li > ul { + box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.5); +} +.itop_popup li a, #logOffBtn li a { + display: block; + padding: 5px 12px; + text-decoration: none; + nowidth: 70px; + color: #000; + font-weight: bold; + white-space: nowrap; + background: #fff; +} +#logOffBtn li span { + display: block; + padding: 5px 12px; + text-decoration: none; + nowidth: 70px; + color: #000; + white-space: nowrap; + background: #fff; +} +.itop_popup ul { + padding-left: 0; +} +.menucontainer div.toolkit_menu { + background: #EA7D1E; + margin-left: 10px; +} +.menucontainer div.toolkit_menu > ul > li { + float: left; + list-style: none; + font-size: 11px; + font-family: Tahoma, sans-serif; + height: 19px; + padding-right: 4px; + padding-left: 6px; + font-weight: bold; + color: #fff; + vertical-align: middle; + line-height: 17px; + margin: 0; +} +.menucontainer div.toolkit_menu > ul > li > i:nth-child(1) { + font-size: 13px; + padding-top: 3px; +} +.menucontainer div.toolkit_menu > ul > li > i:nth-child(2) { + margin-left: 5px; +} +.itop_popup li a:hover, #logOffBtn li a:hover { + background: #1A4473; +} +.itop_popup ul > li > ul, #logOffBtn ul > li > ul { + border: 1px solid black; + background: #fff; +} +.itop_popup li > ul, #logOffBtn li > ul { + margin: 0; + padding: 0; + position: absolute; + display: none; + border-top: 1px solid white; + z-index: 1500; +} +.itop_popup li ul li, #logOffBtn li ul li { + float: none; + display: inline; +} +.itop_popup li ul li a, #logOffBtn li ul li a { + width: auto; + text-align: left; +} +.itop_popup li ul li a:hover, #logOffBtn li ul li a:hover { + background: #EA7D1E; + color: #fff; + font-weight: bold; +} +.itop_popup > ul { + margin: 0; +} +hr.menu-separator { + border: none 0; + border-top: 1px solid #ccc; + color: #ccc; + background-color: transparent; + height: 1px; + margin: 3px; + cursor: default; +} +/************************************/ +.wizHeader { + background: #1c94c4; + padding: 15px; +} +.wizContainer { + border: 5px solid #1c94c4; + background: #d6e8ef; + padding: 5px; +} +.wizContainer table tr td { + background: transparent; +} +.alignRight { + text-align: right; + padding: 3px; +} +.alignLeft { + text-align: left; + padding: 3px; +} +.red { + background-color: #ff6000; + color: #000; +} +th.red { + background: url("../../../../../images/red-header.gif?v=v2.7.0-1") bottom left repeat-x; + color: #000; +} +.green { + background-color: #00cc00; + color: #000; +} +th.green { + background: url("../../../../../images/green-header.gif?v=v2.7.0-1") bottom left repeat-x; + color: #000; +} +.orange { + background-color: #ffde00; + color: #000; +} +th.orange { + background: url("../../../../../images/orange-header.gif?v=v2.7.0-1") bottom left repeat-x; + color: #000; +} +/* For Date Picker: Creates a little calendar icon + * instead of a text link for "Choose date" + */ +td a.dp-choose-date, a.dp-choose-date, td a.dp-choose-date:hover, a.dp-choose-date:hover, td a.dp-choose-date:visited, a.dp-choose-date:visited { + float: left; + width: 16px; + height: 16px; + padding: 0; + margin: 5px 3px 0; + display: block; + text-indent: -2000px; + overflow: hidden; + background: url("../../../../../images/calendar.png?v=v2.7.0-1") no-repeat; +} +td a.dp-choose-date.dp-disabled, a.dp-choose-date.dp-disabled { + background-position: 0 -20px; + cursor: default; +} +/* For Date Picker: makes the input field shorter once the date picker code + * has run (to allow space for the calendar icon) + */ +input.dp-applied { + width: 140px; + float: left; +} +/* For search forms */ +.mini_tabs a { + text-decoration: none; + font-weight: bold; + color: #ccc; + background-color: #333; + padding-left: 1em; + padding-right: 1em; + padding-bottom: 0.25em; +} +.mini_tabs a.selected { + color: #fff; + background-color: #1c94c4; + padding-top: 0.25em; +} +.mini_tabs ul { + margin: -10px; +} +.mini_tabs ul li { + float: right; + list-style: none; + nopadding-left: 1em; + nopadding-right: 1em; + margin-top: 0; +} +/* Search forms v2 */ +.search_box { + box-sizing: border-box; + position: relative; + z-index: 1100; + /* To be over the table block/unblock UI. Not very sure about this. */ + text-align: center; + /* Used when form is closed */ + /* Sizing reset */ +} +.search_box * { + box-sizing: border-box; +} +.search_form_handler { + position: relative; + z-index: 10; + width: 100%; + margin-left: auto; + margin-right: auto; + font-size: 12px; + text-align: left; + /* To compensate .search_box:text-align */ + border: 1px solid #1c94c4; + /* Sizing reset */ +} +.search_form_handler * { + box-sizing: border-box; + /* Hyperlink reset */ +} +.search_form_handler a { + color: inherit; + text-decoration: none; + /* Input reset */ +} +.search_form_handler input[type="text"], .search_form_handler select { + padding: 1px 2px; +} +.search_form_handler:not(.closed) .sf_title .sft_short { + display: none; +} +.search_form_handler:not(.closed) .sf_title .sft_hint, .search_form_handler:not(.closed) .sf_title .sfobs_hint, .search_form_handler:not(.closed) .sf_title .sft_toggler { + margin-top: 4px; +} +.search_form_handler:not(.closed) .sf_title .sft_toggler { + transform: rotateX(180deg); + transition: transform 0.5s linear; +} +.search_form_handler.closed { + margin-bottom: 0.5em; + width: 150px; + overflow: hidden; + border-radius: 4px; + background-color: #1c94c4; +} +.search_form_handler.closed .sf_criterion_area { + height: 0; + opacity: 0; + padding: 0; +} +.search_form_handler.closed .sf_title { + padding: 6px 8px; + text-align: center; + font-size: 12px; +} +.search_form_handler.closed .sf_title .sft_long { + display: none; +} +.search_form_handler.closed .sf_title .sft_hint, .search_form_handler.closed .sf_title .sfobs_hint { + display: none; +} +.search_form_handler:not(.no_auto_submit) .sft_hint { + display: none; +} +.search_form_handler:not(.no_auto_submit) .sfc_fg_apply { + display: none; +} +.search_form_handler.no_auto_submit .sfc_fg_search { + display: none; +} +.search_form_handler.no_auto_submit .sft_hint { + display: inline-block; +} +.search_form_handler:not(.hide_obsolete_data) .sfobs_hint { + display: none; +} +.search_form_handler.hide_obsolete_data .sfobs_hint { + display: inline-block; +} +.search_form_handler.hide_obsolete_data.no_auto_submit .sfobs_hint { + margin-left: 30px; +} +.search_form_handler .sf_title { + transition: opacity 0.3s, background-color 0.3s, color 0.3s linear; + padding: 8px 10px; + margin: 0; + color: #FFFFFF; + background-color: #1c94c4; + cursor: pointer; +} +.search_form_handler .sf_title .sft_hint, .search_form_handler .sf_title .sfobs_hint { + font-size: 8pt; + font-style: italic; +} +.search_form_handler .sf_title .sft_toggler { + margin-left: 0.7em; + transition: color 0.2s ease-in-out, transform 0.4s ease-in-out; +} +.search_form_handler .sf_title .sft_toggler:hover { + color: #F1F1F1; +} +.search_form_handler .sf_message { + display: none; + margin: 8px 8px 0px 8px; + border-radius: 0px; +} +.search_form_handler .sf_criterion_area { + /*display: none;*/ + padding: 8px 8px 3px 8px; + /* padding-bottom must equals to padding-top - .search_form_criteria:margin-bottom */ + background-color: #FFFFFF; +} +.search_form_handler .sf_criterion_area .sf_criterion_row { + position: relative; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child) { + margin-top: 20px; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child)::before { + content: ""; + position: absolute; + top: -12px; + left: 0px; + width: 100%; + border-top: 1px solid #CCCCCC; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child)::after { + content: "or"; + /* TODO: Make this into a dict entry */ + position: absolute; + top: -20px; + left: 8px; + padding-left: 5px; + padding-right: 5px; + color: #808080; + background-color: #FFFFFF; + /* Must match .sf_criterion_area:background-color */ +} +.search_form_handler .sf_criterion_area .sf_criterion_row .sf_criterion_group { + display: inline; + /* Common style between criterion and more criterion */ +} +.search_form_handler .sf_criterion_area .search_form_criteria, .search_form_handler .sf_criterion_area .sf_more_criterion, .search_form_handler .sf_criterion_area .sf_button { + position: relative; + display: inline-block; + margin-right: 10px; + margin-bottom: 5px; + vertical-align: top; +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened, .search_form_handler .sf_criterion_area .sf_more_criterion.opened, .search_form_handler .sf_criterion_area .sf_button.opened { + margin-bottom: 0px; + /* To compensate the .sfc/.sfm_header:padding-bottom: 13px */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_header, .search_form_handler .sf_criterion_area .sf_more_criterion.opened .sfc_header, .search_form_handler .sf_criterion_area .sf_button.opened .sfc_header, .search_form_handler .sf_criterion_area .search_form_criteria.opened .sfm_header, .search_form_handler .sf_criterion_area .sf_more_criterion.opened .sfm_header, .search_form_handler .sf_criterion_area .sf_button.opened .sfm_header { + border-bottom: none !important; + box-shadow: none !important; + padding-bottom: 13px; + /* Must be equal to .search_form_criteria:margin-bottom + this:padding-bottom */ +} +.search_form_handler .sf_criterion_area .search_form_criteria > *, .search_form_handler .sf_criterion_area .sf_more_criterion > *, .search_form_handler .sf_criterion_area .sf_button > * { + padding: 7px 8px; + vertical-align: top; + border: 1px solid #CCCCCC; + border-radius: 1px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); +} +.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group, .search_form_handler .sf_criterion_area .sf_more_criterion .sfc_form_group, .search_form_handler .sf_criterion_area .sf_button .sfc_form_group, .search_form_handler .sf_criterion_area .search_form_criteria .sfm_content, .search_form_handler .sf_criterion_area .sf_more_criterion .sfm_content, .search_form_handler .sf_criterion_area .sf_button .sfm_content { + position: absolute; + z-index: -1; + min-width: 100%; + left: 0px; + margin-top: -1px; +} +.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_more_criterion .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_button .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .search_form_criteria .sfm_content .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_more_criterion .sfm_content .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_button .sfm_content .sfc_fg_buttons { + white-space: nowrap; + /* Criteria tags */ +} +.search_form_handler .sf_criterion_area .search_form_criteria { + /* Non editable criteria */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.locked { + background-color: #F1F1F1; +} +.search_form_handler .sf_criterion_area .search_form_criteria.locked .sfc_title { + user-select: none; + cursor: initial; + /* Draft criteria (modifications not applied) */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_header, .search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_form_group { + border-style: dashed; +} +.search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_title { + font-style: italic; + /* Opened criteria (form group displayed) */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened { + z-index: 1; + /* To be over other criterion */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_toggle { + transform: rotateX(-180deg); +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_form_group { + display: block; +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened_left .sfc_form_group { + left: auto; + right: 0px; + /* Add "and" on criterion but the one and submit button */ +} +.search_form_handler .sf_criterion_area .search_form_criteria:not(:last-of-type) { + margin-right: 30px; +} +.search_form_handler .sf_criterion_area .search_form_criteria:not(:last-of-type)::after { + /* TODO: Find an elegant way to do this, without hardcoding the content (could be a ").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+h>r&&l>s+h,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&l>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(s=h.length-1;s>=0;s--)for(o=t(h[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=l.length-1;s>=0;s--)l[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,h=r.length;h>s;s++)l=t(r[s]),l.data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(" ",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(l=this.items[s].item.offset()[a],h=!1,e[u]-l>this.items[s][r]/2&&(h=!0),n>Math.abs(e[u]-l)&&(n=Math.abs(e[u]-l),o=this.items[s],this.direction=h?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons")) +},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],l=r&&n.collapsible,h=l?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:l?t():a,newPanel:h};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=l?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("