diff --git a/.gitignore b/.gitignore index cd2946a..24f4ec9 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ $RECYCLE.BIN/ Network Trash Folder Temporary Items .apdisk +.vscode/settings.json diff --git a/3rparty/readme b/3rparty/readme deleted file mode 100644 index ddd4027..0000000 --- a/3rparty/readme +++ /dev/null @@ -1 +0,0 @@ -Ce dossier doit contenir toutes les librairies externes utilisées par votre plugin. diff --git a/README.md b/README.md index 0c17402..b4d32f9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ -# jeedom_Horoscope -Plugin Horoscope pour Jeedom - En développement. + + +# Jeedom - Horoscope + +Plugin Horoscope pour Jeedom Ce plugin a pour but de pouvoir donner l'horoscope chaque jour via une petite phrase. @@ -8,4 +11,3 @@ Il suffit de créer une personne (un équipement) et de lui affecter un signe du La phrase sera ensuite générée via le biais d'un site internet sur l'astrologie. Ceci est mon premier plugin :-) - diff --git a/core/ajax/horoscope.ajax.php b/core/ajax/horoscope.ajax.php index 7ca000c..dbb9d50 100644 --- a/core/ajax/horoscope.ajax.php +++ b/core/ajax/horoscope.ajax.php @@ -24,11 +24,35 @@ throw new Exception(__('401 - Accès non autorisé', __FILE__)); } + if (init('action') == 'gethoroscope') { + $horoscope = horoscope::byId(init('id')); + if (!is_object($horoscope)) { + throw new Exception(__('Horoscope inconnu verifier l\'id', __FILE__)); + } + $return = utils::o2a($horoscope); + $return['cmd'] = array(); + foreach ($horoscope->getCmd() as $cmd) { + $cmd_info = utils::o2a($cmd); + $cmd_info['value'] = $cmd->execCmd(null, 0); + $return['cmd'][] = $cmd_info; + } + ajax::success($return); + } - + if (init('action') == 'autoDEL_eq') { + $eqLogic = horoscope::byId(init('id')); + if (!is_object($eqLogic)) { + throw new Exception(__('Horoscope eqLogic non trouvé : ', __FILE__) . init('id')); + } + foreach ($eqLogic->getCmd() as $cmd) { + $cmd->remove(); + $cmd->save(); + } + ajax::success(); + } + throw new Exception(__('Aucune méthode correspondante à : ', __FILE__) . init('action')); /* * *********Catch exeption*************** */ } catch (Exception $e) { ajax::error(displayExeption($e), $e->getCode()); } -?> diff --git a/core/class/.htaccess b/core/class/.htaccess new file mode 100644 index 0000000..cb24fd7 --- /dev/null +++ b/core/class/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all diff --git a/core/class/horoscope.class.php b/core/class/horoscope.class.php index 1dea253..b8a5a9f 100644 --- a/core/class/horoscope.class.php +++ b/core/class/horoscope.class.php @@ -19,96 +19,42 @@ /* * ***************************Includes********************************* */ require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php'; -class horoscope extends eqLogic { - - /** - * Le nom du parametre contenant le signe configuré - */ - const KEY_SIGNE = 'signe'; - - /** - * Liste des signes disponible - * Il ne s'agit là que des clés de configuration, le nom affiché des signes - * est configuré dans les translations - */ - protected static $_signes = [ - 'taureau' => 'Taureau', - 'belier' => 'Bélier', - 'poissons' => 'Poissons', - 'vierge' => 'Vierge', - 'capricorne' => 'Capricorne', - 'scorpion' => 'Scorpion', - 'sagittaire' => 'Sagittaire', - 'verseau' => 'Verseau', - 'cancer' => 'Cancer', - 'balance' => 'Balance', - 'gemeaux' => 'Gémeaux', - 'lion' => 'Lion' - ]; +class horoscope extends eqLogic +{ - /** - * Mapping des themes en commandes - * Permet de lier le nom d'un theme à une commande Jeedom avec un nom - * specifique - */ protected static $_theme_mapping = [ //clin_d_oeil' => 'horoscopeDuJour' ]; - /** - * Le gabarit de l'URL de récupération de l'horoscope - * La chaine '%s' sera remplacée par la clé du signe de l'equipement - */ - public static $_url_template = 'http://www.asiaflash.com/horoscope/rss_horojour_%s.xml'; - - public static $_widgetPossibility = array('custom' => true); + /* Le gabarit de l'URL de récupération de l'horoscope - La chaine '%s' sera remplacée par la clé du signe de l'equipement */ + public static $_url_template = 'http://www.asiaflash.com/horoscope/rss_horojour_%s.xml'; /* * *************************Attributs****************************** */ - - /* * ***********************Methode static*************************** */ - /** - * Recupere la liste des signes disponibles - */ - public static function getSignes() { - return self::$_signes; - } + public static function getHoroscopeForSigne($signe_zodiaque) + { + log::add('horoscope', 'debug', '│ Mise à jour pour le signe : ' . $signe_zodiaque); - /** - * Recupere l'horoscope du signe donnée depuis l'URL et retourne les valeurs de l'horoscope - * - * @param - */ - public static function getHoroscopeForSigne($signe) { - //log::add('horoscope', 'debug', 'Début de la fonction de calcul de l horoscope'); - if (empty($signe)) { - throw new Exception("Erreur le parametre 'signe' est vide"); - } - log::add('horoscope', 'debug', 'Mise à jour du signe => '.$signe.' : '); - log::add('horoscope', 'debug', '-------------------------------------------'); - $url = sprintf(self::$_url_template, $signe); + $url = sprintf(self::$_url_template, $signe_zodiaque); $xmlData = file_get_contents($url); $xml = new SimpleXMLElement($xmlData); - # contient tous le champ description + // contient tous le champ description $description = $xml->channel->item->description; - # extrait les paragraphes de la description + // extrait les paragraphes de la description $paragraphes = preg_split('/

/', $description); - # la liste horoscope contient une cle par theme de l'horoscope - # chaque nom de theme est repris tel quel depuis le XML - # en supplement chaque nom de theme est duppliquer en remplacant tous les caracteres non - # alphabetique par des underscores + // la liste horoscope contient une cle par theme de l'horoscope - chaque nom de theme est repris tel quel depuis le XML - en supplement chaque nom de theme est duppliquer en remplacant tous les caracteres non alphabetique par des underscores $horoscope = ['themes' => [], 'themes_simple' => []]; - # filtre les paragraphes pour ne retourner que ceux contenant une phrase d'horoscope - foreach($paragraphes as $key => $paragraphe) { - # elimine les paragraphes qui ne commence par la chaine suivante : + // filtre les paragraphes pour ne retourner que ceux contenant une phrase d'horoscope + foreach ($paragraphes as $key => $paragraphe) { + // elimine les paragraphes qui ne commence par la chaine suivante : if (substr($paragraphe, 0, strlen('Horoscope')) !== 'Horoscope') { unset($paragraphes[$key]); } else { @@ -117,13 +63,12 @@ public static function getHoroscopeForSigne($signe) { if (preg_match('/^Horoscope\s*[^ ]+\s*-\s*(.*)\n(.*)/', $paragraphe, $matches) > 0) { if (count($matches) == 3) { $theme = $matches[1]; - $theme = str_replace(' ','', $theme); - $theme = str_replace('\'','', $theme); + $theme = str_replace(' ', '', $theme); + $theme = str_replace('\'', '', $theme); $phrase = $matches[2]; $theme_strip = strtolower(preg_replace('/[^\wéè]/', '_', $theme)); $horoscope['themes'][$theme] = $phrase; $horoscope['themes_simple'][$theme_strip] = $phrase; - log::add('horoscope', 'debug', '--> Affectation : '.$theme.' => '.$phrase); } } } @@ -131,233 +76,276 @@ public static function getHoroscopeForSigne($signe) { return $horoscope; } - /** - * Fonction exécutée automatiquement toutes les minutes par Jeedom - */ - public static function cron() { - $today = date('H'); - $frequence = config::byKey('frequence', 'horoscope'); - - - if ($frequence == '1min') { - - log::add('horoscope', 'info', '<----------------- MISE A JOUR DE L\'HOROSCOPE ----------------->'); - log::add('horoscope', 'debug', 'Position : Début de la boucle pour chaque équipement'); - foreach (eqLogic::byType('horoscope', true) as $mi_horoscope) { - //log::add('horoscope', 'debug', 'Après chaque élément'); - - //Procédure de calcul de l horoscope - - $mi_horoscope->updateHoroscope(); - log::add('horoscope', 'debug', 'MISE A JOUR DU WIDGET'); - log::add('horoscope', 'debug', '.'); - $mi_horoscope->refreshWidget(); - + public static function cron() + { + foreach (eqLogic::byType('horoscope', true) as $eqLogic) { + $autorefresh = $eqLogic->getConfiguration('autorefresh', ''); + + if ($autorefresh == '') continue; + try { + $cron = new Cron\CronExpression($autorefresh, new Cron\FieldFactory); + if ($cron->isDue()) { + $eqLogic->getinformations(); + } + } catch (Exception $e) { + log::add('horoscope', 'error', __('Expression cron non valide pour ', __FILE__) . $eqLogic->getHumanName() . ' : ' . $autorefresh); } - log::add('horoscope', 'debug', 'Position : Fin de boucle pour chaque équipement'); } } - // Fonction exécutée automatiquement toutes les heures par Jeedom - public static function cronHourly() { - $today = date('H'); - $frequence = config::byKey('frequence', 'horoscope'); - log::add('horoscope', 'debug', '--------------------------DEBUT HOROSCOPE CRON HEURE-------------------------------------------'); - log::add('horoscope', 'debug', 'Fréquence : "'.$frequence.'" , heure Actuelle : '.$today); - - if (($frequence == '1h') || (($today == '00') && ($frequence == 'minuit')) || (($today == '05') && ($frequence == '5h')) ) { - //log::add('horoscope', 'debug', 'Avant Lecture de chaque équipement'); - log::add('horoscope', 'info', '<----------------- MISE A JOUR DE L\'HOROSCOPE ----------------->'); - log::add('horoscope', 'debug', 'Position : Avant Lecture de chaque équipement'); - foreach (eqLogic::byType('horoscope', true) as $mi_horoscope) { - //log::add('horoscope', 'debug', 'Après chaque élément'); - - //Procédure de calcul de l horoscope - $mi_horoscope->updateHoroscope(); - log::add('horoscope', 'debug', 'MISE A JOUR DU WIDGET'); - log::add('horoscope', 'debug', '.'); - $mi_horoscope->refreshWidget(); - } - } + function templateWidget() + { + $return = array('info' => array('string' => array())); + $return['info']['string']['Signe zodiaque'] = array( + 'template' => 'tmplmultistate', + 'replace' => array('#_desktop_width_#' => '60'), + 'test' => array( + array('operation' => "#value# == 'balance'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'belier'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'cancer'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'capricorne'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'gemeaux'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'lion'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'poissons'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'sagittaire'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'scorpion'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'taureau'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'vierge'", 'state_light' => '', 'state_dark' => ''), + array('operation' => "#value# == 'verseau'", 'state_light' => '', 'state_dark' => '') + ) + ); + return $return; } /* * *********************Méthodes d'instance************************* */ - /** - * Recuperer l'horoscope du jour et met à jour les commandes - */ - public function updateHoroscope() { - $signe = $this->getConfiguration(self::KEY_SIGNE); - if (empty($signe)) { - return; + public function preInsert() + { + if ($this->getConfiguration('autorefresh') == '') { + $this->setConfiguration('autorefresh', '0 5 * * *'); + } + } + + public function postInsert() + { + } + + public function preSave() + { + } + + public function postSave() + { + $_eqName = $this->getName(); + log::add('horoscope', 'debug', 'postSave() =>' . $_eqName); + $order = 1; + + $signe_zodiaque = $this->getConfiguration('signe'); + + $this->getupdateSigne($signe_zodiaque, $order); + + //Fonction rafraichir + $refresh = $this->getCmd(null, 'refresh'); + if (!is_object($refresh)) { + $refresh = new horoscopeCmd(); + $refresh->setLogicalId('refresh'); + $refresh->setIsVisible(1); + $refresh->setName(__('Rafraichir', __FILE__)); + $refresh->setOrder($order); + $refresh->setEqLogic_id($this->getId()); + $refresh->setType('action'); + $refresh->setSubType('other'); + $refresh->setOrder($order); + $refresh->save(); + } + } + + public function preUpdate() + { + if (!$this->getIsEnable()) return; + + /* ********************** Récupération signe *************************** */ + $signe_zodiaque = $this->getConfiguration('signe'); + + if ($signe_zodiaque == '') { + throw new Exception(__('Le champ "Signe du zodiaque" ne peut être vide', __FILE__)); + log::add('horoscope', 'error', '│ Configuration : Signe zodiaque inexistant : ' . $this->getConfiguration('signe')); } + } + + public function postUpdate() + { + $this->getInformations(); + } + + public function preRemove() + { + } + + public function postRemove() + { + } + + public function getImage() + { + if ($this->getConfiguration('signe') != '') { + $filename = 'plugins/horoscope/core/config/img/' . $this->getConfiguration('signe') . '.png'; + if (file_exists(__DIR__ . '/../../../../' . $filename)) { + return $filename; + } + } + return 'plugins/horoscope/plugin_info/horoscope_icon.png'; + } + + /* Recuperer l'horoscope du jour et met à jour les commandes */ + public function getupdateHoroscope($signe_zodiaque, $order) + { + + $horoscope = self::getHoroscopeForSigne($signe_zodiaque); - $horoscope = self::getHoroscopeForSigne($signe); - log::add('horoscope', 'debug', '.'); - log::add('horoscope', 'debug', 'Modification de l\'équipement : '.$this->getName().'.'); - - // met a jour toutes les commandes contenants les phrases de l'horoscope foreach ($horoscope['themes'] as $theme_name => $message) { - if (! is_string($message)) { + if (!is_string($message)) { continue; } - // cree la commande si elle n'existe pas encore + log::add('horoscope', 'debug', "│ Modification de la commande : {$theme_name} : {$message}"); + $horoscopeCmd = $this->getCmd(null, $theme_name); - if (!is_object($horoscopeCmd)) { - $horoscopeCmd = new horoscopeCmd(); + if (!is_object($horoscopeCmd)) { + $horoscopeCmd = new horoscopeCmd(); $horoscopeCmd->setName(__($theme_name, __FILE__)); - $horoscopeCmd->setEqLogic_id($this->getId()); + $horoscopeCmd->setEqLogic_id($this->id); $horoscopeCmd->setLogicalId($theme_name); - log::add('horoscope', 'debug', 'Création de : '.$this->getName().'->'.$theme_name); - $horoscopeCmd->setIsVisible(false); - $horoscopeCmd->setEqType('horoscope'); + $horoscopeCmd->setConfiguration('data', $theme_name); $horoscopeCmd->setType('info'); $horoscopeCmd->setSubType('string'); $horoscopeCmd->setIsHistorized(0); + $horoscopeCmd->setIsVisible(0); + $horoscopeCmd->setDisplay('generic_type', 'GENERIC_INFO'); + $horoscopeCmd->setOrder($order); + $order++; $horoscopeCmd->save(); - } - $horoscopeCmd->event($message); - } - // met a jour les commandes specifique declarée dans le tableau de mapping + log::add('horoscope', 'debug', '│ Création de la commande : ' . $theme_name); + } + $this->checkAndUpdateCmd($theme_name, $message); + } + // Mise à jour les commandes specifique declarée dans le tableau de mapping foreach ($horoscope['themes_simple'] as $theme_name => $message) { // si un mapping specifique est defini alors on l'applique if (isset(self::$_theme_mapping[$theme_name])) { $specific_commande_name = self::$_theme_mapping[$theme_name]; $horoscopeCmd = $this->getCmd(null, $specific_commande_name); - if (!is_object($horoscopeCmd)) { - $horoscopeCmd = new horoscopeCmd(); + if (!is_object($horoscopeCmd)) { + $horoscopeCmd = new horoscopeCmd(); $horoscopeCmd->setName(__($theme_name, __FILE__)); - $horoscopeCmd->setEqLogic_id($this->getId()); - $horoscopeCmd->setLogicalId($theme_name); - log::add('horoscope', 'debug', 'Création de : '.$this->getName().'->'.$theme_name); - $horoscopeCmd->setEqType('horoscope'); + $horoscopeCmd->setEqLogic_id($this->id); + $horoscopeCmd->setLogicalId($specific_commande_name); + $horoscopeCmd->setConfiguration('data', $specific_commande_name); $horoscopeCmd->setType('info'); $horoscopeCmd->setSubType('string'); $horoscopeCmd->setIsHistorized(0); + $horoscopeCmd->setIsVisible(0); + $horoscopeCmd->setDisplay('generic_type', 'GENERIC_INFO'); + $horoscopeCmd->setOrder($order); + $order++; $horoscopeCmd->save(); - } - $horoscopeCmd->event($message); + + log::add('horoscope', 'debug', '│ Création de la commande : ' . $theme_name); + } + $this->checkAndUpdateCmd($specific_commande_name, $message); } } - log::add('horoscope', 'debug', '.'); + return $order; } - /** - * Met a jour la commande contenant le signe configure - */ - public function updateSigne() { - $signe = $this->getConfiguration(self::KEY_SIGNE); + public function getupdateSigne($signe_zodiaque, $order) + { + $_eqName = $this->getName(); - // met a jour la commande contenant le signe $horoscopeCmd = $this->getCmd(null, 'signe'); if (!is_object($horoscopeCmd)) { - log::add('horoscope', 'debug', 'L équipement (Signe) n a pas a été trouvé dans SAVE donc création :'); $horoscopeCmd = new horoscopeCmd(); $horoscopeCmd->setName(__('signe', __FILE__)); - $horoscopeCmd->setEqLogic_id($this->getId()); + $horoscopeCmd->setEqLogic_id($this->id); $horoscopeCmd->setLogicalId('signe'); - $horoscopeCmd->setIsVisible(false); - $horoscopeCmd->setEqType('horoscope'); + $horoscopeCmd->setConfiguration('data', 'signe'); $horoscopeCmd->setType('info'); $horoscopeCmd->setSubType('string'); $horoscopeCmd->setIsHistorized(0); + $horoscopeCmd->setIsVisible(1); + $horoscopeCmd->setTemplate('dashboard', 'horoscope::Signe zodiaque'); + $horoscopeCmd->setTemplate('mobile', 'horoscope::Signe zodiaque'); + $horoscopeCmd->setDisplay('generic_type', 'GENERIC_INFO'); + $horoscopeCmd->setOrder($order); + $order++; $horoscopeCmd->save(); - } - $horoscopeCmd->event($signe); - } - - public function preInsert() { - - } - public function postInsert() { - - } - - public function preSave() { - - } - - public function postSave() { - $this->updateSigne(); - } - - public function preUpdate() { - $signe = $this->getConfiguration(self::KEY_SIGNE); - if ($signe == '') { - log::add('horoscope', 'debug', 'preUpdate: signe vide'); - throw new Exception(__("Vous n'avez configuré aucun signe.", __FILE__)); - } - if (!array_key_exists($signe, self::getSignes())) { - log::add('horoscope', 'debug', 'preUpdate: signe inexistant renseigne'); - throw new Exception(__("Le signe renseigné n'existe pas.", __FILE__) . " '$signe'"); + log::add('horoscope', 'debug', '┌───────── Création commande : ' . $_eqName); + log::add('horoscope', 'debug', '│ Nouvelle commande : Signe'); + log::add('horoscope', 'debug', '└─────────'); } - } - public function postUpdate() - { - $this->updateHoroscope(); + $cmd = $this->getCmd('info', 'signe'); //Mise à jour de la valeur + if (is_object($cmd)) { + $cmd->setConfiguration('value', $signe_zodiaque); + $cmd->save(); + $cmd->event($signe_zodiaque); + } + $this->checkAndUpdateCmd('signe', $signe_zodiaque); + return $order; } + /* * **********************Getteur Setteur*************************** */ - public function preRemove() { - - } - public function postRemove() { + public function getInformations() + { + if (!$this->getIsEnable()) return; - } + $_eqName = $this->getName(); + log::add('horoscope', 'debug', '┌───────── MISE A JOUR : ' . $_eqName); + $order = 1; - public function toHtml($_version = 'dashboard') { - $replace = $this->preToHtml($_version); - if (!is_array($replace)) { - return $replace; - } - $version = jeedom::versionAlias($_version); - if ($this->getDisplay('hideOn' . $version) == 1) { - return ''; - } - foreach ($this->getCmd('info') as $cmd) { - $replace['#' . $cmd->getLogicalId() . '_id#'] = $cmd->getId(); - $replace['#' . $cmd->getLogicalId() . '#'] = $cmd->execCmd(); - $replace['#' . $cmd->getLogicalId() . '_collect#'] = $cmd->getCollectDate(); - if ($cmd->getIsHistorized() == 1) { - $replace['#' . $cmd->getLogicalId() . '_history#'] = 'history cursor'; - } + /* ********************** Récupération signe *************************** */ + $signe_zodiaque = $this->getConfiguration('signe'); + if ($signe_zodiaque == '') { + throw new Exception(__('Le champ "Signe du zodiaque" ne peut être vide', __FILE__)); + log::add('horoscope', 'error', '│ Configuration : Signe zodiaque inexistant : ' . $this->getConfiguration('signe_zodiaque')); } + log::add('horoscope', 'debug', '│ Signe du zodiaque : ' . $signe_zodiaque); - log::add('horoscope','debug', $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'horoscope', 'horoscope')))); + /* Création/Update Signe */ + $this->getupdateSigne($signe_zodiaque, $order); + $order = 2; - return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'horoscope', 'horoscope'))); - } + /* Création/Update Horoscope */ + $this->getupdateHoroscope($signe_zodiaque, $order); + log::add('horoscope', 'debug', '└─────────'); + } /* * **********************Getteur Setteur*************************** */ } -class horoscopeCmd extends cmd { +class horoscopeCmd extends cmd +{ /* * *************************Attributs****************************** */ - /* * ***********************Methode static*************************** */ - /* * *********************Methode d'instance************************* */ - - /* - * Non obligatoire permet de demander de ne pas supprimer les commandes même si elles ne sont pas dans la nouvelle configuration de l'équipement envoyé en JS - public function dontRemoveCmd() { - return true; - } - */ - - public function execute($_options = array()) { - + public function dontRemoveCmd() + { + return true; + } + public function execute($_options = array()) + { + if ($this->getLogicalId() == 'refresh') { + log::add('horoscope', 'debug', ' ─────────> ACTUALISATION MANUELLE'); + $this->getEqLogic()->getInformations(); + log::add('horoscope', 'debug', ' ─────────> FIN ACTUALISATION MANUELLE'); + return; + } } - - /* * **********************Getteur Setteur*************************** */ } - -?> diff --git a/core/config/.htaccess b/core/config/.htaccess new file mode 100644 index 0000000..ccc3363 --- /dev/null +++ b/core/config/.htaccess @@ -0,0 +1,5 @@ +Order allow,deny + + allow from all + +Deny from all \ No newline at end of file diff --git a/core/config/img/balance.png b/core/config/img/balance.png new file mode 100644 index 0000000..34e9444 Binary files /dev/null and b/core/config/img/balance.png differ diff --git a/core/config/img/belier.png b/core/config/img/belier.png new file mode 100644 index 0000000..f3dcd37 Binary files /dev/null and b/core/config/img/belier.png differ diff --git a/core/config/img/cancer.png b/core/config/img/cancer.png new file mode 100644 index 0000000..a6a24b4 Binary files /dev/null and b/core/config/img/cancer.png differ diff --git a/core/config/img/capricorne.png b/core/config/img/capricorne.png new file mode 100644 index 0000000..53283bb Binary files /dev/null and b/core/config/img/capricorne.png differ diff --git a/core/config/img/gemeaux.png b/core/config/img/gemeaux.png new file mode 100644 index 0000000..6436183 Binary files /dev/null and b/core/config/img/gemeaux.png differ diff --git a/core/config/img/lion.png b/core/config/img/lion.png new file mode 100644 index 0000000..fb581c3 Binary files /dev/null and b/core/config/img/lion.png differ diff --git a/core/config/img/poissons.png b/core/config/img/poissons.png new file mode 100644 index 0000000..597c27a Binary files /dev/null and b/core/config/img/poissons.png differ diff --git a/core/config/img/sagittaire.png b/core/config/img/sagittaire.png new file mode 100644 index 0000000..ca343de Binary files /dev/null and b/core/config/img/sagittaire.png differ diff --git a/core/config/img/scorpion.png b/core/config/img/scorpion.png new file mode 100644 index 0000000..69e7683 Binary files /dev/null and b/core/config/img/scorpion.png differ diff --git a/core/config/img/taureau.png b/core/config/img/taureau.png new file mode 100644 index 0000000..d3568bb Binary files /dev/null and b/core/config/img/taureau.png differ diff --git a/core/config/img/verseau.png b/core/config/img/verseau.png new file mode 100644 index 0000000..18ef3b2 Binary files /dev/null and b/core/config/img/verseau.png differ diff --git a/core/config/img/vierge.png b/core/config/img/vierge.png new file mode 100644 index 0000000..0fe9370 Binary files /dev/null and b/core/config/img/vierge.png differ diff --git a/core/i18n/.htaccess b/core/i18n/.htaccess new file mode 100644 index 0000000..7d3aaf1 --- /dev/null +++ b/core/i18n/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all \ No newline at end of file diff --git a/core/i18n/de_DE.json b/core/i18n/de_DE.json index 5cd3707..3febf0e 100644 --- a/core/i18n/de_DE.json +++ b/core/i18n/de_DE.json @@ -1,36 +1,36 @@ { "plugins\/horoscope\/plugin_info\/info.xml": { "Plugin Horoscope .....": "Plugin Horoscope .....", - "Aucune": "Aucune" + "Aucune": "Keine" }, "plugins\/horoscope\/plugin_info\/configuration.php": { "Fréquence de recuperation des données": "Fréquence de recuperation des données", "à 5H00 du matin (conseillé)": "à 5H00 du matin (conseillé)", - "Toutes les 1 heure": "Toutes les 1 heure", + "Toutes les 1 heure": "jede Stunde", "à minuit": "à minuit", "Toutes les 1 minute (pour les tests)": "Toutes les 1 minute (pour les tests)" }, "plugins\/horoscope\/desktop\/php\/horoscope.php": { - "Ajouter un template": "Ajouter un template", - "Rechercher": "Rechercher", + "Ajouter un template": "Vorlage hinzufügen", + "Rechercher": "Suchen", "Mes horoscopes": "Mes horoscopes", - "Gestion": "Gestion", - "Ajouter": "Ajouter", - "Configuration": "Configuration", + "Gestion": "Verwaltung", + "Ajouter": "Hinzufügen", + "Configuration": "Konfiguration", "Général": "Général", - "Nom de la personne": "Nom de la personne", - "Objet parent": "Objet parent", - "Aucun": "Aucun", - "Signe": "Signe", - "Activer": "Activer", - "Visible": "Visible", + "Nom de la personne": "Name der Person", + "Objet parent": "Elternobjekt", + "Aucun": "Keine", + "Signe": "Zeichen", + "Activer": "Aktivieren", + "Visible": "Sichtbar", "horoscope": "horoscope", - "Commandes": "Commandes", - "Nom": "Nom", - "Type": "Type", + "Commandes": "Befehle", + "Nom": "Name", + "Type": "Typ", "Action": "Action", - "Supprimer": "Supprimer", - "Sauvegarder": "Sauvegarder", + "Supprimer": "Löschen", + "Sauvegarder": "Speichern", "taureau": "Taureau", "belier": "Bélier", "poissons": "Poissons", @@ -43,27 +43,27 @@ "balance": "Balance", "gemeaux": "Gémeaux", "lion": "Lion", - "Ajouter un horoscope": "Ajouter un horoscope", - "Configuration avancée": "Configuration avancée", - "Equipement": "Equipement", - "Paramètres": "Paramètres" + "Ajouter un horoscope": " Horoskop hinzufügen", + "Configuration avancée": "Erweiterte Konfiguration", + "Equipement": "Gerät", + "Paramètres": "Parameter" }, "plugins\/horoscope\/core\/class\/horoscope.class.php": { "horoscopeDuJour": "horoscopeDuJour", - "signe": "signe", - "Vous n'avez configuré aucun signe.": "Vous n'avez configuré aucun signe.", + "signe": "Zeichen", + "Vous n'avez configuré aucun signe.": "Sie haben keine Zeichen konfiguriert.", "Amour": "Amour", "Argent": "Argent", - "Santé": "Santé", + "Santé": "Gesundheit", "Travail": "Travail", "Famille": "Famille", "Vie sociale": "Vie sociale", "Citation du jour": "Citation du jour", - "Nombre de chance": "Nombre de chance", + "Nombre de chance": "Anzahl der Chancen", "Clin d'oeil": "Clin d'oeil" }, "plugins\/horoscope\/desktop\/js\/horoscope.js": { - "Nom": "Nom", + "Nom": "Name", "Tester": "Tester", "Afficher": "Afficher" } diff --git a/core/i18n/es_ES.json b/core/i18n/es_ES.json index 5cd3707..94ee106 100644 --- a/core/i18n/es_ES.json +++ b/core/i18n/es_ES.json @@ -1,70 +1,70 @@ { "plugins\/horoscope\/plugin_info\/info.xml": { "Plugin Horoscope .....": "Plugin Horoscope .....", - "Aucune": "Aucune" + "Aucune": "Ninguno" }, "plugins\/horoscope\/plugin_info\/configuration.php": { - "Fréquence de recuperation des données": "Fréquence de recuperation des données", - "à 5H00 du matin (conseillé)": "à 5H00 du matin (conseillé)", - "Toutes les 1 heure": "Toutes les 1 heure", - "à minuit": "à minuit", - "Toutes les 1 minute (pour les tests)": "Toutes les 1 minute (pour les tests)" + "Fréquence de recuperation des données": "Frecuencia de recuperación de datos", + "à 5H00 du matin (conseillé)": "a las 5:00 am (recomendado)", + "Toutes les 1 heure": "Cada hora", + "à minuit": "medianoche", + "Toutes les 1 minute (pour les tests)": "Cada 1 minuto (para pruebas)" }, "plugins\/horoscope\/desktop\/php\/horoscope.php": { - "Ajouter un template": "Ajouter un template", - "Rechercher": "Rechercher", - "Mes horoscopes": "Mes horoscopes", - "Gestion": "Gestion", - "Ajouter": "Ajouter", - "Configuration": "Configuration", - "Général": "Général", - "Nom de la personne": "Nom de la personne", - "Objet parent": "Objet parent", - "Aucun": "Aucun", - "Signe": "Signe", - "Activer": "Activer", + "Ajouter un template": "Agregar una plantilla", + "Rechercher": "Buscar", + "Mes horoscopes": "Mis horoscopos", + "Gestion": "Gestión", + "Ajouter": "Agregar", + "Configuration": "Configuración", + "Général": "General", + "Nom de la personne": "Nombre de la persona", + "Objet parent": "Objeto padre", + "Aucun": "Ninguno", + "Signe": "Signo", + "Activer": "Activar", "Visible": "Visible", - "horoscope": "horoscope", - "Commandes": "Commandes", - "Nom": "Nom", - "Type": "Type", - "Action": "Action", - "Supprimer": "Supprimer", - "Sauvegarder": "Sauvegarder", - "taureau": "Taureau", - "belier": "Bélier", - "poissons": "Poissons", - "vierge": "Vierge", - "capricorne": "Capricorne", - "scorpion": "Scorpion", - "sagittaire": "Sagittaire", - "verseau": "Verseau", + "horoscope": "horoscopo", + "Commandes": "Comandos", + "Nom": "Nombre", + "Type": "Tipo", + "Action": "Acción", + "Supprimer": "Borrar", + "Sauvegarder": "Guardar", + "taureau": "Tauro", + "belier": "Aries", + "poissons": "Piscis", + "vierge": "Virgo", + "capricorne": "Capricornio", + "scorpion": "Escorpio", + "sagittaire": "Sagitario", + "verseau": "Acuario", "cancer": "Cancer", - "balance": "Balance", - "gemeaux": "Gémeaux", - "lion": "Lion", - "Ajouter un horoscope": "Ajouter un horoscope", - "Configuration avancée": "Configuration avancée", - "Equipement": "Equipement", - "Paramètres": "Paramètres" + "balance": "Libra", + "gemeaux": "Géminis", + "lion": "Leo", + "Ajouter un horoscope": "Agregar un horóscopo", + "Configuration avancée": "Configuración avanzada", + "Equipement": "Dispositivo", + "Paramètres": "Parámetros" }, "plugins\/horoscope\/core\/class\/horoscope.class.php": { - "horoscopeDuJour": "horoscopeDuJour", - "signe": "signe", - "Vous n'avez configuré aucun signe.": "Vous n'avez configuré aucun signe.", - "Amour": "Amour", - "Argent": "Argent", - "Santé": "Santé", - "Travail": "Travail", - "Famille": "Famille", - "Vie sociale": "Vie sociale", - "Citation du jour": "Citation du jour", - "Nombre de chance": "Nombre de chance", - "Clin d'oeil": "Clin d'oeil" + "horoscopeDuJour": "horóscopo diario", + "signe": "signo", + "Vous n'avez configuré aucun signe.": "No ha configurado ninguna signo.", + "Amour": "Amor", + "Argent": "Dinero", + "Santé": "Salud", + "Travail": "Trabajo", + "Famille": "Familia", + "Vie sociale": "Vida social", + "Citation du jour": "Cita del día", + "Nombre de chance": "Número de oportunidades", + "Clin d'oeil": "Guiño" }, "plugins\/horoscope\/desktop\/js\/horoscope.js": { - "Nom": "Nom", - "Tester": "Tester", - "Afficher": "Afficher" + "Nom": "Nombre", + "Tester": "Prueba", + "Afficher": "Mostrar" } } diff --git a/core/i18n/ja_JP.json b/core/i18n/ja_JP.json new file mode 100644 index 0000000..5cd3707 --- /dev/null +++ b/core/i18n/ja_JP.json @@ -0,0 +1,70 @@ +{ + "plugins\/horoscope\/plugin_info\/info.xml": { + "Plugin Horoscope .....": "Plugin Horoscope .....", + "Aucune": "Aucune" + }, + "plugins\/horoscope\/plugin_info\/configuration.php": { + "Fréquence de recuperation des données": "Fréquence de recuperation des données", + "à 5H00 du matin (conseillé)": "à 5H00 du matin (conseillé)", + "Toutes les 1 heure": "Toutes les 1 heure", + "à minuit": "à minuit", + "Toutes les 1 minute (pour les tests)": "Toutes les 1 minute (pour les tests)" + }, + "plugins\/horoscope\/desktop\/php\/horoscope.php": { + "Ajouter un template": "Ajouter un template", + "Rechercher": "Rechercher", + "Mes horoscopes": "Mes horoscopes", + "Gestion": "Gestion", + "Ajouter": "Ajouter", + "Configuration": "Configuration", + "Général": "Général", + "Nom de la personne": "Nom de la personne", + "Objet parent": "Objet parent", + "Aucun": "Aucun", + "Signe": "Signe", + "Activer": "Activer", + "Visible": "Visible", + "horoscope": "horoscope", + "Commandes": "Commandes", + "Nom": "Nom", + "Type": "Type", + "Action": "Action", + "Supprimer": "Supprimer", + "Sauvegarder": "Sauvegarder", + "taureau": "Taureau", + "belier": "Bélier", + "poissons": "Poissons", + "vierge": "Vierge", + "capricorne": "Capricorne", + "scorpion": "Scorpion", + "sagittaire": "Sagittaire", + "verseau": "Verseau", + "cancer": "Cancer", + "balance": "Balance", + "gemeaux": "Gémeaux", + "lion": "Lion", + "Ajouter un horoscope": "Ajouter un horoscope", + "Configuration avancée": "Configuration avancée", + "Equipement": "Equipement", + "Paramètres": "Paramètres" + }, + "plugins\/horoscope\/core\/class\/horoscope.class.php": { + "horoscopeDuJour": "horoscopeDuJour", + "signe": "signe", + "Vous n'avez configuré aucun signe.": "Vous n'avez configuré aucun signe.", + "Amour": "Amour", + "Argent": "Argent", + "Santé": "Santé", + "Travail": "Travail", + "Famille": "Famille", + "Vie sociale": "Vie sociale", + "Citation du jour": "Citation du jour", + "Nombre de chance": "Nombre de chance", + "Clin d'oeil": "Clin d'oeil" + }, + "plugins\/horoscope\/desktop\/js\/horoscope.js": { + "Nom": "Nom", + "Tester": "Tester", + "Afficher": "Afficher" + } +} diff --git a/core/i18n/pt_PT.json b/core/i18n/pt_PT.json new file mode 100644 index 0000000..5cd3707 --- /dev/null +++ b/core/i18n/pt_PT.json @@ -0,0 +1,70 @@ +{ + "plugins\/horoscope\/plugin_info\/info.xml": { + "Plugin Horoscope .....": "Plugin Horoscope .....", + "Aucune": "Aucune" + }, + "plugins\/horoscope\/plugin_info\/configuration.php": { + "Fréquence de recuperation des données": "Fréquence de recuperation des données", + "à 5H00 du matin (conseillé)": "à 5H00 du matin (conseillé)", + "Toutes les 1 heure": "Toutes les 1 heure", + "à minuit": "à minuit", + "Toutes les 1 minute (pour les tests)": "Toutes les 1 minute (pour les tests)" + }, + "plugins\/horoscope\/desktop\/php\/horoscope.php": { + "Ajouter un template": "Ajouter un template", + "Rechercher": "Rechercher", + "Mes horoscopes": "Mes horoscopes", + "Gestion": "Gestion", + "Ajouter": "Ajouter", + "Configuration": "Configuration", + "Général": "Général", + "Nom de la personne": "Nom de la personne", + "Objet parent": "Objet parent", + "Aucun": "Aucun", + "Signe": "Signe", + "Activer": "Activer", + "Visible": "Visible", + "horoscope": "horoscope", + "Commandes": "Commandes", + "Nom": "Nom", + "Type": "Type", + "Action": "Action", + "Supprimer": "Supprimer", + "Sauvegarder": "Sauvegarder", + "taureau": "Taureau", + "belier": "Bélier", + "poissons": "Poissons", + "vierge": "Vierge", + "capricorne": "Capricorne", + "scorpion": "Scorpion", + "sagittaire": "Sagittaire", + "verseau": "Verseau", + "cancer": "Cancer", + "balance": "Balance", + "gemeaux": "Gémeaux", + "lion": "Lion", + "Ajouter un horoscope": "Ajouter un horoscope", + "Configuration avancée": "Configuration avancée", + "Equipement": "Equipement", + "Paramètres": "Paramètres" + }, + "plugins\/horoscope\/core\/class\/horoscope.class.php": { + "horoscopeDuJour": "horoscopeDuJour", + "signe": "signe", + "Vous n'avez configuré aucun signe.": "Vous n'avez configuré aucun signe.", + "Amour": "Amour", + "Argent": "Argent", + "Santé": "Santé", + "Travail": "Travail", + "Famille": "Famille", + "Vie sociale": "Vie sociale", + "Citation du jour": "Citation du jour", + "Nombre de chance": "Nombre de chance", + "Clin d'oeil": "Clin d'oeil" + }, + "plugins\/horoscope\/desktop\/js\/horoscope.js": { + "Nom": "Nom", + "Tester": "Tester", + "Afficher": "Afficher" + } +} diff --git a/core/i18n/tr.json b/core/i18n/tr.json new file mode 100644 index 0000000..5cd3707 --- /dev/null +++ b/core/i18n/tr.json @@ -0,0 +1,70 @@ +{ + "plugins\/horoscope\/plugin_info\/info.xml": { + "Plugin Horoscope .....": "Plugin Horoscope .....", + "Aucune": "Aucune" + }, + "plugins\/horoscope\/plugin_info\/configuration.php": { + "Fréquence de recuperation des données": "Fréquence de recuperation des données", + "à 5H00 du matin (conseillé)": "à 5H00 du matin (conseillé)", + "Toutes les 1 heure": "Toutes les 1 heure", + "à minuit": "à minuit", + "Toutes les 1 minute (pour les tests)": "Toutes les 1 minute (pour les tests)" + }, + "plugins\/horoscope\/desktop\/php\/horoscope.php": { + "Ajouter un template": "Ajouter un template", + "Rechercher": "Rechercher", + "Mes horoscopes": "Mes horoscopes", + "Gestion": "Gestion", + "Ajouter": "Ajouter", + "Configuration": "Configuration", + "Général": "Général", + "Nom de la personne": "Nom de la personne", + "Objet parent": "Objet parent", + "Aucun": "Aucun", + "Signe": "Signe", + "Activer": "Activer", + "Visible": "Visible", + "horoscope": "horoscope", + "Commandes": "Commandes", + "Nom": "Nom", + "Type": "Type", + "Action": "Action", + "Supprimer": "Supprimer", + "Sauvegarder": "Sauvegarder", + "taureau": "Taureau", + "belier": "Bélier", + "poissons": "Poissons", + "vierge": "Vierge", + "capricorne": "Capricorne", + "scorpion": "Scorpion", + "sagittaire": "Sagittaire", + "verseau": "Verseau", + "cancer": "Cancer", + "balance": "Balance", + "gemeaux": "Gémeaux", + "lion": "Lion", + "Ajouter un horoscope": "Ajouter un horoscope", + "Configuration avancée": "Configuration avancée", + "Equipement": "Equipement", + "Paramètres": "Paramètres" + }, + "plugins\/horoscope\/core\/class\/horoscope.class.php": { + "horoscopeDuJour": "horoscopeDuJour", + "signe": "signe", + "Vous n'avez configuré aucun signe.": "Vous n'avez configuré aucun signe.", + "Amour": "Amour", + "Argent": "Argent", + "Santé": "Santé", + "Travail": "Travail", + "Famille": "Famille", + "Vie sociale": "Vie sociale", + "Citation du jour": "Citation du jour", + "Nombre de chance": "Nombre de chance", + "Clin d'oeil": "Clin d'oeil" + }, + "plugins\/horoscope\/desktop\/js\/horoscope.js": { + "Nom": "Nom", + "Tester": "Tester", + "Afficher": "Afficher" + } +} diff --git a/core/php/horoscope.inc.php b/core/php/horoscope.inc.php deleted file mode 100644 index da49a9d..0000000 --- a/core/php/horoscope.inc.php +++ /dev/null @@ -1,26 +0,0 @@ -. -*/ - -require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php'; -/* - * Non obligatoire mais peut être utilisé si vous voulez charger en même temps que votre - * plugin des librairies externes (ne pas oublier d'adapter plugin_info/info.xml). - * - * - */ -?> diff --git a/core/template/.htaccess b/core/template/.htaccess new file mode 100644 index 0000000..ccc3363 --- /dev/null +++ b/core/template/.htaccess @@ -0,0 +1,5 @@ +Order allow,deny + + allow from all + +Deny from all \ No newline at end of file diff --git a/core/template/dashboard/horoscope.html b/core/template/dashboard/horoscope.html deleted file mode 100644 index 881926b..0000000 --- a/core/template/dashboard/horoscope.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
#name_display#
-
-
-
horoscope du jour :
#Clindoeil#
-
- -
-
- diff --git a/core/template/img/balance_dark.png b/core/template/img/balance_dark.png new file mode 100644 index 0000000..79fb23e Binary files /dev/null and b/core/template/img/balance_dark.png differ diff --git a/core/template/img/balance_light.png b/core/template/img/balance_light.png new file mode 100644 index 0000000..3974f7f Binary files /dev/null and b/core/template/img/balance_light.png differ diff --git a/core/template/img/belier_dark.png b/core/template/img/belier_dark.png new file mode 100644 index 0000000..4e32d76 Binary files /dev/null and b/core/template/img/belier_dark.png differ diff --git a/core/template/img/belier_light.png b/core/template/img/belier_light.png new file mode 100644 index 0000000..df5ab59 Binary files /dev/null and b/core/template/img/belier_light.png differ diff --git a/core/template/img/cancer_dark.png b/core/template/img/cancer_dark.png new file mode 100644 index 0000000..36695f5 Binary files /dev/null and b/core/template/img/cancer_dark.png differ diff --git a/core/template/img/cancer_light.png b/core/template/img/cancer_light.png new file mode 100644 index 0000000..e31e424 Binary files /dev/null and b/core/template/img/cancer_light.png differ diff --git a/core/template/img/capricorne_dark.png b/core/template/img/capricorne_dark.png new file mode 100644 index 0000000..59c555c Binary files /dev/null and b/core/template/img/capricorne_dark.png differ diff --git a/core/template/img/capricorne_light.png b/core/template/img/capricorne_light.png new file mode 100644 index 0000000..cd1e6c6 Binary files /dev/null and b/core/template/img/capricorne_light.png differ diff --git a/core/template/img/gemeaux_dark.png b/core/template/img/gemeaux_dark.png new file mode 100644 index 0000000..92dc59d Binary files /dev/null and b/core/template/img/gemeaux_dark.png differ diff --git a/core/template/img/gemeaux_light.png b/core/template/img/gemeaux_light.png new file mode 100644 index 0000000..1c93416 Binary files /dev/null and b/core/template/img/gemeaux_light.png differ diff --git a/core/template/img/lion_dark.png b/core/template/img/lion_dark.png new file mode 100644 index 0000000..6f85171 Binary files /dev/null and b/core/template/img/lion_dark.png differ diff --git a/core/template/img/lion_light.png b/core/template/img/lion_light.png new file mode 100644 index 0000000..6b1801d Binary files /dev/null and b/core/template/img/lion_light.png differ diff --git a/core/template/img/poissons_dark.png b/core/template/img/poissons_dark.png new file mode 100644 index 0000000..a2624cc Binary files /dev/null and b/core/template/img/poissons_dark.png differ diff --git a/core/template/img/poissons_light.png b/core/template/img/poissons_light.png new file mode 100644 index 0000000..6954f06 Binary files /dev/null and b/core/template/img/poissons_light.png differ diff --git a/core/template/img/sagittaire_dark.png b/core/template/img/sagittaire_dark.png new file mode 100644 index 0000000..7dff34c Binary files /dev/null and b/core/template/img/sagittaire_dark.png differ diff --git a/core/template/img/sagittaire_light.png b/core/template/img/sagittaire_light.png new file mode 100644 index 0000000..86bd312 Binary files /dev/null and b/core/template/img/sagittaire_light.png differ diff --git a/core/template/img/scorpion_dark.png b/core/template/img/scorpion_dark.png new file mode 100644 index 0000000..caf015a Binary files /dev/null and b/core/template/img/scorpion_dark.png differ diff --git a/core/template/img/scorpion_light.png b/core/template/img/scorpion_light.png new file mode 100644 index 0000000..4489f59 Binary files /dev/null and b/core/template/img/scorpion_light.png differ diff --git a/core/template/img/taureau_dark.png b/core/template/img/taureau_dark.png new file mode 100644 index 0000000..6fbaa6b Binary files /dev/null and b/core/template/img/taureau_dark.png differ diff --git a/core/template/img/taureau_light.png b/core/template/img/taureau_light.png new file mode 100644 index 0000000..9cd6317 Binary files /dev/null and b/core/template/img/taureau_light.png differ diff --git a/core/template/img/verseau_dark.png b/core/template/img/verseau_dark.png new file mode 100644 index 0000000..b135e60 Binary files /dev/null and b/core/template/img/verseau_dark.png differ diff --git a/core/template/img/verseau_light.png b/core/template/img/verseau_light.png new file mode 100644 index 0000000..9841916 Binary files /dev/null and b/core/template/img/verseau_light.png differ diff --git a/core/template/img/vierge_dark.png b/core/template/img/vierge_dark.png new file mode 100644 index 0000000..fda354c Binary files /dev/null and b/core/template/img/vierge_dark.png differ diff --git a/core/template/img/vierge_light.png b/core/template/img/vierge_light.png new file mode 100644 index 0000000..33fddd5 Binary files /dev/null and b/core/template/img/vierge_light.png differ diff --git a/core/template/mobile/horoscope.html b/core/template/mobile/horoscope.html deleted file mode 100644 index da64e5d..0000000 --- a/core/template/mobile/horoscope.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
- #name_display#
- #Clindoeil#
-
-
diff --git a/desktop/js/horoscope.js b/desktop/js/horoscope.js index 643114b..76556bb 100644 --- a/desktop/js/horoscope.js +++ b/desktop/js/horoscope.js @@ -1,4 +1,3 @@ - /* This file is part of Jeedom. * * Jeedom is free software: you can redistribute it and/or modify @@ -16,33 +15,61 @@ */ -$("#table_cmd").sortable({axis: "y", cursor: "move", items: ".cmd", placeholder: "ui-state-highlight", tolerance: "intersect", forcePlaceholderSize: true}); -/* - * Fonction pour l'ajout de commande, appellé automatiquement par plugin.template - */ +$("#table_cmd").sortable({ + axis: "y", + cursor: "move", + items: ".cmd", + placeholder: "ui-state-highlight", + tolerance: "intersect", + forcePlaceholderSize: true +}); + +$('.eqLogicAttr[data-l1key=configuration][data-l2key=signe]').on('change', function () { + if ($(this).value() != '') { + $('#img_device').attr("src", 'plugins/horoscope/core/config/img/' + $(this).value() + '.png'); + } else { + $('#img_device').attr("src", 'plugins/horoscope/plugin_info/horoscope_icon.png'); + } +}); + +/* Fonction pour l'ajout de commande, appellé automatiquement par plugin.template */ function addCmdToTable(_cmd) { if (!isset(_cmd)) { - var _cmd = {configuration: {}}; + console.log("add cmd:" + init(_cmd.id)) // ajouté pour debug + var _cmd = { + configuration: {} + }; } if (!isset(_cmd.configuration)) { _cmd.configuration = {}; } + + if (init(_cmd.logicalId) == 'refresh') { + return; + } + var tr = ''; tr += ''; - tr += ''; - tr += ''; + tr += ''; + tr += ''; + tr += ''; + tr += '
'; + tr += '
'; + tr += ''; + tr += '
'; + tr += '
'; tr += ''; tr += ''; - tr += '' + jeedom.cmd.availableType() + ''; - tr += ''; + tr += ' '; tr += ''; tr += ''; if (is_numeric(_cmd.id)) { - tr += ' '; - tr += ' {{Tester}}'; + tr += ' '; + tr += ' {{Tester}}'; } - tr += ''; tr += ''; + tr += ''; + tr += ''; tr += ''; $('#table_cmd tbody').append(tr); $('#table_cmd tbody tr:last').setValues(_cmd, '.cmdAttr'); @@ -50,4 +77,5 @@ function addCmdToTable(_cmd) { $('#table_cmd tbody tr:last .cmdAttr[data-l1key=type]').value(init(_cmd.type)); } jeedom.cmd.changeType($('#table_cmd tbody tr:last'), init(_cmd.subType)); -} + +} \ No newline at end of file diff --git a/desktop/modal/modal.horoscope.php b/desktop/modal/modal.horoscope.php deleted file mode 100644 index f10e707..0000000 --- a/desktop/modal/modal.horoscope.php +++ /dev/null @@ -1,25 +0,0 @@ -. -*/ - -if (!isConnect('admin')) { - throw new Exception('{{401 - Accès non autorisé}}'); -} -?> - -Exemple de modale - diff --git a/desktop/php/horoscope.php b/desktop/php/horoscope.php index 246d3ab..158ffd3 100644 --- a/desktop/php/horoscope.php +++ b/desktop/php/horoscope.php @@ -3,128 +3,182 @@ throw new Exception('{{401 - Accès non autorisé}}'); } $plugin = plugin::byId('horoscope'); -sendVarToJS('eqType', 'horoscope'); -$eqLogics = eqLogic::byType('horoscope'); +sendVarToJS('eqType', $plugin->getId()); +$eqLogics = eqLogic::byType($plugin->getId()); ?>
- - -
- {{Mes horoscopes}} - - {{Gestion}} +
+ {{Gestion}}
-
-
- -
-
{{Ajouter}}
+
+ +
+ {{Ajouter}}
- -
-
- -
-
{{Configuration}}
+
+
+ {{Configuration}}
- - {{Mes horoscopes}} + {{Mes Horoscopes}} +
-getIsEnable()) ? '' : jeedom::getConfiguration('eqLogic:style:noactive'); ?> -
-
- -
-
getHumanName(true, true) ?>
-
- + getIsEnable()) ? '' : 'disableCard'; + echo '
'; + if ($eqLogic->getConfiguration('signe') != '') { + echo ''; + } else { + echo ''; + } + echo '
'; + echo '' . $eqLogic->getHumanName(true, true) . ''; + echo '
'; + } + ?>
+ - - + \ No newline at end of file diff --git a/doc/de_DE/changelog.asciidoc b/doc/de_DE/changelog.asciidoc deleted file mode 100644 index ba2f7d2..0000000 --- a/doc/de_DE/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11. Juni 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versionen 1.0... 1.06: 18 Dezember 2016 - 26. September 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26. September 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19. Dezember 2016 --- -* Update des Widgets - - -Version 1.04: 18 Dezember 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Dezember 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18. Dezember 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18. Dezember 2016 --- -* Supporte les 12 signes du zodiaque. -* Erstveröffentlichung des Plugins \ No newline at end of file diff --git a/doc/de_DE/configuration.asciidoc b/doc/de_DE/configuration.asciidoc deleted file mode 100644 index c8fa1e5..0000000 --- a/doc/de_DE/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Plugin Konfiguration - -Der Konfigurationsteil des Plugins ermöglicht : --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/de_DE/faq.asciidoc b/doc/de_DE/faq.asciidoc deleted file mode 100644 index f27d320..0000000 --- a/doc/de_DE/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Stützt sich das Plugin auf APIs Dritter ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/de_DE/index.asciidoc b/doc/de_DE/index.asciidoc deleted file mode 100644 index 61a55bb..0000000 --- a/doc/de_DE/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Beschreibung -include::presentation.asciidoc[] - -''' -== Konfiguration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Änderungsprotokoll -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/de_DE/index.html b/doc/de_DE/index.html deleted file mode 100644 index c445ad6..0000000 --- a/doc/de_DE/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Beschreibung - - - - - - -
-
-

1. Beschreibung

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Konfiguration

-
-
-

2.1. Plugin Konfiguration

-
-

Der Konfigurationsteil des Plugins ermöglicht :

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Änderungsprotokoll -Version 1.1: 11. Juni 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versionen 1.0…​ 1.06: 18 Dezember 2016 - 26. September 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26. September 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19. Dezember 2016

-
-
-
-
-
    -
  • -

    Update des Widgets

    -
  • -
-
-
-

Version 1.04: 18 Dezember 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Dezember 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18. Dezember 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18. Dezember 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Erstveröffentlichung des Plugins

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/de_DE/presentation.asciidoc b/doc/de_DE/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/de_DE/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/doc/en_US/changelog.asciidoc b/doc/en_US/changelog.asciidoc deleted file mode 100644 index 6d62f51..0000000 --- a/doc/en_US/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin \ No newline at end of file diff --git a/doc/en_US/configuration.asciidoc b/doc/en_US/configuration.asciidoc deleted file mode 100644 index 6be3268..0000000 --- a/doc/en_US/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== The plugin configuration - -On the configuration page of the plugin --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/en_US/faq.asciidoc b/doc/en_US/faq.asciidoc deleted file mode 100644 index 29c48df..0000000 --- a/doc/en_US/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -. Is the plugin relies on third-party API? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/en_US/index.asciidoc b/doc/en_US/index.asciidoc deleted file mode 100644 index 780bf3b..0000000 --- a/doc/en_US/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/en_US/index.html b/doc/en_US/index.html deleted file mode 100644 index afc2d46..0000000 --- a/doc/en_US/index.html +++ /dev/null @@ -1,615 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. The plugin configuration

-
-

On the configuration page of the plugin

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
    -
  1. -

    Is the plugin relies on third-party API?

    -
  2. -
-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/en_US/presentation.asciidoc b/doc/en_US/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/en_US/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/doc/es_ES/changelog.asciidoc b/doc/es_ES/changelog.asciidoc deleted file mode 100644 index 6d62f51..0000000 --- a/doc/es_ES/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin \ No newline at end of file diff --git a/doc/es_ES/configuration.asciidoc b/doc/es_ES/configuration.asciidoc deleted file mode 100644 index d229afc..0000000 --- a/doc/es_ES/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Configuration du plugin - -La partie configuration du plugin permet: --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/es_ES/faq.asciidoc b/doc/es_ES/faq.asciidoc deleted file mode 100644 index d7d0526..0000000 --- a/doc/es_ES/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Est-ce que ce plugin s'appuie sur des API tiers ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/es_ES/index.asciidoc b/doc/es_ES/index.asciidoc deleted file mode 100644 index 780bf3b..0000000 --- a/doc/es_ES/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/es_ES/index.html b/doc/es_ES/index.html deleted file mode 100644 index c584982..0000000 --- a/doc/es_ES/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. Configuration du plugin

-
-

La partie configuration du plugin permet:

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/es_ES/presentation.asciidoc b/doc/es_ES/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/es_ES/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/doc/fr_FR/changelog.asciidoc b/doc/fr_FR/changelog.asciidoc deleted file mode 100644 index fc67fac..0000000 --- a/doc/fr_FR/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin diff --git a/doc/fr_FR/configuration.asciidoc b/doc/fr_FR/configuration.asciidoc deleted file mode 100644 index 152d65a..0000000 --- a/doc/fr_FR/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Configuration du plugin - -La partie configuration du plugin permet: --- -* de choisir la frequence d'actualisation de l'horoscope diff --git a/doc/fr_FR/faq.asciidoc b/doc/fr_FR/faq.asciidoc deleted file mode 100644 index 7d250ae..0000000 --- a/doc/fr_FR/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Est-ce que ce plugin s'appuie sur des API tiers ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- diff --git a/doc/fr_FR/index.asciidoc b/doc/fr_FR/index.asciidoc deleted file mode 100644 index b1c3d81..0000000 --- a/doc/fr_FR/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... diff --git a/doc/fr_FR/index.html b/doc/fr_FR/index.html deleted file mode 100644 index c584982..0000000 --- a/doc/fr_FR/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. Configuration du plugin

-
-

La partie configuration du plugin permet:

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/fr_FR/presentation.asciidoc b/doc/fr_FR/presentation.asciidoc deleted file mode 100644 index bfb030f..0000000 --- a/doc/fr_FR/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. diff --git a/doc/id_ID/changelog.asciidoc b/doc/id_ID/changelog.asciidoc deleted file mode 100644 index 6d62f51..0000000 --- a/doc/id_ID/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin \ No newline at end of file diff --git a/doc/id_ID/configuration.asciidoc b/doc/id_ID/configuration.asciidoc deleted file mode 100644 index d229afc..0000000 --- a/doc/id_ID/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Configuration du plugin - -La partie configuration du plugin permet: --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/id_ID/faq.asciidoc b/doc/id_ID/faq.asciidoc deleted file mode 100644 index d7d0526..0000000 --- a/doc/id_ID/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Est-ce que ce plugin s'appuie sur des API tiers ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/id_ID/index.asciidoc b/doc/id_ID/index.asciidoc deleted file mode 100644 index 780bf3b..0000000 --- a/doc/id_ID/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/id_ID/index.html b/doc/id_ID/index.html deleted file mode 100644 index c584982..0000000 --- a/doc/id_ID/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. Configuration du plugin

-
-

La partie configuration du plugin permet:

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/id_ID/presentation.asciidoc b/doc/id_ID/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/id_ID/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/doc/images/PNG/balance.png b/doc/images/PNG/balance.png deleted file mode 100644 index 5053d0c..0000000 Binary files a/doc/images/PNG/balance.png and /dev/null differ diff --git a/doc/images/PNG/belier.png b/doc/images/PNG/belier.png deleted file mode 100644 index 95fc3ea..0000000 Binary files a/doc/images/PNG/belier.png and /dev/null differ diff --git a/doc/images/PNG/cancer.png b/doc/images/PNG/cancer.png deleted file mode 100644 index eab1569..0000000 Binary files a/doc/images/PNG/cancer.png and /dev/null differ diff --git a/doc/images/PNG/capricorne.png b/doc/images/PNG/capricorne.png deleted file mode 100644 index 07a66fd..0000000 Binary files a/doc/images/PNG/capricorne.png and /dev/null differ diff --git a/doc/images/PNG/gemeaux.png b/doc/images/PNG/gemeaux.png deleted file mode 100644 index 79c85da..0000000 Binary files a/doc/images/PNG/gemeaux.png and /dev/null differ diff --git a/doc/images/PNG/lion.png b/doc/images/PNG/lion.png deleted file mode 100644 index 5c7699e..0000000 Binary files a/doc/images/PNG/lion.png and /dev/null differ diff --git a/doc/images/PNG/poissons.png b/doc/images/PNG/poissons.png deleted file mode 100644 index dc338ca..0000000 Binary files a/doc/images/PNG/poissons.png and /dev/null differ diff --git a/doc/images/PNG/sagittaire.png b/doc/images/PNG/sagittaire.png deleted file mode 100644 index b9c0109..0000000 Binary files a/doc/images/PNG/sagittaire.png and /dev/null differ diff --git a/doc/images/PNG/scorpion.png b/doc/images/PNG/scorpion.png deleted file mode 100644 index cfddff4..0000000 Binary files a/doc/images/PNG/scorpion.png and /dev/null differ diff --git a/doc/images/PNG/taureau.png b/doc/images/PNG/taureau.png deleted file mode 100644 index 2ceb0d1..0000000 Binary files a/doc/images/PNG/taureau.png and /dev/null differ diff --git a/doc/images/PNG/verseau.png b/doc/images/PNG/verseau.png deleted file mode 100644 index 85baad2..0000000 Binary files a/doc/images/PNG/verseau.png and /dev/null differ diff --git a/doc/images/PNG/vierge.png b/doc/images/PNG/vierge.png deleted file mode 100644 index 770aa8a..0000000 Binary files a/doc/images/PNG/vierge.png and /dev/null differ diff --git a/doc/images/horoscope_icon.png b/doc/images/horoscope_icon.png deleted file mode 100644 index af34673..0000000 Binary files a/doc/images/horoscope_icon.png and /dev/null differ diff --git a/doc/it_IT/changelog.asciidoc b/doc/it_IT/changelog.asciidoc deleted file mode 100644 index 6d62f51..0000000 --- a/doc/it_IT/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin \ No newline at end of file diff --git a/doc/it_IT/configuration.asciidoc b/doc/it_IT/configuration.asciidoc deleted file mode 100644 index d229afc..0000000 --- a/doc/it_IT/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Configuration du plugin - -La partie configuration du plugin permet: --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/it_IT/faq.asciidoc b/doc/it_IT/faq.asciidoc deleted file mode 100644 index d7d0526..0000000 --- a/doc/it_IT/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Est-ce que ce plugin s'appuie sur des API tiers ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/it_IT/index.asciidoc b/doc/it_IT/index.asciidoc deleted file mode 100644 index 780bf3b..0000000 --- a/doc/it_IT/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/it_IT/index.html b/doc/it_IT/index.html deleted file mode 100644 index c584982..0000000 --- a/doc/it_IT/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. Configuration du plugin

-
-

La partie configuration du plugin permet:

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/it_IT/presentation.asciidoc b/doc/it_IT/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/it_IT/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/doc/ru_RU/changelog.asciidoc b/doc/ru_RU/changelog.asciidoc deleted file mode 100644 index 6d62f51..0000000 --- a/doc/ru_RU/changelog.asciidoc +++ /dev/null @@ -1,40 +0,0 @@ -Version 1.1: 11 Juin 2017 --- -* Amélioration du parsing de l'horoscope depuis la source -* Ajout des phrases du jour pour chaque thème disponible -* Simplification et refactorisation du code source - -Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017 --- -* Version intiales du plugin. - - -Version 1.06: 26 Septembre 2017 --- -* •Mise à jour info.json (pour jeedom 3) - - -Version 1.05: 19 Decembre 2016 --- -* Mise à jour du widget - - -Version 1.04: 18 Decembre 2016 --- -* Mise à jour de l'horoscope apres chaque enregistrement de l'equipement - - -Version 1.03: 18 Decembre 2016 --- -* Suppression de la classe bootstrap - - -Version 1.02: 18 Decembre 2016 --- -* Actualisation de l'horoscope apres la creation de l'equipement - - -Version 1.0: 18 Decembre 2016 --- -* Supporte les 12 signes du zodiaque. -* Premiere publication du plugin \ No newline at end of file diff --git a/doc/ru_RU/configuration.asciidoc b/doc/ru_RU/configuration.asciidoc deleted file mode 100644 index d229afc..0000000 --- a/doc/ru_RU/configuration.asciidoc +++ /dev/null @@ -1,5 +0,0 @@ -=== Configuration du plugin - -La partie configuration du plugin permet: --- -* de choisir la frequence d'actualisation de l'horoscope \ No newline at end of file diff --git a/doc/ru_RU/faq.asciidoc b/doc/ru_RU/faq.asciidoc deleted file mode 100644 index d7d0526..0000000 --- a/doc/ru_RU/faq.asciidoc +++ /dev/null @@ -1,9 +0,0 @@ - -.Est-ce que ce plugin s'appuie sur des API tiers ? --- -Le plugin n'utilise que du PHP pour aller chercher les informations (après découpage) sur un site d'astrologie. --- -.Pourquoi est-il conseillé de régler la fréquence d'actualisation sur 5H du matin ? --- -Ne connaissant pas exactement l'heure d'actualisation du site internet, il est préférable de le faire tôt dans la matinée. --- \ No newline at end of file diff --git a/doc/ru_RU/index.asciidoc b/doc/ru_RU/index.asciidoc deleted file mode 100644 index 780bf3b..0000000 --- a/doc/ru_RU/index.asciidoc +++ /dev/null @@ -1,16 +0,0 @@ -== Description -include::presentation.asciidoc[] - -''' -== Configuration -include::configuration.asciidoc[] - -''' -== FAQ -include::faq.asciidoc[] - -''' -== Change log -include::changelog.asciidoc[] - -... \ No newline at end of file diff --git a/doc/ru_RU/index.html b/doc/ru_RU/index.html deleted file mode 100644 index c584982..0000000 --- a/doc/ru_RU/index.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - -Description - - - - - - -
-
-

1. Description

-
-
-

1.1. Horoscope

-
-

Plugin permettant de récupérer son horoscope tous les jours.

-
-
-

Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,…​ -Une phrase symbolique est également disponible.

-
-
-

Ceci peut-être très pratique afin de donner l’horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours.

-
-
-
-
-
-
-

2. Configuration

-
-
-

2.1. Configuration du plugin

-
-

La partie configuration du plugin permet:

-
-
-
-
-
    -
  • -

    de choisir la frequence d’actualisation de l’horoscope

    -
  • -
-
-
-
-

== FAQ

-
-
-
-
-

Le plugin n’utilise que du PHP pour aller chercher les informations (après découpage) sur un site d’astrologie.

-
-
-
- -
-
-
-

Ne connaissant pas exactement l’heure d’actualisation du site internet, il est préférable de le faire tôt dans la matinée.

-
-
-
-
-
-

== Change log -Version 1.1: 11 Juin 2017

-
-
-
-
-
    -
  • -

    Amélioration du parsing de l’horoscope depuis la source

    -
  • -
  • -

    Ajout des phrases du jour pour chaque thème disponible

    -
  • -
  • -

    Simplification et refactorisation du code source

    -
  • -
-
-
-

Versions 1.0 …​ 1.06 : 18 Decembre 2016 - 26 Septembre 2017

-
-
-
-
-
    -
  • -

    Version intiales du plugin.

    -
  • -
-
-
-

Version 1.06: 26 Septembre 2017

-
-
-
-
-
    -
  • -

    •Mise à jour info.json (pour jeedom 3)

    -
  • -
-
-
-

Version 1.05: 19 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour du widget

    -
  • -
-
-
-

Version 1.04: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Mise à jour de l’horoscope apres chaque enregistrement de l’equipement

    -
  • -
-
-
-

Version 1.03: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Suppression de la classe bootstrap

    -
  • -
-
-
-

Version 1.02: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Actualisation de l’horoscope apres la creation de l’equipement

    -
  • -
-
-
-

Version 1.0: 18 Decembre 2016

-
-
-
-
-
    -
  • -

    Supporte les 12 signes du zodiaque.

    -
  • -
  • -

    Premiere publication du plugin

    -
  • -
-
-
-

…​

-
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/doc/ru_RU/presentation.asciidoc b/doc/ru_RU/presentation.asciidoc deleted file mode 100644 index 095f21b..0000000 --- a/doc/ru_RU/presentation.asciidoc +++ /dev/null @@ -1,8 +0,0 @@ -=== Horoscope - -Plugin permettant de récupérer son horoscope tous les jours. - -Plusieurs phrases sont disponibles chaque jours en fonction de thèmes comme Amour,Argent,Famille,Santé,... -Une phrase symbolique est également disponible. - -Ceci peut-être très pratique afin de donner l'horoscope du jour à une personne (via une caméra Netatmo par exemple) ou par TTS tous les jours. \ No newline at end of file diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..bedf347 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,248 @@ + + + + + + + + + Page 404 - Jeedom + + + + +
+ +

Oups ! Pas le bon lien.Erreur 404

+

Vous allez être redirigé automatiquement dans quelques instants

+
+ + + + diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..91ceacd --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'github-pages', group: :jekyll_plugins \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..90b013b --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,38 @@ +--- +langs: [fr_FR,en_US,es_ES] +baseurl: "/" +url: "/" # the base hostname & protocol for your site +sass: + sass_dir: assets/css + style: compressed +markdown: kramdown +permalink: /404.html +kramdown: + input: GFM + hard_wrap: false +highlighter: rouge +gems: +- jekyll-paginate +- jekyll-seo-tag +exclude: +- vendor +plugins: +- jekyll-paginate +- jekyll-seo-tag +title: "Documentation Jeedom" +description: "Ceci est la documentation du plugin horoscope, lié à la solution domotique Jeedom." +author: "Anakin" +image: https://doc.jeedom.com/images/logo.png +twitter: + username: Jeedom_domotic +social: + name: Jeedom + links: + - https://twitter.com/Jeedom_domotic + - https://www.facebook.com/Jeedom-249936178537210/ + - https://github.com/jeedom +community: https://community.jeedom.com +market: https://market.jeedom.com +blog: https://blog.jeedom.com +doc: https://doc.jeedom.com +img: "images" diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..e997bc1 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + +
+
+
+
+ {% if site.langs.size >= 2 %} +
+ language +
+
+ +
+ {% endif %} +
+
+
+
+
+ keyboard_arrow_up +
+
+
+ language +
+
+ +
+
+
+
+ +
+ {{content}} +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/docs/assets/css/components/_buttons.scss b/docs/assets/css/components/_buttons.scss new file mode 100644 index 0000000..cb34879 --- /dev/null +++ b/docs/assets/css/components/_buttons.scss @@ -0,0 +1,197 @@ +// shared styles +.btn, +.btn-flat { + border: $button-border; + border-radius: $button-radius; + display: inline-block; + height: $button-height; + line-height: $button-height; + outline: 0; + padding: $button-padding; + text-transform: uppercase; + vertical-align: middle; + // Gets rid of tap active state + -webkit-tap-highlight-color: transparent; +} + +// Disabled shared style +.btn.disabled, +.btn-floating.disabled, +.btn-large.disabled, +.btn:disabled +.btn-large:disabled, +.btn-floating:disabled { + background-color: $button-disabled-background !important; + box-shadow: none; + color: $button-disabled-color !important; + cursor: default; + + * { + pointer-events: none; + } + + &:hover { + background-color: $button-disabled-background !important; + color: $button-disabled-color !important; + } +} + +// Shared icon styles +.btn, +.btn-floating, +.btn-large, +.btn-flat { + i { + font-size: $button-font-size; + line-height: inherit; + } +} + +// Raised Button +.btn { + text-decoration: none; + color: $button-raised-color; + background-color: $button-raised-background; + text-align: center; + letter-spacing: .5px; + @extend .z-depth-1; + transition: .2s ease-out; + cursor: pointer; + + &:hover { + background-color: $button-raised-background-hover; + @extend .z-depth-1-half; + } +} + +// Floating button +.btn-floating { + display: inline-block; + color: $button-floating-color; + position: relative; + overflow: hidden; + z-index: 1; + width: $button-floating-size; + height: $button-floating-size; + line-height: $button-floating-size; + padding: 0; + background-color: $button-floating-background; + border-radius: $button-floating-radius; + @extend .z-depth-1; + transition: .3s; + cursor: pointer; + vertical-align: middle; + + i { + width: inherit; + display: inline-block; + text-align: center; + color: $button-floating-color; + font-size: $button-large-icon-font-size; + line-height: $button-floating-size; + } + + &:hover { + background-color: $button-floating-background-hover; + @extend .z-depth-1-half; + } + + &:before { + border-radius: 0; + } + + &.btn-large { + width: $button-floating-large-size; + height: $button-floating-large-size; + i { + line-height: $button-floating-large-size; + } + } +} + +// button fix +button.btn-floating { + border: $button-border; +} + +// Fixed Action Button +.fixed-action-btn { + &.active { + ul { + visibility: visible; + } + } + + &.horizontal { + padding: 0 0 0 15px; + + ul { + text-align: right; + right: 64px; + top: 50%; + transform: translateY(-50%); + height: 100%; + left: auto; + width: 500px; /*width 100% only goes to width of button container */ + + li { + display: inline-block; + margin: 15px 15px 0 0; + } + } + } + + position: fixed; + right: 23px; + bottom: 23px; + padding-top: 15px; + margin-bottom: 0; + z-index: 998; + + ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden; + + li { + margin-bottom: 15px; + } + + a.btn-floating { + opacity: 0; + } + } +} + +// Flat button +.btn-flat { + box-shadow: none; + background-color: transparent; + color: $button-flat-color; + cursor: pointer; + + &.disabled { + color: $button-flat-disabled-color; + cursor: default; + } +} + +// Large button +.btn-large { + @extend .btn; + height: $button-large-height; + line-height: $button-large-height; + + i { + font-size: $button-large-icon-font-size; + } +} + +// Block button +.btn-block { + display: block; +} diff --git a/docs/assets/css/components/_cards.scss b/docs/assets/css/components/_cards.scss new file mode 100644 index 0000000..8f5be29 --- /dev/null +++ b/docs/assets/css/components/_cards.scss @@ -0,0 +1,138 @@ + + +.card-panel { + transition: box-shadow .25s; + padding: $card-padding; + margin: $element-top-margin 0 $element-bottom-margin 0; + border-radius: 2px; + @extend .z-depth-1; + background-color: $card-bg-color; +} + +.card { + position: relative; + margin: $element-top-margin 0 $element-bottom-margin 0; + background-color: $card-bg-color; + transition: box-shadow .25s; + border-radius: 2px; + @extend .z-depth-1; + + + .card-title { + font-size: 24px; + font-weight: 300; + &.activator { + cursor: pointer; + } + } + + // Card Sizes + &.small, &.medium, &.large { + position: relative; + + .card-image { + max-height: 60%; + overflow: hidden; + } + .card-content { + max-height: 40%; + overflow: hidden; + } + .card-action { + position: absolute; + bottom: 0; + left: 0; + right: 0; + } + } + + &.small { + height: 300px; + } + + &.medium { + height: 400px; + } + + &.large { + height: 500px; + } + + + .card-image { + position: relative; + + // Image background for content + img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; + } + + .card-title { + color: $card-bg-color; + position: absolute; + bottom: 0; + left: 0; + padding: $card-padding; + } + + } + + .card-content { + padding: $card-padding; + border-radius: 0 0 2px 2px; + + p { + margin: 0; + color: inherit; + } + .card-title { + line-height: 48px; + } + } + + .card-action { + position: relative; + background-color: inherit; + border-top: 1px solid rgba(160,160,160,.2); + padding: $card-padding; + z-index: 2; + + a:not(.btn):not(.btn-large):not(.btn-floating) { + color: $card-link-color; + margin-right: $card-padding; + transition: color .3s ease; + text-transform: uppercase; + + &:hover { color: $card-link-color-light; } + } + + & + .card-reveal { + z-index: 1; + padding-bottom: 64px; + } + } + + .card-reveal { + padding: $card-padding; + position: absolute; + background-color: $card-bg-color; + width: 100%; + overflow-y: auto; + top: 100%; + height: 100%; + z-index: 3; + display: none; + + .card-title { + cursor: pointer; + display: block; + } + } +} diff --git a/docs/assets/css/components/_carousel.scss b/docs/assets/css/components/_carousel.scss new file mode 100644 index 0000000..a5a8acc --- /dev/null +++ b/docs/assets/css/components/_carousel.scss @@ -0,0 +1,34 @@ +.carousel { + overflow: hidden; + position: relative; + width: 100%; + height: 400px; + perspective: 500px; + transform-style: preserve-3d; + transform-origin: 0% 50%; + + .carousel-item { + width: 200px; + position: absolute; + top: 0; + left: 0; + + img { + width: 100%; + } + } + + &.carousel-slider { + top: 0; + left: 0; + height: 0; + + .carousel-item { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + } + } +} diff --git a/docs/assets/css/components/_chips.scss b/docs/assets/css/components/_chips.scss new file mode 100644 index 0000000..316cee6 --- /dev/null +++ b/docs/assets/css/components/_chips.scss @@ -0,0 +1,27 @@ +.chip { + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0,0,0,.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: $chip-bg-color; + + img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50%; + } + + i.material-icons { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; + } +} \ No newline at end of file diff --git a/docs/assets/css/components/_collapsible.scss b/docs/assets/css/components/_collapsible.scss new file mode 100644 index 0000000..019f811 --- /dev/null +++ b/docs/assets/css/components/_collapsible.scss @@ -0,0 +1,90 @@ +.collapsible { + border-top: 1px solid $collapsible-border-color; + border-right: 1px solid $collapsible-border-color; + border-left: 1px solid $collapsible-border-color; + margin: $element-top-margin 0 $element-bottom-margin 0; + @extend .z-depth-1; +} + +.collapsible-header { + display: block; + cursor: pointer; + min-height: $collapsible-height; + line-height: $collapsible-height; + padding: 0 1rem; + background-color: $collapsible-header-color; + border-bottom: 1px solid $collapsible-border-color; + + i { + width: 2rem; + font-size: 1.6rem; + line-height: $collapsible-height; + display: block; + float: left; + text-align: center; + margin-right: 1rem; + } +} + +.collapsible-body { + display: none; + border-bottom: 1px solid $collapsible-border-color; + box-sizing: border-box; + + p { + margin: 0; + padding: 2rem; + } +} + +// sideNav collapsible styling +.side-nav, +.side-nav.fixed { + + .collapsible { + border: none; + box-shadow: none; + + li { padding: 0; } + } + + .collapsible-header { + background-color: transparent; + border: none; + line-height: inherit; + height: inherit; + padding: 0 $sidenav-padding-right; + + &:hover { background-color: rgba(0,0,0,.05); } + i { line-height: inherit; } + } + + .collapsible-body { + border: 0; + background-color: $collapsible-header-color; + + li a { + padding: 0 (7.5px + $sidenav-padding-right) + 0 (15px + $sidenav-padding-right); + } + } + +} + +// Popout Collapsible + +.collapsible.popout { + border: none; + box-shadow: none; + > li { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + // transform: scaleX(.92); + margin: 0 24px; + transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940); + } + > li.active { + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + margin: 16px 0; + // transform: scaleX(1); + } +} diff --git a/docs/assets/css/components/_color.scss b/docs/assets/css/components/_color.scss new file mode 100644 index 0000000..8f6996c --- /dev/null +++ b/docs/assets/css/components/_color.scss @@ -0,0 +1,412 @@ +// Utility Color Classes + +//.success { +// +//} + +// Google Color Palette defined: http://www.google.com/design/spec/style/color.html + + +$materialize-red: ( + "base": #e51c23, + "lighten-5": #fdeaeb, + "lighten-4": #f8c1c3, + "lighten-3": #f3989b, + "lighten-2": #ee6e73, + "lighten-1": #ea454b, + "darken-1": #d0181e, + "darken-2": #b9151b, + "darken-3": #a21318, + "darken-4": #8b1014, +); + +$red: ( + "base": #F44336, + "lighten-5": #FFEBEE, + "lighten-4": #FFCDD2, + "lighten-3": #EF9A9A, + "lighten-2": #E57373, + "lighten-1": #EF5350, + "darken-1": #E53935, + "darken-2": #D32F2F, + "darken-3": #C62828, + "darken-4": #B71C1C, + "accent-1": #FF8A80, + "accent-2": #FF5252, + "accent-3": #FF1744, + "accent-4": #D50000 +); + +$pink: ( + "base": #e91e63, + "lighten-5": #fce4ec, + "lighten-4": #f8bbd0, + "lighten-3": #f48fb1, + "lighten-2": #f06292, + "lighten-1": #ec407a, + "darken-1": #d81b60, + "darken-2": #c2185b, + "darken-3": #ad1457, + "darken-4": #880e4f, + "accent-1": #ff80ab, + "accent-2": #ff4081, + "accent-3": #f50057, + "accent-4": #c51162 +); + +$purple: ( + "base": #9c27b0, + "lighten-5": #f3e5f5, + "lighten-4": #e1bee7, + "lighten-3": #ce93d8, + "lighten-2": #ba68c8, + "lighten-1": #ab47bc, + "darken-1": #8e24aa, + "darken-2": #7b1fa2, + "darken-3": #6a1b9a, + "darken-4": #4a148c, + "accent-1": #ea80fc, + "accent-2": #e040fb, + "accent-3": #d500f9, + "accent-4": #aa00ff +); + +$deep-purple: ( + "base": #673ab7, + "lighten-5": #ede7f6, + "lighten-4": #d1c4e9, + "lighten-3": #b39ddb, + "lighten-2": #9575cd, + "lighten-1": #7e57c2, + "darken-1": #5e35b1, + "darken-2": #512da8, + "darken-3": #4527a0, + "darken-4": #311b92, + "accent-1": #b388ff, + "accent-2": #7c4dff, + "accent-3": #651fff, + "accent-4": #6200ea +); + +$indigo: ( + "base": #3f51b5, + "lighten-5": #e8eaf6, + "lighten-4": #c5cae9, + "lighten-3": #9fa8da, + "lighten-2": #7986cb, + "lighten-1": #5c6bc0, + "darken-1": #3949ab, + "darken-2": #303f9f, + "darken-3": #283593, + "darken-4": #1a237e, + "accent-1": #8c9eff, + "accent-2": #536dfe, + "accent-3": #3d5afe, + "accent-4": #304ffe +); + +$blue: ( + "base": #2196F3, + "lighten-5": #E3F2FD, + "lighten-4": #BBDEFB, + "lighten-3": #90CAF9, + "lighten-2": #64B5F6, + "lighten-1": #42A5F5, + "darken-1": #1E88E5, + "darken-2": #1976D2, + "darken-3": #1565C0, + "darken-4": #0D47A1, + "accent-1": #82B1FF, + "accent-2": #448AFF, + "accent-3": #2979FF, + "accent-4": #2962FF +); + +$light-blue: ( + "base": #03a9f4, + "lighten-5": #e1f5fe, + "lighten-4": #b3e5fc, + "lighten-3": #81d4fa, + "lighten-2": #4fc3f7, + "lighten-1": #29b6f6, + "darken-1": #039be5, + "darken-2": #0288d1, + "darken-3": #0277bd, + "darken-4": #01579b, + "accent-1": #80d8ff, + "accent-2": #40c4ff, + "accent-3": #00b0ff, + "accent-4": #0091ea +); + +$cyan: ( + "base": #00bcd4, + "lighten-5": #e0f7fa, + "lighten-4": #b2ebf2, + "lighten-3": #80deea, + "lighten-2": #4dd0e1, + "lighten-1": #26c6da, + "darken-1": #00acc1, + "darken-2": #0097a7, + "darken-3": #00838f, + "darken-4": #006064, + "accent-1": #84ffff, + "accent-2": #18ffff, + "accent-3": #00e5ff, + "accent-4": #00b8d4 +); + +$teal: ( + "base": #009688, + "lighten-5": #e0f2f1, + "lighten-4": #b2dfdb, + "lighten-3": #80cbc4, + "lighten-2": #4db6ac, + "lighten-1": #26a69a, + "darken-1": #00897b, + "darken-2": #00796b, + "darken-3": #00695c, + "darken-4": #004d40, + "accent-1": #a7ffeb, + "accent-2": #64ffda, + "accent-3": #1de9b6, + "accent-4": #00bfa5 +); + +$green: ( + "base": #4CAF50, + "lighten-5": #E8F5E9, + "lighten-4": #C8E6C9, + "lighten-3": #A5D6A7, + "lighten-2": #81C784, + "lighten-1": #66BB6A, + "darken-1": #43A047, + "darken-2": #388E3C, + "darken-3": #2E7D32, + "darken-4": #1B5E20, + "accent-1": #B9F6CA, + "accent-2": #69F0AE, + "accent-3": #00E676, + "accent-4": #00C853 +); + +$light-green: ( + "base": #8bc34a, + "lighten-5": #f1f8e9, + "lighten-4": #dcedc8, + "lighten-3": #c5e1a5, + "lighten-2": #aed581, + "lighten-1": #9ccc65, + "darken-1": #7cb342, + "darken-2": #689f38, + "darken-3": #558b2f, + "darken-4": #33691e, + "accent-1": #ccff90, + "accent-2": #b2ff59, + "accent-3": #76ff03, + "accent-4": #64dd17 +); + +$lime: ( + "base": #cddc39, + "lighten-5": #f9fbe7, + "lighten-4": #f0f4c3, + "lighten-3": #e6ee9c, + "lighten-2": #dce775, + "lighten-1": #d4e157, + "darken-1": #c0ca33, + "darken-2": #afb42b, + "darken-3": #9e9d24, + "darken-4": #827717, + "accent-1": #f4ff81, + "accent-2": #eeff41, + "accent-3": #c6ff00, + "accent-4": #aeea00 +); + +$yellow: ( + "base": #ffeb3b, + "lighten-5": #fffde7, + "lighten-4": #fff9c4, + "lighten-3": #fff59d, + "lighten-2": #fff176, + "lighten-1": #ffee58, + "darken-1": #fdd835, + "darken-2": #fbc02d, + "darken-3": #f9a825, + "darken-4": #f57f17, + "accent-1": #ffff8d, + "accent-2": #ffff00, + "accent-3": #ffea00, + "accent-4": #ffd600 +); + +$amber: ( + "base": #ffc107, + "lighten-5": #fff8e1, + "lighten-4": #ffecb3, + "lighten-3": #ffe082, + "lighten-2": #ffd54f, + "lighten-1": #ffca28, + "darken-1": #ffb300, + "darken-2": #ffa000, + "darken-3": #ff8f00, + "darken-4": #ff6f00, + "accent-1": #ffe57f, + "accent-2": #ffd740, + "accent-3": #ffc400, + "accent-4": #ffab00 +); + +$orange: ( + "base": #ff9800, + "lighten-5": #fff3e0, + "lighten-4": #ffe0b2, + "lighten-3": #ffcc80, + "lighten-2": #ffb74d, + "lighten-1": #ffa726, + "darken-1": #fb8c00, + "darken-2": #f57c00, + "darken-3": #ef6c00, + "darken-4": #e65100, + "accent-1": #ffd180, + "accent-2": #ffab40, + "accent-3": #ff9100, + "accent-4": #ff6d00 +); + +$deep-orange: ( + "base": #ff5722, + "lighten-5": #fbe9e7, + "lighten-4": #ffccbc, + "lighten-3": #ffab91, + "lighten-2": #ff8a65, + "lighten-1": #ff7043, + "darken-1": #f4511e, + "darken-2": #e64a19, + "darken-3": #d84315, + "darken-4": #bf360c, + "accent-1": #ff9e80, + "accent-2": #ff6e40, + "accent-3": #ff3d00, + "accent-4": #dd2c00 +); + +$brown: ( + "base": #795548, + "lighten-5": #efebe9, + "lighten-4": #d7ccc8, + "lighten-3": #bcaaa4, + "lighten-2": #a1887f, + "lighten-1": #8d6e63, + "darken-1": #6d4c41, + "darken-2": #5d4037, + "darken-3": #4e342e, + "darken-4": #3e2723 +); + +$blue-grey: ( + "base": #607d8b, + "lighten-5": #eceff1, + "lighten-4": #cfd8dc, + "lighten-3": #b0bec5, + "lighten-2": #90a4ae, + "lighten-1": #78909c, + "darken-1": #546e7a, + "darken-2": #455a64, + "darken-3": #37474f, + "darken-4": #263238 +); + +$grey: ( + "base": #9e9e9e, + "lighten-5": #fafafa, + "lighten-4": #f5f5f5, + "lighten-3": #eeeeee, + "lighten-2": #e0e0e0, + "lighten-1": #bdbdbd, + "darken-1": #757575, + "darken-2": #616161, + "darken-3": #424242, + "darken-4": #212121 +); + +$shades: ( + "black": #000000, + "white": #FFFFFF, + "transparent": transparent +); + +$colors: ( + "materialize-red": $materialize-red, + "red": $red, + "pink": $pink, + "purple": $purple, + "deep-purple": $deep-purple, + "indigo": $indigo, + "blue": $blue, + "light-blue": $light-blue, + "cyan": $cyan, + "teal": $teal, + "green": $green, + "light-green": $light-green, + "lime": $lime, + "yellow": $yellow, + "amber": $amber, + "orange": $orange, + "deep-orange": $deep-orange, + "brown": $brown, + "blue-grey": $blue-grey, + "grey": $grey, + "shades": $shades +); + + +// Color Classes + +@each $color_name, $color in $colors { + @each $color_type, $color_value in $color { + @if $color_type == "base" { + .#{$color_name} { + background-color: $color_value !important; + } + .#{$color_name}-text { + color: $color_value !important; + } + } + @else { + .#{$color_name}.#{$color_type} { + background-color: $color_value !important; + } + .#{$color_name}-text.text-#{$color_type} { + color: $color_value !important; + } + } + } +} + +// Shade classes +@each $color, $color_value in $shades { + .#{$color} { + background-color: $color_value !important; + } + .#{$color}-text { + color: $color_value !important; + } +} + + +// usage: color("name_of_color", "type_of_color") +// to avoid to repeating map-get($colors, ...) + +@function color($color, $type) { + @if map-has-key($colors, $color) { + $curr_color: map-get($colors, $color); + @if map-has-key($curr_color, $type) { + @return map-get($curr_color, $type); + } + } + @warn "Unknown `#{name}` in $colors."; + @return null; +} + diff --git a/docs/assets/css/components/_dropdown.scss b/docs/assets/css/components/_dropdown.scss new file mode 100644 index 0000000..71ab9f5 --- /dev/null +++ b/docs/assets/css/components/_dropdown.scss @@ -0,0 +1,57 @@ +.dropdown-content { + @extend .z-depth-1; + background-color: $dropdown-bg-color; + margin: 0; + display: none; + min-width: 100px; + max-height: 650px; + overflow-y: auto; + opacity: 0; + position: absolute; + z-index: 999; + will-change: width, height; + + li { + clear: both; + color: $off-black; + cursor: pointer; + min-height: $dropdown-item-height; + line-height: 1.5rem; + width: 100%; + text-align: left; + text-transform: none; + + &:hover, &.active, &.selected { + background-color: $dropdown-hover-bg-color; + } + + &.active.selected { + background-color: darken($dropdown-hover-bg-color, 5%); + } + + &.divider { + min-height: 0; + height: 1px; + } + + & > a, & > span { + font-size: 16px; + color: $dropdown-color; + display: block; + line-height: 22px; + padding: (($dropdown-item-height - 22) / 2) 16px; + } + + & > span > label { + top: 1px; + left: 3px; + height: 18px; + } + + // Icon alignment override + & > a > i { + height: inherit; + line-height: inherit; + } + } +} diff --git a/docs/assets/css/components/_global.scss b/docs/assets/css/components/_global.scss new file mode 100644 index 0000000..f4eea30 --- /dev/null +++ b/docs/assets/css/components/_global.scss @@ -0,0 +1,772 @@ +//Default styles + +html { + box-sizing: border-box; +} +*, *:before, *:after { + box-sizing: inherit; +} + +body { + // display: flex; + // min-height: 100vh; + // flex-direction: column; +} + +main { + // flex: 1 0 auto; +} + +ul { + &.browser-default { + list-style-type: initial; + } + + list-style-type: none; +} + +a { + color: $link-color; + text-decoration: none; + + // Gets rid of tap active state + -webkit-tap-highlight-color: transparent; +} + + +// Positioning +.valign-wrapper { + display: flex; + align-items: center; + + .valign { + display: block; + } +} + + +ul { + padding: 0; + li { + list-style-type: none; + } +} + +// classic clearfix +.clearfix { + clear: both; +} + + +// Z-levels +.z-depth-0 { + box-shadow: none !important; +} +.z-depth-1{ + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); +} +.z-depth-1-half{ + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); +} +.z-depth-2{ + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} +.z-depth-3{ + box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); +} +.z-depth-4{ + box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); +} +.z-depth-5{ + box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); +} + +.hoverable { + transition: box-shadow .25s; + box-shadow: 0; +} + +.hoverable:hover { + transition: box-shadow .25s; + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +// Dividers + +.divider { + height: 1px; + overflow: hidden; + background-color: color("grey", "lighten-2"); +} + + +// Blockquote + +blockquote { + margin: 20px 0; + padding-left: 1.5rem; + border-left: 5px solid $primary-color; +} + +// Icon Styles + +i { + line-height: inherit; + + &.left { + float: left; + margin-right: 15px; + } + &.right { + float: right; + margin-left: 15px; + } + &.tiny { + font-size: 1rem; + } + &.small { + font-size: 2rem; + } + &.medium { + font-size: 4rem; + } + &.large { + font-size: 6rem; + } +} + +// Images +img.responsive-img, +video.responsive-video { + max-width: 100%; + height: auto; +} + + +// Pagination + +.pagination { + + li { + display: inline-block; + font-size: 1.2rem; + padding: 0 10px; + line-height: 30px; + border-radius: 2px; + text-align: center; + + a { color: #444; } + + &.active a { color: #fff; } + + &.active { background-color: $primary-color; } + + &.disabled a { + cursor: default; + color: #999; + } + + i { + font-size: 2.2rem; + vertical-align: middle; + } + } + + + li.pages ul li { + display: inline-block; + float: none; + } +} +@media #{$medium-and-down} { + .pagination { + width: 100%; + + li.prev, + li.next { + width: 10%; + } + + li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap; + } + } +} + +// Breadcrumbs +.breadcrumb { + font-size: 18px; + color: rgba(255,255,255, .7); + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: inline-block; + float: left; + font-size: 24px; + } + + &:before { + content: '\E5CC'; + color: rgba(255,255,255, .7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased; + } + + &:first-child:before { + display: none; + } + + &:last-child { + color: #fff; + } +} + + +// Parallax +.parallax-container { + position: relative; + overflow: hidden; + height: 500px; +} + +.parallax { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + + img { + display: none; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + transform: translateX(-50%); + } +} + +// Pushpin +.pin-top, .pin-bottom { + position: relative; +} +.pinned { + position: fixed !important; +} + +/********************* + Transition Classes +**********************/ + +ul.staggered-list li { + opacity: 0; +} + +.fade-in { + opacity: 0; + transform-origin: 0 50%; +} + + +/********************* + Media Query Classes +**********************/ +.hide-on-small-only, .hide-on-small-and-down { + @media #{$small-and-down} { + display: none !important; + } +} +.hide-on-med-and-down { + @media #{$medium-and-down} { + display: none !important; + } +} +.hide-on-med-and-up { + @media #{$medium-and-up} { + display: none !important; + } +} +.hide-on-med-only { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: none !important; + } +} +.hide-on-large-only { + @media #{$large-and-up} { + display: none !important; + } +} +.show-on-large { + @media #{$large-and-up} { + display: block !important; + } +} +.show-on-medium { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: block !important; + } +} +.show-on-small { + @media #{$small-and-down} { + display: block !important; + } +} +.show-on-medium-and-up { + @media #{$medium-and-up} { + display: block !important; + } +} +.show-on-medium-and-down { + @media #{$medium-and-down} { + display: block !important; + } +} + + +// Center text on mobile +.center-on-small-only { + @media #{$small-and-down} { + text-align: center; + } +} + +// Footer +footer.page-footer { + margin-top: 20px; + padding-top: 20px; + background-color: $footer-bg-color; + + .footer-copyright { + overflow: hidden; + height: 50px; + line-height: 50px; + color: rgba(255,255,255,.8); + background-color: rgba(51,51,51,.08); + @extend .light; + } +} + +// Tables +table, th, td { + border: none; +} + +table { + width:100%; + display: table; + + &.bordered > thead > tr, + &.bordered > tbody > tr { + border-bottom: 1px solid $table-border-color; + } + + &.striped > tbody { + > tr:nth-child(odd) { + background-color: $table-striped-color; + } + + > tr > td { + border-radius: 0; + } + } + + &.highlight > tbody > tr { + transition: background-color .25s ease; + &:hover { + background-color: $table-striped-color; + } + } + + &.centered { + thead tr th, tbody tr td { + text-align: center; + } + } + +} + +thead { + border-bottom: 1px solid $table-border-color; +} + +td, th{ + padding: 15px 5px; + display: table-cell; + text-align: left; + vertical-align: middle; + border-radius: 2px; +} + +// Responsive Table +@media #{$medium-and-down} { + + table.responsive-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + display: block; + position: relative; + + td:empty:before { + content: '\00a0'; + } + + th, + td { + margin: 0; + vertical-align: top; + } + + th { text-align: left; } + thead { + display: block; + float: left; + + tr { + display: block; + padding: 0 10px 0 0; + + th::before { + content: "\00a0"; + } + } + } + tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap; + + tr { + display: inline-block; + vertical-align: top; + } + } + th { + display: block; + text-align: right; + } + td { + display: block; + min-height: 1.25em; + text-align: left; + } + tr { padding: 0 10px; } + + /* sort out borders */ + thead { + border: 0; + border-right: 1px solid $table-border-color; + } + + &.bordered { + th { border-bottom: 0; border-left: 0; } + td { border-left: 0; border-right: 0; border-bottom: 0; } + tr { border: 0; } + tbody tr { border-right: 1px solid $table-border-color; } + } + + } + +} + + +// Collections +.collection { + margin: $element-top-margin 0 $element-bottom-margin 0; + border: 1px solid $collection-border-color; + border-radius: 2px; + overflow: hidden; + position: relative; + + .collection-item { + background-color: $collection-bg-color; + line-height: 1.5rem; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid $collection-border-color; + + // Avatar Collection + &.avatar { + min-height: 84px; + padding-left: 72px; + position: relative; + + .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle; + } + i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; + text-align: center; + } + + + .title { + font-size: 16px; + } + + p { + margin: 0; + } + + .secondary-content { + position: absolute; + top: 16px; + right: 16px; + } + + } + + + &:last-child { + border-bottom: none; + } + + &.active { + background-color: $collection-active-bg-color; + color: $collection-active-color; + + .secondary-content { + color: #fff; + } + } + } + a.collection-item{ + display: block; + transition: .25s; + color: $collection-link-color; + &:not(.active) { + &:hover { + background-color: $collection-hover-bg-color; + } + } + } + + &.with-header { + .collection-header { + background-color: $collection-bg-color; + border-bottom: 1px solid $collection-border-color; + padding: 10px 20px; + } + .collection-item { + padding-left: 30px; + } + .collection-item.avatar { + padding-left: 72px; + } + } + +} +// Made less specific to allow easier overriding +.secondary-content { + float: right; + color: $secondary-color; +} +.collapsible .collection { + margin: 0; + border: none; +} + + + +// Badges +span.badge { + min-width: 3rem; + padding: 0 6px; + text-align: center; + font-size: 1rem; + line-height: inherit; + color: color('grey', 'darken-1'); + position: absolute; + right: 15px; + box-sizing: border-box; + + &.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: $badge-bg-color; + border-radius: 2px; + } + &.new:after { + content: " new"; + } +} +nav ul a span.badge { + position: static; + margin-left: 4px; + line-height: 0; +} + +// Responsive Videos +.video-container { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + + iframe, object, embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +// Progress Bar +.progress { + position: relative; + height: 4px; + display: block; + width: 100%; + background-color: lighten($progress-bar-color, 40%); + border-radius: 2px; + margin: $element-top-margin 0 $element-bottom-margin 0; + overflow: hidden; + .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: $progress-bar-color; + transition: width .3s linear; + } + .indeterminate { + background-color: $progress-bar-color; + &:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite; + + } + &:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite; + animation-delay: 1.15s; + } + } +} +@keyframes indeterminate { + 0% { + left: -35%; + right:100%; + } + 60% { + left: 100%; + right: -90%; + } + 100% { + left: 100%; + right: -90%; + } +} + +@keyframes indeterminate-short { + 0% { + left: -200%; + right: 100%; + } + 60% { + left: 107%; + right: -8%; + } + 100% { + left: 107%; + right: -8%; + } +} + + +/******************* + Utility Classes +*******************/ + +.hide { + display: none !important; +} + +// Text Align +.left-align { + text-align: left; +} +.right-align { + text-align: right +} +.center, .center-align { + text-align: center; +} + +.left { + float: left !important; +} +.right { + float: right !important; +} + +// No Text Select +.no-select { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.circle { + border-radius: 50%; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +.truncate { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.no-padding { + padding: 0 !important; +} diff --git a/docs/assets/css/components/_grid.scss b/docs/assets/css/components/_grid.scss new file mode 100644 index 0000000..8985cb0 --- /dev/null +++ b/docs/assets/css/components/_grid.scss @@ -0,0 +1,146 @@ +.container { + margin: 0 auto; + max-width: 1280px; + width: 90%; +} +@media #{$medium-and-up} { + .container { + width: 85%; + } +} +@media #{$large-and-up} { + .container { + width: 70%; + } +} +.container .row { + margin-left: (-1 * $gutter-width / 2); + margin-right: (-1 * $gutter-width / 2); +} + +.section { + padding-top: 1rem; + padding-bottom: 1rem; + + &.no-pad { + padding: 0; + } + &.no-pad-bot { + padding-bottom: 0; + } + &.no-pad-top { + padding-top: 0; + } +} + + +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; + + // Clear floating children + &:after { + content: ""; + display: table; + clear: both; + } + + .col { + float: left; + box-sizing: border-box; + padding: 0 $gutter-width / 2; + + &[class*="push-"], + &[class*="pull-"] { + position: relative; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.s#{$i} { + width: $perc; + margin-left: auto; + left: auto; + right: auto; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-s#{$i} { + margin-left: $perc; + } + &.pull-s#{$i} { + right: $perc; + } + &.push-s#{$i} { + left: $perc; + } + $i: $i + 1; + } + + @media #{$medium-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.m#{$i} { + width: $perc; + margin-left: auto; + left: auto; + right: auto; + } + $i: $i + 1 + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-m#{$i} { + margin-left: $perc; + } + &.pull-m#{$i} { + right: $perc; + } + &.push-m#{$i} { + left: $perc; + } + $i: $i + 1; + } + } + + @media #{$large-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.l#{$i} { + width: $perc; + margin-left: auto; + left: auto; + right: auto; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-l#{$i} { + margin-left: $perc; + } + &.pull-l#{$i} { + right: $perc; + } + &.push-l#{$i} { + left: $perc; + } + $i: $i + 1; + } + } + } +} diff --git a/docs/assets/css/components/_icons-material-design.scss b/docs/assets/css/components/_icons-material-design.scss new file mode 100644 index 0000000..d8d91c1 --- /dev/null +++ b/docs/assets/css/components/_icons-material-design.scss @@ -0,0 +1,5 @@ +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + font-feature-settings: 'liga'; +} diff --git a/docs/assets/css/components/_materialbox.scss b/docs/assets/css/components/_materialbox.scss new file mode 100644 index 0000000..ee37426 --- /dev/null +++ b/docs/assets/css/components/_materialbox.scss @@ -0,0 +1,42 @@ +.materialboxed { + display: block; + cursor: zoom-in; + position: relative; + transition: opacity .4s; + + &:hover { + &:not(.active) { + opacity: .8; + } + will-change: left, top, width, height; + } +} + +.materialboxed.active { + cursor: zoom-out; +} + +#materialbox-overlay { + position:fixed; + top:0; + left:0; + right: 0; + bottom: 0; + background-color: #292929; + z-index: 1000; + + will-change: opacity; +} +.materialbox-caption { + position: fixed; + display: none; + color: #fff; + line-height: 50px; + bottom: 0; + width: 100%; + text-align: center; + padding: 0% 15%; + height: 50px; + z-index: 1000; + -webkit-font-smoothing: antialiased; +} \ No newline at end of file diff --git a/docs/assets/css/components/_me.scss b/docs/assets/css/components/_me.scss new file mode 100644 index 0000000..3993bee --- /dev/null +++ b/docs/assets/css/components/_me.scss @@ -0,0 +1,64 @@ +* { + margin: 0; + padding: 0; +} + +nav { + -webkit-box-shadow: none; + box-shadow: none; + background: none; + position: absolute; + top: 0; + width: 100%; + height: 55px; +} + +section { + display: table; + width: 100%; +} + +.fixed { + background-attachment: fixed; + background-size: cover; + background-repeat: no-repeat; +} +.v100 { + height: 100vh; +} +.v80 { + height: 80vh; +} + +.v70 { + height: 70vh; +} + +.v50 { + height: 50vh; +} + +.radius-border{ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.opacity-background{ + background: rgba(0,0,0,.5); +} + +.love-footer { + color:red; +} + +.container-wide { + padding: 5em 2em; +} + +.post-title { + font-size: 2em; +} + +.post-date { + font-size: 0.8em; +} \ No newline at end of file diff --git a/docs/assets/css/components/_mixins.scss b/docs/assets/css/components/_mixins.scss new file mode 100644 index 0000000..054f8f6 --- /dev/null +++ b/docs/assets/css/components/_mixins.scss @@ -0,0 +1,5 @@ +// @mixin box-shadow-2($args1, $args2) { +// -webkit-box-shadow: $args1, $args2; +// -moz-box-shadow: $args1, $args2; +// box-shadow: $args1, $args2; +// } \ No newline at end of file diff --git a/docs/assets/css/components/_modal.scss b/docs/assets/css/components/_modal.scss new file mode 100644 index 0000000..0a6dcfb --- /dev/null +++ b/docs/assets/css/components/_modal.scss @@ -0,0 +1,90 @@ +.modal { + @extend .z-depth-4; + + display: none; + position: fixed; + left: 0; + right: 0; + background-color: #fafafa; + padding: 0; + max-height: 70%; + width: 55%; + margin: auto; + overflow-y: auto; + + border-radius: 2px; + will-change: top, opacity; + + @media #{$medium-and-down} { + width: 80%; + } + + h1,h2,h3,h4 { + margin-top: 0; + } + + .modal-content { + padding: 24px; + } + .modal-close { + cursor: pointer; + } + + .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100%; + + .btn, .btn-flat { + float: right; + margin: 6px 0; + } + } +} +.lean-overlay { + position: fixed; + z-index:999; + top: -100px; + left: 0; + bottom: 0; + right: 0; + height: 125%; + width: 100%; + background: #000; + display: none; + + will-change: opacity; +} + +// Modal with fixed action footer +.modal.modal-fixed-footer { + padding: 0; + height: 70%; + + .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto; + } + + .modal-footer { + border-top: 1px solid rgba(0,0,0,.1); + position: absolute; + bottom: 0; + } +} + +// Modal Bottom Sheet Style +.modal.bottom-sheet { + top: auto; + bottom: -100%; + margin: 0; + width: 100%; + max-height: 45%; + border-radius: 0; + will-change: bottom, opacity; +} diff --git a/docs/assets/css/components/_navbar.scss b/docs/assets/css/components/_navbar.scss new file mode 100644 index 0000000..14fe92e --- /dev/null +++ b/docs/assets/css/components/_navbar.scss @@ -0,0 +1,171 @@ +nav { + color: $navbar-font-color; + @extend .z-depth-1; + background-color: $primary-color; + width: 100%; + height: $navbar-height-mobile; + line-height: $navbar-height-mobile; + + a { color: $navbar-font-color; } + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: block; + font-size: 2rem; + height: $navbar-height-mobile; + line-height: $navbar-height-mobile; + } + + .nav-wrapper { + position: relative; + height: 100%; + } + + @media #{$large-and-up} { + a.button-collapse { display: none; } + } + + + // Collapse button + .button-collapse { + float: left; + position: relative; + z-index: 1; + height: $navbar-height-mobile; + + i { + font-size: 2.7rem; + height: $navbar-height-mobile; + line-height: $navbar-height-mobile; + } + } + + + // Logo + .brand-logo { + position: absolute; + color: $navbar-font-color; + display: inline-block; + font-size: $navbar-brand-font-size; + padding: 0; + white-space: nowrap; + + &.center { + left: 50%; + transform: translateX(-50%); + } + + @media #{$medium-and-down} { + left: 50%; + transform: translateX(-50%); + + &.left, &.right { + padding: 0; + transform: none; + } + + &.left { left: 0.5rem; } + &.right { + right: 0.5rem; + left: auto; + } + } + + &.right { + right: 0.5rem; + padding: 0; + } + } + + + // Navbar Links + ul { + margin: 0; + + li { + transition: background-color .3s; + float: left; + padding: 0; + + &.active { + background-color: rgba(0,0,0,.1); + } + } + a { + transition: background-color .3s; + font-size: 1rem; + color: $navbar-font-color; + display: inline-block; + padding: 0 15px; + cursor: pointer; + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px; + } + + &:hover { + background-color: rgba(0,0,0,.1); + } + } + + &.left { + float: left; + } + } + + // Navbar Search Form + .input-field { + margin: 0; + + input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem; + + &:focus, &[type=text]:valid, &[type=password]:valid, + &[type=email]:valid, &[type=url]:valid, &[type=date]:valid { + border: none; + box-shadow: none; + } + } + label { + top: 0; + left: 0; + + i { + color: rgba(255,255,255,.7); + transition: color .3s; + } + &.active i { color: $navbar-font-color; } + &.active { + transform: translateY(0); + } + } + + } + +} + +// Fixed Navbar +.navbar-fixed { + position: relative; + height: $navbar-height-mobile; + z-index: 998; + + nav { + position: fixed; + } +} +@media #{$medium-and-up} { + nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { + height: $navbar-height; + line-height: $navbar-height; + } + .navbar-fixed { + height: $navbar-height; + } +} diff --git a/docs/assets/css/components/_normalize.scss b/docs/assets/css/components/_normalize.scss new file mode 100644 index 0000000..5e5e3c8 --- /dev/null +++ b/docs/assets/css/components/_normalize.scss @@ -0,0 +1,424 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/docs/assets/css/components/_prefixer.scss b/docs/assets/css/components/_prefixer.scss new file mode 100644 index 0000000..13376de --- /dev/null +++ b/docs/assets/css/components/_prefixer.scss @@ -0,0 +1,384 @@ +//--------------------------------------------------- +// Sass Prefixer +// ------------------------------------------------- +// TABLE OF CONTENTS +// (*) denotes a syntax-sugar helper +// ------------------------------------------------- +// +// animation($args) +// animation-delay($delay) +// animation-direction($direction) +// animation-duration($duration) +// animation-fill-mode($mode) +// animation-iteration-count($count) +// animation-name($name) +// animation-play-state($state) +// animation-timing-function($function) +// background-size($args) +// inner-shadow($args) * +// box-sizing($args) +// border-box() * +// content-box() * +// columns($args) +// column-count($count) +// column-gap($gap) +// column-rule($args) +// column-width($width) +// flexbox() +// flex($args) +// order($args) +// align($args) +// justify-content($args) +// gradient($default,$start,$stop) * +// linear-gradient-top($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])* +// linear-gradient-left($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])* +// perspective($pixels) +// transform($args) +// transform-origin($args) +// transform-style($style) +// rotate($deg) +// scale($factor) +// translate($x,$y) +// translate3d($x,$y,$z) +// translateHardware($x,$y) * +// text-shadow($args) +// transition($args) +// transition-delay($delay) +// transition-duration($duration) +// transition-property($property) +// transition-timing-function($function) + + +// Animation + +// @mixin animation($args) { +// -webkit-animation: $args; +// -moz-animation: $args; +// -ms-animation: $args; +// -o-animation: $args; +// animation: $args; +// } +// @mixin animation-delay($delay) { +// -webkit-animation-delay: $delay; +// -moz-animation-delay: $delay; +// -ms-animation-delay: $delay; +// -o-animation-delay: $delay; +// animation-delay: $delay; +// } +// @mixin animation-direction($direction) { +// -webkit-animation-direction: $direction; +// -moz-animation-direction: $direction; +// -ms-animation-direction: $direction; +// -o-animation-direction: $direction; +// } +// @mixin animation-duration($duration) { +// -webkit-animation-duration: $duration; +// -moz-animation-duration: $duration; +// -ms-animation-duration: $duration; +// -o-animation-duration: $duration; +// } +// @mixin animation-fill-mode($mode) { +// -webkit-animation-fill-mode: $mode; +// -moz-animation-fill-mode: $mode; +// -ms-animation-fill-mode: $mode; +// -o-animation-fill-mode: $mode; +// animation-fill-mode: $mode; +// } +// @mixin animation-iteration-count($count) { +// -webkit-animation-iteration-count: $count; +// -moz-animation-iteration-count: $count; +// -ms-animation-iteration-count: $count; +// -o-animation-iteration-count: $count; +// animation-iteration-count: $count; +// } +// @mixin animation-name($name) { +// -webkit-animation-name: $name; +// -moz-animation-name: $name; +// -ms-animation-name: $name; +// -o-animation-name: $name; +// animation-name: $name; +// } +// @mixin animation-play-state($state) { +// -webkit-animation-play-state: $state; +// -moz-animation-play-state: $state; +// -ms-animation-play-state: $state; +// -o-animation-play-state: $state; +// animation-play-state: $state; +// } +// @mixin animation-timing-function($function) { +// -webkit-animation-timing-function: $function; +// -moz-animation-timing-function: $function; +// -ms-animation-timing-function: $function; +// -o-animation-timing-function: $function; +// animation-timing-function: $function; +// } + +// Keyframes +// @mixin keyframes($animation-name) { +// @-webkit-keyframes #{$animation-name} { +// @content; +// } +// @-moz-keyframes #{$animation-name} { +// @content; +// } +// @keyframes #{$animation-name} { +// @content; +// } +// } + +// Backface-visibility + +// @mixin backface-visibility($args) { +// -webkit-backface-visibility: $args; +// -moz-backface-visibility: $args; +// -ms-backface-visibility: $args; +// backface-visibility: $args; +// } + + +// Background Size + +// @mixin background-size($args) { +// -webkit-background-size: $args; +// background-size: $args; +// } + +// Box Sizing + +// @mixin box-sizing($args) { +// -webkit-box-sizing: $args; +// -moz-box-sizing: $args; +// box-sizing: $args; +// } +// @mixin border-box(){ +// @include box-sizing(border-box); +// } +// @mixin content-box(){ +// @include box-sizing(content-box); +// } + + +// Columns + +// @mixin columns($args) { +// -webkit-columns: $args; +// -moz-columns: $args; +// columns: $args; +// } +// @mixin column-count($count) { +// -webkit-column-count: $count; +// -moz-column-count: $count; +// column-count: $count; +// } +// @mixin column-gap($gap) { +// -webkit-column-gap: $gap; +// -moz-column-gap: $gap; +// column-gap: $gap; +// } +// @mixin column-width($width) { +// -webkit-column-width: $width; +// -moz-column-width: $width; +// column-width: $width; +// } +// @mixin column-rule($args) { +// -webkit-column-rule: $args; +// -moz-column-rule: $args; +// column-rule: $args; +// } + +// Filter +// @mixin filter($args) { +// -webkit-filter: $args; +// -moz-filter: $args; +// -o-filter: $args; +// -ms-filter: $args; +// } + +// Flexbox +// @mixin flexbox() { +// display: -webkit-box; +// display: -moz-box; +// display: -ms-flexbox; +// display: -webkit-flex; +// display: flex; +// } + // @mixin flex($values) { + // -webkit-box-flex: $values; + // -moz-box-flex: $values; + // -webkit-flex: $values; + // -ms-flex: $values; + // flex: $values; + // } + // @mixin order($val) { + // -webkit-box-ordinal-group: $val; + // -moz-box-ordinal-group: $val; + // -ms-flex-order: $val; + // -webkit-order: $val; + // order: $val; + // } + // @mixin align($align) { + // -webkit-flex-align: $align; + // -ms-flex-align: $align; + // -webkit-align-items: $align; + // align-items: $align; + // } + // @mixin justify-content($val) { + // -webkit-justify-content: $val; + // justify-content: $val; + // } +// Gradients + +// @mixin gradient($default: #F5F5F5, $start: #EEE, $stop: #FFF) { +// @include linear-gradient-top($default,$start,0%,$stop,100%); +// } +// @mixin linear-gradient-top($default,$color1,$stop1,$color2,$stop2) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2)); +// background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2); +// background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2); +// background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2); +// background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2); +// background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2); +// } +// @mixin linear-gradient-top2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3)); +// background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// } +// @mixin linear-gradient-top3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4)); +// background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// } +// @mixin linear-gradient-left($default,$color1,$stop1,$color2,$stop2) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2)); +// background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2); +// background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2); +// background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2); +// background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2); +// background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2); +// } +// @mixin linear-gradient-left2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3)); +// background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); +// } +// @mixin linear-gradient-left3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) { +// background-color: $default; +// background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4)); +// background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); +// } + +// Perspective +@mixin perspective($pixels) { + perspective: $pixels; + -webkit-perspective: $pixels; +} + + +// Text Shadow + +// @mixin text-shadow($args) { +// text-shadow: $args; +// } + + +// Transforms + +// @mixin transform($args) { +// -webkit-transform: $args; +// -moz-transform: $args; +// -ms-transform: $args; +// -o-transform: $args; +// transform: $args; +// } +// @mixin transform-origin($args) { +// -webkit-transform-origin: $args; +// -moz-transform-origin: $args; +// -ms-transform-origin: $args; +// -o-transform-origin: $args; +// transform-origin: $args; +// } +// @mixin transform-style($style) { +// -webkit-transform-style: $style; +// -moz-transform-style: $style; +// -ms-transform-style: $style; +// -o-transform-style: $style; +// transform-style: $style; +// } +// @mixin rotate($deg:45deg){ +// @include transform(rotate($deg)); +// } +// @mixin scale($factor:.5){ +// @include transform(scale($factor)); +// } +// @mixin translate($x,$y){ +// @include transform(translate($x,$y)); +// } +// @mixin translate3d($x,$y,$z) { +// @include transform(translate3d($x,$y,$z)); +// } +// @mixin translateHardware($x,$y) { +// @include translate($x,$y); +// -webkit-transform: translate3d($x,$y,0); +// -moz-transform: translate3d($x,$y,0); +// -o-transform: translate3d($x,$y,0); +// -ms-transform: translate3d($x,$y,0); +// transform: translate3d($x,$y,0); +// } + + +// Transitions + +// @mixin transition($args:200ms) { +// -webkit-transition: $args; +// -moz-transition: $args; +// -o-transition: $args; +// -ms-transition: $args; +// transition: $args; +// } +// @mixin transition-delay($delay:0) { +// -webkit-transition-delay: $delay; +// -moz-transition-delay: $delay; +// -o-transition-delay: $delay; +// -ms-transition-delay: $delay; +// transition-delay: $delay; +// } +// @mixin transition-duration($duration:200ms) { +// -webkit-transition-duration: $duration; +// -moz-transition-duration: $duration; +// -o-transition-duration: $duration; +// -ms-transition-duration: $duration; +// transition-duration: $duration; +// } +// @mixin transition-property($property:all) { +// -webkit-transition-property: $property; +// -moz-transition-property: $property; +// -o-transition-property: $property; +// -ms-transition-property: $property; +// transition-property: $property; +// } +// @mixin transition-timing-function($function:ease) { +// -webkit-transition-timing-function: $function; +// -moz-transition-timing-function: $function; +// -o-transition-timing-function: $function; +// -ms-transition-timing-function: $function; +// transition-timing-function: $function; +// } diff --git a/docs/assets/css/components/_preloader.scss b/docs/assets/css/components/_preloader.scss new file mode 100644 index 0000000..31e1600 --- /dev/null +++ b/docs/assets/css/components/_preloader.scss @@ -0,0 +1,334 @@ +/* + @license + Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + Code distributed by Google as part of the polymer project is also + subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ + +/**************************/ +/* STYLES FOR THE SPINNER */ +/**************************/ + +/* + * Constants: + * STROKEWIDTH = 3px + * ARCSIZE = 270 degrees (amount of circle the arc takes up) + * ARCTIME = 1333ms (time it takes to expand and contract arc) + * ARCSTARTROT = 216 degrees (how much the start location of the arc + * should rotate each time, 216 gives us a + * 5 pointed star shape (it's 360/5 * 3). + * For a 7 pointed star, we might do + * 360/7 * 3 = 154.286) + * CONTAINERWIDTH = 28px + * SHRINK_TIME = 400ms + */ + + +.preloader-wrapper { + display: inline-block; + position: relative; + width: 48px; + height: 48px; + + &.small { + width: 36px; + height: 36px; + } + + &.big { + width: 64px; + height: 64px; + } + + &.active { + /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ + -webkit-animation: container-rotate 1568ms linear infinite; + animation: container-rotate 1568ms linear infinite; + } +} + +@-webkit-keyframes container-rotate { + to { -webkit-transform: rotate(360deg) } +} + +@keyframes container-rotate { + to { transform: rotate(360deg) } +} + +.spinner-layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + border-color: $spinner-default-color; +} + +.spinner-blue, +.spinner-blue-only { + border-color: #4285f4; +} + +.spinner-red, +.spinner-red-only { + border-color: #db4437; +} + +.spinner-yellow, +.spinner-yellow-only { + border-color: #f4b400; +} + +.spinner-green, +.spinner-green-only { + border-color: #0f9d58; +} + +/** + * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): + * + * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't + * guarantee that the animation will start _exactly_ after that value. So we avoid using + * animation-delay and instead set custom keyframes for each color (as redundant as it + * seems). + * + * We write out each animation in full (instead of separating animation-name, + * animation-duration, etc.) because under the polyfill, Safari does not recognize those + * specific properties properly, treats them as -webkit-animation, and overrides the + * other animation rules. See https://github.com/Polymer/platform/issues/53. + */ +.active .spinner-layer.spinner-blue { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-red { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-yellow { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-green { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer, +.active .spinner-layer.spinner-blue-only, +.active .spinner-layer.spinner-red-only, +.active .spinner-layer.spinner-yellow-only, +.active .spinner-layer.spinner-green-only { + /* durations: 4 * ARCTIME */ + opacity: 1; + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +@-webkit-keyframes fill-unfill-rotate { + 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@keyframes fill-unfill-rotate { + 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@-webkit-keyframes blue-fade-in-out { + from { opacity: 1; } + 25% { opacity: 1; } + 26% { opacity: 0; } + 89% { opacity: 0; } + 90% { opacity: 1; } + 100% { opacity: 1; } +} + +@keyframes blue-fade-in-out { + from { opacity: 1; } + 25% { opacity: 1; } + 26% { opacity: 0; } + 89% { opacity: 0; } + 90% { opacity: 1; } + 100% { opacity: 1; } +} + +@-webkit-keyframes red-fade-in-out { + from { opacity: 0; } + 15% { opacity: 0; } + 25% { opacity: 1; } + 50% { opacity: 1; } + 51% { opacity: 0; } +} + +@keyframes red-fade-in-out { + from { opacity: 0; } + 15% { opacity: 0; } + 25% { opacity: 1; } + 50% { opacity: 1; } + 51% { opacity: 0; } +} + +@-webkit-keyframes yellow-fade-in-out { + from { opacity: 0; } + 40% { opacity: 0; } + 50% { opacity: 1; } + 75% { opacity: 1; } + 76% { opacity: 0; } +} + +@keyframes yellow-fade-in-out { + from { opacity: 0; } + 40% { opacity: 0; } + 50% { opacity: 1; } + 75% { opacity: 1; } + 76% { opacity: 0; } +} + +@-webkit-keyframes green-fade-in-out { + from { opacity: 0; } + 65% { opacity: 0; } + 75% { opacity: 1; } + 90% { opacity: 1; } + 100% { opacity: 0; } +} + +@keyframes green-fade-in-out { + from { opacity: 0; } + 65% { opacity: 0; } + 75% { opacity: 1; } + 90% { opacity: 1; } + 100% { opacity: 0; } +} + +/** + * Patch the gap that appear between the two adjacent div.circle-clipper while the + * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). + */ +.gap-patch { + position: absolute; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.gap-patch .circle { + width: 1000%; + left: -450%; +} + +.circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; + + .circle { + width: 200%; + height: 100%; + border-width: 3px; /* STROKEWIDTH */ + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + } + + &.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg); + } + &.right .circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + transform: rotate(-129deg); + } +} + + + +.active .circle-clipper.left .circle { + /* duration: ARCTIME */ + -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .circle-clipper.right .circle { + /* duration: ARCTIME */ + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +@-webkit-keyframes left-spin { + from { -webkit-transform: rotate(130deg); } + 50% { -webkit-transform: rotate(-5deg); } + to { -webkit-transform: rotate(130deg); } +} + +@keyframes left-spin { + from { transform: rotate(130deg); } + 50% { transform: rotate(-5deg); } + to { transform: rotate(130deg); } +} + +@-webkit-keyframes right-spin { + from { -webkit-transform: rotate(-130deg); } + 50% { -webkit-transform: rotate(5deg); } + to { -webkit-transform: rotate(-130deg); } +} + +@keyframes right-spin { + from { transform: rotate(-130deg); } + 50% { transform: rotate(5deg); } + to { transform: rotate(-130deg); } +} + +#spinnerContainer.cooldown { + /* duration: SHRINK_TIME */ + -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); +} + +@-webkit-keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} \ No newline at end of file diff --git a/docs/assets/css/components/_roboto.scss b/docs/assets/css/components/_roboto.scss new file mode 100644 index 0000000..741ab5b --- /dev/null +++ b/docs/assets/css/components/_roboto.scss @@ -0,0 +1,49 @@ +@font-face { + font-family: "Roboto"; + src: local(Roboto Thin), url('#{$roboto-font-path}Roboto-Thin.eot'); + src: url("#{$roboto-font-path}Roboto-Thin.eot?#iefix") format('embedded-opentype'), + url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"), + url("#{$roboto-font-path}Roboto-Thin.ttf") format("truetype"); + + font-weight: 200; +} +@font-face { + font-family: "Roboto"; + src: local(Roboto Light), url('#{$roboto-font-path}Roboto-Light.eot'); + src: url("#{$roboto-font-path}Roboto-Light.eot?#iefix") format('embedded-opentype'), + url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Light.woff") format("woff"), + url("#{$roboto-font-path}Roboto-Light.ttf") format("truetype"); + font-weight: 300; +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Regular), url('#{$roboto-font-path}Roboto-Regular.eot'); + src: url("#{$roboto-font-path}Roboto-Regular.eot?#iefix") format('embedded-opentype'), + url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"), + url("#{$roboto-font-path}Roboto-Regular.ttf") format("truetype"); + font-weight: 400; +} + +@font-face { + font-family: "Roboto"; + src: url('#{$roboto-font-path}Roboto-Medium.eot'); + src: url("#{$roboto-font-path}Roboto-Medium.eot?#iefix") format('embedded-opentype'), + url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"), + url("#{$roboto-font-path}Roboto-Medium.ttf") format("truetype"); + font-weight: 500; +} + +@font-face { + font-family: "Roboto"; + src: url('#{$roboto-font-path}Roboto-Bold.eot'); + src: url("#{$roboto-font-path}Roboto-Bold.eot?#iefix") format('embedded-opentype'), + url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"), + url("#{$roboto-font-path}Roboto-Bold.ttf") format("truetype"); + font-weight: 700; +} diff --git a/docs/assets/css/components/_sideNav.scss b/docs/assets/css/components/_sideNav.scss new file mode 100644 index 0000000..db3e4dc --- /dev/null +++ b/docs/assets/css/components/_sideNav.scss @@ -0,0 +1,133 @@ +.side-nav { + position: fixed; + width: 240px; + left: 0; + top: 0; + margin: 0; + transform: translateX(-100%); + height: 100%; + height: calc(100% + 60px); + height: -moz-calc(100%); //Temporary Firefox Fix + padding-bottom: 60px; + background-color: $sidenav-bg-color; + z-index: 999; + backface-visibility: hidden; + overflow-y: auto; + will-change: transform; + backface-visibility: hidden; + transform: translateX(-105%); + + @extend .z-depth-1; + + // Right Align + &.right-aligned { + right: 0; + transform: translateX(105%); + left: auto; + transform: translateX(100%); + } + + .collapsible { + margin: 0; + } + + + li { + float: none; + line-height: $sidenav-item-height; + + &.active { background-color: rgba(0,0,0,.05); } + } + + a { + color: $sidenav-font-color; + display: block; + font-size: 1rem; + height: $sidenav-item-height; + line-height: $sidenav-item-height; + padding: 0 $sidenav-padding-right; + + &:hover { background-color: rgba(0,0,0,.05);} + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin: 10px 15px; + } + + &.btn, + &.btn-large, + &.btn-floating { color: $button-raised-color; } + &.btn-flat { color: $button-flat-color; } + + &.btn:hover, + &.btn-large:hover { background-color: lighten($button-raised-background, 5%); } + &.btn-floating:hover { background-color: $button-raised-background; } + } +} + + +// Touch interaction +.drag-target { + height: 100%; + width: 10px; + position: fixed; + top: 0; + z-index: 998; +} + + +// Hidden side-nav for all sizes +.side-nav.fixed { + a { + display: block; + padding: 0 $sidenav-padding-right; + color: $sidenav-font-color; + } +} + + +// Fixed side-nav shown +.side-nav.fixed { + left: 0; + transform: translateX(0); + position: fixed; + + // Right Align + &.right-aligned { + right: 0; + left: auto; + } +} + +// Fixed sideNav hide on smaller +@media #{$medium-and-down} { + .side-nav.fixed { + transform: translateX(-105%); + + &.right-aligned { + transform: translateX(105%); + } + } +} + + +.side-nav .collapsible-body li.active, +.side-nav.fixed .collapsible-body li.active { + background-color: $primary-color; + a { + color: $sidenav-bg-color; + } +} + + +#sidenav-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + + height: 120vh; + background-color: rgba(0,0,0,.5); + z-index: 997; + + will-change: opacity; +} diff --git a/docs/assets/css/components/_slider.scss b/docs/assets/css/components/_slider.scss new file mode 100644 index 0000000..2265cdb --- /dev/null +++ b/docs/assets/css/components/_slider.scss @@ -0,0 +1,92 @@ +.slider { + position: relative; + height: 400px; + width: 100%; + + // Fullscreen slider + &.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + + ul.slides { + height: 100%; + } + + ul.indicators { + z-index: 2; + bottom: 30px; + } + } + + .slides { + background-color: $slider-bg-color; + margin: 0; + height: 400px; + + li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden; + + img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center; + } + + .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0; + + p { color: $slider-bg-color-light; } + } + + &.active { + z-index: 2; + } + } + } + + + .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; + + .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: $slider-bg-color-light; + + transition: background-color .3s; + border-radius: 50%; + + &.active { + background-color: $slider-indicator-color; + } + } + } + +} \ No newline at end of file diff --git a/docs/assets/css/components/_table_of_contents.scss b/docs/assets/css/components/_table_of_contents.scss new file mode 100644 index 0000000..2872bdb --- /dev/null +++ b/docs/assets/css/components/_table_of_contents.scss @@ -0,0 +1,33 @@ +/*************** + Nav List +***************/ +.table-of-contents { + &.fixed { + position: fixed; + } + + li { + padding: 2px 0; + } + a { + display: inline-block; + font-weight: 300; + color: #757575; + padding-left: 20px; + height: 1.5rem; + line-height: 1.5rem; + letter-spacing: .4; + display: inline-block; + + &:hover { + color: lighten(#757575, 20%); + padding-left: 19px; + border-left: 1px solid lighten(color("materialize-red", "base"),10%); + } + &.active { + font-weight: 500; + padding-left: 18px; + border-left: 2px solid lighten(color("materialize-red", "base"),10%); + } + } +} diff --git a/docs/assets/css/components/_tabs.scss b/docs/assets/css/components/_tabs.scss new file mode 100644 index 0000000..6380882 --- /dev/null +++ b/docs/assets/css/components/_tabs.scss @@ -0,0 +1,56 @@ +.tabs { + display: flex; + position: relative; + overflow-x: auto; + overflow-y: hidden; + height: 48px; + background-color: $tabs-bg-color; + margin: 0 auto; + width: 100%; + white-space: nowrap; + + .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: block; + float: left; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; + text-overflow: ellipsis; + overflow: hidden; + letter-spacing: .8px; + width: 15%; + min-width: 80px; + + a { + color: $tabs-text-color; + display: block; + width: 100%; + height: 100%; + text-overflow: ellipsis; + overflow: hidden; + transition: color .28s ease; + &:hover { + color: lighten($tabs-text-color, 20%); + } + } + + &.disabled a { + color: lighten($tabs-text-color, 20%); + cursor: default; + } + } + .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: $tabs-underline-color; + will-change: left, right; + } +} diff --git a/docs/assets/css/components/_toast.scss b/docs/assets/css/components/_toast.scss new file mode 100644 index 0000000..7d4ef90 --- /dev/null +++ b/docs/assets/css/components/_toast.scss @@ -0,0 +1,65 @@ +#toast-container { + display:block; + position: fixed; + z-index: 10000; + + @media #{$small-and-down} { + min-width: 100%; + bottom: 0%; + } + @media #{$medium-only} { + left: 5%; + bottom: 7%; + max-width: 90%; + } + @media #{$large-and-up} { + top: 10%; + right: 7%; + max-width: 86%; + } +} + +.toast { + @extend .z-depth-1; + border-radius: 2px; + top: 0; + width: auto; + clear: both; + margin-top: 10px; + position: relative; + max-width:100%; + height: auto; + min-height: $toast-height; + line-height: 1.5em; + word-break: break-all; + background-color: $toast-color; + padding: 10px 25px; + font-size: 1.1rem; + font-weight: 300; + color: $toast-text-color; + + display: flex; + align-items: center; + justify-content: space-between; + + .btn, .btn-flat { + margin: 0; + margin-left: 3rem; + } + + &.rounded{ + border-radius: 24px; + } + + @media #{$small-and-down} { + width:100%; + border-radius: 0; + } + @media #{$medium-only} { + float: left; + } + @media #{$large-and-up} { + float: right; + } + +} diff --git a/docs/assets/css/components/_tooltip.scss b/docs/assets/css/components/_tooltip.scss new file mode 100644 index 0000000..81d8fbf --- /dev/null +++ b/docs/assets/css/components/_tooltip.scss @@ -0,0 +1,34 @@ +.material-tooltip { + padding: 10px 8px; + font-size: 1rem; + z-index: 2000; + background-color: transparent; + border-radius: 2px; + color: #fff; + min-height: 36px; + line-height: 120%; + opacity: 0; + display: none; + position: absolute; + text-align: center; + max-width: calc(100% - 4px); + overflow: hidden; + left:0; + top:0; + pointer-events: none; + will-change: top, left; +} + +.backdrop { + position: absolute; + opacity: 0; + display: none; + height: 7px; + width: 14px; + border-radius: 0 0 14px 14px; + background-color: #323232; + z-index: -1; + transform-origin: 50% 10%; + + will-change: transform, opacity; +} diff --git a/docs/assets/css/components/_typography.scss b/docs/assets/css/components/_typography.scss new file mode 100644 index 0000000..5301c80 --- /dev/null +++ b/docs/assets/css/components/_typography.scss @@ -0,0 +1,61 @@ + +a { + text-decoration: none; +} + +html{ + line-height: 1.5; + + @media only screen and (min-width: 0) { + font-size: 14px; + } + + @media only screen and (min-width: $medium-screen) { + font-size: 14.5px; + } + + @media only screen and (min-width: $large-screen) { + font-size: 15px; + } + + font-family: "Roboto", sans-serif; + font-weight: normal; + color: $off-black; +} +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; +} + +// Header Styles +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } +h1 { font-size: $h1-fontsize; line-height: 110%; margin: ($h1-fontsize / 2) 0 ($h1-fontsize / 2.5) 0;} +h2 { font-size: $h2-fontsize; line-height: 110%; margin: ($h2-fontsize / 2) 0 ($h2-fontsize / 2.5) 0;} +h3 { font-size: $h3-fontsize; line-height: 110%; margin: ($h3-fontsize / 2) 0 ($h3-fontsize / 2.5) 0;} +h4 { font-size: $h4-fontsize; line-height: 110%; margin: ($h4-fontsize / 2) 0 ($h4-fontsize / 2.5) 0;} +h5 { font-size: $h5-fontsize; line-height: 110%; margin: ($h5-fontsize / 2) 0 ($h5-fontsize / 2.5) 0;} +h6 { font-size: $h6-fontsize; line-height: 110%; margin: ($h6-fontsize / 2) 0 ($h6-fontsize / 2.5) 0;} + +// Text Styles +em { font-style: italic; } +strong { font-weight: 500; } +small { font-size: 75%; } +.light { font-weight: 300; } +.thin { font-weight: 200; } + + +.flow-text{ + font-weight: 300; + $i: 0; + @while $i <= $intervals { + @media only screen and (min-width : 360 + ($i * $interval-size)) { + font-size: 1.2rem * (1 + (.02 * $i)); + } + $i: $i + 1; + } + + // Handle below 360px screen + @media only screen and (max-width: 360px) { + font-size: 1.2rem; + } +} \ No newline at end of file diff --git a/docs/assets/css/components/_variables.scss b/docs/assets/css/components/_variables.scss new file mode 100644 index 0000000..7f47653 --- /dev/null +++ b/docs/assets/css/components/_variables.scss @@ -0,0 +1,309 @@ +/* ========================================================================== + Materialize variables + ========================================================================== */ +/** + * Table of Contents: + * + * 1. Colors + * 2. Badges + * 3. Buttons + * 4. Cards + * 5. Collapsible + * 6. Chips + * 7. Date Picker + * 8. Dropdown + * 10. Forms + * 11. Global + * 12. Grid + * 13. Navigation Bar + * 14. Side Navigation + * 15. Photo Slider + * 16. Spinners | Loaders + * 17. Tabs + * 18. Tables + * 19. Toasts + * 20. Typography + * 21. Footer + * 22. Flow Text + * 23. Collections + * 24. Progress Bar + */ + + +/* 1. Colors + ========================================================================== */ + +$primary-color: color("materialize-red", "lighten-2") !default; +$primary-color-light: lighten($primary-color, 15%) !default; +$primary-color-dark: darken($primary-color, 15%) !default; + +$secondary-color: color("teal", "lighten-1") !default; +$success-color: color("green", "base") !default; +$error-color: color("red", "base") !default; +$link-color: color("light-blue", "darken-1") !default; + + +/* 2. Badges + ========================================================================== */ + +$badge-bg-color: $secondary-color !default; + + +/* 3. Buttons + ========================================================================== */ + +// Shared styles +$button-border: none !default; +$button-background-focus: lighten($secondary-color, 4%) !default; +$button-font-size: 1.3rem !default; +$button-height: 36px !default; +$button-padding: 0 2rem !default; +$button-radius: 2px !default; + +// Disabled styles +$button-disabled-background: #DFDFDF !default; +$button-disabled-color: #9F9F9F !default; + +// Raised buttons +$button-raised-background: $secondary-color !default; +$button-raised-background-hover: lighten($button-raised-background, 5%) !default; +$button-raised-color: #fff !default; + +// Large buttons +$button-large-icon-font-size: 1.6rem !default; +$button-large-height: $button-height * 1.5 !default; + +// Flat buttons +$button-flat-color: #343434 !default; +$button-flat-disabled-color: lighten(#999, 10%) !default; + +// Floating buttons +$button-floating-background: $secondary-color !default; +$button-floating-background-hover: $button-floating-background !default; +$button-floating-color: #fff !default; +$button-floating-size: 37px !default; +$button-floating-large-size: $button-floating-size * 1.5 !default; +$button-floating-radius: 50% !default; + + +/* 4. Cards + ========================================================================== */ + +$card-padding: 20px !default; +$card-bg-color: #fff !default; +$card-link-color: color("orange", "accent-2") !default; +$card-link-color-light: lighten($card-link-color, 20%) !default; + + +/* 5. Collapsible + ========================================================================== */ + +$collapsible-height: 3rem !default; +$collapsible-header-color: #fff !default; +$collapsible-border-color: #ddd !default; + + +/* 6. Chips + ========================================================================== */ + +$chip-bg-color: #e4e4e4 !default; + + +/* 7. Date Picker + ========================================================================== */ + +$datepicker-weekday-bg: darken($secondary_color, 7%) !default; +$datepicker-date-bg: $secondary_color !default; +$datepicker-year: rgba(255, 255, 255, .4) !default; +$datepicker-focus: rgba(0,0,0, .05) !default; +$datepicker-selected: $secondary-color !default; +$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default; + + +/* 8. Dropdown + ========================================================================== */ + +$dropdown-bg-color: #fff !default; +$dropdown-hover-bg-color: #eee !default; +$dropdown-color: $secondary-color !default; +$dropdown-item-height: 50px !default; + + +/* 9. Fonts + ========================================================================== */ + +$roboto-font-path: "../fonts/roboto/" !default; + + +/* 10. Forms + ========================================================================== */ + +// Text Inputs + Textarea +$input-height: 3rem !default; +$input-border-color: color("grey", "base") !default; +$input-border: 1px solid $input-border-color !default; +$input-background: #fff !default; +$input-error-color: $error-color !default; +$input-success-color: $success-color !default; +$input-focus-color: $secondary-color !default; +$input-font-size: 1rem !default; +$input-margin: 0 0 15px 0 !default; +$input-padding: 0 !default; +$input-transition: all .3s !default; +$label-font-size: .8rem !default; +$input-disabled-color: rgba(0,0,0, .26) !default; +$input-disabled-solid-color: #BDBDBD !default; +$input-disabled-border: 1px dotted $input-disabled-color !default; +$input-invalid-border: 1px solid $input-error-color !default; +$placeholder-text-color: lighten($input-border-color, 20%) !default; + +// Radio Buttons +$radio-fill-color: $secondary-color !default; +$radio-empty-color: #5a5a5a !default; +$radio-border: 2px solid $radio-fill-color !default; + +// Range +$range-height: 14px !default; +$range-width: 14px !default; +$track-height: 3px !default; + +// Select +$select-border: 1px solid #f2f2f2 !default; +$select-background: rgba(255, 255, 255, 0.90) !default; +$select-focus: 1px solid lighten($secondary-color, 47%) !default; +$select-padding: 5px !default; +$select-radius: 2px !default; +$select-disabled-color: rgba(0,0,0,.3) !default; + +// Switches +$switch-bg-color: $secondary-color !default; +$switch-checked-lever-bg: desaturate(lighten($secondary-color, 25%), 25%) !default; +$switch-unchecked-bg: #F1F1F1 !default; +$switch-unchecked-lever-bg: #818181 !default; +$switch-radius: 15px !default; + + +/* 11. Global + ========================================================================== */ + +// Media Query Ranges +$small-screen-up: 601px !default; +$medium-screen-up: 993px !default; +$large-screen-up: 1201px !default; +$small-screen: 600px !default; +$medium-screen: 992px !default; +$large-screen: 1200px !default; + +$medium-and-up: "only screen and (min-width : #{$small-screen-up})" !default; +$large-and-up: "only screen and (min-width : #{$medium-screen-up})" !default; +$small-and-down: "only screen and (max-width : #{$small-screen})" !default; +$medium-and-down: "only screen and (max-width : #{$medium-screen})" !default; +$medium-only: "only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})" !default; + + +/* 12. Grid + ========================================================================== */ + +$num-cols: 12 !default; +$gutter-width: 1.5rem !default; +$element-top-margin: $gutter-width/3 !default; +$element-bottom-margin: ($gutter-width*2)/3 !default; + + +/* 13. Navigation Bar + ========================================================================== */ + +$navbar-height: 64px !default; +$navbar-height-mobile: 56px !default; +$navbar-font-color: #fff !default; +$navbar-brand-font-size: 2.1rem !default; + + +/* 14. Side Navigation + ========================================================================== */ + +$sidenav-font-color: #444 !default; +$sidenav-bg-color: #fff !default; +$sidenav-padding-right: 30px !default; +$sidenav-item-height: 64px !default; + + +/* 15. Photo Slider + ========================================================================== */ + +$slider-bg-color: color('grey', 'base') !default; +$slider-bg-color-light: color('grey', 'lighten-2') !default; +$slider-indicator-color: color('green', 'base') !default; + + +/* 16. Spinners | Loaders + ========================================================================== */ + +$spinner-default-color: $secondary-color !default; + + +/* 17. Tabs + ========================================================================== */ + +$tabs-underline-color: $primary-color-light !default; +$tabs-text-color: $primary-color !default; +$tabs-bg-color: #fff !default; + + +/* 18. Tables + ========================================================================== */ + +$table-border-color: #d0d0d0 !default; +$table-striped-color: #f2f2f2 !default; + + +/* 19. Toasts + ========================================================================== */ + +$toast-height: 48px !default; +$toast-color: #323232 !default; +$toast-text-color: #fff !default; + + +/* 20. Typography + ========================================================================== */ + +$off-black: rgba(0, 0, 0, 0.87) !default; +// Header Styles +$h1-fontsize: 4.2rem !default; +$h2-fontsize: 3.56rem !default; +$h3-fontsize: 2.92rem !default; +$h4-fontsize: 2.28rem !default; +$h5-fontsize: 1.64rem !default; +$h6-fontsize: 1rem !default; + + +/* 21. Footer + ========================================================================== */ + +$footer-bg-color: $primary-color !default; + + +/* 22. Flow Text + ========================================================================== */ + +$range : $large-screen - $small-screen !default; +$intervals: 20 !default; +$interval-size: $range / $intervals !default; + + +/* 23. Collections + ========================================================================== */ + +$collection-border-color: #e0e0e0 !default; +$collection-bg-color: #fff !default; +$collection-active-bg-color: $secondary-color !default; +$collection-active-color: lighten($secondary-color, 55%) !default; +$collection-hover-bg-color: #ddd !default; +$collection-link-color: $secondary-color !default; + + +/* 24. Progress Bar + ========================================================================== */ + +$progress-bar-color: $secondary-color !default; diff --git a/docs/assets/css/components/_waves.scss b/docs/assets/css/components/_waves.scss new file mode 100644 index 0000000..4991711 --- /dev/null +++ b/docs/assets/css/components/_waves.scss @@ -0,0 +1,173 @@ + +/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ + + +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + // white-space: nowrap; + // outline: 0; + + vertical-align: middle; + // cursor: pointer; + // border: none; + // outline: none; + // color: inherit; + // background-color: rgba(0, 0, 0, 0); + // font-size: 1em; + // line-height:1em; + // text-align: center; + // text-decoration: none; + z-index: 1; + will-change: opacity, transform; + transition: all .3s ease-out; + + .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top:-10px; + margin-left:-10px; + opacity: 0; + + background: rgba(0,0,0,0.2); + // $gradient: rgba(0,0,0,0.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%; + // background: -webkit-radial-gradient($gradient); + // background: -o-radial-gradient($gradient); + // background: -moz-radial-gradient($gradient); + // background: radial-gradient($gradient); + transition: all 0.7s ease-out; + transition-property: transform, opacity; + transform: scale(0); + pointer-events: none; + } + + // Waves Colors + &.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); + } + + &.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, .70); + } + &.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, .70); + } + &.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, .70); + } + &.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.70); + } + &.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.70); + } + &.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.70); + } + + // Style input button bug. + input[type="button"], input[type="reset"], input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; + } + +} + +.waves-notransition { + transition: none #{"!important"}; +} + +.waves-circle { + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); +} + +// .waves-button, +// .waves-button:hover, +// .waves-button:visited, +// .waves-button-input { +// white-space: nowrap; +// vertical-align: middle; +// cursor: pointer; +// border: none; +// outline: none; +// color: inherit; +// background-color: rgba(0, 0, 0, 0); +// font-size: 1em; +// line-height:1em; +// text-align: center; +// text-decoration: none; +// z-index: 1; +// } + +// .waves-button { +// padding: 0.85em 1.1em; +// border-radius: 0.2em; +// } + +// .waves-button-input { +// margin: 0; +// padding: 0.85em 1.1em; +// } + +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; + + // &.waves-button { + // padding: 0; + // } + + .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; + } +} + +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; +} + +// .waves-float { + // -webkit-mask-image: none; + // @include box-shadow(0px 1px 1.5px 1px rgba(0, 0, 0, 0.12)); + + // &:active { + // @include box-shadow(0px 8px 20px 1px rgba(0, 0, 0, 0.30)); +// } +// } + +.waves-block { + display: block; +} + +/* Firefox Bug: link not triggered */ +a.waves-effect .waves-ripple { + z-index: -1; +} \ No newline at end of file diff --git a/docs/assets/css/components/date_picker/_default.date.scss b/docs/assets/css/components/date_picker/_default.date.scss new file mode 100644 index 0000000..84e96b5 --- /dev/null +++ b/docs/assets/css/components/date_picker/_default.date.scss @@ -0,0 +1,435 @@ +/* ========================================================================== + $BASE-DATE-PICKER + ========================================================================== */ +/** + * The picker box. + */ +.picker__box { + padding: 0 1em; +} +/** + * The header containing the month and year stuff. + */ +.picker__header { + text-align: center; + position: relative; + margin-top: .75em; +} +/** + * The month and year labels. + */ +.picker__month, +.picker__year { +// font-weight: 500; + display: inline-block; + margin-left: .25em; + margin-right: .25em; +} +/** + * The month and year selectors. + */ +.picker__select--month, +.picker__select--year { + + height: 2em; + padding: 0; + margin-left: .25em; + margin-right: .25em; +} + +// Modified +.picker__select--month.browser-default { + display: inline; + background-color: #FFFFFF; + width: 40%; +} +.picker__select--year.browser-default { + display: inline; + background-color: #FFFFFF; + width: 26%; +} +.picker__select--month:focus, +.picker__select--year:focus { + border-color: $datepicker-focus; +} +/** + * The month navigation buttons. + */ +.picker__nav--prev, +.picker__nav--next { + position: absolute; + padding: .5em 1.25em; + width: 1em; + height: 1em; + box-sizing: content-box; + top: -0.25em; +} +//@media (min-width: 24.5em) { +// .picker__nav--prev, +// .picker__nav--next { +// top: -0.33em; +// } +//} +.picker__nav--prev { + left: -1em; + padding-right: 1.25em; +} +//@media (min-width: 24.5em) { +// .picker__nav--prev { +// padding-right: 1.5em; +// } +//} +.picker__nav--next { + right: -1em; + padding-left: 1.25em; +} +//@media (min-width: 24.5em) { +// .picker__nav--next { +// padding-left: 1.5em; +// } +//} + +.picker__nav--disabled, +.picker__nav--disabled:hover, +.picker__nav--disabled:before, +.picker__nav--disabled:before:hover { + cursor: default; + background: none; + border-right-color: #f5f5f5; + border-left-color: #f5f5f5; +} +/** + * The calendar table of dates + */ +.picker__table { + text-align: center; + border-collapse: collapse; + border-spacing: 0; + table-layout: fixed; + font-size: 1rem; + width: 100%; + margin-top: .75em; + margin-bottom: .5em; +} + + + +.picker__table th, .picker__table td { + text-align: center; +} + + + + + + +.picker__table td { + margin: 0; + padding: 0; +} +/** + * The weekday labels + */ +.picker__weekday { + width: 14.285714286%; + font-size: .75em; + padding-bottom: .25em; + color: #999999; + font-weight: 500; + /* Increase the spacing a tad */ +} +@media (min-height: 33.875em) { + .picker__weekday { + padding-bottom: .5em; + } +} +/** + * The days on the calendar + */ + +.picker__day--today { + position: relative; + color: #595959; + letter-spacing: -.3; + padding: .75rem 0; + font-weight: 400; + border: 1px solid transparent; + +} + +//.picker__day--today:before { +// content: " "; +// position: absolute; +// top: 2px; +// right: 2px; +// width: 0; +// height: 0; +// border-top: 0.5em solid #0059bc; +// border-left: .5em solid transparent; +//} +.picker__day--disabled:before { + border-top-color: #aaaaaa; +} + + +.picker__day--infocus:hover{ + cursor: pointer; + color: #000; + font-weight: 500; +} + +.picker__day--outfocus { + display: none; + padding: .75rem 0; + color: #fff; + +} +.picker__day--outfocus:hover { + cursor: pointer; + color: #dddddd; +// background: #b1dcfb; + font-weight: 500; +} + + +.picker__day--highlighted { +// border-color: #0089ec; +} +.picker__day--highlighted:hover, +.picker--focused .picker__day--highlighted { + cursor: pointer; +// color: #000000; +// background: #b1dcfb; +// font-weight: 500; +} +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + + +// Circle background + border-radius: 50%; + transform: scale(.75); + background: #0089ec; + color: #ffffff; +} +.picker__day--disabled, +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default; +} +.picker__day--highlighted.picker__day--disabled, +.picker__day--highlighted.picker__day--disabled:hover { + background: #bbbbbb; +} +/** + * The footer containing the "today", "clear", and "close" buttons. + */ +.picker__footer { + text-align: center; + display: flex; + align-items: center; + justify-content: space-between; +} +.picker__button--today, +.picker__button--clear, +.picker__button--close { + border: 1px solid #ffffff; + background: #ffffff; + font-size: .8em; + padding: .66em 0; + font-weight: bold; + width: 33%; + display: inline-block; + vertical-align: bottom; +} +.picker__button--today:hover, +.picker__button--clear:hover, +.picker__button--close:hover { + cursor: pointer; + color: #000000; + background: #b1dcfb; + border-bottom-color: #b1dcfb; +} +.picker__button--today:focus, +.picker__button--clear:focus, +.picker__button--close:focus { + background: #b1dcfb; + border-color: $datepicker-focus; + outline: none; +} +.picker__button--today:before, +.picker__button--clear:before, +.picker__button--close:before { + position: relative; + display: inline-block; + height: 0; +} +.picker__button--today:before, +.picker__button--clear:before { + content: " "; + margin-right: .45em; +} +.picker__button--today:before { + top: -0.05em; + width: 0; + border-top: 0.66em solid #0059bc; + border-left: .66em solid transparent; +} +.picker__button--clear:before { + top: -0.25em; + width: .66em; + border-top: 3px solid #ee2200; +} +.picker__button--close:before { + content: "\D7"; + top: -0.1em; + vertical-align: top; + font-size: 1.1em; + margin-right: .35em; + color: #777777; +} +.picker__button--today[disabled], +.picker__button--today[disabled]:hover { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default; +} +.picker__button--today[disabled]:before { + border-top-color: #aaaaaa; +} + +/* ========================================================================== + CUSTOM MATERIALIZE STYLES + ========================================================================== */ +.picker__box { + border-radius: 2px; + overflow: hidden; +} + +.picker__date-display { + text-align: center; + background-color: $datepicker-date-bg; + color: #fff; + padding-bottom: 15px; + font-weight: 300; +} + +.picker__nav--prev:hover, +.picker__nav--next:hover { + cursor: pointer; + color: #000000; + background: $datepicker-selected-outfocus; +} + +.picker__weekday-display { + background-color: $datepicker-weekday-bg; + padding: 10px; + font-weight: 200; + letter-spacing: .5; + font-size: 1rem; + margin-bottom: 15px; +} + +.picker__month-display { + text-transform: uppercase; + font-size: 2rem; +} +.picker__day-display { + + font-size: 4.5rem; + font-weight: 400; +} +.picker__year-display { + font-size: 1.8rem; + color: $datepicker-year; +} + +.picker__box { + padding: 0; +} +.picker__calendar-container { + padding: 0 1rem; + + thead { + border: none; + } +} + +// Calendar +.picker__table { + margin-top: 0; + margin-bottom: .5em; +} + +.picker__day--infocus { + color: #595959; + letter-spacing: -.3; + padding: .75rem 0; + font-weight: 400; + border: 1px solid transparent; +} + +//Today style +.picker__day.picker__day--today { + color: $datepicker-selected; +} + +.picker__day.picker__day--today.picker__day--selected { + color: #fff; +} + +// Table Header +.picker__weekday { + font-size: .9rem; +} + + +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + // Circle background + border-radius: 50%; + transform: scale(.9); + background-color: $datepicker-selected; + &.picker__day--outfocus { + background-color: $datepicker-selected-outfocus; + } + color: #ffffff; +} + +.picker__footer { + text-align: right; + padding: 5px 10px; +} + +// Materialize modified +.picker__close, .picker__today { + font-size: 1.1rem; + padding: 0 1rem; + color: $datepicker-selected; +} + +//month nav buttons +.picker__nav--prev:before, +.picker__nav--next:before { + content: " "; + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #676767; + width: 0; + height: 0; + display: block; + margin: 0 auto; +} +.picker__nav--next:before { + border-right: 0; + border-left: 0.75em solid #676767; +} +button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus { + background-color: $datepicker-selected-outfocus; +} diff --git a/docs/assets/css/components/date_picker/_default.scss b/docs/assets/css/components/date_picker/_default.scss new file mode 100644 index 0000000..971fbc7 --- /dev/null +++ b/docs/assets/css/components/date_picker/_default.scss @@ -0,0 +1,201 @@ +/* ========================================================================== + $BASE-PICKER + ========================================================================== */ +/** + * Note: the root picker element should *NOT* be styled more than what's here. + */ +.picker { + font-size: 16px; + text-align: left; + line-height: 1.2; + color: #000000; + position: absolute; + z-index: 10000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/** + * The picker input element. + */ +.picker__input { + cursor: default; +} +/** + * When the picker is opened, the input element is "activated". + */ +.picker__input.picker__input--active { + border-color: #0089ec; +} +/** + * The holder is the only "scrollable" top-level container element. + */ +.picker__holder { + width: 100%; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +/*! + * Default mobile-first, responsive styling for pickadate.js + * Demo: http://amsul.github.io/pickadate.js + */ +/** + * Note: the root picker element should *NOT* be styled more than what's here. + */ +/** + * Make the holder and frame fullscreen. + */ +.picker__holder, +.picker__frame { + bottom: 0; + left: 0; + right: 0; + top: 100%; +} +/** + * The holder should overlay the entire screen. + */ +.picker__holder { + position: fixed; + -webkit-transition: background 0.15s ease-out, top 0s 0.15s; + -moz-transition: background 0.15s ease-out, top 0s 0.15s; + transition: background 0.15s ease-out, top 0s 0.15s; + -webkit-backface-visibility: hidden; +} +/** + * The frame that bounds the box contents of the picker. + */ +.picker__frame { + position: absolute; + margin: 0 auto; + min-width: 256px; + +// picker width + width: 300px; + max-height: 350px; + + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + -webkit-transition: all 0.15s ease-out; + -moz-transition: all 0.15s ease-out; + transition: all 0.15s ease-out; +} +@media (min-height: 28.875em) { + .picker__frame { + overflow: visible; + top: auto; + bottom: -100%; + max-height: 80%; + } +} +@media (min-height: 40.125em) { + .picker__frame { + margin-bottom: 7.5%; + } +} +/** + * The wrapper sets the stage to vertically align the box contents. + */ +.picker__wrap { + display: table; + width: 100%; + height: 100%; +} +@media (min-height: 28.875em) { + .picker__wrap { + display: block; + } +} +/** + * The box contains all the picker contents. + */ +.picker__box { + background: #ffffff; + display: table-cell; + vertical-align: middle; +} +//@media (min-height: 26.5em) { +// .picker__box { +//// font-size: 1.25em; +// } +//} +@media (min-height: 28.875em) { + .picker__box { + display: block; + +// picker header font-size +// font-size: 1rem; + + border: 1px solid #777777; + border-top-color: #898989; + border-bottom-width: 0; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + } +} +//@media (min-height: 40.125em) { +// .picker__box { +// font-size: 1.1rem; +// border-bottom-width: 1px; +// -webkit-border-radius: 5px; +// -moz-border-radius: 5px; +// border-radius: 5px; +// } +//} +/** + * When the picker opens... + */ +.picker--opened .picker__holder { + top: 0; + background: transparent; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)"; + zoom: 1; + background: rgba(0, 0, 0, 0.32); + -webkit-transition: background 0.15s ease-out; + -moz-transition: background 0.15s ease-out; + transition: background 0.15s ease-out; +} +.picker--opened .picker__frame { + top: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1; +} +@media (min-height: 35.875em) { + .picker--opened .picker__frame { + top: 10%; + bottom: auto; + } +} +/** + * For `large` screens, transform into an inline picker. + */ + +/* ========================================================================== + CUSTOM MATERIALIZE STYLES + ========================================================================== */ + +.picker__input.picker__input--active { + border-color: color("blue", "lighten-5"); +} + +.picker__frame { + margin: 0 auto; + max-width: 325px; +} + +@media (min-height: 38.875em) { + .picker--opened .picker__frame { + top: 10%; + bottom: auto; + } +} diff --git a/docs/assets/css/components/date_picker/_default.time.scss b/docs/assets/css/components/date_picker/_default.time.scss new file mode 100644 index 0000000..0b159c8 --- /dev/null +++ b/docs/assets/css/components/date_picker/_default.time.scss @@ -0,0 +1,125 @@ +/* ========================================================================== + $BASE-TIME-PICKER + ========================================================================== */ +/** + * The list of times. + */ +.picker__list { + list-style: none; + padding: 0.75em 0 4.2em; + margin: 0; +} +/** + * The times on the clock. + */ +.picker__list-item { + border-bottom: 1px solid #dddddd; + border-top: 1px solid #dddddd; + margin-bottom: -1px; + position: relative; + background: #ffffff; + padding: .75em 1.25em; +} +@media (min-height: 46.75em) { + .picker__list-item { + padding: .5em 1em; + } +} +/* Hovered time */ +.picker__list-item:hover { + cursor: pointer; + color: #000000; + background: #b1dcfb; + border-color: #0089ec; + z-index: 10; +} +/* Highlighted and hovered/focused time */ +.picker__list-item--highlighted { + border-color: #0089ec; + z-index: 10; +} +.picker__list-item--highlighted:hover, +.picker--focused .picker__list-item--highlighted { + cursor: pointer; + color: #000000; + background: #b1dcfb; +} +/* Selected and hovered/focused time */ +.picker__list-item--selected, +.picker__list-item--selected:hover, +.picker--focused .picker__list-item--selected { + background: #0089ec; + color: #ffffff; + z-index: 10; +} +/* Disabled time */ +.picker__list-item--disabled, +.picker__list-item--disabled:hover, +.picker--focused .picker__list-item--disabled { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default; + border-color: #dddddd; + z-index: auto; +} +/** + * The clear button + */ +.picker--time .picker__button--clear { + display: block; + width: 80%; + margin: 1em auto 0; + padding: 1em 1.25em; + background: none; + border: 0; + font-weight: 500; + font-size: .67em; + text-align: center; + text-transform: uppercase; + color: #666; +} +.picker--time .picker__button--clear:hover, +.picker--time .picker__button--clear:focus { + color: #000000; + background: #b1dcfb; + background: #ee2200; + border-color: #ee2200; + cursor: pointer; + color: #ffffff; + outline: none; +} +.picker--time .picker__button--clear:before { + top: -0.25em; + color: #666; + font-size: 1.25em; + font-weight: bold; +} +.picker--time .picker__button--clear:hover:before, +.picker--time .picker__button--clear:focus:before { + color: #ffffff; +} + +/* ========================================================================== + $DEFAULT-TIME-PICKER + ========================================================================== */ +/** + * The frame the bounds the time picker. + */ +.picker--time .picker__frame { + min-width: 256px; + max-width: 320px; +} +/** + * The picker box. + */ +.picker--time .picker__box { + font-size: 1em; + background: #f2f2f2; + padding: 0; +} +@media (min-height: 40.125em) { + .picker--time .picker__box { + margin-bottom: 5em; + } +} diff --git a/docs/assets/css/components/forms/_checkboxes.scss b/docs/assets/css/components/forms/_checkboxes.scss new file mode 100644 index 0000000..a8743c1 --- /dev/null +++ b/docs/assets/css/components/forms/_checkboxes.scss @@ -0,0 +1,220 @@ +/* Checkboxes + ========================================================================== */ + +/* CUSTOM CSS CHECKBOXES */ +form p { + margin-bottom: 10px; + text-align: left; +} + +form p:last-child { + margin-bottom: 0; +} + +/* Remove default checkbox */ +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + left: -9999px; + opacity: 0; +} + +// Checkbox Styles +[type="checkbox"] { + // Text Label Style + + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + + -webkit-user-select: none; /* webkit (safari, chrome) browsers */ + -moz-user-select: none; /* mozilla browsers */ + -khtml-user-select: none; /* webkit (konqueror) browsers */ + -ms-user-select: none; /* IE10+ */ + } + + /* checkbox aspect */ + + label:before, + &:not(.filled-in) + label:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid $radio-empty-color; + border-radius: 1px; + margin-top: 2px; + transition: .2s; + } + + &:not(.filled-in) + label:after { + border: 0; + transform: scale(0); + } + + &:not(:checked):disabled + label:before { + border: none; + background-color: $input-disabled-color; + } + + // Focused styles + &.tabbed:focus + label:after { + transform: scale(1); + border: 0; + border-radius: 50%; + box-shadow: 0 0 0 10px rgba(0,0,0,.1); + background-color: rgba(0,0,0,.1); + } +} + +[type="checkbox"]:checked { + + label:before { + top: -4px; + left: -5px; + width: 12px; + height: 22px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: $radio-border; + border-bottom: $radio-border; + transform: rotate(40deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + &:disabled + label:before { + border-right: 2px solid $input-disabled-color; + border-bottom: 2px solid $input-disabled-color; + } +} + +/* Indeterminate checkbox */ +[type="checkbox"]:indeterminate { + +label:before { + top: -11px; + left: -12px; + width: 10px; + height: 22px; + border-top: none; + border-left: none; + border-right: $radio-border; + border-bottom: none; + transform: rotate(90deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + // Disabled indeterminate + &:disabled + label:before { + border-right: 2px solid $input-disabled-color; + background-color: transparent; + } +} + +// Filled in Style +[type="checkbox"].filled-in { + // General + + label:after { + border-radius: 2px; + } + + + label:before, + + label:after { + content: ''; + left: 0; + position: absolute; + /* .1s delay is for check animation */ + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1; + } + + // Unchecked style + &:not(:checked) + label:before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + -webkit-transform-origin: 20% 40%; + transform-origin: 100% 100%; + } + + &:not(:checked) + label:after { + height: 20px; + width: 20px; + background-color: transparent; + border: 2px solid $radio-empty-color; + top: 0px; + z-index: 0; + } + + // Checked style + &:checked { + + label:before { + top: 0; + left: 1px; + width: 8px; + height: 13px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid $input-background; + border-bottom: 2px solid $input-background; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; + } + + + label:after { + top: 0; + width: 20px; + height: 20px; + border: 2px solid $secondary-color; + background-color: $secondary-color; + z-index: 0; + } + } + + // Focused styles + &.tabbed:focus + label:after { + border-radius: 2px; + border-color: $radio-empty-color; + background-color: rgba(0,0,0,.1); + } + + &.tabbed:checked:focus + label:after { + border-radius: 2px; + background-color: $secondary-color; + border-color: $secondary-color; + } + + // Disabled style + &:disabled:not(:checked) + label:before { + background-color: transparent; + border: 2px solid transparent; + } + + &:disabled:not(:checked) + label:after { + border-color: transparent; + background-color: $input-disabled-solid-color; + } + + &:disabled:checked + label:before { + background-color: transparent; + } + + &:disabled:checked + label:after { + background-color: $input-disabled-solid-color; + border-color: $input-disabled-solid-color; + } +} diff --git a/docs/assets/css/components/forms/_file-input.scss b/docs/assets/css/components/forms/_file-input.scss new file mode 100644 index 0000000..3b3fe55 --- /dev/null +++ b/docs/assets/css/components/forms/_file-input.scss @@ -0,0 +1,38 @@ +/* File Input + ========================================================================== */ + +.file-field { + position: relative; + + .file-path-wrapper { + overflow: hidden; + padding-left: 10px; + } + + input.file-path { width: 100%; } + + .btn { + float: left; + height: $input-height; + line-height: $input-height; + } + + span { + cursor: pointer; + } + + input[type=file] { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); + } +} diff --git a/docs/assets/css/components/forms/_forms.scss b/docs/assets/css/components/forms/_forms.scss new file mode 100644 index 0000000..e9b65b4 --- /dev/null +++ b/docs/assets/css/components/forms/_forms.scss @@ -0,0 +1,22 @@ +// Remove Focus Boxes +select:focus { + outline: $select-focus; +} + +button:focus { + outline: none; + background-color: $button-background-focus; +} + +label { + font-size: $label-font-size; + color: $input-border-color; +} + +@import 'input-fields'; +@import 'radio-buttons'; +@import 'checkboxes'; +@import 'switches'; +@import 'select'; +@import 'file-input'; +@import 'range'; diff --git a/docs/assets/css/components/forms/_input-fields.scss b/docs/assets/css/components/forms/_input-fields.scss new file mode 100644 index 0000000..ebaf5ac --- /dev/null +++ b/docs/assets/css/components/forms/_input-fields.scss @@ -0,0 +1,241 @@ +/* Text Inputs + Textarea + ========================================================================== */ + +/* Style Placeholders */ + +::-webkit-input-placeholder { + color: $placeholder-text-color; +} + +:-moz-placeholder { /* Firefox 18- */ + color: $placeholder-text-color; +} + +::-moz-placeholder { /* Firefox 19+ */ + color: $placeholder-text-color; +} + +:-ms-input-placeholder { + color: $placeholder-text-color; +} + +/* Text inputs */ + +input:not([type]), +input[type=text], +input[type=password], +input[type=email], +input[type=url], +input[type=time], +input[type=date], +input[type=datetime], +input[type=datetime-local], +input[type=tel], +input[type=number], +input[type=search], +textarea.materialize-textarea { + + // General Styles + background-color: transparent; + border: none; + border-bottom: $input-border; + border-radius: 0; + outline: none; + height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: $input-padding; + box-shadow: none; + box-sizing: content-box; + transition: $input-transition; + + // Disabled input style + &:disabled, + &[readonly="readonly"] { + color: $input-disabled-color; + border-bottom: $input-disabled-border; + } + + // Disabled label style + &:disabled+label, + &[readonly="readonly"]+label { + color: $input-disabled-color; + } + + // Focused input style + &:focus:not([readonly]) { + border-bottom: 1px solid $input-focus-color; + box-shadow: 0 1px 0 0 $input-focus-color; + } + + // Focused label style + &:focus:not([readonly])+label { + color: $input-focus-color; + } + + // Valid Input Style + &.valid, + &:focus.valid { + border-bottom: 1px solid $input-success-color; + box-shadow: 0 1px 0 0 $input-success-color; + } + + // Custom Success Message + &.valid + label:after, + &:focus.valid + label:after { + content: attr(data-success); + color: $input-success-color; + opacity: 1; + } + + // Invalid Input Style + &.invalid, + &:focus.invalid { + border-bottom: $input-invalid-border; + box-shadow: 0 1px 0 0 $input-error-color; + } + + // Custom Error message + &.invalid + label:after, + &:focus.invalid + label:after { + content: attr(data-error); + color: $input-error-color; + opacity: 1; + } + + // Full width label when using validate for error messages + &.validate + label { + width: 100%; + pointer-events: none; + } + + // Form Message Shared Styles + & + label:after { + display: block; + content: ""; + position: absolute; + top: 65px; + opacity: 0; + transition: .2s opacity ease-out, .2s color ease-out; + } +} + +// Styling for input field wrapper +.input-field { + position: relative; + margin-top: 1rem; + + label { + color: $input-border-color; + position: absolute; + top: 0.8rem; + left: $gutter-width / 2; + font-size: 1rem; + cursor: text; + transition: .2s ease-out; + } + + label.active { + font-size: $label-font-size; + transform: translateY(-140%); + } + + // Prefix Icons + .prefix { + position: absolute; + width: $input-height; + font-size: 2rem; + transition: color .2s; + + &.active { color: $input-focus-color; } + } + + .prefix ~ input, + .prefix ~ textarea { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); + } + + .prefix ~ textarea { padding-top: .8rem; } + .prefix ~ label { margin-left: 3rem; } + + @media #{$medium-and-down} { + .prefix ~ input { + width: 86%; + width: calc(100% - 3rem); + } + } + + @media #{$small-and-down} { + .prefix ~ input { + width: 80%; + width: calc(100% - 3rem); + } + } +} + + +/* Search Field */ + +.input-field input[type=search] { + display: block; + line-height: inherit; + padding-left: 4rem; + width: calc(100% - 4rem); + + &:focus { + background-color: $input-background; + border: 0; + box-shadow: none; + color: #444; + + & + label i, + & ~ .mdi-navigation-close, + & ~ .material-icons { + color: #444; + } + } + + & + label { + left: 1rem; + } + + & ~ .mdi-navigation-close, + & ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + transition: .3s color; + } +} + + +/* Textarea */ + +// Default textarea +textarea { + width: 100%; + height: $input-height; + background-color: transparent; + + &.materialize-textarea { + overflow-y: hidden; /* prevents scroll bar flash */ + padding: 1.6rem 0; /* prevents text jump on Enter keypress */ + resize: none; + min-height: $input-height; + } +} + +// For textarea autoresize +.hiddendiv { + display: none; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ + padding-top: 1.2rem; /* prevents text jump on Enter keypress */ +} diff --git a/docs/assets/css/components/forms/_radio-buttons.scss b/docs/assets/css/components/forms/_radio-buttons.scss new file mode 100644 index 0000000..cb1f37d --- /dev/null +++ b/docs/assets/css/components/forms/_radio-buttons.scss @@ -0,0 +1,119 @@ +/* Radio Buttons + ========================================================================== */ + +// Remove default Radio Buttons +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + left: -9999px; + opacity: 0; +} + +[type="radio"]:not(:checked) + label, +[type="radio"]:checked + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + transition: .28s ease; + + -khtml-user-select: none; /* webkit (konqueror) browsers */ + user-select: none; +} + +[type="radio"] + label:before, +[type="radio"] + label:after { + content: ''; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + transition: .28s ease; +} + +/* Unchecked styles */ +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after, +[type="radio"]:checked + label:before, +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border-radius: 50%; +} + +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after { + border: 2px solid $radio-empty-color; +} + +[type="radio"]:not(:checked) + label:after { + z-index: -1; + transform: scale(0); +} + +/* Checked styles */ +[type="radio"]:checked + label:before { + border: 2px solid transparent; +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border: $radio-border; +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:after { + background-color: $radio-fill-color; + z-index: 0; +} + +[type="radio"]:checked + label:after { + transform: scale(1.02); +} + +/* Radio With gap */ +[type="radio"].with-gap:checked + label:after { + transform: scale(.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + label:before { + box-shadow: 0 0 0 10px rgba(0,0,0,.1); +} + +/* Disabled Radio With gap */ +[type="radio"].with-gap:disabled:checked + label:before { + border: 2px solid $input-disabled-color; +} + +[type="radio"].with-gap:disabled:checked + label:after { + border: none; + background-color: $input-disabled-color; +} + +/* Disabled style */ +[type="radio"]:disabled:not(:checked) + label:before, +[type="radio"]:disabled:checked + label:before { + background-color: transparent; + border-color: $input-disabled-color; +} + +[type="radio"]:disabled + label { + color: $input-disabled-color; +} + +[type="radio"]:disabled:not(:checked) + label:before { + border-color: $input-disabled-color; +} + +[type="radio"]:disabled:checked + label:after { + background-color: $input-disabled-color; + border-color: $input-disabled-solid-color; +} diff --git a/docs/assets/css/components/forms/_range.scss b/docs/assets/css/components/forms/_range.scss new file mode 100644 index 0000000..7947375 --- /dev/null +++ b/docs/assets/css/components/forms/_range.scss @@ -0,0 +1,159 @@ +/* Range + ========================================================================== */ + +.range-field { + position: relative; +} + +input[type=range], +input[type=range] + .thumb { + @extend .no-select; + cursor: pointer; +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; + + &:focus { + outline: none; + } +} + +input[type=range] + .thumb { + position: absolute; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: $radio-fill-color; + top: 10px; + margin-left: -6px; + + transform-origin: 50% 50%; + transform: rotate(-45deg); + + .value { + display: block; + width: 30px; + text-align: center; + color: $radio-fill-color; + font-size: 0; + transform: rotate(45deg); + } + + &.active { + border-radius: 50% 50% 50% 0; + + .value { + color: $input-background; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; + } + } +} + +// WebKit +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: $track-height; + background: #c2c0c2; + border: none; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background-color: $radio-fill-color; + transform-origin: 50% 50%; + margin: -5px 0 0 0; + transition: .3s; +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #ccc; +} + +// FireFox +input[type=range] { + /* fix for FF unable to apply focus style bug */ + border: 1px solid white; + + /*required for proper track sizing in FF*/ +} + +input[type=range]::-moz-range-track { + height: $track-height; + background: #ddd; + border: none; +} + +input[type=range]::-moz-range-thumb { + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background: $radio-fill-color; + margin-top: -5px; +} + +// hide the outline behind the border +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px; +} + +input[type=range]:focus::-moz-range-track { + background: #ccc; +} + +// IE 10+ +input[type=range]::-ms-track { + height: $track-height; + + // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead + background: transparent; + + // leave room for the larger thumb to overflow with a transparent border */ + border-color: transparent; + border-width: 6px 0; + + /*remove default tick marks*/ + color: transparent; +} + +input[type=range]::-ms-fill-lower { + background: #777; +} + +input[type=range]::-ms-fill-upper { + background: #ddd; +} + +input[type=range]::-ms-thumb { + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background: $radio-fill-color; +} + +input[type=range]:focus::-ms-fill-lower { + background: #888; +} + +input[type=range]:focus::-ms-fill-upper { + background: #ccc; +} diff --git a/docs/assets/css/components/forms/_select.scss b/docs/assets/css/components/forms/_select.scss new file mode 100644 index 0000000..884351a --- /dev/null +++ b/docs/assets/css/components/forms/_select.scss @@ -0,0 +1,116 @@ +/* Select Field + ========================================================================== */ + +select { display: none; } +select.browser-default { display: block; } + +select { + background-color: $select-background; + width: 100%; + padding: $select-padding; + border: $select-border; + border-radius: $select-radius; + height: $input-height; +} + +.select-label { + position: absolute; +} + +.select-wrapper { + position: relative; + + input.select-dropdown { + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: $input-border; + outline: none; + height: $input-height; + line-height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: 0; + display: block; + } + + span.caret { + color: initial; + position: absolute; + right: 0; + top: 16px; + font-size: 10px; + &.disabled { + color: $input-disabled-color; + } + } + + & + label { + position: absolute; + top: -14px; + font-size: $label-font-size; + } +} + +// Disabled styles +select:disabled { + color: rgba(0,0,0,.3); +} + +.select-wrapper input.select-dropdown:disabled { + color: rgba(0,0,0,.3); + cursor: default; + -webkit-user-select: none; /* webkit (safari, chrome) browsers */ + -moz-user-select: none; /* mozilla browsers */ + -ms-user-select: none; /* IE10+ */ + border-bottom: 1px solid rgba(0,0,0,.3); +} + +.select-wrapper i { + color: $select-disabled-color; +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: $select-disabled-color; + background-color: transparent; +} + +// Prefix Icons +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.prefix ~ label { margin-left: 3rem; } + +// Icons +.select-dropdown li { + img { + height: $dropdown-item-height - 10; + width: $dropdown-item-height - 10; + margin: 5px 15px; + float: right; + } +} + +// Optgroup styles +.select-dropdown li.optgroup { + border-top: 1px solid $dropdown-hover-bg-color; + + &.selected > span { + color: rgba(0, 0, 0, .7); + } + + & > span { + color: rgba(0, 0, 0, .4); + } + + & ~ li.optgroup-option { + padding-left: 1rem; + } +} diff --git a/docs/assets/css/components/forms/_switches.scss b/docs/assets/css/components/forms/_switches.scss new file mode 100644 index 0000000..2c6655a --- /dev/null +++ b/docs/assets/css/components/forms/_switches.scss @@ -0,0 +1,78 @@ +/* Switch + ========================================================================== */ + +.switch, +.switch * { + -webkit-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -ms-user-select: none; +} + +.switch label { + cursor: pointer; +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0; + + &:checked + .lever { + background-color: $switch-checked-lever-bg; + + &:after { + background-color: $switch-bg-color; + left: 24px; + } + } +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 40px; + height: 15px; + background-color: $switch-unchecked-lever-bg; + border-radius: $switch-radius; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px; + + &:after { + content: ""; + position: absolute; + display: inline-block; + width: 21px; + height: 21px; + background-color: $switch-unchecked-bg; + border-radius: 21px; + box-shadow: 0 1px 3px 1px rgba(0,0,0,.4); + left: -5px; + top: -3px; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; + } +} + +// Switch active style +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::after, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px transparentize($switch-bg-color, .9); +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:after, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px rgba(0, 0, 0, .08); +} + +// Disabled Styles +.switch input[type=checkbox][disabled] + .lever { + cursor: default; +} + +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: $input-disabled-solid-color; +} diff --git a/docs/assets/css/materialize.css b/docs/assets/css/materialize.css new file mode 100644 index 0000000..ed5d78e --- /dev/null +++ b/docs/assets/css/materialize.css @@ -0,0 +1,7864 @@ +.materialize-red { + background-color: #e51c23 !important +} + +.materialize-red-text { + color: #e51c23 !important +} + +.materialize-red.lighten-5 { + background-color: #fdeaeb !important +} + +.materialize-red-text.text-lighten-5 { + color: #fdeaeb !important +} + +.materialize-red.lighten-4 { + background-color: #f8c1c3 !important +} + +.materialize-red-text.text-lighten-4 { + color: #f8c1c3 !important +} + +.materialize-red.lighten-3 { + background-color: #f3989b !important +} + +.materialize-red-text.text-lighten-3 { + color: #f3989b !important +} + +.materialize-red.lighten-2 { + background-color: #ee6e73 !important +} + +.materialize-red-text.text-lighten-2 { + color: #ee6e73 !important +} + +.materialize-red.lighten-1 { + background-color: #ea454b !important +} + +.materialize-red-text.text-lighten-1 { + color: #ea454b !important +} + +.materialize-red.darken-1 { + background-color: #d0181e !important +} + +.materialize-red-text.text-darken-1 { + color: #d0181e !important +} + +.materialize-red.darken-2 { + background-color: #b9151b !important +} + +.materialize-red-text.text-darken-2 { + color: #b9151b !important +} + +.materialize-red.darken-3 { + background-color: #a21318 !important +} + +.materialize-red-text.text-darken-3 { + color: #a21318 !important +} + +.materialize-red.darken-4 { + background-color: #8b1014 !important +} + +.materialize-red-text.text-darken-4 { + color: #8b1014 !important +} + +.red { + background-color: #F44336 !important +} + +.red-text { + color: #F44336 !important +} + +.red.lighten-5 { + background-color: #FFEBEE !important +} + +.red-text.text-lighten-5 { + color: #FFEBEE !important +} + +.red.lighten-4 { + background-color: #FFCDD2 !important +} + +.red-text.text-lighten-4 { + color: #FFCDD2 !important +} + +.red.lighten-3 { + background-color: #EF9A9A !important +} + +.red-text.text-lighten-3 { + color: #EF9A9A !important +} + +.red.lighten-2 { + background-color: #E57373 !important +} + +.red-text.text-lighten-2 { + color: #E57373 !important +} + +.red.lighten-1 { + background-color: #EF5350 !important +} + +.red-text.text-lighten-1 { + color: #EF5350 !important +} + +.red.darken-1 { + background-color: #E53935 !important +} + +.red-text.text-darken-1 { + color: #E53935 !important +} + +.red.darken-2 { + background-color: #D32F2F !important +} + +.red-text.text-darken-2 { + color: #D32F2F !important +} + +.red.darken-3 { + background-color: #C62828 !important +} + +.red-text.text-darken-3 { + color: #C62828 !important +} + +.red.darken-4 { + background-color: #B71C1C !important +} + +.red-text.text-darken-4 { + color: #B71C1C !important +} + +.red.accent-1 { + background-color: #FF8A80 !important +} + +.red-text.text-accent-1 { + color: #FF8A80 !important +} + +.red.accent-2 { + background-color: #FF5252 !important +} + +.red-text.text-accent-2 { + color: #FF5252 !important +} + +.red.accent-3 { + background-color: #FF1744 !important +} + +.red-text.text-accent-3 { + color: #FF1744 !important +} + +.red.accent-4 { + background-color: #D50000 !important +} + +.red-text.text-accent-4 { + color: #D50000 !important +} + +.pink { + background-color: #e91e63 !important +} + +.pink-text { + color: #e91e63 !important +} + +.pink.lighten-5 { + background-color: #fce4ec !important +} + +.pink-text.text-lighten-5 { + color: #fce4ec !important +} + +.pink.lighten-4 { + background-color: #f8bbd0 !important +} + +.pink-text.text-lighten-4 { + color: #f8bbd0 !important +} + +.pink.lighten-3 { + background-color: #f48fb1 !important +} + +.pink-text.text-lighten-3 { + color: #f48fb1 !important +} + +.pink.lighten-2 { + background-color: #f06292 !important +} + +.pink-text.text-lighten-2 { + color: #f06292 !important +} + +.pink.lighten-1 { + background-color: #ec407a !important +} + +.pink-text.text-lighten-1 { + color: #ec407a !important +} + +.pink.darken-1 { + background-color: #d81b60 !important +} + +.pink-text.text-darken-1 { + color: #d81b60 !important +} + +.pink.darken-2 { + background-color: #c2185b !important +} + +.pink-text.text-darken-2 { + color: #c2185b !important +} + +.pink.darken-3 { + background-color: #ad1457 !important +} + +.pink-text.text-darken-3 { + color: #ad1457 !important +} + +.pink.darken-4 { + background-color: #880e4f !important +} + +.pink-text.text-darken-4 { + color: #880e4f !important +} + +.pink.accent-1 { + background-color: #ff80ab !important +} + +.pink-text.text-accent-1 { + color: #ff80ab !important +} + +.pink.accent-2 { + background-color: #ff4081 !important +} + +.pink-text.text-accent-2 { + color: #ff4081 !important +} + +.pink.accent-3 { + background-color: #f50057 !important +} + +.pink-text.text-accent-3 { + color: #f50057 !important +} + +.pink.accent-4 { + background-color: #c51162 !important +} + +.pink-text.text-accent-4 { + color: #c51162 !important +} + +.purple { + background-color: #9c27b0 !important +} + +.purple-text { + color: #9c27b0 !important +} + +.purple.lighten-5 { + background-color: #f3e5f5 !important +} + +.purple-text.text-lighten-5 { + color: #f3e5f5 !important +} + +.purple.lighten-4 { + background-color: #e1bee7 !important +} + +.purple-text.text-lighten-4 { + color: #e1bee7 !important +} + +.purple.lighten-3 { + background-color: #ce93d8 !important +} + +.purple-text.text-lighten-3 { + color: #ce93d8 !important +} + +.purple.lighten-2 { + background-color: #ba68c8 !important +} + +.purple-text.text-lighten-2 { + color: #ba68c8 !important +} + +.purple.lighten-1 { + background-color: #ab47bc !important +} + +.purple-text.text-lighten-1 { + color: #ab47bc !important +} + +.purple.darken-1 { + background-color: #8e24aa !important +} + +.purple-text.text-darken-1 { + color: #8e24aa !important +} + +.purple.darken-2 { + background-color: #7b1fa2 !important +} + +.purple-text.text-darken-2 { + color: #7b1fa2 !important +} + +.purple.darken-3 { + background-color: #6a1b9a !important +} + +.purple-text.text-darken-3 { + color: #6a1b9a !important +} + +.purple.darken-4 { + background-color: #4a148c !important +} + +.purple-text.text-darken-4 { + color: #4a148c !important +} + +.purple.accent-1 { + background-color: #ea80fc !important +} + +.purple-text.text-accent-1 { + color: #ea80fc !important +} + +.purple.accent-2 { + background-color: #e040fb !important +} + +.purple-text.text-accent-2 { + color: #e040fb !important +} + +.purple.accent-3 { + background-color: #d500f9 !important +} + +.purple-text.text-accent-3 { + color: #d500f9 !important +} + +.purple.accent-4 { + background-color: #a0f !important +} + +.purple-text.text-accent-4 { + color: #a0f !important +} + +.deep-purple { + background-color: #673ab7 !important +} + +.deep-purple-text { + color: #673ab7 !important +} + +.deep-purple.lighten-5 { + background-color: #ede7f6 !important +} + +.deep-purple-text.text-lighten-5 { + color: #ede7f6 !important +} + +.deep-purple.lighten-4 { + background-color: #d1c4e9 !important +} + +.deep-purple-text.text-lighten-4 { + color: #d1c4e9 !important +} + +.deep-purple.lighten-3 { + background-color: #b39ddb !important +} + +.deep-purple-text.text-lighten-3 { + color: #b39ddb !important +} + +.deep-purple.lighten-2 { + background-color: #9575cd !important +} + +.deep-purple-text.text-lighten-2 { + color: #9575cd !important +} + +.deep-purple.lighten-1 { + background-color: #7e57c2 !important +} + +.deep-purple-text.text-lighten-1 { + color: #7e57c2 !important +} + +.deep-purple.darken-1 { + background-color: #5e35b1 !important +} + +.deep-purple-text.text-darken-1 { + color: #5e35b1 !important +} + +.deep-purple.darken-2 { + background-color: #512da8 !important +} + +.deep-purple-text.text-darken-2 { + color: #512da8 !important +} + +.deep-purple.darken-3 { + background-color: #4527a0 !important +} + +.deep-purple-text.text-darken-3 { + color: #4527a0 !important +} + +.deep-purple.darken-4 { + background-color: #311b92 !important +} + +.deep-purple-text.text-darken-4 { + color: #311b92 !important +} + +.deep-purple.accent-1 { + background-color: #b388ff !important +} + +.deep-purple-text.text-accent-1 { + color: #b388ff !important +} + +.deep-purple.accent-2 { + background-color: #7c4dff !important +} + +.deep-purple-text.text-accent-2 { + color: #7c4dff !important +} + +.deep-purple.accent-3 { + background-color: #651fff !important +} + +.deep-purple-text.text-accent-3 { + color: #651fff !important +} + +.deep-purple.accent-4 { + background-color: #6200ea !important +} + +.deep-purple-text.text-accent-4 { + color: #6200ea !important +} + +.indigo { + background-color: #3f51b5 !important +} + +.indigo-text { + color: #3f51b5 !important +} + +.indigo.lighten-5 { + background-color: #e8eaf6 !important +} + +.indigo-text.text-lighten-5 { + color: #e8eaf6 !important +} + +.indigo.lighten-4 { + background-color: #c5cae9 !important +} + +.indigo-text.text-lighten-4 { + color: #c5cae9 !important +} + +.indigo.lighten-3 { + background-color: #9fa8da !important +} + +.indigo-text.text-lighten-3 { + color: #9fa8da !important +} + +.indigo.lighten-2 { + background-color: #7986cb !important +} + +.indigo-text.text-lighten-2 { + color: #7986cb !important +} + +.indigo.lighten-1 { + background-color: #5c6bc0 !important +} + +.indigo-text.text-lighten-1 { + color: #5c6bc0 !important +} + +.indigo.darken-1 { + background-color: #3949ab !important +} + +.indigo-text.text-darken-1 { + color: #3949ab !important +} + +.indigo.darken-2 { + background-color: #303f9f !important +} + +.indigo-text.text-darken-2 { + color: #303f9f !important +} + +.indigo.darken-3 { + background-color: #283593 !important +} + +.indigo-text.text-darken-3 { + color: #283593 !important +} + +.indigo.darken-4 { + background-color: #1a237e !important +} + +.indigo-text.text-darken-4 { + color: #1a237e !important +} + +.indigo.accent-1 { + background-color: #8c9eff !important +} + +.indigo-text.text-accent-1 { + color: #8c9eff !important +} + +.indigo.accent-2 { + background-color: #536dfe !important +} + +.indigo-text.text-accent-2 { + color: #536dfe !important +} + +.indigo.accent-3 { + background-color: #3d5afe !important +} + +.indigo-text.text-accent-3 { + color: #3d5afe !important +} + +.indigo.accent-4 { + background-color: #304ffe !important +} + +.indigo-text.text-accent-4 { + color: #304ffe !important +} + +.blue { + background-color: #2196F3 !important +} + +.blue-text { + color: #2196F3 !important +} + +.blue.lighten-5 { + background-color: #E3F2FD !important +} + +.blue-text.text-lighten-5 { + color: #E3F2FD !important +} + +.blue.lighten-4 { + background-color: #BBDEFB !important +} + +.blue-text.text-lighten-4 { + color: #BBDEFB !important +} + +.blue.lighten-3 { + background-color: #90CAF9 !important +} + +.blue-text.text-lighten-3 { + color: #90CAF9 !important +} + +.blue.lighten-2 { + background-color: #64B5F6 !important +} + +.blue-text.text-lighten-2 { + color: #64B5F6 !important +} + +.blue.lighten-1 { + background-color: #42A5F5 !important +} + +.blue-text.text-lighten-1 { + color: #42A5F5 !important +} + +.blue.darken-1 { + background-color: #1E88E5 !important +} + +.blue-text.text-darken-1 { + color: #1E88E5 !important +} + +.blue.darken-2 { + background-color: #1976D2 !important +} + +.blue-text.text-darken-2 { + color: #1976D2 !important +} + +.blue.darken-3 { + background-color: #1565C0 !important +} + +.blue-text.text-darken-3 { + color: #1565C0 !important +} + +.blue.darken-4 { + background-color: #0D47A1 !important +} + +.blue-text.text-darken-4 { + color: #0D47A1 !important +} + +.blue.accent-1 { + background-color: #82B1FF !important +} + +.blue-text.text-accent-1 { + color: #82B1FF !important +} + +.blue.accent-2 { + background-color: #448AFF !important +} + +.blue-text.text-accent-2 { + color: #448AFF !important +} + +.blue.accent-3 { + background-color: #2979FF !important +} + +.blue-text.text-accent-3 { + color: #2979FF !important +} + +.blue.accent-4 { + background-color: #2962FF !important +} + +.blue-text.text-accent-4 { + color: #2962FF !important +} + +.light-blue { + background-color: #03a9f4 !important +} + +.light-blue-text { + color: #03a9f4 !important +} + +.light-blue.lighten-5 { + background-color: #e1f5fe !important +} + +.light-blue-text.text-lighten-5 { + color: #e1f5fe !important +} + +.light-blue.lighten-4 { + background-color: #b3e5fc !important +} + +.light-blue-text.text-lighten-4 { + color: #b3e5fc !important +} + +.light-blue.lighten-3 { + background-color: #81d4fa !important +} + +.light-blue-text.text-lighten-3 { + color: #81d4fa !important +} + +.light-blue.lighten-2 { + background-color: #4fc3f7 !important +} + +.light-blue-text.text-lighten-2 { + color: #4fc3f7 !important +} + +.light-blue.lighten-1 { + background-color: #29b6f6 !important +} + +.light-blue-text.text-lighten-1 { + color: #29b6f6 !important +} + +.light-blue.darken-1 { + background-color: #039be5 !important +} + +.light-blue-text.text-darken-1 { + color: #039be5 !important +} + +.light-blue.darken-2 { + background-color: #0288d1 !important +} + +.light-blue-text.text-darken-2 { + color: #0288d1 !important +} + +.light-blue.darken-3 { + background-color: #0277bd !important +} + +.light-blue-text.text-darken-3 { + color: #0277bd !important +} + +.light-blue.darken-4 { + background-color: #01579b !important +} + +.light-blue-text.text-darken-4 { + color: #01579b !important +} + +.light-blue.accent-1 { + background-color: #80d8ff !important +} + +.light-blue-text.text-accent-1 { + color: #80d8ff !important +} + +.light-blue.accent-2 { + background-color: #40c4ff !important +} + +.light-blue-text.text-accent-2 { + color: #40c4ff !important +} + +.light-blue.accent-3 { + background-color: #00b0ff !important +} + +.light-blue-text.text-accent-3 { + color: #00b0ff !important +} + +.light-blue.accent-4 { + background-color: #0091ea !important +} + +.light-blue-text.text-accent-4 { + color: #0091ea !important +} + +.cyan { + background-color: #00bcd4 !important +} + +.cyan-text { + color: #00bcd4 !important +} + +.cyan.lighten-5 { + background-color: #e0f7fa !important +} + +.cyan-text.text-lighten-5 { + color: #e0f7fa !important +} + +.cyan.lighten-4 { + background-color: #b2ebf2 !important +} + +.cyan-text.text-lighten-4 { + color: #b2ebf2 !important +} + +.cyan.lighten-3 { + background-color: #80deea !important +} + +.cyan-text.text-lighten-3 { + color: #80deea !important +} + +.cyan.lighten-2 { + background-color: #4dd0e1 !important +} + +.cyan-text.text-lighten-2 { + color: #4dd0e1 !important +} + +.cyan.lighten-1 { + background-color: #26c6da !important +} + +.cyan-text.text-lighten-1 { + color: #26c6da !important +} + +.cyan.darken-1 { + background-color: #00acc1 !important +} + +.cyan-text.text-darken-1 { + color: #00acc1 !important +} + +.cyan.darken-2 { + background-color: #0097a7 !important +} + +.cyan-text.text-darken-2 { + color: #0097a7 !important +} + +.cyan.darken-3 { + background-color: #00838f !important +} + +.cyan-text.text-darken-3 { + color: #00838f !important +} + +.cyan.darken-4 { + background-color: #006064 !important +} + +.cyan-text.text-darken-4 { + color: #006064 !important +} + +.cyan.accent-1 { + background-color: #84ffff !important +} + +.cyan-text.text-accent-1 { + color: #84ffff !important +} + +.cyan.accent-2 { + background-color: #18ffff !important +} + +.cyan-text.text-accent-2 { + color: #18ffff !important +} + +.cyan.accent-3 { + background-color: #00e5ff !important +} + +.cyan-text.text-accent-3 { + color: #00e5ff !important +} + +.cyan.accent-4 { + background-color: #00b8d4 !important +} + +.cyan-text.text-accent-4 { + color: #00b8d4 !important +} + +.teal { + background-color: #009688 !important +} + +.teal-text { + color: #009688 !important +} + +.teal.lighten-5 { + background-color: #e0f2f1 !important +} + +.teal-text.text-lighten-5 { + color: #e0f2f1 !important +} + +.teal.lighten-4 { + background-color: #b2dfdb !important +} + +.teal-text.text-lighten-4 { + color: #b2dfdb !important +} + +.teal.lighten-3 { + background-color: #80cbc4 !important +} + +.teal-text.text-lighten-3 { + color: #80cbc4 !important +} + +.teal.lighten-2 { + background-color: #4db6ac !important +} + +.teal-text.text-lighten-2 { + color: #4db6ac !important +} + +.teal.lighten-1 { + background-color: #26a69a !important +} + +.teal-text.text-lighten-1 { + color: #26a69a !important +} + +.teal.darken-1 { + background-color: #00897b !important +} + +.teal-text.text-darken-1 { + color: #00897b !important +} + +.teal.darken-2 { + background-color: #00796b !important +} + +.teal-text.text-darken-2 { + color: #00796b !important +} + +.teal.darken-3 { + background-color: #00695c !important +} + +.teal-text.text-darken-3 { + color: #00695c !important +} + +.teal.darken-4 { + background-color: #004d40 !important +} + +.teal-text.text-darken-4 { + color: #004d40 !important +} + +.teal.accent-1 { + background-color: #a7ffeb !important +} + +.teal-text.text-accent-1 { + color: #a7ffeb !important +} + +.teal.accent-2 { + background-color: #64ffda !important +} + +.teal-text.text-accent-2 { + color: #64ffda !important +} + +.teal.accent-3 { + background-color: #1de9b6 !important +} + +.teal-text.text-accent-3 { + color: #1de9b6 !important +} + +.teal.accent-4 { + background-color: #00bfa5 !important +} + +.teal-text.text-accent-4 { + color: #00bfa5 !important +} + +.green { + background-color: #4CAF50 !important +} + +.green-text { + color: #4CAF50 !important +} + +.green.lighten-5 { + background-color: #E8F5E9 !important +} + +.green-text.text-lighten-5 { + color: #E8F5E9 !important +} + +.green.lighten-4 { + background-color: #C8E6C9 !important +} + +.green-text.text-lighten-4 { + color: #C8E6C9 !important +} + +.green.lighten-3 { + background-color: #A5D6A7 !important +} + +.green-text.text-lighten-3 { + color: #A5D6A7 !important +} + +.green.lighten-2 { + background-color: #81C784 !important +} + +.green-text.text-lighten-2 { + color: #81C784 !important +} + +.green.lighten-1 { + background-color: #66BB6A !important +} + +.green-text.text-lighten-1 { + color: #66BB6A !important +} + +.green.darken-1 { + background-color: #43A047 !important +} + +.green-text.text-darken-1 { + color: #43A047 !important +} + +.green.darken-2 { + background-color: #388E3C !important +} + +.green-text.text-darken-2 { + color: #388E3C !important +} + +.green.darken-3 { + background-color: #2E7D32 !important +} + +.green-text.text-darken-3 { + color: #2E7D32 !important +} + +.green.darken-4 { + background-color: #1B5E20 !important +} + +.green-text.text-darken-4 { + color: #1B5E20 !important +} + +.green.accent-1 { + background-color: #B9F6CA !important +} + +.green-text.text-accent-1 { + color: #B9F6CA !important +} + +.green.accent-2 { + background-color: #69F0AE !important +} + +.green-text.text-accent-2 { + color: #69F0AE !important +} + +.green.accent-3 { + background-color: #00E676 !important +} + +.green-text.text-accent-3 { + color: #00E676 !important +} + +.green.accent-4 { + background-color: #00C853 !important +} + +.green-text.text-accent-4 { + color: #00C853 !important +} + +.light-green { + background-color: #8bc34a !important +} + +.light-green-text { + color: #8bc34a !important +} + +.light-green.lighten-5 { + background-color: #f1f8e9 !important +} + +.light-green-text.text-lighten-5 { + color: #f1f8e9 !important +} + +.light-green.lighten-4 { + background-color: #dcedc8 !important +} + +.light-green-text.text-lighten-4 { + color: #dcedc8 !important +} + +.light-green.lighten-3 { + background-color: #c5e1a5 !important +} + +.light-green-text.text-lighten-3 { + color: #c5e1a5 !important +} + +.light-green.lighten-2 { + background-color: #aed581 !important +} + +.light-green-text.text-lighten-2 { + color: #aed581 !important +} + +.light-green.lighten-1 { + background-color: #9ccc65 !important +} + +.light-green-text.text-lighten-1 { + color: #9ccc65 !important +} + +.light-green.darken-1 { + background-color: #7cb342 !important +} + +.light-green-text.text-darken-1 { + color: #7cb342 !important +} + +.light-green.darken-2 { + background-color: #689f38 !important +} + +.light-green-text.text-darken-2 { + color: #689f38 !important +} + +.light-green.darken-3 { + background-color: #558b2f !important +} + +.light-green-text.text-darken-3 { + color: #558b2f !important +} + +.light-green.darken-4 { + background-color: #33691e !important +} + +.light-green-text.text-darken-4 { + color: #33691e !important +} + +.light-green.accent-1 { + background-color: #ccff90 !important +} + +.light-green-text.text-accent-1 { + color: #ccff90 !important +} + +.light-green.accent-2 { + background-color: #b2ff59 !important +} + +.light-green-text.text-accent-2 { + color: #b2ff59 !important +} + +.light-green.accent-3 { + background-color: #76ff03 !important +} + +.light-green-text.text-accent-3 { + color: #76ff03 !important +} + +.light-green.accent-4 { + background-color: #64dd17 !important +} + +.light-green-text.text-accent-4 { + color: #64dd17 !important +} + +.lime { + background-color: #cddc39 !important +} + +.lime-text { + color: #cddc39 !important +} + +.lime.lighten-5 { + background-color: #f9fbe7 !important +} + +.lime-text.text-lighten-5 { + color: #f9fbe7 !important +} + +.lime.lighten-4 { + background-color: #f0f4c3 !important +} + +.lime-text.text-lighten-4 { + color: #f0f4c3 !important +} + +.lime.lighten-3 { + background-color: #e6ee9c !important +} + +.lime-text.text-lighten-3 { + color: #e6ee9c !important +} + +.lime.lighten-2 { + background-color: #dce775 !important +} + +.lime-text.text-lighten-2 { + color: #dce775 !important +} + +.lime.lighten-1 { + background-color: #d4e157 !important +} + +.lime-text.text-lighten-1 { + color: #d4e157 !important +} + +.lime.darken-1 { + background-color: #c0ca33 !important +} + +.lime-text.text-darken-1 { + color: #c0ca33 !important +} + +.lime.darken-2 { + background-color: #afb42b !important +} + +.lime-text.text-darken-2 { + color: #afb42b !important +} + +.lime.darken-3 { + background-color: #9e9d24 !important +} + +.lime-text.text-darken-3 { + color: #9e9d24 !important +} + +.lime.darken-4 { + background-color: #827717 !important +} + +.lime-text.text-darken-4 { + color: #827717 !important +} + +.lime.accent-1 { + background-color: #f4ff81 !important +} + +.lime-text.text-accent-1 { + color: #f4ff81 !important +} + +.lime.accent-2 { + background-color: #eeff41 !important +} + +.lime-text.text-accent-2 { + color: #eeff41 !important +} + +.lime.accent-3 { + background-color: #c6ff00 !important +} + +.lime-text.text-accent-3 { + color: #c6ff00 !important +} + +.lime.accent-4 { + background-color: #aeea00 !important +} + +.lime-text.text-accent-4 { + color: #aeea00 !important +} + +.yellow { + background-color: #ffeb3b !important +} + +.yellow-text { + color: #ffeb3b !important +} + +.yellow.lighten-5 { + background-color: #fffde7 !important +} + +.yellow-text.text-lighten-5 { + color: #fffde7 !important +} + +.yellow.lighten-4 { + background-color: #fff9c4 !important +} + +.yellow-text.text-lighten-4 { + color: #fff9c4 !important +} + +.yellow.lighten-3 { + background-color: #fff59d !important +} + +.yellow-text.text-lighten-3 { + color: #fff59d !important +} + +.yellow.lighten-2 { + background-color: #fff176 !important +} + +.yellow-text.text-lighten-2 { + color: #fff176 !important +} + +.yellow.lighten-1 { + background-color: #ffee58 !important +} + +.yellow-text.text-lighten-1 { + color: #ffee58 !important +} + +.yellow.darken-1 { + background-color: #fdd835 !important +} + +.yellow-text.text-darken-1 { + color: #fdd835 !important +} + +.yellow.darken-2 { + background-color: #fbc02d !important +} + +.yellow-text.text-darken-2 { + color: #fbc02d !important +} + +.yellow.darken-3 { + background-color: #f9a825 !important +} + +.yellow-text.text-darken-3 { + color: #f9a825 !important +} + +.yellow.darken-4 { + background-color: #f57f17 !important +} + +.yellow-text.text-darken-4 { + color: #f57f17 !important +} + +.yellow.accent-1 { + background-color: #ffff8d !important +} + +.yellow-text.text-accent-1 { + color: #ffff8d !important +} + +.yellow.accent-2 { + background-color: #ff0 !important +} + +.yellow-text.text-accent-2 { + color: #ff0 !important +} + +.yellow.accent-3 { + background-color: #ffea00 !important +} + +.yellow-text.text-accent-3 { + color: #ffea00 !important +} + +.yellow.accent-4 { + background-color: #ffd600 !important +} + +.yellow-text.text-accent-4 { + color: #ffd600 !important +} + +.amber { + background-color: #ffc107 !important +} + +.amber-text { + color: #ffc107 !important +} + +.amber.lighten-5 { + background-color: #fff8e1 !important +} + +.amber-text.text-lighten-5 { + color: #fff8e1 !important +} + +.amber.lighten-4 { + background-color: #ffecb3 !important +} + +.amber-text.text-lighten-4 { + color: #ffecb3 !important +} + +.amber.lighten-3 { + background-color: #ffe082 !important +} + +.amber-text.text-lighten-3 { + color: #ffe082 !important +} + +.amber.lighten-2 { + background-color: #ffd54f !important +} + +.amber-text.text-lighten-2 { + color: #ffd54f !important +} + +.amber.lighten-1 { + background-color: #ffca28 !important +} + +.amber-text.text-lighten-1 { + color: #ffca28 !important +} + +.amber.darken-1 { + background-color: #ffb300 !important +} + +.amber-text.text-darken-1 { + color: #ffb300 !important +} + +.amber.darken-2 { + background-color: #ffa000 !important +} + +.amber-text.text-darken-2 { + color: #ffa000 !important +} + +.amber.darken-3 { + background-color: #ff8f00 !important +} + +.amber-text.text-darken-3 { + color: #ff8f00 !important +} + +.amber.darken-4 { + background-color: #ff6f00 !important +} + +.amber-text.text-darken-4 { + color: #ff6f00 !important +} + +.amber.accent-1 { + background-color: #ffe57f !important +} + +.amber-text.text-accent-1 { + color: #ffe57f !important +} + +.amber.accent-2 { + background-color: #ffd740 !important +} + +.amber-text.text-accent-2 { + color: #ffd740 !important +} + +.amber.accent-3 { + background-color: #ffc400 !important +} + +.amber-text.text-accent-3 { + color: #ffc400 !important +} + +.amber.accent-4 { + background-color: #ffab00 !important +} + +.amber-text.text-accent-4 { + color: #ffab00 !important +} + +.orange { + background-color: #ff9800 !important +} + +.orange-text { + color: #ff9800 !important +} + +.orange.lighten-5 { + background-color: #fff3e0 !important +} + +.orange-text.text-lighten-5 { + color: #fff3e0 !important +} + +.orange.lighten-4 { + background-color: #ffe0b2 !important +} + +.orange-text.text-lighten-4 { + color: #ffe0b2 !important +} + +.orange.lighten-3 { + background-color: #ffcc80 !important +} + +.orange-text.text-lighten-3 { + color: #ffcc80 !important +} + +.orange.lighten-2 { + background-color: #ffb74d !important +} + +.orange-text.text-lighten-2 { + color: #ffb74d !important +} + +.orange.lighten-1 { + background-color: #ffa726 !important +} + +.orange-text.text-lighten-1 { + color: #ffa726 !important +} + +.orange.darken-1 { + background-color: #fb8c00 !important +} + +.orange-text.text-darken-1 { + color: #fb8c00 !important +} + +.orange.darken-2 { + background-color: #f57c00 !important +} + +.orange-text.text-darken-2 { + color: #f57c00 !important +} + +.orange.darken-3 { + background-color: #ef6c00 !important +} + +.orange-text.text-darken-3 { + color: #ef6c00 !important +} + +.orange.darken-4 { + background-color: #e65100 !important +} + +.orange-text.text-darken-4 { + color: #e65100 !important +} + +.orange.accent-1 { + background-color: #ffd180 !important +} + +.orange-text.text-accent-1 { + color: #ffd180 !important +} + +.orange.accent-2 { + background-color: #ffab40 !important +} + +.orange-text.text-accent-2 { + color: #ffab40 !important +} + +.orange.accent-3 { + background-color: #ff9100 !important +} + +.orange-text.text-accent-3 { + color: #ff9100 !important +} + +.orange.accent-4 { + background-color: #ff6d00 !important +} + +.orange-text.text-accent-4 { + color: #ff6d00 !important +} + +.deep-orange { + background-color: #ff5722 !important +} + +.deep-orange-text { + color: #ff5722 !important +} + +.deep-orange.lighten-5 { + background-color: #fbe9e7 !important +} + +.deep-orange-text.text-lighten-5 { + color: #fbe9e7 !important +} + +.deep-orange.lighten-4 { + background-color: #ffccbc !important +} + +.deep-orange-text.text-lighten-4 { + color: #ffccbc !important +} + +.deep-orange.lighten-3 { + background-color: #ffab91 !important +} + +.deep-orange-text.text-lighten-3 { + color: #ffab91 !important +} + +.deep-orange.lighten-2 { + background-color: #ff8a65 !important +} + +.deep-orange-text.text-lighten-2 { + color: #ff8a65 !important +} + +.deep-orange.lighten-1 { + background-color: #ff7043 !important +} + +.deep-orange-text.text-lighten-1 { + color: #ff7043 !important +} + +.deep-orange.darken-1 { + background-color: #f4511e !important +} + +.deep-orange-text.text-darken-1 { + color: #f4511e !important +} + +.deep-orange.darken-2 { + background-color: #e64a19 !important +} + +.deep-orange-text.text-darken-2 { + color: #e64a19 !important +} + +.deep-orange.darken-3 { + background-color: #d84315 !important +} + +.deep-orange-text.text-darken-3 { + color: #d84315 !important +} + +.deep-orange.darken-4 { + background-color: #bf360c !important +} + +.deep-orange-text.text-darken-4 { + color: #bf360c !important +} + +.deep-orange.accent-1 { + background-color: #ff9e80 !important +} + +.deep-orange-text.text-accent-1 { + color: #ff9e80 !important +} + +.deep-orange.accent-2 { + background-color: #ff6e40 !important +} + +.deep-orange-text.text-accent-2 { + color: #ff6e40 !important +} + +.deep-orange.accent-3 { + background-color: #ff3d00 !important +} + +.deep-orange-text.text-accent-3 { + color: #ff3d00 !important +} + +.deep-orange.accent-4 { + background-color: #dd2c00 !important +} + +.deep-orange-text.text-accent-4 { + color: #dd2c00 !important +} + +.brown { + background-color: #795548 !important +} + +.brown-text { + color: #795548 !important +} + +.brown.lighten-5 { + background-color: #efebe9 !important +} + +.brown-text.text-lighten-5 { + color: #efebe9 !important +} + +.brown.lighten-4 { + background-color: #d7ccc8 !important +} + +.brown-text.text-lighten-4 { + color: #d7ccc8 !important +} + +.brown.lighten-3 { + background-color: #bcaaa4 !important +} + +.brown-text.text-lighten-3 { + color: #bcaaa4 !important +} + +.brown.lighten-2 { + background-color: #a1887f !important +} + +.brown-text.text-lighten-2 { + color: #a1887f !important +} + +.brown.lighten-1 { + background-color: #8d6e63 !important +} + +.brown-text.text-lighten-1 { + color: #8d6e63 !important +} + +.brown.darken-1 { + background-color: #6d4c41 !important +} + +.brown-text.text-darken-1 { + color: #6d4c41 !important +} + +.brown.darken-2 { + background-color: #5d4037 !important +} + +.brown-text.text-darken-2 { + color: #5d4037 !important +} + +.brown.darken-3 { + background-color: #4e342e !important +} + +.brown-text.text-darken-3 { + color: #4e342e !important +} + +.brown.darken-4 { + background-color: #3e2723 !important +} + +.brown-text.text-darken-4 { + color: #3e2723 !important +} + +.blue-grey { + background-color: #607d8b !important +} + +.blue-grey-text { + color: #607d8b !important +} + +.blue-grey.lighten-5 { + background-color: #eceff1 !important +} + +.blue-grey-text.text-lighten-5 { + color: #eceff1 !important +} + +.blue-grey.lighten-4 { + background-color: #cfd8dc !important +} + +.blue-grey-text.text-lighten-4 { + color: #cfd8dc !important +} + +.blue-grey.lighten-3 { + background-color: #b0bec5 !important +} + +.blue-grey-text.text-lighten-3 { + color: #b0bec5 !important +} + +.blue-grey.lighten-2 { + background-color: #90a4ae !important +} + +.blue-grey-text.text-lighten-2 { + color: #90a4ae !important +} + +.blue-grey.lighten-1 { + background-color: #78909c !important +} + +.blue-grey-text.text-lighten-1 { + color: #78909c !important +} + +.blue-grey.darken-1 { + background-color: #546e7a !important +} + +.blue-grey-text.text-darken-1 { + color: #546e7a !important +} + +.blue-grey.darken-2 { + background-color: #455a64 !important +} + +.blue-grey-text.text-darken-2 { + color: #455a64 !important +} + +.blue-grey.darken-3 { + background-color: #37474f !important +} + +.blue-grey-text.text-darken-3 { + color: #37474f !important +} + +.blue-grey.darken-4 { + background-color: #263238 !important +} + +.blue-grey-text.text-darken-4 { + color: #263238 !important +} + +.grey { + background-color: #9e9e9e !important +} + +.grey-text { + color: #9e9e9e !important +} + +.grey.lighten-5 { + background-color: #fafafa !important +} + +.grey-text.text-lighten-5 { + color: #fafafa !important +} + +.grey.lighten-4 { + background-color: #f5f5f5 !important +} + +.grey-text.text-lighten-4 { + color: #f5f5f5 !important +} + +.grey.lighten-3 { + background-color: #eee !important +} + +.grey-text.text-lighten-3 { + color: #eee !important +} + +.grey.lighten-2 { + background-color: #e0e0e0 !important +} + +.grey-text.text-lighten-2 { + color: #e0e0e0 !important +} + +.grey.lighten-1 { + background-color: #bdbdbd !important +} + +.grey-text.text-lighten-1 { + color: #bdbdbd !important +} + +.grey.darken-1 { + background-color: #757575 !important +} + +.grey-text.text-darken-1 { + color: #757575 !important +} + +.grey.darken-2 { + background-color: #616161 !important +} + +.grey-text.text-darken-2 { + color: #616161 !important +} + +.grey.darken-3 { + background-color: #424242 !important +} + +.grey-text.text-darken-3 { + color: #424242 !important +} + +.grey.darken-4 { + background-color: #212121 !important +} + +.grey-text.text-darken-4 { + color: #212121 !important +} + +.shades.black { + background-color: #000 !important +} + +.shades-text.text-black { + color: #000 !important +} + +.shades.white { + background-color: #fff !important +} + +.shades-text.text-white { + color: #fff !important +} + +.shades.transparent { + background-color: transparent !important +} + +.shades-text.text-transparent { + color: transparent !important +} + +.black { + background-color: #000 !important +} + +.black-text { + color: #000 !important +} + +.white { + background-color: #fff !important +} + +.white-text { + color: #fff !important +} + +.transparent { + background-color: transparent !important +} + +.transparent-text { + color: transparent !important +} + +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], +template { + display: none +} + +a { + background-color: transparent +} + +a:active, +a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, +strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: 0.67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button, +select { + text-transform: none +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], +html input[disabled] { + cursor: default +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: bold +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td, +th { + padding: 0 +} + +html { + box-sizing: border-box +} + +*, +*:before, +*:after { + box-sizing: inherit +} + +ul { + list-style-type: none +} + +ul.browser-default { + list-style-type: initial +} + +a { + color: #039be5; + text-decoration: none; + -webkit-tap-highlight-color: transparent +} + +.valign-wrapper { + display: flex; + align-items: center +} + +.valign-wrapper .valign { + display: block +} + +ul { + padding: 0 +} + +ul li { + list-style-type: none +} + +.clearfix { + clear: both +} + +.z-depth-0 { + box-shadow: none !important +} + +.z-depth-1, +nav, +.card-panel, +.card, +.toast, +.btn, +.btn-large, +.btn-floating, +.dropdown-content, +.collapsible, +.side-nav { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12) +} + +.z-depth-1-half, +.btn:hover, +.btn-large:hover, +.btn-floating:hover { + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15) +} + +.z-depth-2 { + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19) +} + +.z-depth-3 { + box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) +} + +.z-depth-4, +.modal { + box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21) +} + +.z-depth-5 { + box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22) +} + +.hoverable { + transition: box-shadow .25s; + box-shadow: 0 +} + +.hoverable:hover { + transition: box-shadow .25s; + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19) +} + +.divider { + height: 1px; + overflow: hidden; + background-color: #e0e0e0 +} + +blockquote { + margin: 20px 0; + padding-left: 1.5rem; + border-left: 5px solid #ee6e73 +} + +i { + line-height: inherit +} + +i.left { + float: left; + margin-right: 15px +} + +i.right { + float: right; + margin-left: 15px +} + +i.tiny { + font-size: 1rem +} + +i.small { + font-size: 2rem +} + +i.medium { + font-size: 4rem +} + +i.large { + font-size: 6rem +} + +img.responsive-img, +video.responsive-video { + max-width: 100%; + height: auto +} + +.pagination li { + display: inline-block; + font-size: 1.2rem; + padding: 0 10px; + line-height: 30px; + border-radius: 2px; + text-align: center +} + +.pagination li a { + color: #444 +} + +.pagination li.active a { + color: #fff +} + +.pagination li.active { + background-color: #ee6e73 +} + +.pagination li.disabled a { + cursor: default; + color: #999 +} + +.pagination li i { + font-size: 2.2rem; + vertical-align: middle +} + +.pagination li.pages ul li { + display: inline-block; + float: none +} + +@media only screen and (max-width: 992px) { + .pagination { + width: 100% + } + + .pagination li.prev, + .pagination li.next { + width: 10% + } + + .pagination li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap + } +} + +.breadcrumb { + font-size: 18px; + color: rgba(255, 255, 255, 0.7) +} + +.breadcrumb i, +.breadcrumb [class^="mdi-"], +.breadcrumb [class*="mdi-"], +.breadcrumb i.material-icons { + display: inline-block; + float: left; + font-size: 24px +} + +.breadcrumb:before { + content: '\E5CC'; + color: rgba(255, 255, 255, 0.7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased +} + +.breadcrumb:first-child:before { + display: none +} + +.breadcrumb:last-child { + color: #fff +} + +.parallax-container { + position: relative; + overflow: hidden; + height: 500px +} + +.parallax { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1 +} + +.parallax img { + display: none; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + transform: translateX(-50%) +} + +.pin-top, +.pin-bottom { + position: relative +} + +.pinned { + position: fixed !important +} + +ul.staggered-list li { + opacity: 0 +} + +.fade-in { + opacity: 0; + transform-origin: 0 50% +} + +@media only screen and (max-width: 600px) { + + .hide-on-small-only, + .hide-on-small-and-down { + display: none !important + } +} + +@media only screen and (max-width: 992px) { + .hide-on-med-and-down { + display: none !important + } +} + +@media only screen and (min-width: 601px) { + .hide-on-med-and-up { + display: none !important + } +} + +@media only screen and (min-width: 600px) and (max-width: 992px) { + .hide-on-med-only { + display: none !important + } +} + +@media only screen and (min-width: 993px) { + .hide-on-large-only { + display: none !important + } +} + +@media only screen and (min-width: 993px) { + .show-on-large { + display: block !important + } +} + +@media only screen and (min-width: 600px) and (max-width: 992px) { + .show-on-medium { + display: block !important + } +} + +@media only screen and (max-width: 600px) { + .show-on-small { + display: block !important + } +} + +@media only screen and (min-width: 601px) { + .show-on-medium-and-up { + display: block !important + } +} + +@media only screen and (max-width: 992px) { + .show-on-medium-and-down { + display: block !important + } +} + +@media only screen and (max-width: 600px) { + .center-on-small-only { + text-align: center + } +} + +footer.page-footer { + margin-top: 20px; + padding-top: 20px; + background-color: #ee6e73 +} + +footer.page-footer .footer-copyright { + overflow: hidden; + height: 50px; + line-height: 50px; + color: rgba(255, 255, 255, 0.8); + background-color: rgba(51, 51, 51, 0.08) +} + +table, +th, +td { + border: none +} + +table { + width: 100%; + display: table +} + +table.bordered > thead > tr, +table.bordered > tbody > tr { + border-bottom: 1px solid #d0d0d0 +} + +table.striped > tbody > tr:nth-child(odd) { + background-color: #f2f2f2 +} + +table.striped > tbody > tr > td { + border-radius: 0 +} + +table.highlight > tbody > tr { + transition: background-color .25s ease +} + +table.highlight > tbody > tr:hover { + background-color: #f2f2f2 +} + +table.centered thead tr th, +table.centered tbody tr td { + text-align: center +} + +thead { + border-bottom: 1px solid #d0d0d0 +} + +td, +th { + padding: 15px 5px; + display: table-cell; + text-align: left; + vertical-align: middle; + border-radius: 2px +} + +@media only screen and (max-width: 992px) { + table.responsive-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + display: block; + position: relative + } + + table.responsive-table td:empty:before { + content: '\00a0' + } + + table.responsive-table th, + table.responsive-table td { + margin: 0; + vertical-align: top + } + + table.responsive-table th { + text-align: left + } + + table.responsive-table thead { + display: block; + float: left + } + + table.responsive-table thead tr { + display: block; + padding: 0 10px 0 0 + } + + table.responsive-table thead tr th::before { + content: "\00a0" + } + + table.responsive-table tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap + } + + table.responsive-table tbody tr { + display: inline-block; + vertical-align: top + } + + table.responsive-table th { + display: block; + text-align: right + } + + table.responsive-table td { + display: block; + min-height: 1.25em; + text-align: left + } + + table.responsive-table tr { + padding: 0 10px + } + + table.responsive-table thead { + border: 0; + border-right: 1px solid #d0d0d0 + } + + table.responsive-table.bordered th { + border-bottom: 0; + border-left: 0 + } + + table.responsive-table.bordered td { + border-left: 0; + border-right: 0; + border-bottom: 0 + } + + table.responsive-table.bordered tr { + border: 0 + } + + table.responsive-table.bordered tbody tr { + border-right: 1px solid #d0d0d0 + } +} + +.collection { + margin: .5rem 0 1rem 0; + border: 1px solid #e0e0e0; + border-radius: 2px; + overflow: hidden; + position: relative +} + +.collection .collection-item { + background-color: #fff; + line-height: 1.5rem; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid #e0e0e0 +} + +.collection .collection-item.avatar { + min-height: 84px; + padding-left: 72px; + position: relative +} + +.collection .collection-item.avatar .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle +} + +.collection .collection-item.avatar i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; + text-align: center +} + +.collection .collection-item.avatar .title { + font-size: 16px +} + +.collection .collection-item.avatar p { + margin: 0 +} + +.collection .collection-item.avatar .secondary-content { + position: absolute; + top: 16px; + right: 16px +} + +.collection .collection-item:last-child { + border-bottom: none +} + +.collection .collection-item.active { + background-color: #26a69a; + color: #eafaf9 +} + +.collection .collection-item.active .secondary-content { + color: #fff +} + +.collection a.collection-item { + display: block; + transition: .25s; + color: #26a69a +} + +.collection a.collection-item:not(.active):hover { + background-color: #ddd +} + +.collection.with-header .collection-header { + background-color: #fff; + border-bottom: 1px solid #e0e0e0; + padding: 10px 20px +} + +.collection.with-header .collection-item { + padding-left: 30px +} + +.collection.with-header .collection-item.avatar { + padding-left: 72px +} + +.secondary-content { + float: right; + color: #26a69a +} + +.collapsible .collection { + margin: 0; + border: none +} + +span.badge { + min-width: 3rem; + padding: 0 6px; + text-align: center; + font-size: 1rem; + line-height: inherit; + color: #757575; + position: absolute; + right: 15px; + box-sizing: border-box +} + +span.badge.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: #26a69a; + border-radius: 2px +} + +span.badge.new:after { + content: " new" +} + +nav ul a span.badge { + position: static; + margin-left: 4px; + line-height: 0 +} + +.video-container { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden +} + +.video-container iframe, +.video-container object, +.video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100% +} + +.progress { + position: relative; + height: 4px; + display: block; + width: 100%; + background-color: #acece6; + border-radius: 2px; + margin: .5rem 0 1rem 0; + overflow: hidden +} + +.progress .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: #26a69a; + transition: width .3s linear +} + +.progress .indeterminate { + background-color: #26a69a +} + +.progress .indeterminate:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite +} + +.progress .indeterminate:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation-delay: 1.15s +} + +@keyframes indeterminate { + 0% { + left: -35%; + right: 100% + } + + 60% { + left: 100%; + right: -90% + } + + 100% { + left: 100%; + right: -90% + } +} + +@keyframes indeterminate-short { + 0% { + left: -200%; + right: 100% + } + + 60% { + left: 107%; + right: -8% + } + + 100% { + left: 107%; + right: -8% + } +} + +.hide { + display: none !important +} + +.left-align { + text-align: left +} + +.right-align { + text-align: right +} + +.center, +.center-align { + text-align: center +} + +.left { + float: left !important +} + +.right { + float: right !important +} + +.no-select, +input[type=range], +input[type=range] + .thumb { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.circle { + border-radius: 50% +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto +} + +.truncate { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis +} + +.no-padding { + padding: 0 !important +} + +.material-icons { + text-rendering: optimizeLegibility; + font-feature-settings: 'liga' +} + +.container { + margin: 0 auto; + max-width: 1280px; + width: 90% +} + +@media only screen and (min-width: 601px) { + .container { + width: 85% + } +} + +@media only screen and (min-width: 993px) { + .container { + width: 70% + } +} + +.container .row { + margin-left: -.75rem; + margin-right: -.75rem +} + +.section { + padding-top: 1rem; + padding-bottom: 1rem +} + +.section.no-pad { + padding: 0 +} + +.section.no-pad-bot { + padding-bottom: 0 +} + +.section.no-pad-top { + padding-top: 0 +} + +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px +} + +.row:after { + content: ""; + display: table; + clear: both +} + +.row .col { + float: left; + box-sizing: border-box; + padding: 0 .75rem +} + +.row .col[class*="push-"], +.row .col[class*="pull-"] { + position: relative +} + +.row .col.s1 { + width: 8.33333%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s2 { + width: 16.66667%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s4 { + width: 33.33333%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s5 { + width: 41.66667%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s7 { + width: 58.33333%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s8 { + width: 66.66667%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s10 { + width: 83.33333%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s11 { + width: 91.66667%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.s12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto +} + +.row .col.offset-s1 { + margin-left: 8.33333% +} + +.row .col.pull-s1 { + right: 8.33333% +} + +.row .col.push-s1 { + left: 8.33333% +} + +.row .col.offset-s2 { + margin-left: 16.66667% +} + +.row .col.pull-s2 { + right: 16.66667% +} + +.row .col.push-s2 { + left: 16.66667% +} + +.row .col.offset-s3 { + margin-left: 25% +} + +.row .col.pull-s3 { + right: 25% +} + +.row .col.push-s3 { + left: 25% +} + +.row .col.offset-s4 { + margin-left: 33.33333% +} + +.row .col.pull-s4 { + right: 33.33333% +} + +.row .col.push-s4 { + left: 33.33333% +} + +.row .col.offset-s5 { + margin-left: 41.66667% +} + +.row .col.pull-s5 { + right: 41.66667% +} + +.row .col.push-s5 { + left: 41.66667% +} + +.row .col.offset-s6 { + margin-left: 50% +} + +.row .col.pull-s6 { + right: 50% +} + +.row .col.push-s6 { + left: 50% +} + +.row .col.offset-s7 { + margin-left: 58.33333% +} + +.row .col.pull-s7 { + right: 58.33333% +} + +.row .col.push-s7 { + left: 58.33333% +} + +.row .col.offset-s8 { + margin-left: 66.66667% +} + +.row .col.pull-s8 { + right: 66.66667% +} + +.row .col.push-s8 { + left: 66.66667% +} + +.row .col.offset-s9 { + margin-left: 75% +} + +.row .col.pull-s9 { + right: 75% +} + +.row .col.push-s9 { + left: 75% +} + +.row .col.offset-s10 { + margin-left: 83.33333% +} + +.row .col.pull-s10 { + right: 83.33333% +} + +.row .col.push-s10 { + left: 83.33333% +} + +.row .col.offset-s11 { + margin-left: 91.66667% +} + +.row .col.pull-s11 { + right: 91.66667% +} + +.row .col.push-s11 { + left: 91.66667% +} + +.row .col.offset-s12 { + margin-left: 100% +} + +.row .col.pull-s12 { + right: 100% +} + +.row .col.push-s12 { + left: 100% +} + +@media only screen and (min-width: 601px) { + .row .col.m1 { + width: 8.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m2 { + width: 16.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m4 { + width: 33.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m5 { + width: 41.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m7 { + width: 58.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m8 { + width: 66.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m10 { + width: 83.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m11 { + width: 91.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.m12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.offset-m1 { + margin-left: 8.33333% + } + + .row .col.pull-m1 { + right: 8.33333% + } + + .row .col.push-m1 { + left: 8.33333% + } + + .row .col.offset-m2 { + margin-left: 16.66667% + } + + .row .col.pull-m2 { + right: 16.66667% + } + + .row .col.push-m2 { + left: 16.66667% + } + + .row .col.offset-m3 { + margin-left: 25% + } + + .row .col.pull-m3 { + right: 25% + } + + .row .col.push-m3 { + left: 25% + } + + .row .col.offset-m4 { + margin-left: 33.33333% + } + + .row .col.pull-m4 { + right: 33.33333% + } + + .row .col.push-m4 { + left: 33.33333% + } + + .row .col.offset-m5 { + margin-left: 41.66667% + } + + .row .col.pull-m5 { + right: 41.66667% + } + + .row .col.push-m5 { + left: 41.66667% + } + + .row .col.offset-m6 { + margin-left: 50% + } + + .row .col.pull-m6 { + right: 50% + } + + .row .col.push-m6 { + left: 50% + } + + .row .col.offset-m7 { + margin-left: 58.33333% + } + + .row .col.pull-m7 { + right: 58.33333% + } + + .row .col.push-m7 { + left: 58.33333% + } + + .row .col.offset-m8 { + margin-left: 66.66667% + } + + .row .col.pull-m8 { + right: 66.66667% + } + + .row .col.push-m8 { + left: 66.66667% + } + + .row .col.offset-m9 { + margin-left: 75% + } + + .row .col.pull-m9 { + right: 75% + } + + .row .col.push-m9 { + left: 75% + } + + .row .col.offset-m10 { + margin-left: 83.33333% + } + + .row .col.pull-m10 { + right: 83.33333% + } + + .row .col.push-m10 { + left: 83.33333% + } + + .row .col.offset-m11 { + margin-left: 91.66667% + } + + .row .col.pull-m11 { + right: 91.66667% + } + + .row .col.push-m11 { + left: 91.66667% + } + + .row .col.offset-m12 { + margin-left: 100% + } + + .row .col.pull-m12 { + right: 100% + } + + .row .col.push-m12 { + left: 100% + } +} + +@media only screen and (min-width: 993px) { + .row .col.l1 { + width: 8.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l2 { + width: 16.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l4 { + width: 33.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l5 { + width: 41.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l7 { + width: 58.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l8 { + width: 66.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l10 { + width: 83.33333%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l11 { + width: 91.66667%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.l12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto + } + + .row .col.offset-l1 { + margin-left: 8.33333% + } + + .row .col.pull-l1 { + right: 8.33333% + } + + .row .col.push-l1 { + left: 8.33333% + } + + .row .col.offset-l2 { + margin-left: 16.66667% + } + + .row .col.pull-l2 { + right: 16.66667% + } + + .row .col.push-l2 { + left: 16.66667% + } + + .row .col.offset-l3 { + margin-left: 25% + } + + .row .col.pull-l3 { + right: 25% + } + + .row .col.push-l3 { + left: 25% + } + + .row .col.offset-l4 { + margin-left: 33.33333% + } + + .row .col.pull-l4 { + right: 33.33333% + } + + .row .col.push-l4 { + left: 33.33333% + } + + .row .col.offset-l5 { + margin-left: 41.66667% + } + + .row .col.pull-l5 { + right: 41.66667% + } + + .row .col.push-l5 { + left: 41.66667% + } + + .row .col.offset-l6 { + margin-left: 50% + } + + .row .col.pull-l6 { + right: 50% + } + + .row .col.push-l6 { + left: 50% + } + + .row .col.offset-l7 { + margin-left: 58.33333% + } + + .row .col.pull-l7 { + right: 58.33333% + } + + .row .col.push-l7 { + left: 58.33333% + } + + .row .col.offset-l8 { + margin-left: 66.66667% + } + + .row .col.pull-l8 { + right: 66.66667% + } + + .row .col.push-l8 { + left: 66.66667% + } + + .row .col.offset-l9 { + margin-left: 75% + } + + .row .col.pull-l9 { + right: 75% + } + + .row .col.push-l9 { + left: 75% + } + + .row .col.offset-l10 { + margin-left: 83.33333% + } + + .row .col.pull-l10 { + right: 83.33333% + } + + .row .col.push-l10 { + left: 83.33333% + } + + .row .col.offset-l11 { + margin-left: 91.66667% + } + + .row .col.pull-l11 { + right: 91.66667% + } + + .row .col.push-l11 { + left: 91.66667% + } + + .row .col.offset-l12 { + margin-left: 100% + } + + .row .col.pull-l12 { + right: 100% + } + + .row .col.push-l12 { + left: 100% + } +} + +nav { + color: #fff; + background-color: #ee6e73; + width: 100%; + height: 56px; + line-height: 56px +} + +nav a { + color: #fff +} + +nav i, +nav [class^="mdi-"], +nav [class*="mdi-"], +nav i.material-icons { + display: block; + font-size: 2rem; + height: 56px; + line-height: 56px +} + +nav .nav-wrapper { + position: relative; + height: 100% +} + +@media only screen and (min-width: 993px) { + nav a.button-collapse { + display: none + } +} + +nav .button-collapse { + float: left; + position: relative; + z-index: 1; + height: 56px +} + +nav .button-collapse i { + font-size: 2.7rem; + height: 56px; + line-height: 56px +} + +nav .brand-logo { + position: absolute; + color: #fff; + display: inline-block; + font-size: 2.1rem; + padding: 0; + white-space: nowrap +} + +nav .brand-logo.center { + left: 50%; + transform: translateX(-50%) +} + +@media only screen and (max-width: 992px) { + nav .brand-logo { + left: 50%; + transform: translateX(-50%) + } + + nav .brand-logo.left, + nav .brand-logo.right { + padding: 0; + transform: none + } + + nav .brand-logo.left { + left: 0.5rem + } + + nav .brand-logo.right { + right: 0.5rem; + left: auto + } +} + +nav .brand-logo.right { + right: 0.5rem; + padding: 0 +} + +nav ul { + margin: 0 +} + +nav ul li { + transition: background-color .3s; + float: left; + padding: 0 +} + +nav ul li.active { + background-color: rgba(0, 0, 0, 0.1) +} + +nav ul a { + transition: background-color .3s; + font-size: 1rem; + color: #fff; + display: inline-block; + padding: 0 15px; + cursor: pointer +} + +nav ul a.btn, +nav ul a.btn-large, +nav ul a.btn-large, +nav ul a.btn-flat, +nav ul a.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px +} + +nav ul a:hover { + background-color: rgba(0, 0, 0, 0.1) +} + +nav ul.left { + float: left +} + +nav .input-field { + margin: 0 +} + +nav .input-field input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem +} + +nav .input-field input:focus, +nav .input-field input[type=text]:valid, +nav .input-field input[type=password]:valid, +nav .input-field input[type=email]:valid, +nav .input-field input[type=url]:valid, +nav .input-field input[type=date]:valid { + border: none; + box-shadow: none +} + +nav .input-field label { + top: 0; + left: 0 +} + +nav .input-field label i { + color: rgba(255, 255, 255, 0.7); + transition: color .3s +} + +nav .input-field label.active i { + color: #fff +} + +nav .input-field label.active { + transform: translateY(0) +} + +.navbar-fixed { + position: relative; + height: 56px; + z-index: 998 +} + +.navbar-fixed nav { + position: fixed +} + +@media only screen and (min-width: 601px) { + + nav, + nav .nav-wrapper i, + nav a.button-collapse, + nav a.button-collapse i { + height: 64px; + line-height: 64px + } + + .navbar-fixed { + height: 64px + } +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Thin), url("../fonts/roboto/Roboto-Thin.eot"); + src: url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"), url("../fonts/roboto/Roboto-Thin.woff") format("woff"), url("../fonts/roboto/Roboto-Thin.ttf") format("truetype"); + font-weight: 200 +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Light), url("../fonts/roboto/Roboto-Light.eot"); + src: url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Light.woff2") format("woff2"), url("../fonts/roboto/Roboto-Light.woff") format("woff"), url("../fonts/roboto/Roboto-Light.ttf") format("truetype"); + font-weight: 300 +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Regular), url("../fonts/roboto/Roboto-Regular.eot"); + src: url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"), url("../fonts/roboto/Roboto-Regular.woff") format("woff"), url("../fonts/roboto/Roboto-Regular.ttf") format("truetype"); + font-weight: 400 +} + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Medium.eot"); + src: url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"), url("../fonts/roboto/Roboto-Medium.woff") format("woff"), url("../fonts/roboto/Roboto-Medium.ttf") format("truetype"); + font-weight: 500 +} + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Bold.eot"); + src: url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"), url("../fonts/roboto/Roboto-Bold.woff") format("woff"), url("../fonts/roboto/Roboto-Bold.ttf") format("truetype"); + font-weight: 700 +} + +a { + text-decoration: none +} + +html { + line-height: 1.5; + font-family: "Roboto", sans-serif; + font-weight: normal; + color: rgba(0, 0, 0, 0.87) +} + +@media only screen and (min-width: 0) { + html { + font-size: 14px + } +} + +@media only screen and (min-width: 992px) { + html { + font-size: 14.5px + } +} + +@media only screen and (min-width: 1200px) { + html { + font-size: 15px + } +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 400; + line-height: 1.1 +} + +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { + font-weight: inherit +} + +h1 { + font-size: 4.2rem; + line-height: 110%; + margin: 2.1rem 0 1.68rem 0 +} + +h2 { + font-size: 3.56rem; + line-height: 110%; + margin: 1.78rem 0 1.424rem 0 +} + +h3 { + font-size: 2.92rem; + line-height: 110%; + margin: 1.46rem 0 1.168rem 0 +} + +h4 { + font-size: 2.28rem; + line-height: 110%; + margin: 1.14rem 0 .912rem 0 +} + +h5 { + font-size: 1.64rem; + line-height: 110%; + margin: .82rem 0 .656rem 0 +} + +h6 { + font-size: 1rem; + line-height: 110%; + margin: .5rem 0 .4rem 0 +} + +em { + font-style: italic +} + +strong { + font-weight: 500 +} + +small { + font-size: 75% +} + +.light, +footer.page-footer .footer-copyright { + font-weight: 300 +} + +.thin { + font-weight: 200 +} + +.flow-text { + font-weight: 300 +} + +@media only screen and (min-width: 360px) { + .flow-text { + font-size: 1.2rem + } +} + +@media only screen and (min-width: 390px) { + .flow-text { + font-size: 1.224rem + } +} + +@media only screen and (min-width: 420px) { + .flow-text { + font-size: 1.248rem + } +} + +@media only screen and (min-width: 450px) { + .flow-text { + font-size: 1.272rem + } +} + +@media only screen and (min-width: 480px) { + .flow-text { + font-size: 1.296rem + } +} + +@media only screen and (min-width: 510px) { + .flow-text { + font-size: 1.32rem + } +} + +@media only screen and (min-width: 540px) { + .flow-text { + font-size: 1.344rem + } +} + +@media only screen and (min-width: 570px) { + .flow-text { + font-size: 1.368rem + } +} + +@media only screen and (min-width: 600px) { + .flow-text { + font-size: 1.392rem + } +} + +@media only screen and (min-width: 630px) { + .flow-text { + font-size: 1.416rem + } +} + +@media only screen and (min-width: 660px) { + .flow-text { + font-size: 1.44rem + } +} + +@media only screen and (min-width: 690px) { + .flow-text { + font-size: 1.464rem + } +} + +@media only screen and (min-width: 720px) { + .flow-text { + font-size: 1.488rem + } +} + +@media only screen and (min-width: 750px) { + .flow-text { + font-size: 1.512rem + } +} + +@media only screen and (min-width: 780px) { + .flow-text { + font-size: 1.536rem + } +} + +@media only screen and (min-width: 810px) { + .flow-text { + font-size: 1.56rem + } +} + +@media only screen and (min-width: 840px) { + .flow-text { + font-size: 1.584rem + } +} + +@media only screen and (min-width: 870px) { + .flow-text { + font-size: 1.608rem + } +} + +@media only screen and (min-width: 900px) { + .flow-text { + font-size: 1.632rem + } +} + +@media only screen and (min-width: 930px) { + .flow-text { + font-size: 1.656rem + } +} + +@media only screen and (min-width: 960px) { + .flow-text { + font-size: 1.68rem + } +} + +@media only screen and (max-width: 360px) { + .flow-text { + font-size: 1.2rem + } +} + +.card-panel { + transition: box-shadow .25s; + padding: 20px; + margin: .5rem 0 1rem 0; + border-radius: 2px; + background-color: #fff +} + +.card { + position: relative; + margin: .5rem 0 1rem 0; + background-color: #fff; + transition: box-shadow .25s; + border-radius: 2px +} + +.card .card-title { + font-size: 24px; + font-weight: 300 +} + +.card .card-title.activator { + cursor: pointer +} + +.card.small, +.card.medium, +.card.large { + position: relative +} + +.card.small .card-image, +.card.medium .card-image, +.card.large .card-image { + max-height: 60%; + overflow: hidden +} + +.card.small .card-content, +.card.medium .card-content, +.card.large .card-content { + max-height: 40%; + overflow: hidden +} + +.card.small .card-action, +.card.medium .card-action, +.card.large .card-action { + position: absolute; + bottom: 0; + left: 0; + right: 0 +} + +.card.small { + height: 300px +} + +.card.medium { + height: 400px +} + +.card.large { + height: 500px +} + +.card .card-image { + position: relative +} + +.card .card-image img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100% +} + +.card .card-image .card-title { + color: #fff; + position: absolute; + bottom: 0; + left: 0; + padding: 20px +} + +.card .card-content { + padding: 20px; + border-radius: 0 0 2px 2px +} + +.card .card-content p { + margin: 0; + color: inherit +} + +.card .card-content .card-title { + line-height: 48px +} + +.card .card-action { + position: relative; + background-color: inherit; + border-top: 1px solid rgba(160, 160, 160, 0.2); + padding: 20px; + z-index: 2 +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating) { + color: #ffab40; + margin-right: 20px; + transition: color .3s ease; + text-transform: uppercase +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating):hover { + color: #ffd8a6 +} + +.card .card-action + .card-reveal { + z-index: 1; + padding-bottom: 64px +} + +.card .card-reveal { + padding: 20px; + position: absolute; + background-color: #fff; + width: 100%; + overflow-y: auto; + top: 100%; + height: 100%; + z-index: 3; + display: none +} + +.card .card-reveal .card-title { + cursor: pointer; + display: block +} + +#toast-container { + display: block; + position: fixed; + z-index: 10000 +} + +@media only screen and (max-width: 600px) { + #toast-container { + min-width: 100%; + bottom: 0% + } +} + +@media only screen and (min-width: 601px) and (max-width: 992px) { + #toast-container { + left: 5%; + bottom: 7%; + max-width: 90% + } +} + +@media only screen and (min-width: 993px) { + #toast-container { + top: 10%; + right: 7%; + max-width: 86% + } +} + +.toast { + border-radius: 2px; + top: 0; + width: auto; + clear: both; + margin-top: 10px; + position: relative; + max-width: 100%; + height: auto; + min-height: 48px; + line-height: 1.5em; + word-break: break-all; + background-color: #323232; + padding: 10px 25px; + font-size: 1.1rem; + font-weight: 300; + color: #fff; + display: flex; + align-items: center; + justify-content: space-between +} + +.toast .btn, +.toast .btn-large, +.toast .btn-flat { + margin: 0; + margin-left: 3rem +} + +.toast.rounded { + border-radius: 24px +} + +@media only screen and (max-width: 600px) { + .toast { + width: 100%; + border-radius: 0 + } +} + +@media only screen and (min-width: 601px) and (max-width: 992px) { + .toast { + float: left + } +} + +@media only screen and (min-width: 993px) { + .toast { + float: right + } +} + +.tabs { + display: flex; + position: relative; + overflow-x: auto; + overflow-y: hidden; + height: 48px; + background-color: #fff; + margin: 0 auto; + width: 100%; + white-space: nowrap +} + +.tabs .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: block; + float: left; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; + text-overflow: ellipsis; + overflow: hidden; + letter-spacing: .8px; + width: 15%; + min-width: 80px +} + +.tabs .tab a { + color: #ee6e73; + display: block; + width: 100%; + height: 100%; + text-overflow: ellipsis; + overflow: hidden; + transition: color .28s ease +} + +.tabs .tab a:hover { + color: #f9c9cb +} + +.tabs .tab.disabled a { + color: #f9c9cb; + cursor: default +} + +.tabs .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: #f6b2b5; + will-change: left, right +} + +.material-tooltip { + padding: 10px 8px; + font-size: 1rem; + z-index: 2000; + background-color: transparent; + border-radius: 2px; + color: #fff; + min-height: 36px; + line-height: 120%; + opacity: 0; + display: none; + position: absolute; + text-align: center; + max-width: calc(100% - 4px); + overflow: hidden; + left: 0; + top: 0; + pointer-events: none; + will-change: top, left +} + +.backdrop { + position: absolute; + opacity: 0; + display: none; + height: 7px; + width: 14px; + border-radius: 0 0 14px 14px; + background-color: #323232; + z-index: -1; + transform-origin: 50% 10%; + will-change: transform, opacity +} + +.btn, +.btn-large, +.btn-flat { + border: none; + border-radius: 2px; + display: inline-block; + height: 36px; + line-height: 36px; + outline: 0; + padding: 0 2rem; + text-transform: uppercase; + vertical-align: middle; + -webkit-tap-highlight-color: transparent +} + +.btn.disabled, +.disabled.btn-large, +.btn-floating.disabled, +.btn-large.disabled, +.btn:disabled .btn-large:disabled, +.btn-large:disabled .btn-large:disabled, +.btn-floating:disabled { + background-color: #DFDFDF !important; + box-shadow: none; + color: #9F9F9F !important; + cursor: default +} + +.btn.disabled *, +.disabled.btn-large *, +.btn-floating.disabled *, +.btn-large.disabled *, +.btn:disabled .btn-large:disabled *, +.btn-large:disabled .btn-large:disabled *, +.btn-floating:disabled * { + pointer-events: none +} + +.btn.disabled:hover, +.disabled.btn-large:hover, +.btn-floating.disabled:hover, +.btn-large.disabled:hover, +.btn:disabled .btn-large:disabled:hover, +.btn-large:disabled .btn-large:disabled:hover, +.btn-floating:disabled:hover { + background-color: #DFDFDF !important; + color: #9F9F9F !important +} + +.btn i, +.btn-large i, +.btn-floating i, +.btn-large i, +.btn-flat i { + font-size: 1.3rem; + line-height: inherit +} + +.btn, +.btn-large { + text-decoration: none; + color: #fff; + background-color: #26a69a; + text-align: center; + letter-spacing: .5px; + transition: .2s ease-out; + cursor: pointer +} + +.btn:hover, +.btn-large:hover { + background-color: #2bbbad +} + +.btn-floating { + display: inline-block; + color: #fff; + position: relative; + overflow: hidden; + z-index: 1; + width: 37px; + height: 37px; + line-height: 37px; + padding: 0; + background-color: #26a69a; + border-radius: 50%; + transition: .3s; + cursor: pointer; + vertical-align: middle +} + +.btn-floating i { + width: inherit; + display: inline-block; + text-align: center; + color: #fff; + font-size: 1.6rem; + line-height: 37px +} + +.btn-floating:hover { + background-color: #26a69a +} + +.btn-floating:before { + border-radius: 0 +} + +.btn-floating.btn-large { + width: 55.5px; + height: 55.5px +} + +.btn-floating.btn-large i { + line-height: 55.5px +} + +button.btn-floating { + border: none +} + +.fixed-action-btn { + position: fixed; + right: 23px; + bottom: 23px; + padding-top: 15px; + margin-bottom: 0; + z-index: 998 +} + +.fixed-action-btn.active ul { + visibility: visible +} + +.fixed-action-btn.horizontal { + padding: 0 0 0 15px +} + +.fixed-action-btn.horizontal ul { + text-align: right; + right: 64px; + top: 50%; + transform: translateY(-50%); + height: 100%; + left: auto; + width: 500px +} + +.fixed-action-btn.horizontal ul li { + display: inline-block; + margin: 15px 15px 0 0 +} + +.fixed-action-btn ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden +} + +.fixed-action-btn ul li { + margin-bottom: 15px +} + +.fixed-action-btn ul a.btn-floating { + opacity: 0 +} + +.btn-flat { + box-shadow: none; + background-color: transparent; + color: #343434; + cursor: pointer +} + +.btn-flat.disabled { + color: #b3b3b3; + cursor: default +} + +.btn-large { + height: 54px; + line-height: 54px +} + +.btn-large i { + font-size: 1.6rem +} + +.btn-block { + display: block +} + +.dropdown-content { + background-color: #fff; + margin: 0; + display: none; + min-width: 100px; + max-height: 650px; + overflow-y: auto; + opacity: 0; + position: absolute; + z-index: 999; + will-change: width, height +} + +.dropdown-content li { + clear: both; + color: rgba(0, 0, 0, 0.87); + cursor: pointer; + min-height: 50px; + line-height: 1.5rem; + width: 100%; + text-align: left; + text-transform: none +} + +.dropdown-content li:hover, +.dropdown-content li.active, +.dropdown-content li.selected { + background-color: #eee +} + +.dropdown-content li.active.selected { + background-color: #e1e1e1 +} + +.dropdown-content li.divider { + min-height: 0; + height: 1px +} + +.dropdown-content li > a, +.dropdown-content li > span { + font-size: 16px; + color: #26a69a; + display: block; + line-height: 22px; + padding: 14px 16px +} + +.dropdown-content li > span > label { + top: 1px; + left: 3px; + height: 18px +} + +.dropdown-content li > a > i { + height: inherit; + line-height: inherit +} + +/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + will-change: opacity, transform; + transition: all .3s ease-out +} + +.waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + transition: all 0.7s ease-out; + transition-property: transform, opacity; + transform: scale(0); + pointer-events: none +} + +.waves-effect.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45) +} + +.waves-effect.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, 0.7) +} + +.waves-effect.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, 0.7) +} + +.waves-effect.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, 0.7) +} + +.waves-effect.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.7) +} + +.waves-effect.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.7) +} + +.waves-effect.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.7) +} + +.waves-effect input[type="button"], +.waves-effect input[type="reset"], +.waves-effect input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none +} + +.waves-notransition { + transition: none !important +} + +.waves-circle { + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, #fff 100%, #000 100%) +} + +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom +} + +.waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1 +} + +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none +} + +.waves-block { + display: block +} + +a.waves-effect .waves-ripple { + z-index: -1 +} + +.modal { + display: none; + position: fixed; + left: 0; + right: 0; + background-color: #fafafa; + padding: 0; + max-height: 70%; + width: 55%; + margin: auto; + overflow-y: auto; + border-radius: 2px; + will-change: top, opacity +} + +@media only screen and (max-width: 992px) { + .modal { + width: 80% + } +} + +.modal h1, +.modal h2, +.modal h3, +.modal h4 { + margin-top: 0 +} + +.modal .modal-content { + padding: 24px +} + +.modal .modal-close { + cursor: pointer +} + +.modal .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100% +} + +.modal .modal-footer .btn, +.modal .modal-footer .btn-large, +.modal .modal-footer .btn-flat { + float: right; + margin: 6px 0 +} + +.lean-overlay { + position: fixed; + z-index: 999; + top: -100px; + left: 0; + bottom: 0; + right: 0; + height: 125%; + width: 100%; + background: #000; + display: none; + will-change: opacity +} + +.modal.modal-fixed-footer { + padding: 0; + height: 70% +} + +.modal.modal-fixed-footer .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto +} + +.modal.modal-fixed-footer .modal-footer { + border-top: 1px solid rgba(0, 0, 0, 0.1); + position: absolute; + bottom: 0 +} + +.modal.bottom-sheet { + top: auto; + bottom: -100%; + margin: 0; + width: 100%; + max-height: 45%; + border-radius: 0; + will-change: bottom, opacity +} + +.collapsible { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; + border-left: 1px solid #ddd; + margin: .5rem 0 1rem 0 +} + +.collapsible-header { + display: block; + cursor: pointer; + min-height: 3rem; + line-height: 3rem; + padding: 0 1rem; + background-color: #fff; + border-bottom: 1px solid #ddd +} + +.collapsible-header i { + width: 2rem; + font-size: 1.6rem; + line-height: 3rem; + display: block; + float: left; + text-align: center; + margin-right: 1rem +} + +.collapsible-body { + display: none; + border-bottom: 1px solid #ddd; + box-sizing: border-box +} + +.collapsible-body p { + margin: 0; + padding: 2rem +} + +.side-nav .collapsible, +.side-nav.fixed .collapsible { + border: none; + box-shadow: none +} + +.side-nav .collapsible li, +.side-nav.fixed .collapsible li { + padding: 0 +} + +.side-nav .collapsible-header, +.side-nav.fixed .collapsible-header { + background-color: transparent; + border: none; + line-height: inherit; + height: inherit; + padding: 0 30px +} + +.side-nav .collapsible-header:hover, +.side-nav.fixed .collapsible-header:hover { + background-color: rgba(0, 0, 0, 0.05) +} + +.side-nav .collapsible-header i, +.side-nav.fixed .collapsible-header i { + line-height: inherit +} + +.side-nav .collapsible-body, +.side-nav.fixed .collapsible-body { + border: 0; + background-color: #fff +} + +.side-nav .collapsible-body li a, +.side-nav.fixed .collapsible-body li a { + padding: 0 37.5px 0 45px +} + +.collapsible.popout { + border: none; + box-shadow: none +} + +.collapsible.popout > li { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + margin: 0 24px; + transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94) +} + +.collapsible.popout > li.active { + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + margin: 16px 0 +} + +.chip { + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0, 0, 0, 0.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: #e4e4e4 +} + +.chip img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50% +} + +.chip i.material-icons { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px +} + +.materialboxed { + display: block; + cursor: zoom-in; + position: relative; + transition: opacity .4s +} + +.materialboxed:hover { + will-change: left, top, width, height +} + +.materialboxed:hover:not(.active) { + opacity: .8 +} + +.materialboxed.active { + cursor: zoom-out +} + +#materialbox-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #292929; + z-index: 1000; + will-change: opacity +} + +.materialbox-caption { + position: fixed; + display: none; + color: #fff; + line-height: 50px; + bottom: 0; + width: 100%; + text-align: center; + padding: 0% 15%; + height: 50px; + z-index: 1000; + -webkit-font-smoothing: antialiased +} + +select:focus { + outline: 1px solid #c9f3ef +} + +button:focus { + outline: none; + background-color: #2ab7a9 +} + +label { + font-size: .8rem; + color: #9e9e9e +} + +::-webkit-input-placeholder { + color: #d1d1d1 +} + +:-moz-placeholder { + color: #d1d1d1 +} + +::-moz-placeholder { + color: #d1d1d1 +} + +:-ms-input-placeholder { + color: #d1d1d1 +} + +input:not([type]), +input[type=text], +input[type=password], +input[type=email], +input[type=url], +input[type=time], +input[type=date], +input[type=datetime], +input[type=datetime-local], +input[type=tel], +input[type=number], +input[type=search], +textarea.materialize-textarea { + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + border-radius: 0; + outline: none; + height: 3rem; + width: 100%; + font-size: 1rem; + margin: 0 0 15px 0; + padding: 0; + box-shadow: none; + box-sizing: content-box; + transition: all 0.3s +} + +input:not([type]):disabled, +input:not([type])[readonly="readonly"], +input[type=text]:disabled, +input[type=text][readonly="readonly"], +input[type=password]:disabled, +input[type=password][readonly="readonly"], +input[type=email]:disabled, +input[type=email][readonly="readonly"], +input[type=url]:disabled, +input[type=url][readonly="readonly"], +input[type=time]:disabled, +input[type=time][readonly="readonly"], +input[type=date]:disabled, +input[type=date][readonly="readonly"], +input[type=datetime]:disabled, +input[type=datetime][readonly="readonly"], +input[type=datetime-local]:disabled, +input[type=datetime-local][readonly="readonly"], +input[type=tel]:disabled, +input[type=tel][readonly="readonly"], +input[type=number]:disabled, +input[type=number][readonly="readonly"], +input[type=search]:disabled, +input[type=search][readonly="readonly"], +textarea.materialize-textarea:disabled, +textarea.materialize-textarea[readonly="readonly"] { + color: rgba(0, 0, 0, 0.26); + border-bottom: 1px dotted rgba(0, 0, 0, 0.26) +} + +input:not([type]):disabled + label, +input:not([type])[readonly="readonly"] + label, +input[type=text]:disabled + label, +input[type=text][readonly="readonly"] + label, +input[type=password]:disabled + label, +input[type=password][readonly="readonly"] + label, +input[type=email]:disabled + label, +input[type=email][readonly="readonly"] + label, +input[type=url]:disabled + label, +input[type=url][readonly="readonly"] + label, +input[type=time]:disabled + label, +input[type=time][readonly="readonly"] + label, +input[type=date]:disabled + label, +input[type=date][readonly="readonly"] + label, +input[type=datetime]:disabled + label, +input[type=datetime][readonly="readonly"] + label, +input[type=datetime-local]:disabled + label, +input[type=datetime-local][readonly="readonly"] + label, +input[type=tel]:disabled + label, +input[type=tel][readonly="readonly"] + label, +input[type=number]:disabled + label, +input[type=number][readonly="readonly"] + label, +input[type=search]:disabled + label, +input[type=search][readonly="readonly"] + label, +textarea.materialize-textarea:disabled + label, +textarea.materialize-textarea[readonly="readonly"] + label { + color: rgba(0, 0, 0, 0.26) +} + +input:not([type]):focus:not([readonly]), +input[type=text]:focus:not([readonly]), +input[type=password]:focus:not([readonly]), +input[type=email]:focus:not([readonly]), +input[type=url]:focus:not([readonly]), +input[type=time]:focus:not([readonly]), +input[type=date]:focus:not([readonly]), +input[type=datetime]:focus:not([readonly]), +input[type=datetime-local]:focus:not([readonly]), +input[type=tel]:focus:not([readonly]), +input[type=number]:focus:not([readonly]), +input[type=search]:focus:not([readonly]), +textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #26a69a; + box-shadow: 0 1px 0 0 #26a69a +} + +input:not([type]):focus:not([readonly]) + label, +input[type=text]:focus:not([readonly]) + label, +input[type=password]:focus:not([readonly]) + label, +input[type=email]:focus:not([readonly]) + label, +input[type=url]:focus:not([readonly]) + label, +input[type=time]:focus:not([readonly]) + label, +input[type=date]:focus:not([readonly]) + label, +input[type=datetime]:focus:not([readonly]) + label, +input[type=datetime-local]:focus:not([readonly]) + label, +input[type=tel]:focus:not([readonly]) + label, +input[type=number]:focus:not([readonly]) + label, +input[type=search]:focus:not([readonly]) + label, +textarea.materialize-textarea:focus:not([readonly]) + label { + color: #26a69a +} + +input:not([type]).valid, +input:not([type]):focus.valid, +input[type=text].valid, +input[type=text]:focus.valid, +input[type=password].valid, +input[type=password]:focus.valid, +input[type=email].valid, +input[type=email]:focus.valid, +input[type=url].valid, +input[type=url]:focus.valid, +input[type=time].valid, +input[type=time]:focus.valid, +input[type=date].valid, +input[type=date]:focus.valid, +input[type=datetime].valid, +input[type=datetime]:focus.valid, +input[type=datetime-local].valid, +input[type=datetime-local]:focus.valid, +input[type=tel].valid, +input[type=tel]:focus.valid, +input[type=number].valid, +input[type=number]:focus.valid, +input[type=search].valid, +input[type=search]:focus.valid, +textarea.materialize-textarea.valid, +textarea.materialize-textarea:focus.valid { + border-bottom: 1px solid #4CAF50; + box-shadow: 0 1px 0 0 #4CAF50 +} + +input:not([type]).valid + label:after, +input:not([type]):focus.valid + label:after, +input[type=text].valid + label:after, +input[type=text]:focus.valid + label:after, +input[type=password].valid + label:after, +input[type=password]:focus.valid + label:after, +input[type=email].valid + label:after, +input[type=email]:focus.valid + label:after, +input[type=url].valid + label:after, +input[type=url]:focus.valid + label:after, +input[type=time].valid + label:after, +input[type=time]:focus.valid + label:after, +input[type=date].valid + label:after, +input[type=date]:focus.valid + label:after, +input[type=datetime].valid + label:after, +input[type=datetime]:focus.valid + label:after, +input[type=datetime-local].valid + label:after, +input[type=datetime-local]:focus.valid + label:after, +input[type=tel].valid + label:after, +input[type=tel]:focus.valid + label:after, +input[type=number].valid + label:after, +input[type=number]:focus.valid + label:after, +input[type=search].valid + label:after, +input[type=search]:focus.valid + label:after, +textarea.materialize-textarea.valid + label:after, +textarea.materialize-textarea:focus.valid + label:after { + content: attr(data-success); + color: #4CAF50; + opacity: 1 +} + +input:not([type]).invalid, +input:not([type]):focus.invalid, +input[type=text].invalid, +input[type=text]:focus.invalid, +input[type=password].invalid, +input[type=password]:focus.invalid, +input[type=email].invalid, +input[type=email]:focus.invalid, +input[type=url].invalid, +input[type=url]:focus.invalid, +input[type=time].invalid, +input[type=time]:focus.invalid, +input[type=date].invalid, +input[type=date]:focus.invalid, +input[type=datetime].invalid, +input[type=datetime]:focus.invalid, +input[type=datetime-local].invalid, +input[type=datetime-local]:focus.invalid, +input[type=tel].invalid, +input[type=tel]:focus.invalid, +input[type=number].invalid, +input[type=number]:focus.invalid, +input[type=search].invalid, +input[type=search]:focus.invalid, +textarea.materialize-textarea.invalid, +textarea.materialize-textarea:focus.invalid { + border-bottom: 1px solid #F44336; + box-shadow: 0 1px 0 0 #F44336 +} + +input:not([type]).invalid + label:after, +input:not([type]):focus.invalid + label:after, +input[type=text].invalid + label:after, +input[type=text]:focus.invalid + label:after, +input[type=password].invalid + label:after, +input[type=password]:focus.invalid + label:after, +input[type=email].invalid + label:after, +input[type=email]:focus.invalid + label:after, +input[type=url].invalid + label:after, +input[type=url]:focus.invalid + label:after, +input[type=time].invalid + label:after, +input[type=time]:focus.invalid + label:after, +input[type=date].invalid + label:after, +input[type=date]:focus.invalid + label:after, +input[type=datetime].invalid + label:after, +input[type=datetime]:focus.invalid + label:after, +input[type=datetime-local].invalid + label:after, +input[type=datetime-local]:focus.invalid + label:after, +input[type=tel].invalid + label:after, +input[type=tel]:focus.invalid + label:after, +input[type=number].invalid + label:after, +input[type=number]:focus.invalid + label:after, +input[type=search].invalid + label:after, +input[type=search]:focus.invalid + label:after, +textarea.materialize-textarea.invalid + label:after, +textarea.materialize-textarea:focus.invalid + label:after { + content: attr(data-error); + color: #F44336; + opacity: 1 +} + +input:not([type]).validate + label, +input[type=text].validate + label, +input[type=password].validate + label, +input[type=email].validate + label, +input[type=url].validate + label, +input[type=time].validate + label, +input[type=date].validate + label, +input[type=datetime].validate + label, +input[type=datetime-local].validate + label, +input[type=tel].validate + label, +input[type=number].validate + label, +input[type=search].validate + label, +textarea.materialize-textarea.validate + label { + width: 100%; + pointer-events: none +} + +input:not([type]) + label:after, +input[type=text] + label:after, +input[type=password] + label:after, +input[type=email] + label:after, +input[type=url] + label:after, +input[type=time] + label:after, +input[type=date] + label:after, +input[type=datetime] + label:after, +input[type=datetime-local] + label:after, +input[type=tel] + label:after, +input[type=number] + label:after, +input[type=search] + label:after, +textarea.materialize-textarea + label:after { + display: block; + content: ""; + position: absolute; + top: 65px; + opacity: 0; + transition: .2s opacity ease-out, .2s color ease-out +} + +.input-field { + position: relative; + margin-top: 1rem +} + +.input-field label { + color: #9e9e9e; + position: absolute; + top: 0.8rem; + left: .75rem; + font-size: 1rem; + cursor: text; + transition: .2s ease-out +} + +.input-field label.active { + font-size: .8rem; + transform: translateY(-140%) +} + +.input-field .prefix { + position: absolute; + width: 3rem; + font-size: 2rem; + transition: color .2s +} + +.input-field .prefix.active { + color: #26a69a +} + +.input-field .prefix ~ input, +.input-field .prefix ~ textarea { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem) +} + +.input-field .prefix ~ textarea { + padding-top: .8rem +} + +.input-field .prefix ~ label { + margin-left: 3rem +} + +@media only screen and (max-width: 992px) { + .input-field .prefix ~ input { + width: 86%; + width: calc(100% - 3rem) + } +} + +@media only screen and (max-width: 600px) { + .input-field .prefix ~ input { + width: 80%; + width: calc(100% - 3rem) + } +} + +.input-field input[type=search] { + display: block; + line-height: inherit; + padding-left: 4rem; + width: calc(100% - 4rem) +} + +.input-field input[type=search]:focus { + background-color: #fff; + border: 0; + box-shadow: none; + color: #444 +} + +.input-field input[type=search]:focus + label i, +.input-field input[type=search]:focus ~ .mdi-navigation-close, +.input-field input[type=search]:focus ~ .material-icons { + color: #444 +} + +.input-field input[type=search] + label { + left: 1rem +} + +.input-field input[type=search] ~ .mdi-navigation-close, +.input-field input[type=search] ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + transition: .3s color +} + +textarea { + width: 100%; + height: 3rem; + background-color: transparent +} + +textarea.materialize-textarea { + overflow-y: hidden; + padding: 1.6rem 0; + resize: none; + min-height: 3rem +} + +.hiddendiv { + display: none; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; + padding-top: 1.2rem +} + +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + left: -9999px; + opacity: 0 +} + +[type="radio"]:not(:checked) + label, +[type="radio"]:checked + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + transition: .28s ease; + -khtml-user-select: none; + user-select: none +} + +[type="radio"] + label:before, +[type="radio"] + label:after { + content: ''; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + transition: .28s ease +} + +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after, +[type="radio"]:checked + label:before, +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border-radius: 50% +} + +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after { + border: 2px solid #5a5a5a +} + +[type="radio"]:not(:checked) + label:after { + z-index: -1; + transform: scale(0) +} + +[type="radio"]:checked + label:before { + border: 2px solid transparent +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border: 2px solid #26a69a +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:after { + background-color: #26a69a; + z-index: 0 +} + +[type="radio"]:checked + label:after { + transform: scale(1.02) +} + +[type="radio"].with-gap:checked + label:after { + transform: scale(0.5) +} + +[type="radio"].tabbed:focus + label:before { + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1) +} + +[type="radio"].with-gap:disabled:checked + label:before { + border: 2px solid rgba(0, 0, 0, 0.26) +} + +[type="radio"].with-gap:disabled:checked + label:after { + border: none; + background-color: rgba(0, 0, 0, 0.26) +} + +[type="radio"]:disabled:not(:checked) + label:before, +[type="radio"]:disabled:checked + label:before { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.26) +} + +[type="radio"]:disabled + label { + color: rgba(0, 0, 0, 0.26) +} + +[type="radio"]:disabled:not(:checked) + label:before { + border-color: rgba(0, 0, 0, 0.26) +} + +[type="radio"]:disabled:checked + label:after { + background-color: rgba(0, 0, 0, 0.26); + border-color: #BDBDBD +} + +form p { + margin-bottom: 10px; + text-align: left +} + +form p:last-child { + margin-bottom: 0 +} + +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + left: -9999px; + opacity: 0 +} + +[type="checkbox"] + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -ms-user-select: none +} + +[type="checkbox"] + label:before, +[type="checkbox"]:not(.filled-in) + label:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid #5a5a5a; + border-radius: 1px; + margin-top: 2px; + transition: .2s +} + +[type="checkbox"]:not(.filled-in) + label:after { + border: 0; + transform: scale(0) +} + +[type="checkbox"]:not(:checked):disabled + label:before { + border: none; + background-color: rgba(0, 0, 0, 0.26) +} + +[type="checkbox"].tabbed:focus + label:after { + transform: scale(1); + border: 0; + border-radius: 50%; + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1) +} + +[type="checkbox"]:checked + label:before { + top: -4px; + left: -5px; + width: 12px; + height: 22px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #26a69a; + border-bottom: 2px solid #26a69a; + transform: rotate(40deg); + backface-visibility: hidden; + transform-origin: 100% 100% +} + +[type="checkbox"]:checked:disabled + label:before { + border-right: 2px solid rgba(0, 0, 0, 0.26); + border-bottom: 2px solid rgba(0, 0, 0, 0.26) +} + +[type="checkbox"]:indeterminate + label:before { + top: -11px; + left: -12px; + width: 10px; + height: 22px; + border-top: none; + border-left: none; + border-right: 2px solid #26a69a; + border-bottom: none; + transform: rotate(90deg); + backface-visibility: hidden; + transform-origin: 100% 100% +} + +[type="checkbox"]:indeterminate:disabled + label:before { + border-right: 2px solid rgba(0, 0, 0, 0.26); + background-color: transparent +} + +[type="checkbox"].filled-in + label:after { + border-radius: 2px +} + +[type="checkbox"].filled-in + label:before, +[type="checkbox"].filled-in + label:after { + content: ''; + left: 0; + position: absolute; + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1 +} + +[type="checkbox"].filled-in:not(:checked) + label:before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + -webkit-transform-origin: 20% 40%; + transform-origin: 100% 100% +} + +[type="checkbox"].filled-in:not(:checked) + label:after { + height: 20px; + width: 20px; + background-color: transparent; + border: 2px solid #5a5a5a; + top: 0px; + z-index: 0 +} + +[type="checkbox"].filled-in:checked + label:before { + top: 0; + left: 1px; + width: 8px; + height: 13px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #fff; + border-bottom: 2px solid #fff; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100% +} + +[type="checkbox"].filled-in:checked + label:after { + top: 0; + width: 20px; + height: 20px; + border: 2px solid #26a69a; + background-color: #26a69a; + z-index: 0 +} + +[type="checkbox"].filled-in.tabbed:focus + label:after { + border-radius: 2px; + border-color: #5a5a5a; + background-color: rgba(0, 0, 0, 0.1) +} + +[type="checkbox"].filled-in.tabbed:checked:focus + label:after { + border-radius: 2px; + background-color: #26a69a; + border-color: #26a69a +} + +[type="checkbox"].filled-in:disabled:not(:checked) + label:before { + background-color: transparent; + border: 2px solid transparent +} + +[type="checkbox"].filled-in:disabled:not(:checked) + label:after { + border-color: transparent; + background-color: #BDBDBD +} + +[type="checkbox"].filled-in:disabled:checked + label:before { + background-color: transparent +} + +[type="checkbox"].filled-in:disabled:checked + label:after { + background-color: #BDBDBD; + border-color: #BDBDBD +} + +.switch, +.switch * { + -webkit-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -ms-user-select: none +} + +.switch label { + cursor: pointer +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0 +} + +.switch label input[type=checkbox]:checked + .lever { + background-color: #84c7c1 +} + +.switch label input[type=checkbox]:checked + .lever:after { + background-color: #26a69a; + left: 24px +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 40px; + height: 15px; + background-color: #818181; + border-radius: 15px; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px +} + +.switch label .lever:after { + content: ""; + position: absolute; + display: inline-block; + width: 21px; + height: 21px; + background-color: #F1F1F1; + border-radius: 21px; + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4); + left: -5px; + top: -3px; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease +} + +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::after, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1) +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:after, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08) +} + +.switch input[type=checkbox][disabled] + .lever { + cursor: default +} + +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: #BDBDBD +} + +select { + display: none +} + +select.browser-default { + display: block +} + +select { + background-color: rgba(255, 255, 255, 0.9); + width: 100%; + padding: 5px; + border: 1px solid #f2f2f2; + border-radius: 2px; + height: 3rem +} + +.select-label { + position: absolute +} + +.select-wrapper { + position: relative +} + +.select-wrapper input.select-dropdown { + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + outline: none; + height: 3rem; + line-height: 3rem; + width: 100%; + font-size: 1rem; + margin: 0 0 15px 0; + padding: 0; + display: block +} + +.select-wrapper span.caret { + color: initial; + position: absolute; + right: 0; + top: 16px; + font-size: 10px +} + +.select-wrapper span.caret.disabled { + color: rgba(0, 0, 0, 0.26) +} + +.select-wrapper + label { + position: absolute; + top: -14px; + font-size: .8rem +} + +select:disabled { + color: rgba(0, 0, 0, 0.3) +} + +.select-wrapper input.select-dropdown:disabled { + color: rgba(0, 0, 0, 0.3); + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.3) +} + +.select-wrapper i { + color: rgba(0, 0, 0, 0.3) +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: rgba(0, 0, 0, 0.3); + background-color: transparent +} + +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem) +} + +.prefix ~ label { + margin-left: 3rem +} + +.select-dropdown li img { + height: 40px; + width: 40px; + margin: 5px 15px; + float: right +} + +.select-dropdown li.optgroup { + border-top: 1px solid #eee +} + +.select-dropdown li.optgroup.selected > span { + color: rgba(0, 0, 0, 0.7) +} + +.select-dropdown li.optgroup > span { + color: rgba(0, 0, 0, 0.4) +} + +.select-dropdown li.optgroup ~ li.optgroup-option { + padding-left: 1rem +} + +.file-field { + position: relative +} + +.file-field .file-path-wrapper { + overflow: hidden; + padding-left: 10px +} + +.file-field input.file-path { + width: 100% +} + +.file-field .btn, +.file-field .btn-large { + float: left; + height: 3rem; + line-height: 3rem +} + +.file-field span { + cursor: pointer +} + +.file-field input[type=file] { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0) +} + +.range-field { + position: relative +} + +input[type=range], +input[type=range] + .thumb { + cursor: pointer +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0 +} + +input[type=range]:focus { + outline: none +} + +input[type=range] + .thumb { + position: absolute; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: #26a69a; + top: 10px; + margin-left: -6px; + transform-origin: 50% 50%; + transform: rotate(-45deg) +} + +input[type=range] + .thumb .value { + display: block; + width: 30px; + text-align: center; + color: #26a69a; + font-size: 0; + transform: rotate(45deg) +} + +input[type=range] + .thumb.active { + border-radius: 50% 50% 50% 0 +} + +input[type=range] + .thumb.active .value { + color: #fff; + margin-left: -1px; + margin-top: 8px; + font-size: 10px +} + +input[type=range] { + -webkit-appearance: none +} + +input[type=range]::-webkit-slider-runnable-track { + height: 3px; + background: #c2c0c2; + border: none +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background-color: #26a69a; + transform-origin: 50% 50%; + margin: -5px 0 0 0; + transition: .3s +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #ccc +} + +input[type=range] { + border: 1px solid white +} + +input[type=range]::-moz-range-track { + height: 3px; + background: #ddd; + border: none +} + +input[type=range]::-moz-range-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #26a69a; + margin-top: -5px +} + +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px +} + +input[type=range]:focus::-moz-range-track { + background: #ccc +} + +input[type=range]::-ms-track { + height: 3px; + background: transparent; + border-color: transparent; + border-width: 6px 0; + color: transparent +} + +input[type=range]::-ms-fill-lower { + background: #777 +} + +input[type=range]::-ms-fill-upper { + background: #ddd +} + +input[type=range]::-ms-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #26a69a +} + +input[type=range]:focus::-ms-fill-lower { + background: #888 +} + +input[type=range]:focus::-ms-fill-upper { + background: #ccc +} + +.table-of-contents.fixed { + position: fixed +} + +.table-of-contents li { + padding: 2px 0 +} + +.table-of-contents a { + display: inline-block; + font-weight: 300; + color: #757575; + padding-left: 20px; + height: 1.5rem; + line-height: 1.5rem; + letter-spacing: .4; + display: inline-block +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 19px; + border-left: 1px solid #ea4a4f +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 18px; + border-left: 2px solid #ea4a4f +} + +.side-nav { + position: fixed; + width: 240px; + left: 0; + top: 0; + margin: 0; + transform: translateX(-100%); + height: 100%; + height: calc(100% + 60px); + height: -moz-calc(100%); + padding-bottom: 60px; + background-color: #fff; + z-index: 999; + backface-visibility: hidden; + overflow-y: auto; + will-change: transform; + backface-visibility: hidden; + transform: translateX(-105%) +} + +.side-nav.right-aligned { + right: 0; + transform: translateX(105%); + left: auto; + transform: translateX(100%) +} + +.side-nav .collapsible { + margin: 0 +} + +.side-nav li { + float: none; + line-height: 64px +} + +.side-nav li.active { + background-color: rgba(0, 0, 0, 0.05) +} + +.side-nav a { + color: #444; + display: block; + font-size: 1rem; + height: 64px; + line-height: 64px; + padding: 0 30px +} + +.side-nav a:hover { + background-color: rgba(0, 0, 0, 0.05) +} + +.side-nav a.btn, +.side-nav a.btn-large, +.side-nav a.btn-large, +.side-nav a.btn-flat, +.side-nav a.btn-floating { + margin: 10px 15px +} + +.side-nav a.btn, +.side-nav a.btn-large, +.side-nav a.btn-large, +.side-nav a.btn-floating { + color: #fff +} + +.side-nav a.btn-flat { + color: #343434 +} + +.side-nav a.btn:hover, +.side-nav a.btn-large:hover, +.side-nav a.btn-large:hover { + background-color: #2bbbad +} + +.side-nav a.btn-floating:hover { + background-color: #26a69a +} + +.drag-target { + height: 100%; + width: 10px; + position: fixed; + top: 0; + z-index: 998 +} + +.side-nav.fixed a { + display: block; + padding: 0 30px; + color: #444 +} + +.side-nav.fixed { + left: 0; + transform: translateX(0); + position: fixed +} + +.side-nav.fixed.right-aligned { + right: 0; + left: auto +} + +@media only screen and (max-width: 992px) { + .side-nav.fixed { + transform: translateX(-105%) + } + + .side-nav.fixed.right-aligned { + transform: translateX(105%) + } +} + +.side-nav .collapsible-body li.active, +.side-nav.fixed .collapsible-body li.active { + background-color: #ee6e73 +} + +.side-nav .collapsible-body li.active a, +.side-nav.fixed .collapsible-body li.active a { + color: #fff +} + +#sidenav-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 120vh; + background-color: rgba(0, 0, 0, 0.5); + z-index: 997; + will-change: opacity +} + +.preloader-wrapper { + display: inline-block; + position: relative; + width: 48px; + height: 48px +} + +.preloader-wrapper.small { + width: 36px; + height: 36px +} + +.preloader-wrapper.big { + width: 64px; + height: 64px +} + +.preloader-wrapper.active { + -webkit-animation: container-rotate 1568ms linear infinite; + animation: container-rotate 1568ms linear infinite +} + +@-webkit-keyframes container-rotate { + to { + -webkit-transform: rotate(360deg) + } +} + +@keyframes container-rotate { + to { + transform: rotate(360deg) + } +} + +.spinner-layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + border-color: #26a69a +} + +.spinner-blue, +.spinner-blue-only { + border-color: #4285f4 +} + +.spinner-red, +.spinner-red-only { + border-color: #db4437 +} + +.spinner-yellow, +.spinner-yellow-only { + border-color: #f4b400 +} + +.spinner-green, +.spinner-green-only { + border-color: #0f9d58 +} + +.active .spinner-layer.spinner-blue { + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +.active .spinner-layer.spinner-red { + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +.active .spinner-layer.spinner-yellow { + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +.active .spinner-layer.spinner-green { + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +.active .spinner-layer, +.active .spinner-layer.spinner-blue-only, +.active .spinner-layer.spinner-red-only, +.active .spinner-layer.spinner-yellow-only, +.active .spinner-layer.spinner-green-only { + opacity: 1; + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +@-webkit-keyframes fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg) + } + + 25% { + -webkit-transform: rotate(270deg) + } + + 37.5% { + -webkit-transform: rotate(405deg) + } + + 50% { + -webkit-transform: rotate(540deg) + } + + 62.5% { + -webkit-transform: rotate(675deg) + } + + 75% { + -webkit-transform: rotate(810deg) + } + + 87.5% { + -webkit-transform: rotate(945deg) + } + + to { + -webkit-transform: rotate(1080deg) + } +} + +@keyframes fill-unfill-rotate { + 12.5% { + transform: rotate(135deg) + } + + 25% { + transform: rotate(270deg) + } + + 37.5% { + transform: rotate(405deg) + } + + 50% { + transform: rotate(540deg) + } + + 62.5% { + transform: rotate(675deg) + } + + 75% { + transform: rotate(810deg) + } + + 87.5% { + transform: rotate(945deg) + } + + to { + transform: rotate(1080deg) + } +} + +@-webkit-keyframes blue-fade-in-out { + from { + opacity: 1 + } + + 25% { + opacity: 1 + } + + 26% { + opacity: 0 + } + + 89% { + opacity: 0 + } + + 90% { + opacity: 1 + } + + 100% { + opacity: 1 + } +} + +@keyframes blue-fade-in-out { + from { + opacity: 1 + } + + 25% { + opacity: 1 + } + + 26% { + opacity: 0 + } + + 89% { + opacity: 0 + } + + 90% { + opacity: 1 + } + + 100% { + opacity: 1 + } +} + +@-webkit-keyframes red-fade-in-out { + from { + opacity: 0 + } + + 15% { + opacity: 0 + } + + 25% { + opacity: 1 + } + + 50% { + opacity: 1 + } + + 51% { + opacity: 0 + } +} + +@keyframes red-fade-in-out { + from { + opacity: 0 + } + + 15% { + opacity: 0 + } + + 25% { + opacity: 1 + } + + 50% { + opacity: 1 + } + + 51% { + opacity: 0 + } +} + +@-webkit-keyframes yellow-fade-in-out { + from { + opacity: 0 + } + + 40% { + opacity: 0 + } + + 50% { + opacity: 1 + } + + 75% { + opacity: 1 + } + + 76% { + opacity: 0 + } +} + +@keyframes yellow-fade-in-out { + from { + opacity: 0 + } + + 40% { + opacity: 0 + } + + 50% { + opacity: 1 + } + + 75% { + opacity: 1 + } + + 76% { + opacity: 0 + } +} + +@-webkit-keyframes green-fade-in-out { + from { + opacity: 0 + } + + 65% { + opacity: 0 + } + + 75% { + opacity: 1 + } + + 90% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +@keyframes green-fade-in-out { + from { + opacity: 0 + } + + 65% { + opacity: 0 + } + + 75% { + opacity: 1 + } + + 90% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +.gap-patch { + position: absolute; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit +} + +.gap-patch .circle { + width: 1000%; + left: -450% +} + +.circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit +} + +.circle-clipper .circle { + width: 200%; + height: 100%; + border-width: 3px; + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0 +} + +.circle-clipper.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg) +} + +.circle-clipper.right .circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + transform: rotate(-129deg) +} + +.active .circle-clipper.left .circle { + -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +.active .circle-clipper.right .circle { + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both +} + +@-webkit-keyframes left-spin { + from { + -webkit-transform: rotate(130deg) + } + + 50% { + -webkit-transform: rotate(-5deg) + } + + to { + -webkit-transform: rotate(130deg) + } +} + +@keyframes left-spin { + from { + transform: rotate(130deg) + } + + 50% { + transform: rotate(-5deg) + } + + to { + transform: rotate(130deg) + } +} + +@-webkit-keyframes right-spin { + from { + -webkit-transform: rotate(-130deg) + } + + 50% { + -webkit-transform: rotate(5deg) + } + + to { + -webkit-transform: rotate(-130deg) + } +} + +@keyframes right-spin { + from { + transform: rotate(-130deg) + } + + 50% { + transform: rotate(5deg) + } + + to { + transform: rotate(-130deg) + } +} + +#spinnerContainer.cooldown { + -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1) +} + +@-webkit-keyframes fade-out { + from { + opacity: 1 + } + + to { + opacity: 0 + } +} + +@keyframes fade-out { + from { + opacity: 1 + } + + to { + opacity: 0 + } +} + +.slider { + position: relative; + height: 400px; + width: 100% +} + +.slider.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0 +} + +.slider.fullscreen ul.slides { + height: 100% +} + +.slider.fullscreen ul.indicators { + z-index: 2; + bottom: 30px +} + +.slider .slides { + background-color: #9e9e9e; + margin: 0; + height: 400px +} + +.slider .slides li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden +} + +.slider .slides li img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center +} + +.slider .slides li .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0 +} + +.slider .slides li .caption p { + color: #e0e0e0 +} + +.slider .slides li.active { + z-index: 2 +} + +.slider .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0 +} + +.slider .indicators .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: #e0e0e0; + transition: background-color .3s; + border-radius: 50% +} + +.slider .indicators .indicator-item.active { + background-color: #4CAF50 +} + +.carousel { + overflow: hidden; + position: relative; + width: 100%; + height: 400px; + perspective: 500px; + transform-style: preserve-3d; + transform-origin: 0% 50% +} + +.carousel .carousel-item { + width: 200px; + position: absolute; + top: 0; + left: 0 +} + +.carousel .carousel-item img { + width: 100% +} + +.carousel.carousel-slider { + top: 0; + left: 0; + height: 0 +} + +.carousel.carousel-slider .carousel-item { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0 +} + +.picker { + font-size: 16px; + text-align: left; + line-height: 1.2; + color: #000000; + position: absolute; + z-index: 10000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.picker__input { + cursor: default +} + +.picker__input.picker__input--active { + border-color: #0089ec +} + +.picker__holder { + width: 100%; + overflow-y: auto; + -webkit-overflow-scrolling: touch +} + +/*! + * Default mobile-first, responsive styling for pickadate.js + * Demo: http://amsul.github.io/pickadate.js + */ +.picker__holder, +.picker__frame { + bottom: 0; + left: 0; + right: 0; + top: 100% +} + +.picker__holder { + position: fixed; + -webkit-transition: background 0.15s ease-out, top 0s 0.15s; + -moz-transition: background 0.15s ease-out, top 0s 0.15s; + transition: background 0.15s ease-out, top 0s 0.15s; + -webkit-backface-visibility: hidden +} + +.picker__frame { + position: absolute; + margin: 0 auto; + min-width: 256px; + width: 300px; + max-height: 350px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + -webkit-transition: all 0.15s ease-out; + -moz-transition: all 0.15s ease-out; + transition: all 0.15s ease-out +} + +@media (min-height: 28.875em) { + .picker__frame { + overflow: visible; + top: auto; + bottom: -100%; + max-height: 80% + } +} + +@media (min-height: 40.125em) { + .picker__frame { + margin-bottom: 7.5% + } +} + +.picker__wrap { + display: table; + width: 100%; + height: 100% +} + +@media (min-height: 28.875em) { + .picker__wrap { + display: block + } +} + +.picker__box { + background: #ffffff; + display: table-cell; + vertical-align: middle +} + +@media (min-height: 28.875em) { + .picker__box { + display: block; + border: 1px solid #777777; + border-top-color: #898989; + border-bottom-width: 0; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24) + } +} + +.picker--opened .picker__holder { + top: 0; + background: transparent; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)"; + zoom: 1; + background: rgba(0, 0, 0, 0.32); + -webkit-transition: background 0.15s ease-out; + -moz-transition: background 0.15s ease-out; + transition: background 0.15s ease-out +} + +.picker--opened .picker__frame { + top: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1 +} + +@media (min-height: 35.875em) { + .picker--opened .picker__frame { + top: 10%; + bottom: auto + } +} + +.picker__input.picker__input--active { + border-color: #E3F2FD +} + +.picker__frame { + margin: 0 auto; + max-width: 325px +} + +@media (min-height: 38.875em) { + .picker--opened .picker__frame { + top: 10%; + bottom: auto + } +} + +.picker__box { + padding: 0 1em +} + +.picker__header { + text-align: center; + position: relative; + margin-top: .75em +} + +.picker__month, +.picker__year { + display: inline-block; + margin-left: .25em; + margin-right: .25em +} + +.picker__select--month, +.picker__select--year { + height: 2em; + padding: 0; + margin-left: .25em; + margin-right: .25em +} + +.picker__select--month.browser-default { + display: inline; + background-color: #FFFFFF; + width: 40% +} + +.picker__select--year.browser-default { + display: inline; + background-color: #FFFFFF; + width: 26% +} + +.picker__select--month:focus, +.picker__select--year:focus { + border-color: rgba(0, 0, 0, 0.05) +} + +.picker__nav--prev, +.picker__nav--next { + position: absolute; + padding: .5em 1.25em; + width: 1em; + height: 1em; + box-sizing: content-box; + top: -0.25em +} + +.picker__nav--prev { + left: -1em; + padding-right: 1.25em +} + +.picker__nav--next { + right: -1em; + padding-left: 1.25em +} + +.picker__nav--disabled, +.picker__nav--disabled:hover, +.picker__nav--disabled:before, +.picker__nav--disabled:before:hover { + cursor: default; + background: none; + border-right-color: #f5f5f5; + border-left-color: #f5f5f5 +} + +.picker__table { + text-align: center; + border-collapse: collapse; + border-spacing: 0; + table-layout: fixed; + font-size: 1rem; + width: 100%; + margin-top: .75em; + margin-bottom: .5em +} + +.picker__table th, +.picker__table td { + text-align: center +} + +.picker__table td { + margin: 0; + padding: 0 +} + +.picker__weekday { + width: 14.285714286%; + font-size: .75em; + padding-bottom: .25em; + color: #999999; + font-weight: 500 +} + +@media (min-height: 33.875em) { + .picker__weekday { + padding-bottom: .5em + } +} + +.picker__day--today { + position: relative; + color: #595959; + letter-spacing: -.3; + padding: .75rem 0; + font-weight: 400; + border: 1px solid transparent +} + +.picker__day--disabled:before { + border-top-color: #aaaaaa +} + +.picker__day--infocus:hover { + cursor: pointer; + color: #000; + font-weight: 500 +} + +.picker__day--outfocus { + display: none; + padding: .75rem 0; + color: #fff +} + +.picker__day--outfocus:hover { + cursor: pointer; + color: #dddddd; + font-weight: 500 +} + +.picker__day--highlighted:hover, +.picker--focused .picker__day--highlighted { + cursor: pointer +} + +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + border-radius: 50%; + transform: scale(0.75); + background: #0089ec; + color: #ffffff +} + +.picker__day--disabled, +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default +} + +.picker__day--highlighted.picker__day--disabled, +.picker__day--highlighted.picker__day--disabled:hover { + background: #bbbbbb +} + +.picker__footer { + text-align: center; + display: flex; + align-items: center; + justify-content: space-between +} + +.picker__button--today, +.picker__button--clear, +.picker__button--close { + border: 1px solid #ffffff; + background: #ffffff; + font-size: .8em; + padding: .66em 0; + font-weight: bold; + width: 33%; + display: inline-block; + vertical-align: bottom +} + +.picker__button--today:hover, +.picker__button--clear:hover, +.picker__button--close:hover { + cursor: pointer; + color: #000000; + background: #b1dcfb; + border-bottom-color: #b1dcfb +} + +.picker__button--today:focus, +.picker__button--clear:focus, +.picker__button--close:focus { + background: #b1dcfb; + border-color: rgba(0, 0, 0, 0.05); + outline: none +} + +.picker__button--today:before, +.picker__button--clear:before, +.picker__button--close:before { + position: relative; + display: inline-block; + height: 0 +} + +.picker__button--today:before, +.picker__button--clear:before { + content: " "; + margin-right: .45em +} + +.picker__button--today:before { + top: -0.05em; + width: 0; + border-top: 0.66em solid #0059bc; + border-left: .66em solid transparent +} + +.picker__button--clear:before { + top: -0.25em; + width: .66em; + border-top: 3px solid #ee2200 +} + +.picker__button--close:before { + content: "\D7"; + top: -0.1em; + vertical-align: top; + font-size: 1.1em; + margin-right: .35em; + color: #777777 +} + +.picker__button--today[disabled], +.picker__button--today[disabled]:hover { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default +} + +.picker__button--today[disabled]:before { + border-top-color: #aaaaaa +} + +.picker__box { + border-radius: 2px; + overflow: hidden +} + +.picker__date-display { + text-align: center; + background-color: #26a69a; + color: #fff; + padding-bottom: 15px; + font-weight: 300 +} + +.picker__nav--prev:hover, +.picker__nav--next:hover { + cursor: pointer; + color: #000000; + background: #a1ded8 +} + +.picker__weekday-display { + background-color: #1f897f; + padding: 10px; + font-weight: 200; + letter-spacing: .5; + font-size: 1rem; + margin-bottom: 15px +} + +.picker__month-display { + text-transform: uppercase; + font-size: 2rem +} + +.picker__day-display { + font-size: 4.5rem; + font-weight: 400 +} + +.picker__year-display { + font-size: 1.8rem; + color: rgba(255, 255, 255, 0.4) +} + +.picker__box { + padding: 0 +} + +.picker__calendar-container { + padding: 0 1rem +} + +.picker__calendar-container thead { + border: none +} + +.picker__table { + margin-top: 0; + margin-bottom: .5em +} + +.picker__day--infocus { + color: #595959; + letter-spacing: -.3; + padding: .75rem 0; + font-weight: 400; + border: 1px solid transparent +} + +.picker__day.picker__day--today { + color: #26a69a +} + +.picker__day.picker__day--today.picker__day--selected { + color: #fff +} + +.picker__weekday { + font-size: .9rem +} + +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + border-radius: 50%; + transform: scale(0.9); + background-color: #26a69a; + color: #ffffff +} + +.picker__day--selected.picker__day--outfocus, +.picker__day--selected:hover.picker__day--outfocus, +.picker--focused .picker__day--selected.picker__day--outfocus { + background-color: #a1ded8 +} + +.picker__footer { + text-align: right; + padding: 5px 10px +} + +.picker__close, +.picker__today { + font-size: 1.1rem; + padding: 0 1rem; + color: #26a69a +} + +.picker__nav--prev:before, +.picker__nav--next:before { + content: " "; + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #676767; + width: 0; + height: 0; + display: block; + margin: 0 auto +} + +.picker__nav--next:before { + border-right: 0; + border-left: 0.75em solid #676767 +} + +button.picker__today:focus, +button.picker__clear:focus, +button.picker__close:focus { + background-color: #a1ded8 +} + +.picker__list { + list-style: none; + padding: 0.75em 0 4.2em; + margin: 0 +} + +.picker__list-item { + border-bottom: 1px solid #dddddd; + border-top: 1px solid #dddddd; + margin-bottom: -1px; + position: relative; + background: #ffffff; + padding: .75em 1.25em +} + +@media (min-height: 46.75em) { + .picker__list-item { + padding: .5em 1em + } +} + +.picker__list-item:hover { + cursor: pointer; + color: #000000; + background: #b1dcfb; + border-color: #0089ec; + z-index: 10 +} + +.picker__list-item--highlighted { + border-color: #0089ec; + z-index: 10 +} + +.picker__list-item--highlighted:hover, +.picker--focused .picker__list-item--highlighted { + cursor: pointer; + color: #000000; + background: #b1dcfb +} + +.picker__list-item--selected, +.picker__list-item--selected:hover, +.picker--focused .picker__list-item--selected { + background: #0089ec; + color: #ffffff; + z-index: 10 +} + +.picker__list-item--disabled, +.picker__list-item--disabled:hover, +.picker--focused .picker__list-item--disabled { + background: #f5f5f5; + border-color: #f5f5f5; + color: #dddddd; + cursor: default; + border-color: #dddddd; + z-index: auto +} + +.picker--time .picker__button--clear { + display: block; + width: 80%; + margin: 1em auto 0; + padding: 1em 1.25em; + background: none; + border: 0; + font-weight: 500; + font-size: .67em; + text-align: center; + text-transform: uppercase; + color: #666 +} + +.picker--time .picker__button--clear:hover, +.picker--time .picker__button--clear:focus { + color: #000000; + background: #b1dcfb; + background: #ee2200; + border-color: #ee2200; + cursor: pointer; + color: #ffffff; + outline: none +} + +.picker--time .picker__button--clear:before { + top: -0.25em; + color: #666; + font-size: 1.25em; + font-weight: bold +} + +.picker--time .picker__button--clear:hover:before, +.picker--time .picker__button--clear:focus:before { + color: #ffffff +} + +.picker--time .picker__frame { + min-width: 256px; + max-width: 320px +} + +.picker--time .picker__box { + font-size: 1em; + background: #f2f2f2; + padding: 0 +} + +@media (min-height: 40.125em) { + .picker--time .picker__box { + margin-bottom: 5em + } +} diff --git a/docs/assets/css/materialize.scss b/docs/assets/css/materialize.scss new file mode 100644 index 0000000..372de9d --- /dev/null +++ b/docs/assets/css/materialize.scss @@ -0,0 +1,42 @@ +--- +# This is the Front Matter block +--- + +// Mixins +// @import "components/prefixer"; +@import "components/mixins"; +@import "components/color"; + +// Variables; +@import "components/variables"; + +// Reset +@import "components/normalize"; + +// components +@import "components/global"; +@import "components/icons-material-design"; +@import "components/grid"; +@import "components/navbar"; +@import "components/roboto"; +@import "components/typography"; +@import "components/cards"; +@import "components/toast"; +@import "components/tabs"; +@import "components/tooltip"; +@import "components/buttons"; +@import "components/dropdown"; +@import "components/waves"; +@import "components/modal"; +@import "components/collapsible"; +@import "components/chips"; +@import "components/materialbox"; +@import "components/forms/forms"; +@import "components/table_of_contents"; +@import "components/sideNav"; +@import "components/preloader"; +@import "components/slider"; +@import "components/carousel"; +@import "components/date_picker/default"; +@import "components/date_picker/default.date"; +@import "components/date_picker/default.time"; diff --git a/docs/assets/css/styles.css b/docs/assets/css/styles.css new file mode 100644 index 0000000..07bc5a0 --- /dev/null +++ b/docs/assets/css/styles.css @@ -0,0 +1,109 @@ +h1 { + font-size : 2.5rem !important; +} +h2 { + font-size : 2rem !important; +} +h3 { + font-size : 1.5rem !important; +} +h1,h2,h3,h4,h5 { + color : #95C12B !important; +} +.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav { + box-shadow: 0 2px 5px 0 rgba(149,193,43,0.16), 0 2px 10px 0 rgba(0,0,0,0.12) !important; +} +.toctext{ + color : #000000 !important; +} +#div_content ul { + list-style-type: initial !important; +} +#div_content ul li { + list-style-type: initial !important; + margin-left : 20px !important; +} +#div_content { + padding-left : 400px !important; +} +#side-nav { + background-color:#F3F3F3 !important; + z-index:2 !important; + top:60px !important; + width : 350px !important; +} +#div_menuMobile { + background-color:#F3F3F3 !important; +} +@media only screen and (max-width : 992px) { + #div_content { + padding-left : 0 !important; + } +} +.toclevel-2{ + margin-left : 10px !important; +} +nav ul a,nav { + color: #444 !important; + background-color: #fff !important; +} +.jeedomcolorbg { + background-color: #95C12B !important; +} +.jeedomcolor { + color: #95C12B !important; +} +.collection a.collection-item { + color: #85a835 !important; +} +.container { + @media only screen and (min-width: 993px){ + width: 85% !important; + } +} +.waves-effect.waves-jeedom .waves-ripple { + background-color: rgba(149, 193, 43, 0.65); +} +.toclevel-1 a{ + padding-left: 10px !important; + height: 100% !important; + vertical-align: middle !important; +} +.toclevel-1{ + vertical-align: middle !important; +} +.toctext{ + font-size : 0.85rem !important; +} +.tocnumber{ + color : #95C12B !important; +} +#side-nav a{ + line-height: 24px !important; +} +.toc a.active{ + font-weight: bold; +} +.dropdown-content li>a, .dropdown-content li>span{ + color : #95C12B !important; +} +@-moz-document url-prefix() { + .side-nav { + height: 100% !important; + } +} +@media print { + .hide-on-print { + height: 0px !important; + visibility: hidden !important; + } + .show-on-print { + display:block !important; + } + #div_content { + padding-left : 0px !important; + } +} + + + diff --git a/docs/assets/fonts/roboto/Roboto-Bold.eot b/docs/assets/fonts/roboto/Roboto-Bold.eot new file mode 100644 index 0000000..b73776e Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Bold.eot differ diff --git a/docs/assets/fonts/roboto/Roboto-Bold.ttf b/docs/assets/fonts/roboto/Roboto-Bold.ttf new file mode 100644 index 0000000..68822ca Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Bold.ttf differ diff --git a/docs/assets/fonts/roboto/Roboto-Bold.woff b/docs/assets/fonts/roboto/Roboto-Bold.woff new file mode 100644 index 0000000..1f75afd Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Bold.woff differ diff --git a/docs/assets/fonts/roboto/Roboto-Bold.woff2 b/docs/assets/fonts/roboto/Roboto-Bold.woff2 new file mode 100644 index 0000000..350d1c3 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Bold.woff2 differ diff --git a/docs/assets/fonts/roboto/Roboto-Light.eot b/docs/assets/fonts/roboto/Roboto-Light.eot new file mode 100644 index 0000000..072cdc4 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Light.eot differ diff --git a/docs/assets/fonts/roboto/Roboto-Light.ttf b/docs/assets/fonts/roboto/Roboto-Light.ttf new file mode 100644 index 0000000..aa45340 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Light.ttf differ diff --git a/docs/assets/fonts/roboto/Roboto-Light.woff b/docs/assets/fonts/roboto/Roboto-Light.woff new file mode 100644 index 0000000..3480c6c Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Light.woff differ diff --git a/docs/assets/fonts/roboto/Roboto-Light.woff2 b/docs/assets/fonts/roboto/Roboto-Light.woff2 new file mode 100644 index 0000000..9a4d98c Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Light.woff2 differ diff --git a/docs/assets/fonts/roboto/Roboto-Medium.eot b/docs/assets/fonts/roboto/Roboto-Medium.eot new file mode 100644 index 0000000..f9ad995 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Medium.eot differ diff --git a/docs/assets/fonts/roboto/Roboto-Medium.ttf b/docs/assets/fonts/roboto/Roboto-Medium.ttf new file mode 100644 index 0000000..a3c1a1f Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Medium.ttf differ diff --git a/docs/assets/fonts/roboto/Roboto-Medium.woff b/docs/assets/fonts/roboto/Roboto-Medium.woff new file mode 100644 index 0000000..1186773 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Medium.woff differ diff --git a/docs/assets/fonts/roboto/Roboto-Medium.woff2 b/docs/assets/fonts/roboto/Roboto-Medium.woff2 new file mode 100644 index 0000000..d10a592 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Medium.woff2 differ diff --git a/docs/assets/fonts/roboto/Roboto-Regular.eot b/docs/assets/fonts/roboto/Roboto-Regular.eot new file mode 100644 index 0000000..9b5e8e4 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Regular.eot differ diff --git a/docs/assets/fonts/roboto/Roboto-Regular.ttf b/docs/assets/fonts/roboto/Roboto-Regular.ttf new file mode 100644 index 0000000..0e58508 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Regular.ttf differ diff --git a/docs/assets/fonts/roboto/Roboto-Regular.woff b/docs/assets/fonts/roboto/Roboto-Regular.woff new file mode 100644 index 0000000..f823258 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Regular.woff differ diff --git a/docs/assets/fonts/roboto/Roboto-Regular.woff2 b/docs/assets/fonts/roboto/Roboto-Regular.woff2 new file mode 100644 index 0000000..b7082ef Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Regular.woff2 differ diff --git a/docs/assets/fonts/roboto/Roboto-Thin.eot b/docs/assets/fonts/roboto/Roboto-Thin.eot new file mode 100644 index 0000000..2284a3b Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Thin.eot differ diff --git a/docs/assets/fonts/roboto/Roboto-Thin.ttf b/docs/assets/fonts/roboto/Roboto-Thin.ttf new file mode 100644 index 0000000..8779333 Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Thin.ttf differ diff --git a/docs/assets/fonts/roboto/Roboto-Thin.woff b/docs/assets/fonts/roboto/Roboto-Thin.woff new file mode 100644 index 0000000..2a98c1e Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Thin.woff differ diff --git a/docs/assets/fonts/roboto/Roboto-Thin.woff2 b/docs/assets/fonts/roboto/Roboto-Thin.woff2 new file mode 100644 index 0000000..a38025a Binary files /dev/null and b/docs/assets/fonts/roboto/Roboto-Thin.woff2 differ diff --git a/docs/assets/js/jquery-3.5.1.min.js b/docs/assets/js/jquery-3.5.1.min.js new file mode 100644 index 0000000..05e73d9 --- /dev/null +++ b/docs/assets/js/jquery-3.5.1.min.js @@ -0,0 +1,3238 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ ! function (e, t) { + "use strict"; + "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { + if (!e.document) throw new Error("jQuery requires a window with a document"); + return t(e) + } : t(e) +}("undefined" != typeof window ? window : this, function (C, e) { + "use strict"; + var t = [], + r = Object.getPrototypeOf, + s = t.slice, + g = t.flat ? function (e) { + return t.flat.call(e) + } : function (e) { + return t.concat.apply([], e) + }, + u = t.push, + i = t.indexOf, + n = {}, + o = n.toString, + v = n.hasOwnProperty, + a = v.toString, + l = a.call(Object), + y = {}, + m = function (e) { + return "function" == typeof e && "number" != typeof e.nodeType + }, + x = function (e) { + return null != e && e === e.window + }, + E = C.document, + c = { + type: !0, + src: !0, + nonce: !0, + noModule: !0 + }; + + function b(e, t, n) { + var r, i, o = (n = n || E).createElement("script"); + if (o.text = e, t) + for (r in c)(i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); + n.head.appendChild(o).parentNode.removeChild(o) + } + + function w(e) { + return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e + } + var f = "3.5.1", + S = function (e, t) { + return new S.fn.init(e, t) + }; + + function p(e) { + var t = !!e && "length" in e && e.length, + n = w(e); + return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) + } + S.fn = S.prototype = { + jquery: f, + constructor: S, + length: 0, + toArray: function () { + return s.call(this) + }, + get: function (e) { + return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] + }, + pushStack: function (e) { + var t = S.merge(this.constructor(), e); + return t.prevObject = this, t + }, + each: function (e) { + return S.each(this, e) + }, + map: function (n) { + return this.pushStack(S.map(this, function (e, t) { + return n.call(e, t, e) + })) + }, + slice: function () { + return this.pushStack(s.apply(this, arguments)) + }, + first: function () { + return this.eq(0) + }, + last: function () { + return this.eq(-1) + }, + even: function () { + return this.pushStack(S.grep(this, function (e, t) { + return (t + 1) % 2 + })) + }, + odd: function () { + return this.pushStack(S.grep(this, function (e, t) { + return t % 2 + })) + }, + eq: function (e) { + var t = this.length, + n = +e + (e < 0 ? t : 0); + return this.pushStack(0 <= n && n < t ? [this[n]] : []) + }, + end: function () { + return this.prevObject || this.constructor() + }, + push: u, + sort: t.sort, + splice: t.splice + }, S.extend = S.fn.extend = function () { + var e, t, n, r, i, o, a = arguments[0] || {}, + s = 1, + u = arguments.length, + l = !1; + for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++) + if (null != (e = arguments[s])) + for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r)); + return a + }, S.extend({ + expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), + isReady: !0, + error: function (e) { + throw new Error(e) + }, + noop: function () {}, + isPlainObject: function (e) { + var t, n; + return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l) + }, + isEmptyObject: function (e) { + var t; + for (t in e) return !1; + return !0 + }, + globalEval: function (e, t, n) { + b(e, { + nonce: t && t.nonce + }, n) + }, + each: function (e, t) { + var n, r = 0; + if (p(e)) { + for (n = e.length; r < n; r++) + if (!1 === t.call(e[r], r, e[r])) break + } else + for (r in e) + if (!1 === t.call(e[r], r, e[r])) break; + return e + }, + makeArray: function (e, t) { + var n = t || []; + return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n + }, + inArray: function (e, t, n) { + return null == t ? -1 : i.call(t, e, n) + }, + merge: function (e, t) { + for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r]; + return e.length = i, e + }, + grep: function (e, t, n) { + for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]); + return r + }, + map: function (e, t, n) { + var r, i, o = 0, + a = []; + if (p(e)) + for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i); + else + for (o in e) null != (i = t(e[o], o, n)) && a.push(i); + return g(a) + }, + guid: 1, + support: y + }), "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { + n["[object " + t + "]"] = t.toLowerCase() + }); + var d = function (n) { + var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, S = "sizzle" + 1 * new Date, + p = n.document, + k = 0, + r = 0, + m = ue(), + x = ue(), + A = ue(), + N = ue(), + D = function (e, t) { + return e === t && (l = !0), 0 + }, + j = {}.hasOwnProperty, + t = [], + q = t.pop, + L = t.push, + H = t.push, + O = t.slice, + P = function (e, t) { + for (var n = 0, r = e.length; n < r; n++) + if (e[n] === t) return n; + return -1 + }, + R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + M = "[\\x20\\t\\r\\n\\f]", + I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]", + F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", + B = new RegExp(M + "+", "g"), + $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), + _ = new RegExp("^" + M + "*," + M + "*"), + z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), + U = new RegExp(M + "|>"), + X = new RegExp(F), + V = new RegExp("^" + I + "$"), + G = { + ID: new RegExp("^#(" + I + ")"), + CLASS: new RegExp("^\\.(" + I + ")"), + TAG: new RegExp("^(" + I + "|[*])"), + ATTR: new RegExp("^" + W), + PSEUDO: new RegExp("^" + F), + CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"), + bool: new RegExp("^(?:" + R + ")$", "i"), + needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i") + }, + Y = /HTML$/i, + Q = /^(?:input|select|textarea|button)$/i, + J = /^h\d$/i, + K = /^[^{]+\{\s*\[native \w/, + Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ee = /[+~]/, + te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"), + ne = function (e, t) { + var n = "0x" + e.slice(1) - 65536; + return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320)) + }, + re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + ie = function (e, t) { + return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e + }, + oe = function () { + T() + }, + ae = be(function (e) { + return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase() + }, { + dir: "parentNode", + next: "legend" + }); + try { + H.apply(t = O.call(p.childNodes), p.childNodes), t[p.childNodes.length].nodeType + } catch (e) { + H = { + apply: t.length ? function (e, t) { + L.apply(e, O.call(t)) + } : function (e, t) { + var n = e.length, + r = 0; + while (e[n++] = t[r++]); + e.length = n - 1 + } + } + } + + function se(t, e, n, r) { + var i, o, a, s, u, l, c, f = e && e.ownerDocument, + p = e ? e.nodeType : 9; + if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n; + if (!r && (T(e), e = e || C, E)) { + if (11 !== p && (u = Z.exec(t))) + if (i = u[1]) { + if (9 === p) { + if (!(a = e.getElementById(i))) return n; + if (a.id === i) return n.push(a), n + } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n + } else { + if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n; + if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n + } if (d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) { + if (c = t, f = e, 1 === p && (U.test(t) || z.test(t))) { + (f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)), o = (l = h(t)).length; + while (o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]); + c = l.join(",") + } + try { + return H.apply(n, f.querySelectorAll(c)), n + } catch (e) { + N(t, !0) + } finally { + s === S && e.removeAttribute("id") + } + } + } + return g(t.replace($, "$1"), e, n, r) + } + + function ue() { + var r = []; + return function e(t, n) { + return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n + } + } + + function le(e) { + return e[S] = !0, e + } + + function ce(e) { + var t = C.createElement("fieldset"); + try { + return !!e(t) + } catch (e) { + return !1 + } finally { + t.parentNode && t.parentNode.removeChild(t), t = null + } + } + + function fe(e, t) { + var n = e.split("|"), + r = n.length; + while (r--) b.attrHandle[n[r]] = t + } + + function pe(e, t) { + var n = t && e, + r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; + if (r) return r; + if (n) + while (n = n.nextSibling) + if (n === t) return -1; + return e ? 1 : -1 + } + + function de(t) { + return function (e) { + return "input" === e.nodeName.toLowerCase() && e.type === t + } + } + + function he(n) { + return function (e) { + var t = e.nodeName.toLowerCase(); + return ("input" === t || "button" === t) && e.type === n + } + } + + function ge(t) { + return function (e) { + return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t + } + } + + function ve(a) { + return le(function (o) { + return o = +o, le(function (e, t) { + var n, r = a([], e.length, o), + i = r.length; + while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n])) + }) + }) + } + + function ye(e) { + return e && "undefined" != typeof e.getElementsByTagName && e + } + for (e in d = se.support = {}, i = se.isXML = function (e) { + var t = e.namespaceURI, + n = (e.ownerDocument || e).documentElement; + return !Y.test(t || n && n.nodeName || "HTML") + }, T = se.setDocument = function (e) { + var t, n, r = e ? e.ownerDocument || e : p; + return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function (e) { + return a.appendChild(e).appendChild(C.createElement("div")), "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length + }), d.attributes = ce(function (e) { + return e.className = "i", !e.getAttribute("className") + }), d.getElementsByTagName = ce(function (e) { + return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length + }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function (e) { + return a.appendChild(e).id = S, !C.getElementsByName || !C.getElementsByName(S).length + }), d.getById ? (b.filter.ID = function (e) { + var t = e.replace(te, ne); + return function (e) { + return e.getAttribute("id") === t + } + }, b.find.ID = function (e, t) { + if ("undefined" != typeof t.getElementById && E) { + var n = t.getElementById(e); + return n ? [n] : [] + } + }) : (b.filter.ID = function (e) { + var n = e.replace(te, ne); + return function (e) { + var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); + return t && t.value === n + } + }, b.find.ID = function (e, t) { + if ("undefined" != typeof t.getElementById && E) { + var n, r, i, o = t.getElementById(e); + if (o) { + if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; + i = t.getElementsByName(e), r = 0; + while (o = i[r++]) + if ((n = o.getAttributeNode("id")) && n.value === e) return [o] + } + return [] + } + }), b.find.TAG = d.getElementsByTagName ? function (e, t) { + return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0 + } : function (e, t) { + var n, r = [], + i = 0, + o = t.getElementsByTagName(e); + if ("*" === e) { + while (n = o[i++]) 1 === n.nodeType && r.push(n); + return r + } + return o + }, b.find.CLASS = d.getElementsByClassName && function (e, t) { + if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e) + }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) { + var t; + a.appendChild(e).innerHTML = "", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), (t = C.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"), e.querySelectorAll("\\\f"), v.push("[\\r\\n\\f]") + }), ce(function (e) { + e.innerHTML = ""; + var t = C.createElement("input"); + t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:") + })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function (e) { + d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", F) + }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function (e, t) { + var n = 9 === e.nodeType ? e.documentElement : e, + r = t && t.parentNode; + return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) + } : function (e, t) { + if (t) + while (t = t.parentNode) + if (t === e) return !0; + return !1 + }, D = t ? function (e, t) { + if (e === t) return l = !0, 0; + var n = !e.compareDocumentPosition - !t.compareDocumentPosition; + return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1) + } : function (e, t) { + if (e === t) return l = !0, 0; + var n, r = 0, + i = e.parentNode, + o = t.parentNode, + a = [e], + s = [t]; + if (!i || !o) return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0; + if (i === o) return pe(e, t); + n = e; + while (n = n.parentNode) a.unshift(n); + n = t; + while (n = n.parentNode) s.unshift(n); + while (a[r] === s[r]) r++; + return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0 + }), C + }, se.matches = function (e, t) { + return se(e, null, null, t) + }, se.matchesSelector = function (e, t) { + if (T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try { + var n = c.call(e, t); + if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n + } catch (e) { + N(t, !0) + } + return 0 < se(t, C, null, [e]).length + }, se.contains = function (e, t) { + return (e.ownerDocument || e) != C && T(e), y(e, t) + }, se.attr = function (e, t) { + (e.ownerDocument || e) != C && T(e); + var n = b.attrHandle[t.toLowerCase()], + r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0; + return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null + }, se.escape = function (e) { + return (e + "").replace(re, ie) + }, se.error = function (e) { + throw new Error("Syntax error, unrecognized expression: " + e) + }, se.uniqueSort = function (e) { + var t, n = [], + r = 0, + i = 0; + if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) { + while (t = e[i++]) t === e[i] && (r = n.push(i)); + while (r--) e.splice(n[r], 1) + } + return u = null, e + }, o = se.getText = function (e) { + var t, n = "", + r = 0, + i = e.nodeType; + if (i) { + if (1 === i || 9 === i || 11 === i) { + if ("string" == typeof e.textContent) return e.textContent; + for (e = e.firstChild; e; e = e.nextSibling) n += o(e) + } else if (3 === i || 4 === i) return e.nodeValue + } else + while (t = e[r++]) n += o(t); + return n + }, (b = se.selectors = { + cacheLength: 50, + createPseudo: le, + match: G, + attrHandle: {}, + find: {}, + relative: { + ">": { + dir: "parentNode", + first: !0 + }, + " ": { + dir: "parentNode" + }, + "+": { + dir: "previousSibling", + first: !0 + }, + "~": { + dir: "previousSibling" + } + }, + preFilter: { + ATTR: function (e) { + return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) + }, + CHILD: function (e) { + return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e + }, + PSEUDO: function (e) { + var t, n = !e[6] && e[2]; + return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) + } + }, + filter: { + TAG: function (e) { + var t = e.replace(te, ne).toLowerCase(); + return "*" === e ? function () { + return !0 + } : function (e) { + return e.nodeName && e.nodeName.toLowerCase() === t + } + }, + CLASS: function (e) { + var t = m[e + " "]; + return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function (e) { + return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") + }) + }, + ATTR: function (n, r, i) { + return function (e) { + var t = se.attr(e, n); + return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-")) + } + }, + CHILD: function (h, e, t, g, v) { + var y = "nth" !== h.slice(0, 3), + m = "last" !== h.slice(-4), + x = "of-type" === e; + return 1 === g && 0 === v ? function (e) { + return !!e.parentNode + } : function (e, t, n) { + var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling", + c = e.parentNode, + f = x && e.nodeName.toLowerCase(), + p = !n && !x, + d = !1; + if (c) { + if (y) { + while (l) { + a = e; + while (a = a[l]) + if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1; + u = l = "only" === h && !u && "nextSibling" + } + return !0 + } + if (u = [m ? c.firstChild : c.lastChild], m && p) { + d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2], a = s && c.childNodes[s]; + while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) + if (1 === a.nodeType && ++d && a === e) { + i[h] = [k, s, d]; + break + } + } else if (p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d) + while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) + if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e)) break; + return (d -= v) === g || d % g == 0 && 0 <= d / g + } + } + }, + PSEUDO: function (e, o) { + var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e); + return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) { + var n, r = a(e, o), + i = r.length; + while (i--) e[n = P(e, r[i])] = !(t[n] = r[i]) + }) : function (e) { + return a(e, 0, t) + }) : a + } + }, + pseudos: { + not: le(function (e) { + var r = [], + i = [], + s = f(e.replace($, "$1")); + return s[S] ? le(function (e, t, n, r) { + var i, o = s(e, null, r, []), + a = e.length; + while (a--)(i = o[a]) && (e[a] = !(t[a] = i)) + }) : function (e, t, n) { + return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop() + } + }), + has: le(function (t) { + return function (e) { + return 0 < se(t, e).length + } + }), + contains: le(function (t) { + return t = t.replace(te, ne), + function (e) { + return -1 < (e.textContent || o(e)).indexOf(t) + } + }), + lang: le(function (n) { + return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), + function (e) { + var t; + do { + if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") + } while ((e = e.parentNode) && 1 === e.nodeType); + return !1 + } + }), + target: function (e) { + var t = n.location && n.location.hash; + return t && t.slice(1) === e.id + }, + root: function (e) { + return e === a + }, + focus: function (e) { + return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) + }, + enabled: ge(!1), + disabled: ge(!0), + checked: function (e) { + var t = e.nodeName.toLowerCase(); + return "input" === t && !!e.checked || "option" === t && !!e.selected + }, + selected: function (e) { + return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected + }, + empty: function (e) { + for (e = e.firstChild; e; e = e.nextSibling) + if (e.nodeType < 6) return !1; + return !0 + }, + parent: function (e) { + return !b.pseudos.empty(e) + }, + header: function (e) { + return J.test(e.nodeName) + }, + input: function (e) { + return Q.test(e.nodeName) + }, + button: function (e) { + var t = e.nodeName.toLowerCase(); + return "input" === t && "button" === e.type || "button" === t + }, + text: function (e) { + var t; + return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) + }, + first: ve(function () { + return [0] + }), + last: ve(function (e, t) { + return [t - 1] + }), + eq: ve(function (e, t, n) { + return [n < 0 ? n + t : n] + }), + even: ve(function (e, t) { + for (var n = 0; n < t; n += 2) e.push(n); + return e + }), + odd: ve(function (e, t) { + for (var n = 1; n < t; n += 2) e.push(n); + return e + }), + lt: ve(function (e, t, n) { + for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r); + return e + }), + gt: ve(function (e, t, n) { + for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r); + return e + }) + } + }).pseudos.nth = b.pseudos.eq, { + radio: !0, + checkbox: !0, + file: !0, + password: !0, + image: !0 + }) b.pseudos[e] = de(e); + for (e in { + submit: !0, + reset: !0 + }) b.pseudos[e] = he(e); + + function me() {} + + function xe(e) { + for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value; + return r + } + + function be(s, e, t) { + var u = e.dir, + l = e.next, + c = l || u, + f = t && "parentNode" === c, + p = r++; + return e.first ? function (e, t, n) { + while (e = e[u]) + if (1 === e.nodeType || f) return s(e, t, n); + return !1 + } : function (e, t, n) { + var r, i, o, a = [k, p]; + if (n) { + while (e = e[u]) + if ((1 === e.nodeType || f) && s(e, t, n)) return !0 + } else + while (e = e[u]) + if (1 === e.nodeType || f) + if (i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e; + else { + if ((r = i[c]) && r[0] === k && r[1] === p) return a[2] = r[2]; + if ((i[c] = a)[2] = s(e, t, n)) return !0 + } return !1 + } + } + + function we(i) { + return 1 < i.length ? function (e, t, n) { + var r = i.length; + while (r--) + if (!i[r](e, t, n)) return !1; + return !0 + } : i[0] + } + + function Te(e, t, n, r, i) { + for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s))); + return a + } + + function Ce(d, h, g, v, y, e) { + return v && !v[S] && (v = Ce(v)), y && !y[S] && (y = Ce(y, e)), le(function (e, t, n, r) { + var i, o, a, s = [], + u = [], + l = t.length, + c = e || function (e, t, n) { + for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n); + return n + }(h || "*", n.nodeType ? [n] : n, []), + f = !d || !e && h ? c : Te(c, s, d, n, r), + p = g ? y || (e ? d : l || v) ? [] : t : f; + if (g && g(f, p, n, r), v) { + i = Te(p, u), v(i, [], n, r), o = i.length; + while (o--)(a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) + } + if (e) { + if (y || d) { + if (y) { + i = [], o = p.length; + while (o--)(a = p[o]) && i.push(f[o] = a); + y(null, p = [], i, r) + } + o = p.length; + while (o--)(a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a)) + } + } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p) + }) + } + + function Ee(e) { + for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) { + return e === i + }, a, !0), l = be(function (e) { + return -1 < P(i, e) + }, a, !0), c = [function (e, t, n) { + var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); + return i = null, r + }]; s < r; s++) + if (t = b.relative[e[s].type]) c = [be(we(c), t)]; + else { + if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { + for (n = ++s; n < r; n++) + if (b.relative[e[n].type]) break; + return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({ + value: " " === e[s - 2].type ? "*" : "" + })).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e)) + } + c.push(t) + } return we(c) + } + return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function (e, t) { + var n, r, i, o, a, s, u, l = x[e + " "]; + if (l) return t ? 0 : l.slice(0); + a = e, s = [], u = b.preFilter; + while (a) { + for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({ + value: n, + type: r[0].replace($, " ") + }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({ + value: n, + type: o, + matches: r + }), a = a.slice(n.length)); + if (!n) break + } + return t ? a.length : a ? se.error(e) : x(e, s).slice(0) + }, f = se.compile = function (e, t) { + var n, v, y, m, x, r, i = [], + o = [], + a = A[e + " "]; + if (!a) { + t || (t = h(e)), n = t.length; + while (n--)(a = Ee(t[n]))[S] ? i.push(a) : o.push(a); + (a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) { + var o, a, s, u = 0, + l = "0", + c = e && [], + f = [], + p = w, + d = e || x && b.find.TAG("*", i), + h = k += null == p ? 1 : Math.random() || .1, + g = d.length; + for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) { + if (x && o) { + a = 0, t || o.ownerDocument == C || (T(o), n = !E); + while (s = v[a++]) + if (s(o, t || C, n)) { + r.push(o); + break + } i && (k = h) + } + m && ((o = !s && o) && u--, e && c.push(o)) + } + if (u += l, m && l !== u) { + a = 0; + while (s = y[a++]) s(c, f, t, n); + if (e) { + if (0 < u) + while (l--) c[l] || f[l] || (f[l] = q.call(r)); + f = Te(f) + } + H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r) + } + return i && (k = h, w = p), c + }, m ? le(r) : r))).selector = e + } + return a + }, g = se.select = function (e, t, n, r) { + var i, o, a, s, u, l = "function" == typeof e && e, + c = !r && h(e = l.selector || e); + if (n = n || [], 1 === c.length) { + if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) { + if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n; + l && (t = t.parentNode), e = e.slice(o.shift().value.length) + } + i = G.needsContext.test(e) ? 0 : o.length; + while (i--) { + if (a = o[i], b.relative[s = a.type]) break; + if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) { + if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n; + break + } + } + } + return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n + }, d.sortStable = S.split("").sort(D).join("") === S, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function (e) { + return 1 & e.compareDocumentPosition(C.createElement("fieldset")) + }), ce(function (e) { + return e.innerHTML = "", "#" === e.firstChild.getAttribute("href") + }) || fe("type|href|height|width", function (e, t, n) { + if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) + }), d.attributes && ce(function (e) { + return e.innerHTML = "", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") + }) || fe("value", function (e, t, n) { + if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue + }), ce(function (e) { + return null == e.getAttribute("disabled") + }) || fe(R, function (e, t, n) { + var r; + if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null + }), se + }(C); + S.find = d, S.expr = d.selectors, S.expr[":"] = S.expr.pseudos, S.uniqueSort = S.unique = d.uniqueSort, S.text = d.getText, S.isXMLDoc = d.isXML, S.contains = d.contains, S.escapeSelector = d.escape; + var h = function (e, t, n) { + var r = [], + i = void 0 !== n; + while ((e = e[t]) && 9 !== e.nodeType) + if (1 === e.nodeType) { + if (i && S(e).is(n)) break; + r.push(e) + } return r + }, + T = function (e, t) { + for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e); + return n + }, + k = S.expr.match.needsContext; + + function A(e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() + } + var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; + + function D(e, n, r) { + return m(n) ? S.grep(e, function (e, t) { + return !!n.call(e, t, e) !== r + }) : n.nodeType ? S.grep(e, function (e) { + return e === n !== r + }) : "string" != typeof n ? S.grep(e, function (e) { + return -1 < i.call(n, e) !== r + }) : S.filter(n, e, r) + } + S.filter = function (e, t, n) { + var r = t[0]; + return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function (e) { + return 1 === e.nodeType + })) + }, S.fn.extend({ + find: function (e) { + var t, n, r = this.length, + i = this; + if ("string" != typeof e) return this.pushStack(S(e).filter(function () { + for (t = 0; t < r; t++) + if (S.contains(i[t], this)) return !0 + })); + for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n); + return 1 < r ? S.uniqueSort(n) : n + }, + filter: function (e) { + return this.pushStack(D(this, e || [], !1)) + }, + not: function (e) { + return this.pushStack(D(this, e || [], !0)) + }, + is: function (e) { + return !!D(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1).length + } + }); + var j, q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; + (S.fn.init = function (e, t, n) { + var r, i; + if (!e) return this; + if (n = n || j, "string" == typeof e) { + if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); + if (r[1]) { + if (t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t)) + for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); + return this + } + return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this + } + return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this) + }).prototype = S.fn, j = S(E); + var L = /^(?:parents|prev(?:Until|All))/, + H = { + children: !0, + contents: !0, + next: !0, + prev: !0 + }; + + function O(e, t) { + while ((e = e[t]) && 1 !== e.nodeType); + return e + } + S.fn.extend({ + has: function (e) { + var t = S(e, this), + n = t.length; + return this.filter(function () { + for (var e = 0; e < n; e++) + if (S.contains(this, t[e])) return !0 + }) + }, + closest: function (e, t) { + var n, r = 0, + i = this.length, + o = [], + a = "string" != typeof e && S(e); + if (!k.test(e)) + for (; r < i; r++) + for (n = this[r]; n && n !== t; n = n.parentNode) + if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))) { + o.push(n); + break + } return this.pushStack(1 < o.length ? S.uniqueSort(o) : o) + }, + index: function (e) { + return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 + }, + add: function (e, t) { + return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t)))) + }, + addBack: function (e) { + return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) + } + }), S.each({ + parent: function (e) { + var t = e.parentNode; + return t && 11 !== t.nodeType ? t : null + }, + parents: function (e) { + return h(e, "parentNode") + }, + parentsUntil: function (e, t, n) { + return h(e, "parentNode", n) + }, + next: function (e) { + return O(e, "nextSibling") + }, + prev: function (e) { + return O(e, "previousSibling") + }, + nextAll: function (e) { + return h(e, "nextSibling") + }, + prevAll: function (e) { + return h(e, "previousSibling") + }, + nextUntil: function (e, t, n) { + return h(e, "nextSibling", n) + }, + prevUntil: function (e, t, n) { + return h(e, "previousSibling", n) + }, + siblings: function (e) { + return T((e.parentNode || {}).firstChild, e) + }, + children: function (e) { + return T(e.firstChild) + }, + contents: function (e) { + return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes)) + } + }, function (r, i) { + S.fn[r] = function (e, t) { + var n = S.map(this, i, e); + return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = S.filter(t, n)), 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), this.pushStack(n) + } + }); + var P = /[^\x20\t\r\n\f]+/g; + + function R(e) { + return e + } + + function M(e) { + throw e + } + + function I(e, t, n, r) { + var i; + try { + e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) + } catch (e) { + n.apply(void 0, [e]) + } + } + S.Callbacks = function (r) { + var e, n; + r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function (e, t) { + n[t] = !0 + }), n) : S.extend({}, r); + var i, t, o, a, s = [], + u = [], + l = -1, + c = function () { + for (a = a || r.once, o = i = !0; u.length; l = -1) { + t = u.shift(); + while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1) + } + r.memory || (t = !1), i = !1, a && (s = t ? [] : "") + }, + f = { + add: function () { + return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) { + S.each(e, function (e, t) { + m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t) + }) + }(arguments), t && !i && c()), this + }, + remove: function () { + return S.each(arguments, function (e, t) { + var n; + while (-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l-- + }), this + }, + has: function (e) { + return e ? -1 < S.inArray(e, s) : 0 < s.length + }, + empty: function () { + return s && (s = []), this + }, + disable: function () { + return a = u = [], s = t = "", this + }, + disabled: function () { + return !s + }, + lock: function () { + return a = u = [], t || i || (s = t = ""), this + }, + locked: function () { + return !!a + }, + fireWith: function (e, t) { + return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this + }, + fire: function () { + return f.fireWith(this, arguments), this + }, + fired: function () { + return !!o + } + }; + return f + }, S.extend({ + Deferred: function (e) { + var o = [["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2], ["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"]], + i = "pending", + a = { + state: function () { + return i + }, + always: function () { + return s.done(arguments).fail(arguments), this + }, + "catch": function (e) { + return a.then(null, e) + }, + pipe: function () { + var i = arguments; + return S.Deferred(function (r) { + S.each(o, function (e, t) { + var n = m(i[t[4]]) && i[t[4]]; + s[t[1]](function () { + var e = n && n.apply(this, arguments); + e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments) + }) + }), i = null + }).promise() + }, + then: function (t, n, r) { + var u = 0; + + function l(i, o, a, s) { + return function () { + var n = this, + r = arguments, + e = function () { + var e, t; + if (!(i < u)) { + if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution"); + t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r)) + } + }, + t = s ? e : function () { + try { + e() + } catch (e) { + S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r)) + } + }; + i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t)) + } + } + return S.Deferred(function (e) { + o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : R)), o[2][3].add(l(0, e, m(n) ? n : M)) + }).promise() + }, + promise: function (e) { + return null != e ? S.extend(e, a) : a + } + }, + s = {}; + return S.each(o, function (e, t) { + var n = t[2], + r = t[5]; + a[t[1]] = n.add, r && n.add(function () { + i = r + }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () { + return s[t[0] + "With"](this === s ? void 0 : this, arguments), this + }, s[t[0] + "With"] = n.fireWith + }), a.promise(s), e && e.call(s, s), s + }, + when: function (e) { + var n = arguments.length, + t = n, + r = Array(t), + i = s.call(arguments), + o = S.Deferred(), + a = function (t) { + return function (e) { + r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i) + } + }; + if (n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then(); + while (t--) I(i[t], a(t), o.reject); + return o.promise() + } + }); + var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + S.Deferred.exceptionHook = function (e, t) { + C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) + }, S.readyException = function (e) { + C.setTimeout(function () { + throw e + }) + }; + var F = S.Deferred(); + + function B() { + E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), S.ready() + } + S.fn.ready = function (e) { + return F.then(e)["catch"](function (e) { + S.readyException(e) + }), this + }, S.extend({ + isReady: !1, + readyWait: 1, + ready: function (e) { + (!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S]) + } + }), S.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B)); + var $ = function (e, t, n, r, i, o, a) { + var s = 0, + u = e.length, + l = null == n; + if ("object" === w(n)) + for (s in i = !0, n) $(e, t, s, n[s], !0, o, a); + else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { + return l.call(S(e), n) + })), t)) + for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); + return i ? e : l ? t.call(e) : u ? t(e[0], n) : o + }, + _ = /^-ms-/, + z = /-([a-z])/g; + + function U(e, t) { + return t.toUpperCase() + } + + function X(e) { + return e.replace(_, "ms-").replace(z, U) + } + var V = function (e) { + return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType + }; + + function G() { + this.expando = S.expando + G.uid++ + } + G.uid = 1, G.prototype = { + cache: function (e) { + var t = e[this.expando]; + return t || (t = {}, V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { + value: t, + configurable: !0 + }))), t + }, + set: function (e, t, n) { + var r, i = this.cache(e); + if ("string" == typeof t) i[X(t)] = n; + else + for (r in t) i[X(r)] = t[r]; + return i + }, + get: function (e, t) { + return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)] + }, + access: function (e, t, n) { + return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) + }, + remove: function (e, t) { + var n, r = e[this.expando]; + if (void 0 !== r) { + if (void 0 !== t) { + n = (t = Array.isArray(t) ? t.map(X) : (t = X(t)) in r ? [t] : t.match(P) || []).length; + while (n--) delete r[t[n]] + }(void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) + } + }, + hasData: function (e) { + var t = e[this.expando]; + return void 0 !== t && !S.isEmptyObject(t) + } + }; + var Y = new G, + Q = new G, + J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + K = /[A-Z]/g; + + function Z(e, t, n) { + var r, i; + if (void 0 === n && 1 === e.nodeType) + if (r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) { + try { + n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i) + } catch (e) {} + Q.set(e, t, n) + } else n = void 0; + return n + } + S.extend({ + hasData: function (e) { + return Q.hasData(e) || Y.hasData(e) + }, + data: function (e, t, n) { + return Q.access(e, t, n) + }, + removeData: function (e, t) { + Q.remove(e, t) + }, + _data: function (e, t, n) { + return Y.access(e, t, n) + }, + _removeData: function (e, t) { + Y.remove(e, t) + } + }), S.fn.extend({ + data: function (n, e) { + var t, r, i, o = this[0], + a = o && o.attributes; + if (void 0 === n) { + if (this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) { + t = a.length; + while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r])); + Y.set(o, "hasDataAttrs", !0) + } + return i + } + return "object" == typeof n ? this.each(function () { + Q.set(this, n) + }) : $(this, function (e) { + var t; + if (o && void 0 === e) return void 0 !== (t = Q.get(o, n)) ? t : void 0 !== (t = Z(o, n)) ? t : void 0; + this.each(function () { + Q.set(this, n, e) + }) + }, null, e, 1 < arguments.length, null, !0) + }, + removeData: function (e) { + return this.each(function () { + Q.remove(this, e) + }) + } + }), S.extend({ + queue: function (e, t, n) { + var r; + if (e) return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || [] + }, + dequeue: function (e, t) { + t = t || "fx"; + var n = S.queue(e, t), + r = n.length, + i = n.shift(), + o = S._queueHooks(e, t); + "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () { + S.dequeue(e, t) + }, o)), !r && o && o.empty.fire() + }, + _queueHooks: function (e, t) { + var n = t + "queueHooks"; + return Y.get(e, n) || Y.access(e, n, { + empty: S.Callbacks("once memory").add(function () { + Y.remove(e, [t + "queue", n]) + }) + }) + } + }), S.fn.extend({ + queue: function (t, n) { + var e = 2; + return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this : this.each(function () { + var e = S.queue(this, t, n); + S._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t) + }) + }, + dequeue: function (e) { + return this.each(function () { + S.dequeue(this, e) + }) + }, + clearQueue: function (e) { + return this.queue(e || "fx", []) + }, + promise: function (e, t) { + var n, r = 1, + i = S.Deferred(), + o = this, + a = this.length, + s = function () { + --r || i.resolveWith(o, [o]) + }; + "string" != typeof e && (t = e, e = void 0), e = e || "fx"; + while (a--)(n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); + return s(), i.promise(t) + } + }); + var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"), + ne = ["Top", "Right", "Bottom", "Left"], + re = E.documentElement, + ie = function (e) { + return S.contains(e.ownerDocument, e) + }, + oe = { + composed: !0 + }; + re.getRootNode && (ie = function (e) { + return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument + }); + var ae = function (e, t) { + return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display") + }; + + function se(e, t, n, r) { + var i, o, a = 20, + s = r ? function () { + return r.cur() + } : function () { + return S.css(e, t, "") + }, + u = s(), + l = n && n[3] || (S.cssNumber[t] ? "" : "px"), + c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t)); + if (c && c[3] !== l) { + u /= 2, l = l || c[3], c = +u || 1; + while (a--) S.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o; + c *= 2, S.style(e, t, c + l), n = n || [] + } + return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i + } + var ue = {}; + + function le(e, t) { + for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n))); + for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]); + return e + } + S.fn.extend({ + show: function () { + return le(this, !0) + }, + hide: function () { + return le(this) + }, + toggle: function (e) { + return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { + ae(this) ? S(this).show() : S(this).hide() + }) + } + }); + var ce, fe, pe = /^(?:checkbox|radio)$/i, + de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, + he = /^$|^module$|\/(?:java|ecma)script/i; + ce = E.createDocumentFragment().appendChild(E.createElement("div")), (fe = E.createElement("input")).setAttribute("type", "radio"), fe.setAttribute("checked", "checked"), fe.setAttribute("name", "t"), ce.appendChild(fe), y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked, ce.innerHTML = "", y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue, ce.innerHTML = "", y.option = !!ce.lastChild; + var ge = { + thead: [1, "", "
"], + col: [2, "", "
"], + tr: [2, "", "
"], + td: [3, "", "
"], + _default: [0, "", ""] + }; + + function ve(e, t) { + var n; + return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? S.merge([e], n) : n + } + + function ye(e, t) { + for (var n = 0, r = e.length; n < r; n++) Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval")) + } + ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td, y.option || (ge.optgroup = ge.option = [1, ""]); + var me = /<|&#?\w+;/; + + function xe(e, t, n, r, i) { + for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++) + if ((o = e[d]) || 0 === o) + if ("object" === w(o)) S.merge(p, o.nodeType ? [o] : o); + else if (me.test(o)) { + a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2], c = u[0]; + while (c--) a = a.lastChild; + S.merge(p, a.childNodes), (a = f.firstChild).textContent = "" + } else p.push(t.createTextNode(o)); + f.textContent = "", d = 0; + while (o = p[d++]) + if (r && -1 < S.inArray(o, r)) i && i.push(o); + else if (l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) { + c = 0; + while (o = a[c++]) he.test(o.type || "") && n.push(o) + } + return f + } + var be = /^key/, + we = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + Te = /^([^.]*)(?:\.(.+)|)/; + + function Ce() { + return !0 + } + + function Ee() { + return !1 + } + + function Se(e, t) { + return e === function () { + try { + return E.activeElement + } catch (e) {} + }() == ("focus" === t) + } + + function ke(e, t, n, r, i, o) { + var a, s; + if ("object" == typeof t) { + for (s in "string" != typeof n && (r = r || n, n = void 0), t) ke(e, s, n, r, t[s], o); + return e + } + if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Ee; + else if (!i) return e; + return 1 === o && (a = i, (i = function (e) { + return S().off(e), a.apply(this, arguments) + }).guid = a.guid || (a.guid = S.guid++)), e.each(function () { + S.event.add(this, t, i, r, n) + }) + } + + function Ae(e, i, o) { + o ? (Y.set(e, i, !1), S.event.add(e, i, { + namespace: !1, + handler: function (e) { + var t, n, r = Y.get(this, i); + if (1 & e.isTrigger && this[i]) { + if (r.length)(S.event.special[i] || {}).delegateType && e.stopPropagation(); + else if (r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value + } else r.length && (Y.set(this, i, { + value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this) + }), e.stopImmediatePropagation()) + } + })) : void 0 === Y.get(e, i) && S.event.add(e, i, Ce) + } + S.event = { + global: {}, + add: function (t, e, n, r, i) { + var o, a, s, u, l, c, f, p, d, h, g, v = Y.get(t); + if (V(t)) { + n.handler && (n = (o = n).handler, i = o.selector), i && S.find.matchesSelector(re, i), n.guid || (n.guid = S.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function (e) { + return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0 + }), l = (e = (e || "").match(P) || [""]).length; + while (l--) d = g = (s = Te.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({ + type: d, + origType: g, + data: r, + handler: n, + guid: n.guid, + selector: i, + needsContext: i && S.expr.match.needsContext.test(i), + namespace: h.join(".") + }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0) + } + }, + remove: function (e, t, n, r, i) { + var o, a, s, u, l, c, f, p, d, h, g, v = Y.hasData(e) && Y.get(e); + if (v && (u = v.events)) { + l = (t = (t || "").match(P) || [""]).length; + while (l--) + if (d = g = (s = Te.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) { + f = S.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length; + while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c)); + a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d]) + } else + for (d in u) S.event.remove(e, d + t[l], n, r, !0); + S.isEmptyObject(u) && Y.remove(e, "handle events") + } + }, + dispatch: function (e) { + var t, n, r, i, o, a, s = new Array(arguments.length), + u = S.event.fix(e), + l = (Y.get(this, "events") || Object.create(null))[u.type] || [], + c = S.event.special[u.type] || {}; + for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t]; + if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) { + a = S.event.handlers.call(this, u, l), t = 0; + while ((i = a[t++]) && !u.isPropagationStopped()) { + u.currentTarget = i.elem, n = 0; + while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation())) + } + return c.postDispatch && c.postDispatch.call(this, u), u.result + } + }, + handlers: function (e, t) { + var n, r, i, o, a, s = [], + u = t.delegateCount, + l = e.target; + if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { + for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r); + o.length && s.push({ + elem: l, + handlers: o + }) + } return l = this, u < t.length && s.push({ + elem: l, + handlers: t.slice(u) + }), s + }, + addProp: function (t, e) { + Object.defineProperty(S.Event.prototype, t, { + enumerable: !0, + configurable: !0, + get: m(e) ? function () { + if (this.originalEvent) return e(this.originalEvent) + } : function () { + if (this.originalEvent) return this.originalEvent[t] + }, + set: function (e) { + Object.defineProperty(this, t, { + enumerable: !0, + configurable: !0, + writable: !0, + value: e + }) + } + }) + }, + fix: function (e) { + return e[S.expando] ? e : new S.Event(e) + }, + special: { + load: { + noBubble: !0 + }, + click: { + setup: function (e) { + var t = this || e; + return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click", Ce), !1 + }, + trigger: function (e) { + var t = this || e; + return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click"), !0 + }, + _default: function (e) { + var t = e.target; + return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a") + } + }, + beforeunload: { + postDispatch: function (e) { + void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) + } + } + } + }, S.removeEvent = function (e, t, n) { + e.removeEventListener && e.removeEventListener(t, n) + }, S.Event = function (e, t) { + if (!(this instanceof S.Event)) return new S.Event(e, t); + e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ce : Ee, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && S.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[S.expando] = !0 + }, S.Event.prototype = { + constructor: S.Event, + isDefaultPrevented: Ee, + isPropagationStopped: Ee, + isImmediatePropagationStopped: Ee, + isSimulated: !1, + preventDefault: function () { + var e = this.originalEvent; + this.isDefaultPrevented = Ce, e && !this.isSimulated && e.preventDefault() + }, + stopPropagation: function () { + var e = this.originalEvent; + this.isPropagationStopped = Ce, e && !this.isSimulated && e.stopPropagation() + }, + stopImmediatePropagation: function () { + var e = this.originalEvent; + this.isImmediatePropagationStopped = Ce, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() + } + }, S.each({ + altKey: !0, + bubbles: !0, + cancelable: !0, + changedTouches: !0, + ctrlKey: !0, + detail: !0, + eventPhase: !0, + metaKey: !0, + pageX: !0, + pageY: !0, + shiftKey: !0, + view: !0, + "char": !0, + code: !0, + charCode: !0, + key: !0, + keyCode: !0, + button: !0, + buttons: !0, + clientX: !0, + clientY: !0, + offsetX: !0, + offsetY: !0, + pointerId: !0, + pointerType: !0, + screenX: !0, + screenY: !0, + targetTouches: !0, + toElement: !0, + touches: !0, + which: function (e) { + var t = e.button; + return null == e.which && be.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && we.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which + } + }, S.event.addProp), S.each({ + focus: "focusin", + blur: "focusout" + }, function (e, t) { + S.event.special[e] = { + setup: function () { + return Ae(this, e, Se), !1 + }, + trigger: function () { + return Ae(this, e), !0 + }, + delegateType: t + } + }), S.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function (e, i) { + S.event.special[e] = { + delegateType: i, + bindType: i, + handle: function (e) { + var t, n = e.relatedTarget, + r = e.handleObj; + return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t + } + } + }), S.fn.extend({ + on: function (e, t, n, r) { + return ke(this, e, t, n, r) + }, + one: function (e, t, n, r) { + return ke(this, e, t, n, r, 1) + }, + off: function (e, t, n) { + var r, i; + if (e && e.preventDefault && e.handleObj) return r = e.handleObj, S(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; + if ("object" == typeof e) { + for (i in e) this.off(i, t, e[i]); + return this + } + return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Ee), this.each(function () { + S.event.remove(this, e, n, t) + }) + } + }); + var Ne = /\s*$/g; + + function qe(e, t) { + return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && S(e).children("tbody")[0] || e + } + + function Le(e) { + return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e + } + + function He(e) { + return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e + } + + function Oe(e, t) { + var n, r, i, o, a, s; + if (1 === t.nodeType) { + if (Y.hasData(e) && (s = Y.get(e).events)) + for (i in Y.remove(t, "handle events"), s) + for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]); + Q.hasData(e) && (o = Q.access(e), a = S.extend({}, o), Q.set(t, a)) + } + } + + function Pe(n, r, i, o) { + r = g(r); + var e, t, a, s, u, l, c = 0, + f = n.length, + p = f - 1, + d = r[0], + h = m(d); + if (h || 1 < f && "string" == typeof d && !y.checkClone && De.test(d)) return n.each(function (e) { + var t = n.eq(e); + h && (r[0] = d.call(this, e, t.html())), Pe(t, r, i, o) + }); + if (f && (t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) { + for (s = (a = S.map(ve(e, "script"), Le)).length; c < f; c++) u = e, c !== p && (u = S.clone(u, !0, !0), s && S.merge(a, ve(u, "script"))), i.call(n[c], u, c); + if (s) + for (l = a[a.length - 1].ownerDocument, S.map(a, He), c = 0; c < s; c++) u = a[c], he.test(u.type || "") && !Y.access(u, "globalEval") && S.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? S._evalUrl && !u.noModule && S._evalUrl(u.src, { + nonce: u.nonce || u.getAttribute("nonce") + }, l) : b(u.textContent.replace(je, ""), u, l)) + } + return n + } + + function Re(e, t, n) { + for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || S.cleanData(ve(r)), r.parentNode && (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r)); + return e + } + S.extend({ + htmlPrefilter: function (e) { + return e + }, + clone: function (e, t, n) { + var r, i, o, a, s, u, l, c = e.cloneNode(!0), + f = ie(e); + if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || S.isXMLDoc(e))) + for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue); + if (t) + if (n) + for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Oe(o[r], a[r]); + else Oe(e, c); + return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c + }, + cleanData: function (e) { + for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) + if (V(n)) { + if (t = n[Y.expando]) { + if (t.events) + for (r in t.events) i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle); + n[Y.expando] = void 0 + } + n[Q.expando] && (n[Q.expando] = void 0) + } + } + }), S.fn.extend({ + detach: function (e) { + return Re(this, e, !0) + }, + remove: function (e) { + return Re(this, e) + }, + text: function (e) { + return $(this, function (e) { + return void 0 === e ? S.text(this) : this.empty().each(function () { + 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) + }) + }, null, e, arguments.length) + }, + append: function () { + return Pe(this, arguments, function (e) { + 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || qe(this, e).appendChild(e) + }) + }, + prepend: function () { + return Pe(this, arguments, function (e) { + if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { + var t = qe(this, e); + t.insertBefore(e, t.firstChild) + } + }) + }, + before: function () { + return Pe(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this) + }) + }, + after: function () { + return Pe(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) + }) + }, + empty: function () { + for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (S.cleanData(ve(e, !1)), e.textContent = ""); + return this + }, + clone: function (e, t) { + return e = null != e && e, t = null == t ? e : t, this.map(function () { + return S.clone(this, e, t) + }) + }, + html: function (e) { + return $(this, function (e) { + var t = this[0] || {}, + n = 0, + r = this.length; + if (void 0 === e && 1 === t.nodeType) return t.innerHTML; + if ("string" == typeof e && !Ne.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) { + e = S.htmlPrefilter(e); + try { + for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (S.cleanData(ve(t, !1)), t.innerHTML = e); + t = 0 + } catch (e) {} + } + t && this.empty().append(e) + }, null, e, arguments.length) + }, + replaceWith: function () { + var n = []; + return Pe(this, arguments, function (e) { + var t = this.parentNode; + S.inArray(this, n) < 0 && (S.cleanData(ve(this)), t && t.replaceChild(e, this)) + }, n) + } + }), S.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function (e, a) { + S.fn[e] = function (e) { + for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) t = o === i ? this : this.clone(!0), S(r[o])[a](t), u.apply(n, t.get()); + return this.pushStack(n) + } + }); + var Me = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"), + Ie = function (e) { + var t = e.ownerDocument.defaultView; + return t && t.opener || (t = C), t.getComputedStyle(e) + }, + We = function (e, t, n) { + var r, i, o = {}; + for (i in t) o[i] = e.style[i], e.style[i] = t[i]; + for (i in r = n.call(e), t) e.style[i] = o[i]; + return r + }, + Fe = new RegExp(ne.join("|"), "i"); + + function Be(e, t, n) { + var r, i, o, a, s = e.style; + return (n = n || Ie(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || ie(e) || (a = S.style(e, t)), !y.pixelBoxStyles() && Me.test(a) && Fe.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a + } + + function $e(e, t) { + return { + get: function () { + if (!e()) return (this.get = t).apply(this, arguments); + delete this.get + } + } + }! function () { + function e() { + if (l) { + u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", re.appendChild(u).appendChild(l); + var e = C.getComputedStyle(l); + n = "1%" !== e.top, s = 12 === t(e.marginLeft), l.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), l.style.position = "absolute", i = 12 === t(l.offsetWidth / 3), re.removeChild(u), l = null + } + } + + function t(e) { + return Math.round(parseFloat(e)) + } + var n, r, i, o, a, s, u = E.createElement("div"), + l = E.createElement("div"); + l.style && (l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === l.style.backgroundClip, S.extend(y, { + boxSizingReliable: function () { + return e(), r + }, + pixelBoxStyles: function () { + return e(), o + }, + pixelPosition: function () { + return e(), n + }, + reliableMarginLeft: function () { + return e(), s + }, + scrollboxSize: function () { + return e(), i + }, + reliableTrDimensions: function () { + var e, t, n, r; + return null == a && (e = E.createElement("table"), t = E.createElement("tr"), n = E.createElement("div"), e.style.cssText = "position:absolute;left:-11111px", t.style.height = "1px", n.style.height = "9px", re.appendChild(e).appendChild(t).appendChild(n), r = C.getComputedStyle(t), a = 3 < parseInt(r.height), re.removeChild(e)), a + } + })) + }(); + var _e = ["Webkit", "Moz", "ms"], + ze = E.createElement("div").style, + Ue = {}; + + function Xe(e) { + var t = S.cssProps[e] || Ue[e]; + return t || (e in ze ? e : Ue[e] = function (e) { + var t = e[0].toUpperCase() + e.slice(1), + n = _e.length; + while (n--) + if ((e = _e[n] + t) in ze) return e + }(e) || e) + } + var Ve = /^(none|table(?!-c[ea]).+)/, + Ge = /^--/, + Ye = { + position: "absolute", + visibility: "hidden", + display: "block" + }, + Qe = { + letterSpacing: "0", + fontWeight: "400" + }; + + function Je(e, t, n) { + var r = te.exec(t); + return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t + } + + function Ke(e, t, n, r, i, o) { + var a = "width" === t ? 1 : 0, + s = 0, + u = 0; + if (n === (r ? "border" : "content")) return 0; + for (; a < 4; a += 2) "margin" === n && (u += S.css(e, n + ne[a], !0, i)), r ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), "margin" !== n && (u -= S.css(e, "border" + ne[a] + "Width", !0, i))) : (u += S.css(e, "padding" + ne[a], !0, i), "padding" !== n ? u += S.css(e, "border" + ne[a] + "Width", !0, i) : s += S.css(e, "border" + ne[a] + "Width", !0, i)); + return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u + } + + function Ze(e, t, n) { + var r = Ie(e), + i = (!y.boxSizingReliable() || n) && "border-box" === S.css(e, "boxSizing", !1, r), + o = i, + a = Be(e, t, r), + s = "offset" + t[0].toUpperCase() + t.slice(1); + if (Me.test(a)) { + if (!n) return a; + a = "auto" + } + return (!y.boxSizingReliable() && i || !y.reliableTrDimensions() && A(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === S.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === S.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + Ke(e, t, n || (i ? "border" : "content"), o, r, a) + "px" + } + + function et(e, t, n, r, i) { + return new et.prototype.init(e, t, n, r, i) + } + S.extend({ + cssHooks: { + opacity: { + get: function (e, t) { + if (t) { + var n = Be(e, "opacity"); + return "" === n ? "1" : n + } + } + } + }, + cssNumber: { + animationIterationCount: !0, + columnCount: !0, + fillOpacity: !0, + flexGrow: !0, + flexShrink: !0, + fontWeight: !0, + gridArea: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnStart: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowStart: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + widows: !0, + zIndex: !0, + zoom: !0 + }, + cssProps: {}, + style: function (e, t, n, r) { + if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { + var i, o, a, s = X(t), + u = Ge.test(t), + l = e.style; + if (u || (t = Xe(s)), a = S.cssHooks[t] || S.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; + "string" === (o = typeof n) && (i = te.exec(n)) && i[1] && (n = se(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (S.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n)) + } + }, + css: function (e, t, n, r) { + var i, o, a, s = X(t); + return Ge.test(t) || (t = Xe(s)), (a = S.cssHooks[t] || S.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Be(e, t, r)), "normal" === i && t in Qe && (i = Qe[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i + } + }), S.each(["height", "width"], function (e, u) { + S.cssHooks[u] = { + get: function (e, t, n) { + if (t) return !Ve.test(S.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? Ze(e, u, n) : We(e, Ye, function () { + return Ze(e, u, n) + }) + }, + set: function (e, t, n) { + var r, i = Ie(e), + o = !y.scrollboxSize() && "absolute" === i.position, + a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i), + s = n ? Ke(e, u, n, a, i) : 0; + return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - Ke(e, u, "border", !1, i) - .5)), s && (r = te.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = S.css(e, u)), Je(0, t, s) + } + } + }), S.cssHooks.marginLeft = $e(y.reliableMarginLeft, function (e, t) { + if (t) return (parseFloat(Be(e, "marginLeft")) || e.getBoundingClientRect().left - We(e, { + marginLeft: 0 + }, function () { + return e.getBoundingClientRect().left + })) + "px" + }), S.each({ + margin: "", + padding: "", + border: "Width" + }, function (i, o) { + S.cssHooks[i + o] = { + expand: function (e) { + for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[i + ne[t] + o] = r[t] || r[t - 2] || r[0]; + return n + } + }, "margin" !== i && (S.cssHooks[i + o].set = Je) + }), S.fn.extend({ + css: function (e, t) { + return $(this, function (e, t, n) { + var r, i, o = {}, + a = 0; + if (Array.isArray(t)) { + for (r = Ie(e), i = t.length; a < i; a++) o[t[a]] = S.css(e, t[a], !1, r); + return o + } + return void 0 !== n ? S.style(e, t, n) : S.css(e, t) + }, e, t, 1 < arguments.length) + } + }), ((S.Tween = et).prototype = { + constructor: et, + init: function (e, t, n, r, i, o) { + this.elem = e, this.prop = n, this.easing = i || S.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (S.cssNumber[n] ? "" : "px") + }, + cur: function () { + var e = et.propHooks[this.prop]; + return e && e.get ? e.get(this) : et.propHooks._default.get(this) + }, + run: function (e) { + var t, n = et.propHooks[this.prop]; + return this.options.duration ? this.pos = t = S.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : et.propHooks._default.set(this), this + } + }).init.prototype = et.prototype, (et.propHooks = { + _default: { + get: function (e) { + var t; + return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = S.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 + }, + set: function (e) { + S.fx.step[e.prop] ? S.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !S.cssHooks[e.prop] && null == e.elem.style[Xe(e.prop)] ? e.elem[e.prop] = e.now : S.style(e.elem, e.prop, e.now + e.unit) + } + } + }).scrollTop = et.propHooks.scrollLeft = { + set: function (e) { + e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) + } + }, S.easing = { + linear: function (e) { + return e + }, + swing: function (e) { + return .5 - Math.cos(e * Math.PI) / 2 + }, + _default: "swing" + }, S.fx = et.prototype.init, S.fx.step = {}; + var tt, nt, rt, it, ot = /^(?:toggle|show|hide)$/, + at = /queueHooks$/; + + function st() { + nt && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(st) : C.setTimeout(st, S.fx.interval), S.fx.tick()) + } + + function ut() { + return C.setTimeout(function () { + tt = void 0 + }), tt = Date.now() + } + + function lt(e, t) { + var n, r = 0, + i = { + height: e + }; + for (t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = ne[r])] = i["padding" + n] = e; + return t && (i.opacity = i.width = e), i + } + + function ct(e, t, n) { + for (var r, i = (ft.tweeners[t] || []).concat(ft.tweeners["*"]), o = 0, a = i.length; o < a; o++) + if (r = i[o].call(n, t, e)) return r + } + + function ft(o, e, t) { + var n, a, r = 0, + i = ft.prefilters.length, + s = S.Deferred().always(function () { + delete u.elem + }), + u = function () { + if (a) return !1; + for (var e = tt || ut(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n); + return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) + }, + l = s.promise({ + elem: o, + props: S.extend({}, e), + opts: S.extend(!0, { + specialEasing: {}, + easing: S.easing._default + }, t), + originalProperties: e, + originalOptions: t, + startTime: tt || ut(), + duration: t.duration, + tweens: [], + createTween: function (e, t) { + var n = S.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing); + return l.tweens.push(n), n + }, + stop: function (e) { + var t = 0, + n = e ? l.tweens.length : 0; + if (a) return this; + for (a = !0; t < n; t++) l.tweens[t].run(1); + return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this + } + }), + c = l.props; + for (! function (e, t) { + var n, r, i, o, a; + for (n in e) + if (i = t[r = X(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = S.cssHooks[r]) && "expand" in a) + for (n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i); + else t[r] = i + }(c, l.opts.specialEasing); r < i; r++) + if (n = ft.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n; + return S.map(c, ct, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), S.fx.timer(S.extend(u, { + elem: o, + anim: l, + queue: l.opts.queue + })), l + } + S.Animation = S.extend(ft, { + tweeners: { + "*": [function (e, t) { + var n = this.createTween(e, t); + return se(n.elem, e, te.exec(t), n), n + }] + }, + tweener: function (e, t) { + m(e) ? (t = e, e = ["*"]) : e = e.match(P); + for (var n, r = 0, i = e.length; r < i; r++) n = e[r], ft.tweeners[n] = ft.tweeners[n] || [], ft.tweeners[n].unshift(t) + }, + prefilters: [function (e, t, n) { + var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t, + p = this, + d = {}, + h = e.style, + g = e.nodeType && ae(e), + v = Y.get(e, "fxshow"); + for (r in n.queue || (null == (a = S._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () { + a.unqueued || s() + }), a.unqueued++, p.always(function () { + p.always(function () { + a.unqueued--, S.queue(e, "fx").length || a.empty.fire() + }) + })), t) + if (i = t[r], ot.test(i)) { + if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) { + if ("show" !== i || !v || void 0 === v[r]) continue; + g = !0 + } + d[r] = v && v[r] || S.style(e, r) + } if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) + for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Y.get(e, "display")), "none" === (c = S.css(e, "display")) && (l ? c = l : (le([e], !0), l = e.style.display || l, c = S.css(e, "display"), le([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === S.css(e, "float") && (u || (p.done(function () { + h.display = l + }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () { + h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2] + })), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Y.access(e, "fxshow", { + display: l + }), o && (v.hidden = !g), g && le([e], !0), p.done(function () { + for (r in g || le([e]), Y.remove(e, "fxshow"), d) S.style(e, r, d[r]) + })), u = ct(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0)) + }], + prefilter: function (e, t) { + t ? ft.prefilters.unshift(e) : ft.prefilters.push(e) + } + }), S.speed = function (e, t, n) { + var r = e && "object" == typeof e ? S.extend({}, e) : { + complete: n || !n && t || m(e) && e, + duration: e, + easing: n && t || t && !m(t) && t + }; + return S.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in S.fx.speeds ? r.duration = S.fx.speeds[r.duration] : r.duration = S.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function () { + m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue) + }, r + }, S.fn.extend({ + fadeTo: function (e, t, n, r) { + return this.filter(ae).css("opacity", 0).show().end().animate({ + opacity: t + }, e, n, r) + }, + animate: function (t, e, n, r) { + var i = S.isEmptyObject(t), + o = S.speed(e, n, r), + a = function () { + var e = ft(this, S.extend({}, t), o); + (i || Y.get(this, "finish")) && e.stop(!0) + }; + return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) + }, + stop: function (i, e, o) { + var a = function (e) { + var t = e.stop; + delete e.stop, t(o) + }; + return "string" != typeof i && (o = e, e = i, i = void 0), e && this.queue(i || "fx", []), this.each(function () { + var e = !0, + t = null != i && i + "queueHooks", + n = S.timers, + r = Y.get(this); + if (t) r[t] && r[t].stop && a(r[t]); + else + for (t in r) r[t] && r[t].stop && at.test(t) && a(r[t]); + for (t = n.length; t--;) n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1)); + !e && o || S.dequeue(this, i) + }) + }, + finish: function (a) { + return !1 !== a && (a = a || "fx"), this.each(function () { + var e, t = Y.get(this), + n = t[a + "queue"], + r = t[a + "queueHooks"], + i = S.timers, + o = n ? n.length : 0; + for (t.finish = !0, S.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1)); + for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this); + delete t.finish + }) + } + }), S.each(["toggle", "show", "hide"], function (e, r) { + var i = S.fn[r]; + S.fn[r] = function (e, t, n) { + return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(lt(r, !0), e, t, n) + } + }), S.each({ + slideDown: lt("show"), + slideUp: lt("hide"), + slideToggle: lt("toggle"), + fadeIn: { + opacity: "show" + }, + fadeOut: { + opacity: "hide" + }, + fadeToggle: { + opacity: "toggle" + } + }, function (e, r) { + S.fn[e] = function (e, t, n) { + return this.animate(r, e, t, n) + } + }), S.timers = [], S.fx.tick = function () { + var e, t = 0, + n = S.timers; + for (tt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1); + n.length || S.fx.stop(), tt = void 0 + }, S.fx.timer = function (e) { + S.timers.push(e), S.fx.start() + }, S.fx.interval = 13, S.fx.start = function () { + nt || (nt = !0, st()) + }, S.fx.stop = function () { + nt = null + }, S.fx.speeds = { + slow: 600, + fast: 200, + _default: 400 + }, S.fn.delay = function (r, e) { + return r = S.fx && S.fx.speeds[r] || r, e = e || "fx", this.queue(e, function (e, t) { + var n = C.setTimeout(e, r); + t.stop = function () { + C.clearTimeout(n) + } + }) + }, rt = E.createElement("input"), it = E.createElement("select").appendChild(E.createElement("option")), rt.type = "checkbox", y.checkOn = "" !== rt.value, y.optSelected = it.selected, (rt = E.createElement("input")).value = "t", rt.type = "radio", y.radioValue = "t" === rt.value; + var pt, dt = S.expr.attrHandle; + S.fn.extend({ + attr: function (e, t) { + return $(this, S.attr, e, t, 1 < arguments.length) + }, + removeAttr: function (e) { + return this.each(function () { + S.removeAttr(this, e) + }) + } + }), S.extend({ + attr: function (e, t, n) { + var r, i, o = e.nodeType; + if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? S.prop(e, t, n) : (1 === o && S.isXMLDoc(e) || (i = S.attrHooks[t.toLowerCase()] || (S.expr.match.bool.test(t) ? pt : void 0)), void 0 !== n ? null === n ? void S.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = S.find.attr(e, t)) ? void 0 : r) + }, + attrHooks: { + type: { + set: function (e, t) { + if (!y.radioValue && "radio" === t && A(e, "input")) { + var n = e.value; + return e.setAttribute("type", t), n && (e.value = n), t + } + } + } + }, + removeAttr: function (e, t) { + var n, r = 0, + i = t && t.match(P); + if (i && 1 === e.nodeType) + while (n = i[r++]) e.removeAttribute(n) + } + }), pt = { + set: function (e, t, n) { + return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n + } + }, S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) { + var a = dt[t] || S.find.attr; + dt[t] = function (e, t, n) { + var r, i, o = t.toLowerCase(); + return n || (i = dt[o], dt[o] = r, r = null != a(e, t, n) ? o : null, dt[o] = i), r + } + }); + var ht = /^(?:input|select|textarea|button)$/i, + gt = /^(?:a|area)$/i; + + function vt(e) { + return (e.match(P) || []).join(" ") + } + + function yt(e) { + return e.getAttribute && e.getAttribute("class") || "" + } + + function mt(e) { + return Array.isArray(e) ? e : "string" == typeof e && e.match(P) || [] + } + S.fn.extend({ + prop: function (e, t) { + return $(this, S.prop, e, t, 1 < arguments.length) + }, + removeProp: function (e) { + return this.each(function () { + delete this[S.propFix[e] || e] + }) + } + }), S.extend({ + prop: function (e, t, n) { + var r, i, o = e.nodeType; + if (3 !== o && 8 !== o && 2 !== o) return 1 === o && S.isXMLDoc(e) || (t = S.propFix[t] || t, i = S.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] + }, + propHooks: { + tabIndex: { + get: function (e) { + var t = S.find.attr(e, "tabindex"); + return t ? parseInt(t, 10) : ht.test(e.nodeName) || gt.test(e.nodeName) && e.href ? 0 : -1 + } + } + }, + propFix: { + "for": "htmlFor", + "class": "className" + } + }), y.optSelected || (S.propHooks.selected = { + get: function (e) { + var t = e.parentNode; + return t && t.parentNode && t.parentNode.selectedIndex, null + }, + set: function (e) { + var t = e.parentNode; + t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) + } + }), S.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { + S.propFix[this.toLowerCase()] = this + }), S.fn.extend({ + addClass: function (t) { + var e, n, r, i, o, a, s, u = 0; + if (m(t)) return this.each(function (e) { + S(this).addClass(t.call(this, e, yt(this))) + }); + if ((e = mt(t)).length) + while (n = this[u++]) + if (i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") { + a = 0; + while (o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " "); + i !== (s = vt(r)) && n.setAttribute("class", s) + } return this + }, + removeClass: function (t) { + var e, n, r, i, o, a, s, u = 0; + if (m(t)) return this.each(function (e) { + S(this).removeClass(t.call(this, e, yt(this))) + }); + if (!arguments.length) return this.attr("class", ""); + if ((e = mt(t)).length) + while (n = this[u++]) + if (i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") { + a = 0; + while (o = e[a++]) + while (-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " "); + i !== (s = vt(r)) && n.setAttribute("class", s) + } return this + }, + toggleClass: function (i, t) { + var o = typeof i, + a = "string" === o || Array.isArray(i); + return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function (e) { + S(this).toggleClass(i.call(this, e, yt(this), t), t) + }) : this.each(function () { + var e, t, n, r; + if (a) { + t = 0, n = S(this), r = mt(i); + while (e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e) + } else void 0 !== i && "boolean" !== o || ((e = yt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || "")) + }) + }, + hasClass: function (e) { + var t, n, r = 0; + t = " " + e + " "; + while (n = this[r++]) + if (1 === n.nodeType && -1 < (" " + vt(yt(n)) + " ").indexOf(t)) return !0; + return !1 + } + }); + var xt = /\r/g; + S.fn.extend({ + val: function (n) { + var r, e, i, t = this[0]; + return arguments.length ? (i = m(n), this.each(function (e) { + var t; + 1 === this.nodeType && (null == (t = i ? n.call(this, e, S(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = S.map(t, function (e) { + return null == e ? "" : e + "" + })), (r = S.valHooks[this.type] || S.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t)) + })) : t ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof (e = t.value) ? e.replace(xt, "") : null == e ? "" : e : void 0 + } + }), S.extend({ + valHooks: { + option: { + get: function (e) { + var t = S.find.attr(e, "value"); + return null != t ? t : vt(S.text(e)) + } + }, + select: { + get: function (e) { + var t, n, r, i = e.options, + o = e.selectedIndex, + a = "select-one" === e.type, + s = a ? null : [], + u = a ? o + 1 : i.length; + for (r = o < 0 ? u : a ? o : 0; r < u; r++) + if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) { + if (t = S(n).val(), a) return t; + s.push(t) + } return s + }, + set: function (e, t) { + var n, r, i = e.options, + o = S.makeArray(t), + a = i.length; + while (a--)((r = i[a]).selected = -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0); + return n || (e.selectedIndex = -1), o + } + } + } + }), S.each(["radio", "checkbox"], function () { + S.valHooks[this] = { + set: function (e, t) { + if (Array.isArray(t)) return e.checked = -1 < S.inArray(S(e).val(), t) + } + }, y.checkOn || (S.valHooks[this].get = function (e) { + return null === e.getAttribute("value") ? "on" : e.value + }) + }), y.focusin = "onfocusin" in C; + var bt = /^(?:focusinfocus|focusoutblur)$/, + wt = function (e) { + e.stopPropagation() + }; + S.extend(S.event, { + trigger: function (e, t, n, r) { + var i, o, a, s, u, l, c, f, p = [n || E], + d = v.call(e, "type") ? e.type : e, + h = v.call(e, "namespace") ? e.namespace.split(".") : []; + if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !bt.test(d + S.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[S.expando] ? e : new S.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : S.makeArray(t, [e]), c = S.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) { + if (!r && !c.noBubble && !x(n)) { + for (s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), a = o; + a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C) + } + i = 0; + while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Y.get(o, "events") || Object.create(null))[e.type] && Y.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && V(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault()); + return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !V(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), S.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, wt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, wt), S.event.triggered = void 0, a && (n[u] = a)), e.result + } + }, + simulate: function (e, t, n) { + var r = S.extend(new S.Event, n, { + type: e, + isSimulated: !0 + }); + S.event.trigger(r, null, t) + } + }), S.fn.extend({ + trigger: function (e, t) { + return this.each(function () { + S.event.trigger(e, t, this) + }) + }, + triggerHandler: function (e, t) { + var n = this[0]; + if (n) return S.event.trigger(e, t, n, !0) + } + }), y.focusin || S.each({ + focus: "focusin", + blur: "focusout" + }, function (n, r) { + var i = function (e) { + S.event.simulate(r, e.target, S.event.fix(e)) + }; + S.event.special[r] = { + setup: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r); + t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1) + }, + teardown: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) - 1; + t ? Y.access(e, r, t) : (e.removeEventListener(n, i, !0), Y.remove(e, r)) + } + } + }); + var Tt = C.location, + Ct = { + guid: Date.now() + }, + Et = /\?/; + S.parseXML = function (e) { + var t; + if (!e || "string" != typeof e) return null; + try { + t = (new C.DOMParser).parseFromString(e, "text/xml") + } catch (e) { + t = void 0 + } + return t && !t.getElementsByTagName("parsererror").length || S.error("Invalid XML: " + e), t + }; + var St = /\[\]$/, + kt = /\r?\n/g, + At = /^(?:submit|button|image|reset|file)$/i, + Nt = /^(?:input|select|textarea|keygen)/i; + + function Dt(n, e, r, i) { + var t; + if (Array.isArray(e)) S.each(e, function (e, t) { + r || St.test(n) ? i(n, t) : Dt(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i) + }); + else if (r || "object" !== w(e)) i(n, e); + else + for (t in e) Dt(n + "[" + t + "]", e[t], r, i) + } + S.param = function (e, t) { + var n, r = [], + i = function (e, t) { + var n = m(t) ? t() : t; + r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) + }; + if (null == e) return ""; + if (Array.isArray(e) || e.jquery && !S.isPlainObject(e)) S.each(e, function () { + i(this.name, this.value) + }); + else + for (n in e) Dt(n, e[n], t, i); + return r.join("&") + }, S.fn.extend({ + serialize: function () { + return S.param(this.serializeArray()) + }, + serializeArray: function () { + return this.map(function () { + var e = S.prop(this, "elements"); + return e ? S.makeArray(e) : this + }).filter(function () { + var e = this.type; + return this.name && !S(this).is(":disabled") && Nt.test(this.nodeName) && !At.test(e) && (this.checked || !pe.test(e)) + }).map(function (e, t) { + var n = S(this).val(); + return null == n ? null : Array.isArray(n) ? S.map(n, function (e) { + return { + name: t.name, + value: e.replace(kt, "\r\n") + } + }) : { + name: t.name, + value: n.replace(kt, "\r\n") + } + }).get() + } + }); + var jt = /%20/g, + qt = /#.*$/, + Lt = /([?&])_=[^&]*/, + Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm, + Ot = /^(?:GET|HEAD)$/, + Pt = /^\/\//, + Rt = {}, + Mt = {}, + It = "*/".concat("*"), + Wt = E.createElement("a"); + + function Ft(o) { + return function (e, t) { + "string" != typeof e && (t = e, e = "*"); + var n, r = 0, + i = e.toLowerCase().match(P) || []; + if (m(t)) + while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t) + } + } + + function Bt(t, i, o, a) { + var s = {}, + u = t === Mt; + + function l(e) { + var r; + return s[e] = !0, S.each(t[e] || [], function (e, t) { + var n = t(i, o, a); + return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1) + }), r + } + return l(i.dataTypes[0]) || !s["*"] && l("*") + } + + function $t(e, t) { + var n, r, i = S.ajaxSettings.flatOptions || {}; + for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]); + return r && S.extend(!0, e, r), e + } + Wt.href = Tt.href, S.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { + url: Tt.href, + type: "GET", + isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol), + global: !0, + processData: !0, + async: !0, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + accepts: { + "*": It, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + converters: { + "* text": String, + "text html": !0, + "text json": JSON.parse, + "text xml": S.parseXML + }, + flatOptions: { + url: !0, + context: !0 + } + }, + ajaxSetup: function (e, t) { + return t ? $t($t(e, S.ajaxSettings), t) : $t(S.ajaxSettings, e) + }, + ajaxPrefilter: Ft(Rt), + ajaxTransport: Ft(Mt), + ajax: function (e, t) { + "object" == typeof e && (t = e, e = void 0), t = t || {}; + var c, f, p, n, d, r, h, g, i, o, v = S.ajaxSetup({}, t), + y = v.context || v, + m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event, + x = S.Deferred(), + b = S.Callbacks("once memory"), + w = v.statusCode || {}, + a = {}, + s = {}, + u = "canceled", + T = { + readyState: 0, + getResponseHeader: function (e) { + var t; + if (h) { + if (!n) { + n = {}; + while (t = Ht.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]) + } + t = n[e.toLowerCase() + " "] + } + return null == t ? null : t.join(", ") + }, + getAllResponseHeaders: function () { + return h ? p : null + }, + setRequestHeader: function (e, t) { + return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this + }, + overrideMimeType: function (e) { + return null == h && (v.mimeType = e), this + }, + statusCode: function (e) { + var t; + if (e) + if (h) T.always(e[T.status]); + else + for (t in e) w[t] = [w[t], e[t]]; + return this + }, + abort: function (e) { + var t = e || u; + return c && c.abort(t), l(0, t), this + } + }; + if (x.promise(T), v.url = ((e || v.url || Tt.href) + "").replace(Pt, Tt.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""], null == v.crossDomain) { + r = E.createElement("a"); + try { + r.href = v.url, r.href = r.href, v.crossDomain = Wt.protocol + "//" + Wt.host != r.protocol + "//" + r.host + } catch (e) { + v.crossDomain = !0 + } + } + if (v.data && v.processData && "string" != typeof v.data && (v.data = S.param(v.data, v.traditional)), Bt(Rt, v, t, T), h) return T; + for (i in (g = S.event && v.global) && 0 == S.active++ && S.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Ot.test(v.type), f = v.url.replace(qt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(jt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (Et.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Lt, "$1"), o = (Et.test(f) ? "&" : "?") + "_=" + Ct.guid++ + o), v.url = f + o), v.ifModified && (S.lastModified[f] && T.setRequestHeader("If-Modified-Since", S.lastModified[f]), S.etag[f] && T.setRequestHeader("If-None-Match", S.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + It + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]); + if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort(); + if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Bt(Mt, v, t, T)) { + if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T; + v.async && 0 < v.timeout && (d = C.setTimeout(function () { + T.abort("timeout") + }, v.timeout)); + try { + h = !1, c.send(a, l) + } catch (e) { + if (h) throw e; + l(-1, e) + } + } else l(-1, "No Transport"); + + function l(e, t, n, r) { + var i, o, a, s, u, l = t; + h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) { + var r, i, o, a, s = e.contents, + u = e.dataTypes; + while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type")); + if (r) + for (i in s) + if (s[i] && s[i].test(r)) { + u.unshift(i); + break + } if (u[0] in n) o = u[0]; + else { + for (i in n) { + if (!u[0] || e.converters[i + " " + u[0]]) { + o = i; + break + } + a || (a = i) + } + o = o || a + } + if (o) return o !== u[0] && u.unshift(o), n[o] + }(v, T, n)), !i && -1 < S.inArray("script", v.dataTypes) && (v.converters["text script"] = function () {}), s = function (e, t, n, r) { + var i, o, a, s, u, l = {}, + c = e.dataTypes.slice(); + if (c[1]) + for (a in e.converters) l[a.toLowerCase()] = e.converters[a]; + o = c.shift(); + while (o) + if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) + if ("*" === o) o = u; + else if ("*" !== u && u !== o) { + if (!(a = l[u + " " + o] || l["* " + o])) + for (i in l) + if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) { + !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1])); + break + } if (!0 !== a) + if (a && e["throws"]) t = a(t); + else try { + t = a(t) + } catch (e) { + return { + state: "parsererror", + error: a ? e : "No conversion from " + u + " to " + o + } + } + } + return { + state: "success", + data: t + } + }(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (S.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --S.active || S.event.trigger("ajaxStop"))) + } + return T + }, + getJSON: function (e, t, n) { + return S.get(e, t, n, "json") + }, + getScript: function (e, t) { + return S.get(e, void 0, t, "script") + } + }), S.each(["get", "post"], function (e, i) { + S[i] = function (e, t, n, r) { + return m(t) && (r = r || n, n = t, t = void 0), S.ajax(S.extend({ + url: e, + type: i, + dataType: r, + data: t, + success: n + }, S.isPlainObject(e) && e)) + } + }), S.ajaxPrefilter(function (e) { + var t; + for (t in e.headers) "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "") + }), S._evalUrl = function (e, t, n) { + return S.ajax({ + url: e, + type: "GET", + dataType: "script", + cache: !0, + async: !1, + global: !1, + converters: { + "text script": function () {} + }, + dataFilter: function (e) { + S.globalEval(e, t, n) + } + }) + }, S.fn.extend({ + wrapAll: function (e) { + var t; + return this[0] && (m(e) && (e = e.call(this[0])), t = S(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () { + var e = this; + while (e.firstElementChild) e = e.firstElementChild; + return e + }).append(this)), this + }, + wrapInner: function (n) { + return m(n) ? this.each(function (e) { + S(this).wrapInner(n.call(this, e)) + }) : this.each(function () { + var e = S(this), + t = e.contents(); + t.length ? t.wrapAll(n) : e.append(n) + }) + }, + wrap: function (t) { + var n = m(t); + return this.each(function (e) { + S(this).wrapAll(n ? t.call(this, e) : t) + }) + }, + unwrap: function (e) { + return this.parent(e).not("body").each(function () { + S(this).replaceWith(this.childNodes) + }), this + } + }), S.expr.pseudos.hidden = function (e) { + return !S.expr.pseudos.visible(e) + }, S.expr.pseudos.visible = function (e) { + return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) + }, S.ajaxSettings.xhr = function () { + try { + return new C.XMLHttpRequest + } catch (e) {} + }; + var _t = { + 0: 200, + 1223: 204 + }, + zt = S.ajaxSettings.xhr(); + y.cors = !!zt && "withCredentials" in zt, y.ajax = zt = !!zt, S.ajaxTransport(function (i) { + var o, a; + if (y.cors || zt && !i.crossDomain) return { + send: function (e, t) { + var n, r = i.xhr(); + if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields) + for (n in i.xhrFields) r[n] = i.xhrFields[n]; + for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]); + o = function (e) { + return function () { + o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(_t[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? { + binary: r.response + } : { + text: r.responseText + }, r.getAllResponseHeaders())) + } + }, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function () { + 4 === r.readyState && C.setTimeout(function () { + o && a() + }) + }, o = o("abort"); + try { + r.send(i.hasContent && i.data || null) + } catch (e) { + if (o) throw e + } + }, + abort: function () { + o && o() + } + } + }), S.ajaxPrefilter(function (e) { + e.crossDomain && (e.contents.script = !1) + }), S.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function (e) { + return S.globalEval(e), e + } + } + }), S.ajaxPrefilter("script", function (e) { + void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET") + }), S.ajaxTransport("script", function (n) { + var r, i; + if (n.crossDomain || n.scriptAttrs) return { + send: function (e, t) { + r = S(" diff --git a/horoscope_icon.png b/horoscope_icon.png deleted file mode 100644 index af34673..0000000 Binary files a/horoscope_icon.png and /dev/null differ diff --git a/plugin_info/.htaccess b/plugin_info/.htaccess new file mode 100644 index 0000000..ccc3363 --- /dev/null +++ b/plugin_info/.htaccess @@ -0,0 +1,5 @@ +Order allow,deny + + allow from all + +Deny from all \ No newline at end of file diff --git a/plugin_info/configuration.php b/plugin_info/configuration.php index e1b017a..fc678df 100644 --- a/plugin_info/configuration.php +++ b/plugin_info/configuration.php @@ -22,54 +22,9 @@ die(); } ?> -
-
- - - - -

- - -
- -
-
- - - -
- -
-
-
- -
- -
-
-
- -
- -
-
- */ - ?> - - + \ No newline at end of file diff --git a/plugin_info/horoscope_icon.png b/plugin_info/horoscope_icon.png index af34673..76ea353 100644 Binary files a/plugin_info/horoscope_icon.png and b/plugin_info/horoscope_icon.png differ diff --git a/plugin_info/info.json b/plugin_info/info.json index a61c9cc..6d57041 100644 --- a/plugin_info/info.json +++ b/plugin_info/info.json @@ -1,8 +1,15 @@ { -"id" : "horoscope", -"name" : "horoscope", -"licence" : "AGPL", -"author" : "Anakin", -"require" : "3.0", -"category" : "wellness" + "id": "horoscope", + "name": "Horoscope", + "description": "Plugin permettant de générer une phrase (selon différents thèmes) tous les jours en fonction des différents signes astrologiques.
Très sympa pour donner l'horoscope le matin à une personne via TTS (par exemple avec la caméra Netatmo qui reconnait les visages) ou par SMS.", + "usage": "Il suffit de créer un équipement (de préférence le nom d'un signe du zodiaque) et de lui affecter le signe correspondant.
Des petites phrases concernant son horoscope seront ensuite générées tous les jours.
Depuis la dernière version, vous avez désormais accès à toutes les composantes du signe (Amour, Famille, Argent, Phrase de jour, ...).
Cela permet de diversifier les messages TTS pour des personnes possédant le même signe du zodiaque par exemple.", + "licence": "AGPL", + "author": "Anakinr", + "require": "3.3", + "category": "wellness", + "hasDependency": false, + "hasOwnDeamon": false, + "maxDependancyInstallTime": 0, + "language": ["de_DE", "en_US", "es_ES", "fr_FR", "sp_SP"], + "compatibility": ["miniplus", "smart", "rpi", "docker", "diy", "v4", "mobile"] } \ No newline at end of file diff --git a/plugin_info/info.xml b/plugin_info/info.xml deleted file mode 100644 index d1c02a6..0000000 --- a/plugin_info/info.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - horoscope - horoscope - Plugin Horoscope - icon jeedom-thermo-chaud - AGPL - Anakin - Aucune - 1.06 - 2.4.6 - wellness - \ No newline at end of file diff --git a/plugin_info/install.php b/plugin_info/install.php index 2076848..2bc67de 100644 --- a/plugin_info/install.php +++ b/plugin_info/install.php @@ -19,16 +19,69 @@ require_once dirname(__FILE__) . '/../../../core/php/core.inc.php'; function horoscope_install() { + jeedom::getApiKey('horoscope'); + + $cron = cron::byClassAndFunction('horoscope', 'pull'); + if (is_object($cron)) { + $cron->remove(); + } + + config::save('functionality::cron::enable', 1, 'horoscope'); } function horoscope_update() { + jeedom::getApiKey('horoscope'); -} + $cron = cron::byClassAndFunction('horoscope', 'pull'); + if (is_object($cron)) { + $cron->remove(); + } + config::save('functionality::cron::enable', 1, 'horoscope'); + + // Fonction pour renommer les commandes à activer si besoin + /*$plugin = plugin::byId('horoscope'); + $eqLogics = eqLogic::byType($plugin->getId()); + foreach ($eqLogics as $eqLogic){ + //updateLogicalId($eqLogic, 'message_givre', 'td'); -function horoscope_remove() { + } + + //resave eqLogics for new cmd: + try + { + $eqs = eqLogic::byType('horoscope'); + foreach ($eqs as $eq) + { + $eq->save(); + } + } + catch (Exception $e) + { + $e = print_r($e, 1); + log::add('horoscope', 'error', 'horoscope_update ERROR: '.$e); + } */ + + //message::add('Plugin Horoscope', 'Merci pour la mise à jour de ce plugin, consultez le changelog.'); + foreach (eqLogic::byType('horoscope') as $horoscope) { + $horoscope->getInformations(); + } +} + +function updateLogicalId($eqLogic, $from, $to) { + // Fonction pour renommer une commande + $horoscopeCmd = $eqLogic->getCmd(null, $from); + if (is_object($horoscopeCmd)) { + $horoscopeCmd->setLogicalId($to); + $horoscopeCmd->save(); + } } -?> +function horoscope_remove() { + $cron = cron::byClassAndFunction('horoscope', 'pull'); + if (is_object($cron)) { + $cron->remove(); + } +}