diff --git a/.gitignore b/.gitignore index ee44fc35f..dd54d994e 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ Temporary Items /public/js/vX.X.X/ /vendor/ /history/ +/package-lock.json diff --git a/app/environment.ini b/app/environment.ini index 7c19b9362..409cdf589 100644 --- a/app/environment.ini +++ b/app/environment.ini @@ -35,7 +35,7 @@ CCP_SSO_DOWNTIME = 11:00 ; CCP ESI API CCP_ESI_URL = https://esi.evetech.net CCP_ESI_DATASOURCE = singularity -CCP_ESI_SCOPES = esi-location.read_online.v1,esi-location.read_location.v1,esi-location.read_ship_type.v1,esi-ui.write_waypoint.v1,esi-ui.open_window.v1,esi-universe.read_structures.v1,esi-corporations.read_corporation_membership.v1 +CCP_ESI_SCOPES = esi-location.read_online.v1,esi-location.read_location.v1,esi-location.read_ship_type.v1,esi-ui.write_waypoint.v1,esi-ui.open_window.v1,esi-universe.read_structures.v1,esi-corporations.read_corporation_membership.v1,esi-clones.read_clones.v1 CCP_ESI_SCOPES_ADMIN = ; SMTP settings (optional) @@ -88,7 +88,7 @@ CCP_SSO_DOWNTIME = 11:00 ; CCP ESI API CCP_ESI_URL = https://esi.evetech.net CCP_ESI_DATASOURCE = tranquility -CCP_ESI_SCOPES = esi-location.read_online.v1,esi-location.read_location.v1,esi-location.read_ship_type.v1,esi-ui.write_waypoint.v1,esi-ui.open_window.v1,esi-universe.read_structures.v1,esi-corporations.read_corporation_membership.v1 +CCP_ESI_SCOPES = esi-location.read_online.v1,esi-location.read_location.v1,esi-location.read_ship_type.v1,esi-ui.write_waypoint.v1,esi-ui.open_window.v1,esi-universe.read_structures.v1,esi-corporations.read_corporation_membership.v1,esi-clones.read_clones.v1 CCP_ESI_SCOPES_ADMIN = ; SMTP settings (optional) diff --git a/app/lib/db/cortex.php b/app/lib/db/cortex.php index 0f4f84dd0..f81379cfd 100644 --- a/app/lib/db/cortex.php +++ b/app/lib/db/cortex.php @@ -13,13 +13,13 @@ * | | < | <| -__|-- __| * |__|__|__||__|__|_____|_____| * - * Copyright (c) 2017 by ikkez + * Copyright (c) 2019 by ikkez * Christian Knuth * https://github.com/ikkez/F3-Sugar/ * * @package DB - * @version 1.6.0-dev - * @date 25.04.2018 + * @version 1.6.0 + * @date 03.02.2019 * @since 24.04.2012 */ @@ -100,7 +100,8 @@ class Cortex extends Cursor { public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = 0) { if (!is_null($fluid)) $this->fluid = $fluid; - if (!is_object($this->db=(is_string($db=($db?:$this->db))?\Base::instance()->get($db):$db))) + if (!is_object($this->db=(is_string($db=($db?:$this->db)) + ? \Base::instance()->get($db):$db)) && !static::$init) trigger_error(self::E_CONNECTION,E_USER_ERROR); if ($this->db instanceof Jig) $this->dbsType = 'jig'; @@ -120,7 +121,7 @@ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = 0) $this->ttl = $ttl ?: ($this->ttl ?: 60); if (!$this->rel_ttl) $this->rel_ttl = 0; - $this->_ttl = $this->rel_ttl ?: ($this->rel_ttl ?: 0); + $this->_ttl = $this->rel_ttl ?: 0; if (static::$init == TRUE) return; if ($this->fluid) static::setup($this->db,$this->table,array()); @@ -190,7 +191,8 @@ public function fields(array $fields=array(), $exclude=false) { $fields = array_unique($fields); $schema = $this->whitelist ?: $this->mapper->fields(); if (!$schema && $this->dbsType != 'sql' && $this->dry()) { - $schema = $this->load()->mapper->fields(); + $this->load(); + $schema = $this->mapper->fields(); $this->reset(); } // include relation linkage fields to $fields (if $fields is a whitelist) @@ -223,8 +225,8 @@ public function fields(array $fields=array(), $exclude=false) { protected function applyWhitelist() { if ($this->dbsType == 'sql') { // fetch full schema - if (!$this->fluid && isset(self::$schema_cache[$this->table.$this->db->uuid()])) - $schema = self::$schema_cache[$this->table.$this->db->uuid()]; + if (!$this->fluid && isset(self::$schema_cache[$key=$this->table.$this->db->uuid()])) + $schema = self::$schema_cache[$key]; else { $schema = $this->mapper->schema(); self::$schema_cache[$this->table.$this->db->uuid()] = $schema; @@ -482,8 +484,6 @@ static protected function getMMTableName($ftable, $fkey, $ptable, $pkey, $fConf= list($fclass, $pfkey) = $fConf; $self = get_called_class(); // check for a matching config - if (!is_int(strpos($fclass, $self))) - trigger_error(sprintf(self::E_MM_REL_CLASS, $fclass, $self),E_USER_ERROR); if ($pfkey != $pkey) trigger_error(sprintf(self::E_MM_REL_FIELD, $fclass.'.'.$pfkey, $self.'.'.$pkey),E_USER_ERROR); @@ -714,9 +714,13 @@ protected function filteredFind($filter = NULL, array $options = NULL, $ttl = 0, && !isset($has_options['limit']) && !isset($has_options['offset'])) { $hasJoin = array_merge($hasJoin, $this->_hasJoinMM_sql($key,$hasCond,$filter,$options)); - $options['group'] = (isset($options['group'])?$options['group'].',':''). - $this->table.'.'.$this->primary; + if (!isset($options['group'])) + $options['group'] = ''; $groupFields = explode(',', preg_replace('/"/','',$options['group'])); + if (!in_array($this->table.'.'.$this->primary,$groupFields)) { + $options['group'] = ($options['group']?',':'').$this->table.'.'.$this->primary; + $groupFields[]=$this->table.'.'.$this->primary; + } // all non-aggregated fields need to be present in the GROUP BY clause if (isset($m_refl_adhoc) && preg_match('/sybase|dblib|odbc|sqlsrv/i',$this->db->driver())) foreach (array_diff($this->mapper->fields(),array_keys($m_refl_adhoc)) as $field) @@ -775,30 +779,48 @@ protected function filteredFind($filter = NULL, array $options = NULL, $ttl = 0, if (isset($options['order']) && $this->db->driver() == 'pgsql') // PostgreSQLism: sort NULL values to the end of a table $options['order'] = preg_replace('/\h+DESC(?=\s*(?:$|,))/i',' DESC NULLS LAST',$options['order']); + // assemble full sql query for joined queries if ($hasJoin) { - // assemble full sql query - $adhoc=''; - if ($count) - $sql = 'SELECT COUNT(*) AS '.$this->db->quotekey('rows').' FROM '.$qtable; - else { + // when in count-mode and grouping is active, wrap the query later + // otherwise add a an adhoc counter field here + if (!($subquery_mode=($options && !empty($options['group']))) && $count) + $this->adhoc['_rows']=['expr'=>'COUNT(*)','value'=>NULL]; + $adhoc=[]; + if (!$count) + // add bind parameters for filters in adhoc fields if ($this->preBinds) { $crit = array_shift($filter); $filter = array_merge($this->preBinds,$filter); array_unshift($filter,$crit); } - if (!empty($m_refl_adhoc)) - foreach ($m_refl_adhoc as $key=>$val) - $adhoc.=', '.$val['expr'].' AS '.$this->db->quotekey($key); - $sql = 'SELECT '.$qtable.'.*'.$adhoc.' FROM '.$qtable; + if (!empty($m_refl_adhoc)) + // add adhoc field expressions + foreach ($m_refl_adhoc as $key=>$val) + $adhoc[]=$val['expr'].' AS '.$this->db->quotekey($key); + $fields=implode(',',$adhoc); + if ($count && $subquery_mode) { + if (empty($fields)) + // Select at least one field, ideally the grouping fields or sqlsrv fails + $fields=preg_replace('/HAVING.+$/i','',$options['group']); + if (preg_match('/mssql|dblib|sqlsrv/',$this->engine)) + $fields='TOP 100 PERCENT '.$fields; } - $sql .= ' '.implode(' ',$hasJoin).' WHERE '.$filter[0]; + if (!$count) + // add only selected fields to field list + $fields.=($fields?', ':'').implode(', ',array_map(function($field) use($qtable){ + return $qtable.'.'.$this->db->quotekey($field); + },array_diff($this->mapper->fields(),array_keys($m_refl_adhoc)))); + // assemble query + $sql = 'SELECT '.$fields.' FROM '.$qtable.' ' + .implode(' ',$hasJoin).' WHERE '.$filter[0]; + $db=$this->db; + // add grouping in both, count & selection mode + if (isset($options['group'])) + $sql.=' GROUP BY '.preg_replace_callback('/\w+[._\-\w]*/i', + function($match) use($db) { + return $db->quotekey($match[0]); + }, $options['group']); if (!$count) { - $db=$this->db; - if (isset($options['group'])) - $sql.=' GROUP BY '.preg_replace_callback('/\w+[._\-\w]*/i', - function($match) use($db) { - return $db->quotekey($match[0]); - }, $options['group']); if (isset($options['order'])) $sql.=' ORDER BY '.implode(',',array_map( function($str) use($db) { @@ -808,12 +830,13 @@ function($str) use($db) { (isset($parts[2])?(' '.$parts[2]):'')):$str; }, explode(',',$options['order']))); + // SQL Server fixes if (preg_match('/mssql|sqlsrv|odbc/', $this->db->driver()) && (isset($options['limit']) || isset($options['offset']))) { $ofs=isset($options['offset'])?(int)$options['offset']:0; $lmt=isset($options['limit'])?(int)$options['limit']:0; if (strncmp($this->db->version(),'11',2)>=0) { - // SQL Server 2012 + // SQL Server >= 2012 if (!isset($options['order'])) $sql.=' ORDER BY '.$this->db->quotekey($this->primary); $sql.=' OFFSET '.$ofs.' ROWS'.($lmt?' FETCH NEXT '.$lmt.' ROWS ONLY':''); @@ -831,11 +854,14 @@ function($str) use($db) { if (isset($options['offset'])) $sql.=' OFFSET '.(int)$options['offset']; } - } + } elseif ($subquery_mode) + // wrap count query if necessary + $sql='SELECT COUNT(*) AS '.$this->db->quotekey('_rows').' '. + 'FROM ('.$sql.') AS '.$this->db->quotekey('_temp'); unset($filter[0]); $result = $this->db->exec($sql, $filter, $ttl); if ($count) - return $result[0]['rows']; + return $result[0]['_rows']; foreach ($result as &$record) { // factory new mappers $mapper = clone($this->mapper); @@ -872,7 +898,7 @@ function($str) use($db) { * @param null $filter * @param array $options * @param int $ttl - * @return Cortex + * @return bool */ public function load($filter = NULL, array $options = NULL, $ttl = 0) { $this->reset(); @@ -884,7 +910,7 @@ public function load($filter = NULL, array $options = NULL, $ttl = 0) { } else $this->mapper->reset(); $this->emit('load'); - return $this; + return $this->valid(); } /** @@ -1520,6 +1546,11 @@ function set($key, $val) { } // custom setter $val = $this->emit('set_'.$key, $val); + // clean datetime + if (isset($fields[$key]['type']) && empty($val) && + in_array($fields[$key]['type'], [Schema::DT_DATE,Schema::DT_DATETIME]) + ) + $val=NULL; // convert array content if (is_array($val) && $this->dbsType == 'sql') { if ($fields[$key]['type']==self::DT_SERIALIZED) @@ -1617,6 +1648,17 @@ public function virtual($key, $val) { } } + /** + * reset virtual fields + * @param string $key + */ + public function clearVirtual($key=NULL) { + if ($key) + unset($this->vFields[$key]); + else + $this->vFields=[]; + } + /** * Retrieve contents of key * @return mixed @@ -1693,14 +1735,14 @@ function &get($key, $raw = false) { // one-to-*, bidirectional, inverse way if ($relType == 'belongs-to-one') { $toConf = $relFieldConf[$fromConf[1]]['belongs-to-one']; - if(!is_array($toConf)) + if (!is_array($toConf)) $toConf = array($toConf, $id); if ($toConf[1] != $id && (!$this->exists($toConf[1]) || is_null($this->mapper->get($toConf[1])))) $this->fieldsCache[$key] = null; - elseif($cx = $this->getCollection()) { + elseif ($cx=$this->getCollection()) { // part of a result set - if(!$cx->hasRelSet($key)) { + if (!$cx->hasRelSet($key)) { // emit eager loading $relKeys = $cx->getAll($toConf[1],true); $crit = array($fromConf[1].' IN ?', $relKeys); @@ -1711,14 +1753,16 @@ function &get($key, $raw = false) { $result = $cx->getSubset($key, array($this->get($toConf[1]))); $this->fieldsCache[$key] = $result ? (($type == 'has-one') ? $result[0][0] : CortexCollection::factory($result[0])) : NULL; - } else { - $crit = array($fromConf[1].' = ?', $this->get($toConf[1],true)); - $crit = $this->mergeWithRelFilter($key, $crit); - $opt = $this->getRelFilterOption($key); - $this->fieldsCache[$key] = (($type == 'has-one') - ? $rel->findone($crit,$opt,$this->_ttl) - : $rel->find($crit,$opt,$this->_ttl)) ?: NULL; - } + } // no collection + elseif (($val=$this->getRaw($toConf[1])) && $val!==NULL) { + $crit=[$fromConf[1].' = ?',$val]; + $crit=$this->mergeWithRelFilter($key,$crit); + $opt=$this->getRelFilterOption($key); + $this->fieldsCache[$key]=(($type=='has-one') + ?$rel->findone($crit,$opt,$this->_ttl) + :$rel->find($crit,$opt,$this->_ttl))?:NULL; + } else + $this->fieldsCache[$key] = NULL; } // many-to-many, bidirectional elseif ($relType == 'has-many') { @@ -1871,6 +1915,13 @@ function &get($key, $raw = false) { } } // fetch cached value, if existing + // TODO: fix array key reference editing, #71 +// if (array_key_exists($key,$this->fieldsCache)) +// $val = $this->fieldsCache[$key]; +// elseif ($this->exists($key)) { +// $val =& $this->mapper->{$key}; +// } else +// $val = NULL; $val = array_key_exists($key,$this->fieldsCache) ? $this->fieldsCache[$key] : (($this->exists($key)) ? $this->mapper->{$key} : null); if ($this->dbsType == 'mongo' && (($this->db->legacy() && $val instanceof \MongoId) || @@ -2158,6 +2209,29 @@ public function copyto($key, $relDepth=0) { \Base::instance()->set($key, $this->cast(null,$relDepth)); } + /** + * copy to hive key with relations being simple arrays of keys + * @param $key + */ + function copyto_flat($key) { + /** @var \Base $f3 */ + $f3 = \Base::instance(); + $this->copyto($key); + foreach ($this->fields() as $field) { + if (isset($this->fieldConf[$field]) && isset($this->fieldConf[$field]['relType']) + && $this->fieldConf[$field]['relType']=='has-many' + && $f3->devoid($key.'.'.$field)) { + $val = $this->get($field); + if ($val instanceof CortexCollection) + $f3->set($key.'.'.$field,$val->getAll('_id')); + elseif (is_array($val)) + $f3->set($key.'.'.$field,$val); + else + $f3->clear($key.'.'.$field); + } + } + } + public function skip($ofs = 1) { $this->reset(false); if ($this->mapper->skip($ofs)) @@ -2190,7 +2264,6 @@ public function reset($mapper = true) { $this->saveCsd=[]; $this->countFields=[]; $this->preBinds=[]; - $this->vFields=[]; $this->grp_stack=null; // set default values if (($this->dbsType == 'jig' || $this->dbsType == 'mongo') @@ -2203,6 +2276,46 @@ public function reset($mapper = true) { } } + /** + * reset only specific fields and return to their default values + * @param array $fields + */ + public function resetFields(array $fields) { + $defaults = $this->defaults(); + foreach ($fields as $field) { + unset($this->fieldsCache[$field]); + unset($this->saveCsd[$field]); + if (isset($defaults[$field])) + $this->set($field,$defaults[$field]); + else { + $this->set($field,NULL); + } + } + } + + /** + * return default values from schema configuration + * @param bool $set set default values to mapper + * @return array + */ + function defaults($set=false) { + $out = []; + $fields = $this->fieldConf; + if ($this->dbsType == 'sql') + $fields = array_replace_recursive($this->mapper->schema(),$fields); + foreach($fields as $field_key => $field_conf) + if (array_key_exists('default',$field_conf)) { + $val = ($field_conf['default'] === \DB\SQL\Schema::DF_CURRENT_TIMESTAMP) + ? date('Y-m-d H:i:s') : $field_conf['default']; + if ($val!==NULL) { + $out[$field_key]=$val; + if ($set) + $this->set($field_key, $val); + } + } + return $out; + } + /** * check if a certain field exists in the mapper or * or is a virtual relation field @@ -2509,7 +2622,9 @@ protected function _jig_parse_filter($where, $args) { } elseif($val===null && preg_match('/(\w+)\s*([!=<>]+)\s*\?/i',$part,$nmatch) && ($nmatch[2]=='=' || $nmatch[2]=='==')){ - $part = '(!array_key_exists(\''.ltrim($nmatch[1],'@').'\',$_row))'; + $kval=ltrim($nmatch[1],'@'); + $part = '(!array_key_exists(\''.$kval.'\',$_row) || '. + '(array_key_exists(\''.$kval.'\',$_row) && $_row[\''.$kval.'\']===NULL))'; unset($part); continue; } diff --git a/app/lib/db/sql/schema.php b/app/lib/db/sql/schema.php index deecf2601..015fccbd4 100644 --- a/app/lib/db/sql/schema.php +++ b/app/lib/db/sql/schema.php @@ -18,8 +18,8 @@ * https://github.com/ikkez/F3-Sugar/ * * @package DB - * @version 2.2.2 - * @date 06.03.2018 + * @version 2.2.3 + * @date 15.05.2018 **/ @@ -375,7 +375,8 @@ protected function _addIndex($index_cols, $search_cols, $unique, $length) if(strtoupper($search_cols[$index_cols[$i]]['type']) == 'TEXT') $col.='('.$length.')'; $cols = implode(',', $quotedCols); - $name = $this->db->quotekey($this->name.'___'.implode('__', $index_cols)); + $name = $this->assembleIndexKey($index_cols,$this->name); + $name = $this->db->quotekey($name); $table = $this->db->quotekey($this->name); $index = $unique ? 'UNIQUE INDEX' : 'INDEX'; $cmd = array( @@ -388,6 +389,22 @@ protected function _addIndex($index_cols, $search_cols, $unique, $length) $this->queries[] = $query; } + /** + * create index name from one or more given column names, max. 64 char lengths + * @param string|array $index_cols + * @return string + */ + protected function assembleIndexKey($index_cols,$table_name) { + if (!is_array($index_cols)) + $index_cols = array($index_cols); + $name = $table_name.'___'.implode('__', $index_cols); + if (strlen($name)>64) + $name=$table_name.'___'.\Base::instance()->hash(implode('__', $index_cols)); + if (strlen($name)>64) + $name='___'.\Base::instance()->hash($table_name.'___'.implode('__', $index_cols)); + return $name; + } + /** * set primary / composite key to table * @param string|array $pkeys @@ -651,9 +668,6 @@ protected function _sqlite_rebuild($exec=true) unset($existing_columns[$name]); // drop index foreach (array_keys($indexes) as $col) { - // for backward compatibility - if ($col == $name) - unset($indexes[$name]); // new index names if ($col == $this->name.'___'.$name) unset($indexes[$this->name.'___'.$name]); @@ -663,11 +677,10 @@ protected function _sqlite_rebuild($exec=true) $col = explode('___', $col); $ci = explode('__', $col[1]); $col = implode('___',$col); - } else // for backward compatibility - $ci = explode('__', $col); - // drop combined index - if (in_array($name, $ci)) - unset($indexes[$col]); + // drop combined index + if (in_array($name, $ci)) + unset($indexes[$col]); + } } } } diff --git a/app/main/controller/accesscontroller.php b/app/main/controller/accesscontroller.php index 866378e52..281cb325b 100644 --- a/app/main/controller/accesscontroller.php +++ b/app/main/controller/accesscontroller.php @@ -8,9 +8,8 @@ namespace Controller; -use lib\Config; -use lib\Socket; -use Model; + +use Model\Pathfinder; class AccessController extends Controller { @@ -20,9 +19,8 @@ class AccessController extends Controller { * @param $params * @return bool * @throws \Exception - * @throws \ZMQSocketException */ - function beforeroute(\Base $f3, $params): bool { + function beforeroute(\Base $f3, $params) : bool { if($return = parent::beforeroute($f3, $params)){ // Any route/endpoint of a child class of this one, // requires a valid logged in user! @@ -43,7 +41,7 @@ function beforeroute(\Base $f3, $params): bool { * @return string * @throws \Exception */ - protected function isLoggedIn(\Base $f3): string { + protected function isLoggedIn(\Base $f3) : string { $loginStatus = 'UNKNOWN'; if($character = $this->getCharacter()){ if($character->checkLoginTimer()){ @@ -65,7 +63,7 @@ protected function isLoggedIn(\Base $f3): string { $f3->get('DEBUG') === 3 ){ self::getLogger('CHARACTER_ACCESS')->write( - sprintf(Model\CharacterModel::LOG_ACCESS, + sprintf(Pathfinder\CharacterModel::LOG_ACCESS, $character->_id , $loginStatus, $character->name @@ -79,23 +77,21 @@ protected function isLoggedIn(\Base $f3): string { /** * broadcast map data to clients * -> send over TCP Socket - * @param Model\MapModel $map - * @return int (number of active connections for this map) + * @param Pathfinder\MapModel $map * @throws \Exception - * @throws \ZMQSocketException */ - protected function broadcastMapData(Model\MapModel $map){ + protected function broadcastMapData(Pathfinder\MapModel $map) : void { $mapData = $this->getFormattedMapData($map); - return (int)(new Socket( Config::getSocketUri() ))->sendData('mapUpdate', $mapData); + $this->getF3()->webSocket()->write('mapUpdate', $mapData); } /** * get formatted Map Data - * @param Model\MapModel $map + * @param Pathfinder\MapModel $map * @return array * @throws \Exception */ - protected function getFormattedMapData(Model\MapModel $map){ + protected function getFormattedMapData(Pathfinder\MapModel $map) : array { $mapData = $map->getData(); return [ diff --git a/app/main/controller/admin.php b/app/main/controller/admin.php index eb5a5a916..0ceccb004 100644 --- a/app/main/controller/admin.php +++ b/app/main/controller/admin.php @@ -1,7 +1,7 @@ exists(self::CACHE_KEY_INIT, $return )){ + if(!$f3->exists(self::CACHE_KEY_INIT, $return)){ // response should not be cached if invalid -> e.g. missing static data $validInitData = true; @@ -67,7 +67,7 @@ public function initData(\Base $f3){ $return->timer = Config::getPathfinderData('timer'); // get all available map types ---------------------------------------------------------------------------- - $mapType = Model\BasicModel::getNew('MapTypeModel'); + $mapType = Pathfinder\AbstractPathfinderModel::getNew('MapTypeModel'); $rows = $mapType->find('active = 1'); // default map type config @@ -88,7 +88,7 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($mapTypeData) : $validInitData; // get all available map scopes --------------------------------------------------------------------------- - $mapScope = Model\BasicModel::getNew('MapScopeModel'); + $mapScope = Pathfinder\AbstractPathfinderModel::getNew('MapScopeModel'); $rows = $mapScope->find('active = 1'); $mapScopeData = []; foreach((array)$rows as $rowData){ @@ -103,7 +103,7 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($mapScopeData) : $validInitData; // get all available system status ------------------------------------------------------------------------ - $systemStatus = Model\BasicModel::getNew('SystemStatusModel'); + $systemStatus = Pathfinder\AbstractPathfinderModel::getNew('SystemStatusModel'); $rows = $systemStatus->find('active = 1'); $systemScopeData = []; foreach((array)$rows as $rowData){ @@ -119,7 +119,7 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($systemScopeData) : $validInitData; // get all available system types ------------------------------------------------------------------------- - $systemType = Model\BasicModel::getNew('SystemTypeModel'); + $systemType = Pathfinder\AbstractPathfinderModel::getNew('SystemTypeModel'); $rows = $systemType->find('active = 1'); $systemTypeData = []; foreach((array)$rows as $rowData){ @@ -134,7 +134,7 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($systemTypeData) : $validInitData; // get available connection scopes ------------------------------------------------------------------------ - $connectionScope = Model\BasicModel::getNew('ConnectionScopeModel'); + $connectionScope = Pathfinder\AbstractPathfinderModel::getNew('ConnectionScopeModel'); $rows = $connectionScope->find('active = 1'); $connectionScopeData = []; foreach((array)$rows as $rowData){ @@ -150,7 +150,7 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($connectionScopeData) : $validInitData; // get available character status ------------------------------------------------------------------------- - $characterStatus = Model\BasicModel::getNew('CharacterStatusModel'); + $characterStatus = Pathfinder\AbstractPathfinderModel::getNew('CharacterStatusModel'); $rows = $characterStatus->find('active = 1'); $characterStatusData = []; foreach((array)$rows as $rowData){ @@ -199,7 +199,7 @@ public function initData(\Base $f3){ ]; // structure status --------------------------------------------------------------------------------------- - $structureStatus = Model\StructureStatusModel::getAll(); + $structureStatus = Pathfinder\StructureStatusModel::getAll(); $structureData = []; foreach($structureStatus as $status){ $structureData[$status->_id] = $status->getData(); @@ -210,9 +210,9 @@ public function initData(\Base $f3){ // get available wormhole types --------------------------------------------------------------------------- /** - * @var $wormhole Model\Universe\WormholeModel + * @var $wormhole Universe\WormholeModel */ - $wormhole = Model\Universe\BasicUniverseModel::getNew('WormholeModel'); + $wormhole = Universe\AbstractUniverseModel::getNew('WormholeModel'); $wormholesData = []; if($rows = $wormhole->find(null, ['order' => 'name asc'])){ foreach($rows as $rowData){ @@ -228,9 +228,18 @@ public function initData(\Base $f3){ $validInitData = $validInitData ? !empty($wormholesData) : $validInitData; // universe category data --------------------------------------------------------------------------------- + /** + * @var $categoryUniverseModel Universe\CategoryModel + */ + $categoryUniverseModel = Universe\AbstractUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel->getById(6); + $shipData = $categoryUniverseModel->getData(['mass']); + $categoryUniverseModel->getById(65); + $structureData = $categoryUniverseModel->getData(); + $return->universeCategories = [ - 6 => Model\Universe\BasicUniverseModel::getNew('CategoryModel')->getById(6)->getData(['mass']), - 65 => Model\Universe\BasicUniverseModel::getNew('CategoryModel')->getById(65)->getData() + 6 => $shipData, + 65 => $structureData ]; $validInitData = $validInitData ? !empty($return->universeCategories[65]) : $validInitData; @@ -273,14 +282,14 @@ public function import(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var $map Model\MapModel + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); /** - * @var $mapType Model\MapTypeModel + * @var $mapType Pathfinder\MapTypeModel */ - $mapType = Model\BasicModel::getNew('MapTypeModel'); + $mapType = Pathfinder\AbstractPathfinderModel::getNew('MapTypeModel'); $mapType->getById((int)$importData['typeId']); if( !$mapType->dry() ){ @@ -295,9 +304,9 @@ public function import(\Base $f3){ $mapDataData = (array)$mapData['data']; /** - * @var $mapScope Model\MapScopeModel + * @var $mapScope Pathfinder\MapScopeModel */ - $mapScope = Model\BasicModel::getNew('MapScopeModel'); + $mapScope = Pathfinder\AbstractPathfinderModel::getNew('MapScopeModel'); $mapScope->getById((int)$mapDataConfig['scope']['id']); if( !$mapScope->dry() ){ @@ -308,7 +317,7 @@ public function import(\Base $f3){ $mapDataSystems = (array)$mapDataData['systems']; $mapDataConnections = (array)$mapDataData['connections']; $systemCount = count($mapDataSystems); - if( $systemCount <= $defaultConfig['max_systems']){ + if($systemCount <= $defaultConfig['max_systems']){ $map->copyfrom($mapDataConfig, ['name', 'icon', 'position', 'locked', 'rallyUpdated', 'rallyPoke']); $map->typeId = $mapType; @@ -333,9 +342,9 @@ public function import(\Base $f3){ } /** - * @var $connection Model\ConnectionModel + * @var $connection Pathfinder\ConnectionModel */ - $connection = Model\BasicModel::getNew('ConnectionModel'); + $connection = Pathfinder\AbstractPathfinderModel::getNew('ConnectionModel'); $connection->setActivityLogging(false); foreach($mapDataConnections as $connectionData){ @@ -430,9 +439,9 @@ public function save(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var $map Model\MapModel + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById( (int)$formData['id'] ); if( @@ -451,7 +460,7 @@ public function save(\Base $f3){ // share map between characters -> set access if(isset($formData['mapCharacters'])){ - // remove character corporation (re-add later) + // remove character (re-add later) $accessCharacters = array_diff($formData['mapCharacters'], [$activeCharacter->_id]); // avoid abuse -> respect share limits @@ -463,9 +472,9 @@ public function save(\Base $f3){ if($accessCharacters){ /** - * @var $tempCharacter Model\CharacterModel + * @var $tempCharacter Pathfinder\CharacterModel */ - $tempCharacter = Model\BasicModel::getNew('CharacterModel'); + $tempCharacter = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); foreach($accessCharacters as $characterId){ $tempCharacter->getById( (int)$characterId ); @@ -506,9 +515,9 @@ public function save(\Base $f3){ if($accessCorporations){ /** - * @var $tempCorporation Model\CorporationModel + * @var $tempCorporation Pathfinder\CorporationModel */ - $tempCorporation = Model\BasicModel::getNew('CorporationModel'); + $tempCorporation = Pathfinder\AbstractPathfinderModel::getNew('CorporationModel'); foreach($accessCorporations as $corporationId){ $tempCorporation->getById( (int)$corporationId ); @@ -549,9 +558,9 @@ public function save(\Base $f3){ if($accessAlliances){ /** - * @var $tempAlliance Model\AllianceModel + * @var $tempAlliance Pathfinder\AllianceModel */ - $tempAlliance = Model\BasicModel::getNew('AllianceModel'); + $tempAlliance = Pathfinder\AbstractPathfinderModel::getNew('AllianceModel'); foreach($accessAlliances as $allianceId){ $tempAlliance->getById( (int)$allianceId ); @@ -574,7 +583,7 @@ public function save(\Base $f3){ } // reload the same map model (refresh) // this makes sure all data is up2date - $map->getById( $map->_id, 0 ); + $map->getById($map->_id, 0); // broadcast map Access -> and send map Data $this->broadcastMapAccess($map); @@ -616,9 +625,9 @@ public function delete(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var $map Model\MapModel + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); if($map->hasAccess($activeCharacter)){ @@ -637,12 +646,10 @@ public function delete(\Base $f3){ /** * broadcast characters with map access rights to WebSocket server * -> if characters with map access found -> broadcast mapData to them - * @param Model\MapModel $map + * @param Pathfinder\MapModel $map * @throws Exception - * @throws \ZMQSocketException */ - protected function broadcastMapAccess(Model\MapModel $map){ - + protected function broadcastMapAccess(Pathfinder\MapModel $map){ $mapAccess = [ 'id' => $map->_id, 'characterIds' => array_map(function ($data){ @@ -650,7 +657,7 @@ protected function broadcastMapAccess(Model\MapModel $map){ }, $map->getCharactersData()) ]; - (new Socket( Config::getSocketUri() ))->sendData('mapAccess', $mapAccess); + $this->getF3()->webSocket()->write('mapAccess', $mapAccess); // map has (probably) active connections that should receive map Data $this->broadcastMapData($map); @@ -659,11 +666,9 @@ protected function broadcastMapAccess(Model\MapModel $map){ /** * broadcast map delete information to clients * @param int $mapId - * @return bool|string - * @throws \ZMQSocketException */ - protected function broadcastMapDeleted($mapId){ - return (new Socket( Config::getSocketUri() ))->sendData('mapDeleted', $mapId); + protected function broadcastMapDeleted(int $mapId){ + $this->getF3()->webSocket()->write('mapDeleted', $mapId); } /** @@ -702,9 +707,17 @@ public function getAccessData(\Base $f3){ // send Access Data to WebSocket Server and get response (status) // if 'OK' -> Socket exists - $return->status = (new Socket( Config::getSocketUri() ))->sendData('mapConnectionAccess', $return->data); + $status = ''; + $f3->webSocket() + ->write('mapConnectionAccess', $return->data) + ->then( + function($payload) use (&$status) { + $status = (string)$payload['load']; + }); + + $return->status = $status; - echo json_encode( $return ); + echo json_encode($return); } /** @@ -751,7 +764,6 @@ public function updateData(\Base $f3){ count($systems) > 0 || count($connections) > 0 ){ - // map changes expected =========================================================================== // loop current user maps and check for changes @@ -760,68 +772,30 @@ public function updateData(\Base $f3){ // update system data ------------------------------------------------------------------------- foreach($systems as $i => $systemData){ - // check if current system belongs to the current map - $map->filter('systems', ['id = ?', $systemData['id'] ]); - $filteredMap = $map->find( - ['id = ?', $map->id ], - ['limit' => 1] - ); - - // this should never fail - if(is_object($filteredMap)){ - $filteredMap = $filteredMap->current(); - - // system belongs to the current map - if(is_object($filteredMap->systems)){ - // update - /** - * @var $system Model\SystemModel - */ - $system = $filteredMap->systems->current(); - $system->copyfrom($systemData, ['alias', 'status', 'position', 'locked', 'rallyUpdated', 'rallyPoke']); - - if($system->save($activeCharacter)){ - $mapChanged = true; - // one system belongs to ONE map -> speed up for multiple maps - unset($systemData[$i]); - }else{ - $return->error = array_merge($return->error, $system->getErrors()); - } + if($system = $map->getSystemById((int)$systemData['id'])){ + $system->copyfrom($systemData, ['alias', 'status', 'position', 'locked', 'rallyUpdated', 'rallyPoke']); + if($system->save($activeCharacter)){ + $mapChanged = true; + // one system belongs to ONE map -> speed up for multiple maps + unset($systemData[$i]); + }else{ + $return->error = array_merge($return->error, $system->getErrors()); } } } // update connection data --------------------------------------------------------------------- foreach($connections as $i => $connectionData){ - // check if the current connection belongs to the current map - $map->filter('connections', ['id = ?', $connectionData['id'] ]); - $filteredMap = $map->find( - ['id = ?', $map->_id ], - ['limit' => 1] - ); - - // this should never fail - if(is_object($filteredMap)){ - $filteredMap = $filteredMap->current(); - - // connection belongs to the current map - if(is_object($filteredMap->connections)){ - // update - /** - * @var $connection Model\ConnectionModel - */ - $connection = $filteredMap->connections->current(); - $connection->copyfrom($connectionData, ['scope', 'type']); - - if($connection->save($activeCharacter)){ - $mapChanged = true; - // one connection belongs to ONE map -> speed up for multiple maps - unset($connectionData[$i]); - }else{ - $return->error = array_merge($return->error, $connection->getErrors()); - } + if($connection = $map->getConnectionById((int)$connectionData['id'])){ + $connection->copyfrom($connectionData, ['scope', 'type', 'endpoints']); + if($connection->save($activeCharacter)){ + $mapChanged = true; + // one connection belongs to ONE map -> speed up for multiple maps + unset($connectionData[$i]); + }else{ + $return->error = array_merge($return->error, $connection->getErrors()); } } } @@ -843,16 +817,16 @@ public function updateData(\Base $f3){ $return->userData = $activeCharacter->getUser()->getData(); } - echo json_encode( $return ); + echo json_encode($return); } /** * get formatted map data - * @param Model\MapModel[] $mapModels + * @param Pathfinder\MapModel[] $mapModels * @return array * @throws Exception */ - protected function getFormattedMapsData($mapModels){ + protected function getFormattedMapsData(array $mapModels) : array { $mapData = []; foreach($mapModels as $mapModel){ $mapData[] = $this->getFormattedMapData($mapModel); @@ -913,6 +887,7 @@ public function updateUserData(\Base $f3){ // data for currently selected system $return->system = $system->getData(); $return->system->signatures = $system->getSignaturesData(); + $return->system->sigHistory = $system ->getSignaturesHistoryData(); $return->system->structures = $system->getStructuresData(); } @@ -926,18 +901,18 @@ public function updateUserData(\Base $f3){ // add error (if exists) $return->error = []; - echo json_encode( $return ); + echo json_encode($return); } /** * add new map connection based on current $character location - * @param Model\CharacterModel $character - * @param Model\MapModel $map - * @return Model\MapModel + * @param Pathfinder\CharacterModel $character + * @param Pathfinder\MapModel $map + * @return Pathfinder\MapModel * @throws Exception */ - protected function updateMapData(Model\CharacterModel $character, Model\MapModel $map){ + protected function updateMapData(Pathfinder\CharacterModel $character, Pathfinder\MapModel $map){ // map changed. update cache (system/connection) changed $mapDataChanged = false; @@ -971,14 +946,14 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel // -> NO target system available if($sourceSystemId === $targetSystemId){ // check if previous (solo) system is already on the map - $sourceSystem = $map->getSystemByCCPId($sourceSystemId, ['active' => 1]); + $sourceSystem = $map->getSystemByCCPId($sourceSystemId, [AbstractModel::getFilter('active', true)]); $sameSystem = true; }else{ // check if previous (source) system is already on the map - $sourceSystem = $map->getSystemByCCPId($sourceSystemId, ['active' => 1]); + $sourceSystem = $map->getSystemByCCPId($sourceSystemId, [AbstractModel::getFilter('active', true)]); // -> check if system is already on this map - $targetSystem = $map->getSystemByCCPId($targetSystemId, ['active' => 1]); + $targetSystem = $map->getSystemByCCPId($targetSystemId, [AbstractModel::getFilter('active', true)]); } // if systems don´t already exists on map -> get "blank" system @@ -1012,6 +987,7 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel $addSourceSystem = false; $addTargetSystem = false; $addConnection = false; + $route = []; switch($mapScope->name){ case 'all': @@ -1056,10 +1032,9 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel ){ // check distance between systems (in jumps) // -> if > 1 it is !very likely! a wormhole - $routeController = new Route(); - $route = $routeController->searchRoute($sourceSystem->systemId, $targetSystem->systemId, 1); + $route = (new Route())->searchRoute($sourceSystem->systemId, $targetSystem->systemId, 1); - if( !$route['routePossible'] ){ + if(!$route['routePossible']){ $addSourceSystem = true; $addTargetSystem = true; $addConnection = true; @@ -1068,7 +1043,7 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel break; } - // save source system --------------------------------------------------------------------------------- + // save source system ============================================================================= if( $addSourceSystem && $sourceSystem && @@ -1086,7 +1061,7 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel } } - // save target system --------------------------------------------------------------------------------- + // save target system ============================================================================= if( $addTargetSystem && $targetSystem && @@ -1107,23 +1082,52 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel $sourceSystem && $targetSystem ){ - $connection = $map->searchConnection( $sourceSystem, $targetSystem); + $connection = $map->searchConnection($sourceSystem, $targetSystem); - // save connection -------------------------------------------------------------------------------- + // save connection ============================================================================ if( $addConnection && !$connection ){ - $connection = $map->getNewConnection($sourceSystem, $targetSystem); - $connection = $map->saveConnection($connection, $character); - // get updated maps object - if($connection){ - $map = $connection->mapId; - $mapDataChanged = true; + // .. do not add connection if character got "podded" ------------------------------------- + if( + $log->shipTypeId == 670 && + $character->cloneLocationId + ){ + // .. current character location must be clone location + if( + ( + 'station' == $character->cloneLocationType && + $character->cloneLocationId == $log->stationId + ) || ( + 'structure' == $character->cloneLocationType && + $character->cloneLocationId == $log->structureId + ) + ){ + // .. now we need to check jump distance between systems + // -> if > 1 it is !very likely! podded jump + if(empty($route)){ + $route = (new Route())->searchRoute($sourceSystem->systemId, $targetSystem->systemId, 1); + } + + if(!$route['routePossible']){ + $addConnection = false; + } + } + } + + if($addConnection){ + $connection = $map->getNewConnection($sourceSystem, $targetSystem); + $connection = $map->saveConnection($connection, $character); + // get updated maps object + if($connection){ + $map = $connection->mapId; + $mapDataChanged = true; + } } } - // log jump mass ---------------------------------------------------------------------------------- + // log jump mass ============================================================================== if( $connection && $connection->isWormhole() @@ -1147,7 +1151,7 @@ protected function updateMapData(Model\CharacterModel $character, Model\MapModel * @param \Base $f3 * @throws Exception */ - public function getConnectionData (\Base $f3){ + public function getConnectionData(\Base $f3){ $postData = (array)$f3->get('POST'); $addData = (array)$postData['addData']; @@ -1158,9 +1162,9 @@ public function getConnectionData (\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var Model\MapModel $map + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); if($map->hasAccess($activeCharacter)){ @@ -1214,9 +1218,9 @@ public function getLogData(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var Model\MapModel $map + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); if($map->hasAccess($activeCharacter)){ @@ -1242,16 +1246,3 @@ public function getLogData(\Base $f3){ } } - - - - - - - - - - - - - diff --git a/app/main/controller/api/rest/abstractrestcontroller.php b/app/main/controller/api/rest/abstractrestcontroller.php index a782ff359..1d0debeaf 100644 --- a/app/main/controller/api/rest/abstractrestcontroller.php +++ b/app/main/controller/api/rest/abstractrestcontroller.php @@ -1,7 +1,7 @@ get('BODY')) ){ + if($f3->get('VERB') == 'GET'){ + // get data from URL parameters + $data = (array)$f3->get('GET'); + }elseif( !empty($body = $f3->get('BODY')) ){ + // get data from HTTP body $bodyDecode = json_decode($body, true); if(($jsonError = json_last_error()) === JSON_ERROR_NONE){ $data = $bodyDecode; diff --git a/app/main/controller/api/rest/connection.php b/app/main/controller/api/rest/connection.php index 709f0d509..5247da4d4 100644 --- a/app/main/controller/api/rest/connection.php +++ b/app/main/controller/api/rest/connection.php @@ -8,7 +8,7 @@ namespace Controller\Api\Rest; -use Model; +use Model\Pathfinder; class Connection extends AbstractRestController { @@ -17,7 +17,6 @@ class Connection extends AbstractRestController { * if a connection is changed (drag&drop) to another system. -> this function is called for update * @param \Base $f3 * @throws \Exception - * @throws \ZMQSocketException */ public function put(\Base $f3){ $requestData = $this->getRequestData($f3); @@ -27,11 +26,10 @@ public function put(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var Model\MapModel $map + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); - if($map->hasAccess($activeCharacter)){ $source = $map->getSystemById((int)$requestData['source']); $target = $map->getSystemById((int)$requestData['target']); @@ -41,9 +39,9 @@ public function put(\Base $f3){ !is_null($target) ){ /** - * @var $connection Model\ConnectionModel + * @var $connection Pathfinder\ConnectionModel */ - $connection = Model\BasicModel::getNew('ConnectionModel'); + $connection = Pathfinder\AbstractPathfinderModel::getNew('ConnectionModel'); $connection->getById((int)$requestData['id']); $connection->mapId = $map; @@ -71,7 +69,6 @@ public function put(\Base $f3){ * @param \Base $f3 * @param $params * @throws \Exception - * @throws \ZMQSocketException */ public function delete(\Base $f3, $params){ $requestData = $this->getRequestData($f3); @@ -82,11 +79,10 @@ public function delete(\Base $f3, $params){ $activeCharacter = $this->getCharacter(); /** - * @var Model\MapModel $map + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); - if($map->hasAccess($activeCharacter)){ foreach($connectionIds as $connectionId){ if($connection = $map->getConnectionById($connectionId)){ diff --git a/app/main/controller/api/rest/log.php b/app/main/controller/api/rest/log.php index e019ff5bc..8b872f0c1 100644 --- a/app/main/controller/api/rest/log.php +++ b/app/main/controller/api/rest/log.php @@ -1,14 +1,14 @@ getCharacter(); /** - * @var Model\ConnectionModel $connection + * @var $connection Pathfinder\ConnectionModel */ - $connection = Model\BasicModel::getNew('ConnectionModel'); + $connection = Pathfinder\AbstractPathfinderModel::getNew('ConnectionModel'); $connection->getById($connectionId); if($connection->hasAccess($activeCharacter)){ @@ -84,7 +84,7 @@ public function patch(\Base $f3, $params){ * update existing connectionLog with new data * @param int $logId * @param array $logData - * @return bool|Model\ConnectionLogModel + * @return bool|Pathfinder\ConnectionLogModel * @throws \Exception */ private function update(int $logId, array $logData){ @@ -92,9 +92,9 @@ private function update(int $logId, array $logData){ if($logId){ $activeCharacter = $this->getCharacter(); /** - * @var Model\ConnectionLogModel $log + * @var $log Pathfinder\ConnectionLogModel */ - $log = Model\BasicModel::getNew('ConnectionLogModel'); + $log = Pathfinder\AbstractPathfinderModel::getNew('ConnectionLogModel'); $log->getById($logId, 0, false); if($log->hasAccess($activeCharacter)){ diff --git a/app/main/controller/api/rest/signature.php b/app/main/controller/api/rest/signature.php new file mode 100644 index 000000000..00edec020 --- /dev/null +++ b/app/main/controller/api/rest/signature.php @@ -0,0 +1,221 @@ +getRequestData($f3); + $signaturesData = []; + + if($systemId = (int)$requestData['systemId']){ + $activeCharacter = $this->getCharacter(); + + /** + * @var $system Pathfinder\SystemModel + */ + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); + $system->getById($systemId, 0); + if($system->hasAccess($activeCharacter)){ + // if there is any changed/deleted/updated signature + // -> we need to update signature history data for the system + $updateSignaturesHistory = false; + + foreach((array)$requestData['signatures'] as $data){ + // we assume "systemId" or each signature is same for each signature + unset($data['systemId']); + + $signature = $system->getSignatureByName((string)$data['name']); + + if(is_null($signature)){ + $signature = $system->getNewSignature(); + }else{ + // description should not overwrite existing description + if(!empty($signature->description)){ + unset( $data['description'] ); + } + + // prevent some data from overwrite manually changes + // wormhole typeID can not figured out/saved by the sig reader dialog + // -> type could not be identified -> do not overwrite them (e.g. sig update) + if( + $data['groupId'] == 5 || + $data['typeId'] == 0 + ){ + unset( $data['typeId'] ); + } + + // "sig reader" should not overwrite signature group information + if( + $data['groupId'] == 0 && + $signature->groupId > 0 + ){ + unset($data['groupId']); + } + } + + $signature->setData($data); + $signature->save($activeCharacter); + $signaturesData[] = $signature->getData(); + $updateSignaturesHistory = true; + + $signature->reset(); + } + + // delete "old" signatures ---------------------------------------------------------------------------- + if((bool)$requestData['deleteOld']){ + $updatedSignatureIds = array_column($signaturesData, 'id'); + $signatures = $system->getSignatures(); + foreach($signatures as $signature){ + if(!in_array($signature->_id, $updatedSignatureIds)){ + $signature->delete(); + $updateSignaturesHistory = true; + } + } + } + + if($updateSignaturesHistory){ + // signature count changed -> clear fieldsCache[] + $system->reset(false); + $system->updateSignaturesHistory($activeCharacter, 'sync'); + } + } + } + + $this->out($signaturesData); + } + + /** + * put (insert) signature + * @param \Base $f3 + * @throws \Exception + */ + public function put(\Base $f3){ + $requestData = $this->getRequestData($f3); + $signaturesData = []; + + if($systemId = (int)$requestData['systemId']){ + $activeCharacter = $this->getCharacter(); + + /** + * @var $system Pathfinder\SystemModel + */ + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); + $system->getById($systemId); + if($system->hasAccess($activeCharacter)){ + $signature = $system->getNewSignature(); + $signature->setData($requestData); + $signature->save($activeCharacter); + $signaturesData[] = $signature->getData(); + + $signature->systemId->updateSignaturesHistory($activeCharacter, 'add'); + } + } + + $this->out($signaturesData); + } + + /** + * update existing signature + * @param \Base $f3 + * @param $params + * @throws \Exception + */ + public function patch(\Base $f3, $params){ + $requestData = $this->getRequestData($f3); + $signaturesData = []; + + if($signatureId = (int)$params['id']){ + $activeCharacter = $this->getCharacter(); + + /** + * @var $signature Pathfinder\SystemSignatureModel + */ + $signature = Pathfinder\AbstractPathfinderModel::getNew('SystemSignatureModel'); + $signature->getById($signatureId); + if($signature->hasAccess($activeCharacter)){ + // if groupId changed + if(array_key_exists('groupId', $requestData)){ + // -> typeId set to 0 + $requestData['typeId'] = 0; + // -> connectionId set to 0 + $requestData['connectionId'] = 0; + } + + if($signature->hasChanged($requestData)){ + $signature->setData($requestData); + $signature->save($activeCharacter); + $signaturesData[] = $signature->getData(); + + $signature->systemId->updateSignaturesHistory($activeCharacter, 'edit'); + } + } + } + + $this->out($signaturesData); + } + + /** + * @param \Base $f3 + * @param $params + * @throws \Exception + */ + public function delete(\Base $f3, $params){ + $requestData = $this->getRequestData($f3); + $signatureIds = array_map('intval', explode(',', (string)$params['id'])); + $deletedSignatureIds = []; + + if($systemId = (int)$requestData['systemId']){ + $activeCharacter = $this->getCharacter(); + + /** + * @var $system Pathfinder\SystemModel + */ + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); + $system->getById($systemId); + + if($system->hasAccess($activeCharacter)){ + // if there is any changed/deleted/updated signature + // -> we need to update signature history data for the system + $updateSignaturesHistory = false; + + /** + * @var $signature Pathfinder\SystemSignatureModel + */ + $signature = $system->rel('signatures'); + foreach($signatureIds as $signatureId){ + $signature->getById($signatureId); + // make sure signature belongs to main system (user has access) + if($signature->get('systemId', true) == $systemId){ + if($signature->delete()){ + $deletedSignatureIds[] = $signatureId; + $updateSignaturesHistory = true; + } + $signature->reset(); + } + } + + if($updateSignaturesHistory){ + $system->updateSignaturesHistory($activeCharacter, 'delete'); + } + } + } + + $this->out($deletedSignatureIds); + } + +} \ No newline at end of file diff --git a/app/main/controller/api/rest/signaturehistory.php b/app/main/controller/api/rest/signaturehistory.php new file mode 100644 index 000000000..3c78b91e5 --- /dev/null +++ b/app/main/controller/api/rest/signaturehistory.php @@ -0,0 +1,127 @@ +getCharacter(); + + /** + * @var $system Pathfinder\SystemModel + */ + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); + $system->getById($systemId); + + if($system->hasAccess($activeCharacter)){ + $historyDataAll = $system->getSignaturesHistoryData(); + foreach($historyDataAll as $historyEntry){ + $label = [ + $historyEntry['character']->name, + $historyEntry['action'], + count($historyEntry['signatures']), + Config::formatTimeInterval((int)(microtime(true) - $historyEntry['stamp'])) + ]; + + $historyData[] = [ + 'value' => md5((string)$historyEntry['stamp']), + 'text' => implode('%%', $label) + ]; + } + } + } + + $this->out($historyData); + } + + /** + * put (load) historic signature data + * @param \Base $f3 + * @throws \Exception + */ + public function put(\Base $f3){ + $requestData = $this->getRequestData($f3); + $signaturesData = []; + + if( + ($systemId = (int)$requestData['systemId']) && + ($stamp = (string)$requestData['stamp']) + ){ + $activeCharacter = $this->getCharacter(); + + /** + * @var $system Pathfinder\SystemModel + */ + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); + $system->getById($systemId, 0); + if($system->hasAccess($activeCharacter)){ + if($historyEntry = $system->getSignatureHistoryData($stamp)){ + $updateSignaturesHistory = false; + + // history entry found for $stamp -> format signatures data + // -> same format as if they would come from client for save + foreach($historyEntry['signatures'] as $signatureData){ + $data = [ + 'id' => (int)$signatureData->id, + 'groupId' => (int)$signatureData->groupId, + 'typeId' => (int)$signatureData->typeId, + 'connectionId' => (int)$signatureData->connectionId, + 'name' => (string)$signatureData->name, + 'description' => (string)$signatureData->description, + ]; + + $signature = $system->getSignatureById($data['id']); + + if(is_null($signature)){ + $signature = $system->getNewSignature(); + } + + $signature->setData($data); + $signature->save($activeCharacter); + $signaturesData[] = $signature->getData(); + $updateSignaturesHistory = true; + + $signature->reset(); + } + + // delete "old" signatures ------------------------------------------------------------------------ + $updatedSignatureIds = array_column($signaturesData, 'id'); + $signatures = $system->getSignatures(); + foreach($signatures as $signature){ + if(!in_array($signature->_id, $updatedSignatureIds)){ + $signature->delete(); + $updateSignaturesHistory = true; + } + } + + if($updateSignaturesHistory){ + // signature count changed -> clear fieldsCache[] + $system->reset(false); + $system->updateSignaturesHistory($activeCharacter, 'undo'); + } + } + } + } + + $this->out($signaturesData); + } +} \ No newline at end of file diff --git a/app/main/controller/api/rest/structure.php b/app/main/controller/api/rest/structure.php new file mode 100644 index 000000000..b100d77e0 --- /dev/null +++ b/app/main/controller/api/rest/structure.php @@ -0,0 +1,125 @@ +getRequestData($f3); + $structuresData = $requestData ? $this->update($requestData) : []; + $this->out($structuresData); + } + + /** + * @param \Base $f3 + * @throws \Exception + */ + public function put(\Base $f3){ + $requestData = $this->getRequestData($f3); + $structuresData = $requestData ? $this->update([$requestData]) : []; + $this->out($structuresData); + } + + /** + * @param \Base $f3 + * @param $params + * @throws \Exception + */ + public function patch(\Base $f3, $params){ + $requestData = $this->getRequestData($f3); + $structuresData = (($structureId = (int)$params['id']) && ($structureId == (int)$requestData['id'])) ? $this->update([$requestData]) : []; + $this->out($structuresData); + } + + /** + * @param \Base $f3 + * @param $params + * @throws \Exception + */ + public function delete(\Base $f3, $params){ + $deletedStructureIds = []; + + if($structureId = (int)$params['id']){ + $activeCharacter = $this->getCharacter(); + /** + * @var $structure Pathfinder\StructureModel + */ + $structure = Pathfinder\AbstractPathfinderModel::getNew('StructureModel'); + $structure->getById($structureId); + if($structure->hasAccess($activeCharacter) && $structure->erase()){ + $deletedStructureIds[] = $structureId; + } + } + $this->out($deletedStructureIds); + } + + /** + * @param array $structuresData + * @return array + * @throws \Exception + */ + private function update(array $structuresData) : array { + $data = []; + + $activeCharacter = $this->getCharacter(); + if($activeCharacter->hasCorporation()){ + // structures always belong to a corporation + /** + * @var $structure Pathfinder\StructureModel + */ + $structure = Pathfinder\AbstractPathfinderModel::getNew('StructureModel'); + foreach($structuresData as $structureData){ + // reset on loop start because of potential "continue" + $structure->reset(); + + if(!empty($structureData['id']) && $structureId = (int)$structureData['id']){ + // update specific structure + $structure->getById($structureId); + if(!$structure->hasAccess($activeCharacter)){ + continue; + } + }elseif(!isset($structureData['id'])){ + // from clipboard -> search by structure by name + $structure->getByName($activeCharacter->getCorporation(), (string)$structureData['name'], (int)$structureData['systemId']); + } + + $isNew = $structure->dry(); + + $structure->setData($structureData); + $structure->save(); + + if($isNew){ + $activeCharacter->getCorporation()->saveStructure($structure); + } + + // group all updated structures by corporation -> just for return + $corporationsStructureData = $structure->getDataByCorporations(); + foreach($corporationsStructureData as $corporationId => $corporationStructureData){ + if(isset($data[$corporationId])){ + $data[$corporationId]['structures'] = array_merge( + $data[$corporationId]['structures'], + $corporationStructureData['structures'] + ); + }else{ + $data[$corporationId] = $corporationStructureData; + } + } + } + } + + return $data; + } +} \ No newline at end of file diff --git a/app/main/controller/api/rest/system.php b/app/main/controller/api/rest/system.php index 46694ec07..94b5fe3ef 100644 --- a/app/main/controller/api/rest/system.php +++ b/app/main/controller/api/rest/system.php @@ -8,10 +8,42 @@ namespace Controller\Api\Rest; -use Model; + +use Model\Pathfinder; class System extends AbstractRestController { + /** + * get system + * @param \Base $f3 + * @param $params + * @throws \Exception + */ + public function get(\Base $f3, $params){ + $requestData = $this->getRequestData($f3); + $systemData = null; + + if( + ($systemId = (int)$params['id']) && + ($mapId = (int)$requestData['mapId']) + ){ + $activeCharacter = $this->getCharacter(); + $isCcpId = (bool)$requestData['isCcpId']; + + if( + !is_null($map = $activeCharacter->getMap($mapId)) && + !is_null($system = $isCcpId ? $map->getSystemByCCPId($systemId) : $map->getSystemById($systemId)) + ){ + $systemData = $system->getData(); + $systemData->signatures = $system->getSignaturesData(); + $systemData->sigHistory = $system->getSignaturesHistoryData(); + $systemData->structures = $system->getStructuresData(); + } + } + + $this->out($systemData); + } + /** * put (insert) system * @param \Base $f3 @@ -25,9 +57,9 @@ public function put(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var $map Model\MapModel + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); if($map->hasAccess($activeCharacter)){ $system = $map->getNewSystem($requestData['systemId']); @@ -52,9 +84,9 @@ public function patch(\Base $f3, $params){ $activeCharacter = $this->getCharacter(); /** - * @var $system Model\SystemModel + * @var $system Pathfinder\SystemModel */ - $system = Model\BasicModel::getNew('SystemModel'); + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); $system->getById($systemId); if($system->hasAccess($activeCharacter)){ @@ -68,7 +100,6 @@ public function patch(\Base $f3, $params){ /** * @param \Base $f3 * @param $params - * @throws \ZMQSocketException * @throws \Exception */ public function delete(\Base $f3, $params){ @@ -80,13 +111,13 @@ public function delete(\Base $f3, $params){ $activeCharacter = $this->getCharacter(); /** - * @var Model\MapModel $map + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); $map->getById($mapId); if($map->hasAccess($activeCharacter)){ - $newSystemModel = Model\BasicModel::getNew('SystemModel'); + $newSystemModel = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); foreach($systemIds as $systemId){ if($system = $map->getSystemById($systemId)){ // check whether system should be deleted OR set "inactive" @@ -125,13 +156,12 @@ public function delete(\Base $f3, $params){ /** * update system with new data - * @param Model\SystemModel $system + * @param Pathfinder\SystemModel $system * @param array $systemData - * @return Model\SystemModel - * @throws \ZMQSocketException + * @return Pathfinder\SystemModel * @throws \Exception */ - private function update(Model\SystemModel $system, array $systemData) : Model\SystemModel { + private function update(Pathfinder\SystemModel $system, array $systemData) : Pathfinder\SystemModel { $activeCharacter = $this->getCharacter(); // statusId === 0 is 'auto' status -> keep current status @@ -150,9 +180,9 @@ private function update(Model\SystemModel $system, array $systemData) : Model\Sy // get data from "fresh" model (e.g. some relational data has changed: "statusId") /** - * @var $newSystem Model\SystemModel + * @var $newSystem Pathfinder\SystemModel */ - $newSystem = Model\BasicModel::getNew('SystemModel'); + $newSystem = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); $newSystem->getById($system->_id, 0); $newSystem->clearCacheData(); @@ -164,11 +194,11 @@ private function update(Model\SystemModel $system, array $systemData) : Model\Sy /** * checks whether a system should be "deleted" or set "inactive" (keep some data) - * @param Model\MapModel $map - * @param Model\SystemModel $system + * @param Pathfinder\MapModel $map + * @param Pathfinder\SystemModel $system * @return bool */ - private function checkDeleteMode(Model\MapModel $map, Model\SystemModel $system) : bool { + private function checkDeleteMode(Pathfinder\MapModel $map, Pathfinder\SystemModel $system) : bool { $delete = true; if( !empty($system->description) ){ diff --git a/app/main/controller/api/route.php b/app/main/controller/api/route.php index 68415bffc..423babb00 100644 --- a/app/main/controller/api/route.php +++ b/app/main/controller/api/route.php @@ -11,7 +11,7 @@ use Controller; use Controller\Ccp\Universe; use lib\Config; -use Model; +use Model\Pathfinder; /** * Routes controller @@ -20,6 +20,9 @@ */ class Route extends Controller\AccessController { + /** + * route search depth + */ const ROUTE_SEARCH_DEPTH_DEFAULT = 1; /** @@ -122,6 +125,8 @@ private function setDynamicJumpData($mapIds = [], $filterData = []){ $excludeTypes = []; $includeEOL = true; + $excludeEndpointTypes = []; + if( $filterData['stargates'] === true){ // include "stargates" for search $includeScopes[] = 'stargate'; @@ -158,6 +163,10 @@ private function setDynamicJumpData($mapIds = [], $filterData = []){ } } + if( $filterData['endpointsBubble'] !== true ){ + $excludeEndpointTypes[] = 'bubble'; + } + // search connections ------------------------------------------------------------------------------------- if( !empty($includeScopes) ){ @@ -175,6 +184,11 @@ private function setDynamicJumpData($mapIds = [], $filterData = []){ $whereQuery .= " `connection`.`eolUpdated` IS NULL AND "; } + if( !empty($excludeEndpointTypes) ){ + $whereQuery .= " CONCAT_WS(' ', `connection`.`sourceEndpointType`, `connection`.`targetEndpointType`) "; + $whereQuery .= " NOT REGEXP '" . implode("|", $excludeEndpointTypes) . "' AND "; + } + $query = "SELECT `system_src`.`systemId` systemSourceId, `system_tar`.`systemId` systemTargetId @@ -670,9 +684,9 @@ public function search($f3){ $validMaps = []; /** - * @var $map Model\MapModel + * @var $map Pathfinder\MapModel */ - $map = Model\BasicModel::getNew('MapModel'); + $map = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); // limit max search routes to max limit array_splice($routesData, Config::getPathfinderData('route.limit')); @@ -686,7 +700,7 @@ public function search($f3){ // check map access (filter requested mapIDs and format) ---------------------------------------------- array_walk($mapData, function(&$item, &$key, $data){ /** - * @var Model\MapModel $data[0] + * @var Pathfinder\MapModel $data[0] */ if( isset($data[1][$key]) ){ // character has map access -> do not check again @@ -714,22 +728,23 @@ public function search($f3){ // search route with filter options $filterData = [ - 'stargates' => (bool) $routeData['stargates'], - 'jumpbridges' => (bool) $routeData['jumpbridges'], - 'wormholes' => (bool) $routeData['wormholes'], - 'wormholesReduced' => (bool) $routeData['wormholesReduced'], - 'wormholesCritical' => (bool) $routeData['wormholesCritical'], - 'wormholesFrigate' => (bool) $routeData['wormholesFrigate'], - 'wormholesEOL' => (bool) $routeData['wormholesEOL'], - 'flag' => $routeData['flag'] + 'stargates' => (bool) $routeData['stargates'], + 'jumpbridges' => (bool) $routeData['jumpbridges'], + 'wormholes' => (bool) $routeData['wormholes'], + 'wormholesReduced' => (bool) $routeData['wormholesReduced'], + 'wormholesCritical' => (bool) $routeData['wormholesCritical'], + 'wormholesFrigate' => (bool) $routeData['wormholesFrigate'], + 'wormholesEOL' => (bool) $routeData['wormholesEOL'], + 'endpointsBubble' => (bool) $routeData['endpointsBubble'], + 'flag' => $routeData['flag'] ]; $returnRoutData = [ - 'systemFromData' => $routeData['systemFromData'], - 'systemToData' => $routeData['systemToData'], - 'skipSearch' => (bool) $routeData['skipSearch'], - 'maps' => $mapData, - 'mapIds' => $mapIds + 'systemFromData' => $routeData['systemFromData'], + 'systemToData' => $routeData['systemToData'], + 'skipSearch' => (bool) $routeData['skipSearch'], + 'maps' => $mapData, + 'mapIds' => $mapIds ]; // add filter options for each route as well @@ -739,10 +754,10 @@ public function search($f3){ !$returnRoutData['skipSearch'] && count($mapIds) > 0 ){ - $systemFrom = $routeData['systemFromData']['name']; - $systemFromId = (int)$routeData['systemFromData']['systemId']; - $systemTo = $routeData['systemToData']['name']; - $systemToId = (int)$routeData['systemToData']['systemId']; + $systemFrom = $routeData['systemFromData']['name']; + $systemFromId = (int)$routeData['systemFromData']['systemId']; + $systemTo = $routeData['systemToData']['name']; + $systemToId = (int)$routeData['systemToData']['systemId']; $cacheKey = $this->getRouteCacheKey( $mapIds, diff --git a/app/main/controller/api/setup.php b/app/main/controller/api/setup.php index 52336a0ad..a14d11096 100644 --- a/app/main/controller/api/setup.php +++ b/app/main/controller/api/setup.php @@ -1,7 +1,7 @@ setupCategory($categoryId, $offset, $length); - $categoryUniverseModel = Model\Universe\BasicUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel = Model\Universe\AbstractUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel->getById($categoryId, 0); $return->countAll = (int)$f3->get('REQUIREMENTS.DATA.STRUCTURES'); $return->countBuild = array_reduce($buildInfo, $sum, 0); - $return->countBuildAll = $categoryUniverseModel->getById($categoryId, 0)->getTypesCount(false); + $return->countBuildAll = $categoryUniverseModel->getTypesCount(false); $return->progress = $percent($return->countAll, $return->countBuildAll); break; case 'Ships': @@ -87,10 +87,11 @@ public function buildIndex(\Base $f3){ $offset = $count * $length; $buildInfo = $controller->setupCategory($categoryId, $offset, $length); - $categoryUniverseModel = Model\Universe\BasicUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel = Model\Universe\AbstractUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel->getById($categoryId, 0); $return->countAll = (int)$f3->get('REQUIREMENTS.DATA.SHIPS'); $return->countBuild = array_reduce($buildInfo, $sum, 0); - $return->countBuildAll = $categoryUniverseModel->getById($categoryId, 0)->getTypesCount(false); + $return->countBuildAll = $categoryUniverseModel->getTypesCount(false); $return->progress = $percent($return->countAll, $return->countBuildAll); break; case 'SystemNeighbour': @@ -98,7 +99,7 @@ public function buildIndex(\Base $f3){ $this->setupSystemJumpTable(); $return->countAll = (int)$f3->get('REQUIREMENTS.DATA.NEIGHBOURS'); - $return->countBuild = Database::instance()->getRowCount('system_neighbour'); + $return->countBuild = $f3->DB->getDB('PF')->getRowCount('system_neighbour'); $return->countBuildAll = $return->countBuild; $return->progress = $percent($return->countAll, $return->countBuildAll); break; @@ -133,8 +134,8 @@ public function clearIndex(\Base $f3){ switch($type) { case 'Systems': $controller->clearSystemsIndex(); - $systemUniverseModel = Model\Universe\BasicUniverseModel::getNew('SystemModel'); - $return->countAll = Database::instance()->getRowCount($systemUniverseModel->getTable(), 'UNIVERSE'); + $systemUniverseModel = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); + $return->countAll = $f3->DB->getDB('UNIVERSE')->getRowCount($systemUniverseModel->getTable()); break; } diff --git a/app/main/controller/api/signature.php b/app/main/controller/api/signature.php deleted file mode 100644 index b9f563ba8..000000000 --- a/app/main/controller/api/signature.php +++ /dev/null @@ -1,202 +0,0 @@ -get('POST'); - - $signatureData = null; - $systemId = (int)$requestData['systemId']; - // delete all signatures that are not available in this request - $deleteOldSignatures = (bool)$requestData['deleteOld']; - - $return = (object) []; - $return->error = []; - $return->signatures = []; - - if( isset($requestData['signatures']) ){ - // save multiple signatures - $signatureData = $requestData['signatures']; - }elseif( !empty($requestData) ){ - // single signature - $signatureData = [$requestData]; - } - - if( !is_null($signatureData) ){ - $activeCharacter = $this->getCharacter(); - - // signature ids that were updated/created - $updatedSignatureIds = []; - - /** - * @var Model\SystemModel $system - */ - $system = Model\BasicModel::getNew('SystemModel'); - - // update/add all submitted signatures - foreach($signatureData as $data){ - $system->getById( (int)$data['systemId'], 0); - - if( !$system->dry() ){ - // update/save signature - - /** - * @var $signature Model\SystemSignatureModel - */ - $signature = null; - if( isset($data['pk']) ){ - // try to get system by "primary key" - $signature = $system->getSignatureById($activeCharacter, (int)$data['pk']); - }elseif( isset($data['name']) ){ - $signature = $system->getSignatureByName($activeCharacter, $data['name']); - } - - if(is_null($signature)){ - $signature = $system->getNewSignature(); - } - - if($signature->dry()){ - // new signature - $signature->copyfrom($data, ['name', 'groupId', 'typeId', 'description', 'connectionId']); - }else{ - // update signature - if( - isset($data['name']) && - isset($data['value']) - ){ - // update single key => value pair - $newData = [ - $data['name'] => $data['value'] - ]; - - // if groupId changed - if($data['name'] == 'groupId'){ - // -> typeId set to 0 - $newData['typeId'] = 0; - // -> connectionId set to 0 - $newData['connectionId'] = 0; - } - - // if connectionId changed - if($data['name'] == 'connectionId'){ - $newData['connectionId'] = (int)$newData['connectionId']; - } - - }else{ - // update complete signature (signature reader dialog) - - // description should not overwrite existing description - if( !empty($signature->description) ){ - unset( $data['description'] ); - } - - // prevent some data from overwrite manually changes - // wormhole typeID can not figured out/saved by the sig reader dialog - // -> type could not be identified -> do not overwrite them (e.g. sig update) - if( - $data['groupId'] == 5 || - $data['typeId'] == 0 - ){ - unset( $data['typeId'] ); - } - - // "sig reader" should not overwrite signature group information - if( - $data['groupId'] == 0 && - $signature->groupId > 0 - ){ - unset($data['groupId']); - } - - $newData = $data; - } - - if( $signature->hasChanged($newData) ){ - $signature->copyfrom($newData, ['name', 'groupId', 'typeId', 'description', 'connectionId']); - } - } - - $system->saveSignature($signature, $activeCharacter); - - // TODO figure out why $system->connectionId is NULL after change/save - //-> workaround: get data from "new" $signature model - $signatureNew = Model\BasicModel::getNew('SystemSignatureModel'); - $signatureNew->getById($signature->_id); - - $updatedSignatureIds[] = $signatureNew->_id; - $return->signatures[] = $signatureNew->getData(); - - $signature->reset(); - } - - $system->reset(); - } - - // delete "old" signatures ------------------------------------------------------------------ - if( - $deleteOldSignatures && - $systemId - ){ - $system->getById($systemId); - if( - !$system->dry() && - $system->hasAccess($activeCharacter) - ){ - $allSignatures = $system->getSignatures(); - foreach($allSignatures as $tempSignature){ - if( !in_array($tempSignature->_id, $updatedSignatureIds)){ - $tempSignature->delete( $activeCharacter ); - } - } - } - } - } - - echo json_encode($return); - } - - /** - * delete signatures - * @param \Base $f3 - * @throws \Exception - */ - public function delete(\Base $f3){ - $signatureIds = array_unique(array_map('intval', (array)$f3->get('POST.signatureIds'))); - $activeCharacter = $this->getCharacter(); - - $return = (object) []; - $return->deletedSignatureIds = []; - - /** - * @var Model\SystemSignatureModel $signature - */ - $signature = Model\BasicModel::getNew('SystemSignatureModel'); - foreach($signatureIds as $signatureId){ - $signature->getById($signatureId); - if($signature->delete($activeCharacter)){ - $return->deletedSignatureIds[] = $signatureId; - } - $signature->reset(); - } - - echo json_encode($return); - } - -} \ No newline at end of file diff --git a/app/main/controller/api/statistic.php b/app/main/controller/api/statistic.php index b002adb2d..e8fed3b88 100644 --- a/app/main/controller/api/statistic.php +++ b/app/main/controller/api/statistic.php @@ -10,7 +10,7 @@ use Controller; use lib\Config; -use Model\CharacterModel; +use Model\Pathfinder\CharacterModel; class Statistic extends Controller\AccessController { @@ -31,10 +31,14 @@ protected function concatYearWeek($year, $week){ * @param $year * @return int */ - protected function getIsoWeeksInYear($year) { - $date = new \DateTime; - $date->setISODate($year, 53); - return ($date->format('W') === '53' ? 53 : 52); + protected function getIsoWeeksInYear($year){ + $week = 0; + try{ + $date = new \DateTime; + $date->setISODate($year, 53); + $week = ($date->format('W') === '53' ? 53 : 52); + }catch(\Exception $e){} + return $week; } /** @@ -124,7 +128,7 @@ protected function calculateYearWeekOffset($year, $week, $weekCount, $backwards * @param int $weekEnd * @return array */ - protected function queryStatistic( CharacterModel $character, $typeId, $yearStart, $weekStart, $yearEnd, $weekEnd){ + protected function queryStatistic(CharacterModel $character, $typeId, $yearStart, $weekStart, $yearEnd, $weekEnd){ $data = []; // can be either "characterId" || "corporationId" || "allianceId" @@ -281,9 +285,9 @@ public function getData(\Base $f3){ $offsetPrev = $this->calculateYearWeekOffset($yearStart, $weekStart, $weekCount + 1, true); // check if "next" button is available (not in future) - $currentCurrentDataConcat = intval( $this->concatYearWeek($currentYear, $currentWeek) ); - $offsetNextDateConcat = intval( $this->concatYearWeek($offsetNext['year'], $offsetNext['week']) ); - if( $offsetNextDateConcat <= $currentCurrentDataConcat){ + $currentCurrentDataConcat = intval($this->concatYearWeek($currentYear, $currentWeek)); + $offsetNextDateConcat = intval($this->concatYearWeek($offsetNext['year'], $offsetNext['week'])); + if($offsetNextDateConcat <= $currentCurrentDataConcat){ $return->next = $offsetNext; } diff --git a/app/main/controller/api/structure.php b/app/main/controller/api/structure.php deleted file mode 100644 index db4a4900d..000000000 --- a/app/main/controller/api/structure.php +++ /dev/null @@ -1,111 +0,0 @@ -get('POST'); - $structuresData = (array)$requestData['structures']; - $return = (object) []; - $return->error = []; - - if($structuresData){ - $activeCharacter = $this->getCharacter(); - - if($activeCharacter->hasCorporation()){ - // structures always belong to a corporation - /** - * @var $structure Model\StructureModel - */ - $structure = Model\BasicModel::getNew('StructureModel'); - foreach($structuresData as $structureData){ - // reset on loop start because of potential "continue" - $structure->reset(); - - if(!empty($structureData['id']) && $structureId = (int)$structureData['id']){ - // update specific structure - $structure->getById($structureId); - if( !$structure->hasAccess($activeCharacter) ){ - continue; - } - }elseif( !isset($structureData['id']) ){ - // from clipboard -> search by structure by name - $structure->getByName($activeCharacter->getCorporation(), (string)$structureData['name'], (int)$structureData['systemId']); - } - - $newStructure = $structure->dry(); - - try{ - $structure->copyfrom($structureData, ['structureId', 'corporationId', 'systemId', 'statusId', 'name', 'description']); - $structure->save(); - - if($newStructure){ - $activeCharacter->getCorporation()->saveStructure($structure); - } - - // group all updated structures by corporation -> just for return - $corporationsStructureData = $structure->getDataByCorporations(); - foreach($corporationsStructureData as $corporationId => $corporationStructureData){ - if(isset($return->structures[$corporationId])){ - $return->structures[$corporationId]['structures'] = array_merge( - $return->structures[$corporationId]['structures'], - $corporationStructureData['structures'] - ); - }else{ - $return->structures[$corporationId] = $corporationStructureData; - } - } - }catch(Exception\ValidationException $e){ - $return->error[] = $e->getError(); - } - } - } - } - - echo json_encode($return); - } - - /** - * delete structure - * @param \Base $f3 - * @throws Exception - */ - public function delete(\Base $f3){ - $structureData = (array)$f3->get('POST'); - $structureId = (int)$structureData['id']; - - $return = (object) []; - - if($structureId){ - $activeCharacter = $this->getCharacter(); - - /** - * @var $structure Model\StructureModel - */ - $structure = Model\BasicModel::getNew('StructureModel'); - $structure->getById($structureId); - if($structure->hasAccess($activeCharacter) && $structure->erase()){ - $return->deletedStructureIds = [$structureId]; - } - - } - - echo json_encode($return); - } -} \ No newline at end of file diff --git a/app/main/controller/api/system.php b/app/main/controller/api/system.php index ab2817ad0..1b80de87f 100644 --- a/app/main/controller/api/system.php +++ b/app/main/controller/api/system.php @@ -9,7 +9,7 @@ namespace Controller\Api; use Controller; -use Model; +use Model\Pathfinder; class System extends Controller\AccessController { @@ -58,7 +58,7 @@ public function graphData(\Base $f3){ $cacheSystem = false; foreach($logTables as $label => $ModelClass){ - $systemLogModel = Model\BasicModel::getNew($ModelClass); + $systemLogModel = Pathfinder\AbstractPathfinderModel::getNew($ModelClass); $systemLogExists = false; // 10min cache (could be up to 1h cache time) @@ -167,9 +167,9 @@ public function pokeRally(\Base $f3){ $activeCharacter = $this->getCharacter(); /** - * @var Model\SystemModel $system + * @var $system Pathfinder\SystemModel */ - $system = Model\BasicModel::getNew('SystemModel'); + $system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel'); $system->getById($systemId); if($system->hasAccess($activeCharacter)){ @@ -186,30 +186,5 @@ public function pokeRally(\Base $f3){ echo json_encode($return); } - /** - * @param \Base $f3 - * @throws \Exception - */ - public function getData(\Base $f3){ - $requestData = (array)$f3->get('POST'); - $mapId = (int)$requestData['mapId']; - $systemId = (int)$requestData['systemId']; - $isCcpId = (bool)$requestData['isCcpId']; - $activeCharacter = $this->getCharacter(); - - $return = (object) []; - - if( - !is_null($map = $activeCharacter->getMap($mapId)) && - !is_null($system = $isCcpId ? $map->getSystemByCCPId($systemId) : $map->getSystemById($systemId)) - ){ - $return->system = $system->getData(); - $return->system->signatures = $system->getSignaturesData(); - $return->system->structures = $system->getStructuresData(); - } - - echo json_encode($return); - } - } diff --git a/app/main/controller/api/universe.php b/app/main/controller/api/universe.php index e59e580ba..559d03478 100644 --- a/app/main/controller/api/universe.php +++ b/app/main/controller/api/universe.php @@ -1,7 +1,7 @@ = 3 ){ $offset = ($page - 1) * self::PAGE_SIZE_SYSTEMS; - $system = Model\Universe\BasicUniverseModel::getNew('SystemModel'); + $system = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); $filter = [ 'id LIKE :id OR name LIKE :name', @@ -110,7 +110,7 @@ public function constellationData(\Base $f3, $params){ $return->error = []; $return->systemsData = []; - $constellation = Model\Universe\BasicUniverseModel::getNew('ConstellationModel'); + $constellation = Model\Universe\AbstractUniverseModel::getNew('ConstellationModel'); $constellation->getById($constellationId); if( !$constellation->dry() && $constellation->systems){ /** diff --git a/app/main/controller/api/user.php b/app/main/controller/api/user.php index 5b2d64310..d036b8766 100644 --- a/app/main/controller/api/user.php +++ b/app/main/controller/api/user.php @@ -7,8 +7,10 @@ */ namespace Controller\Api; + + use Controller; -use Model; +use Model\Pathfinder; use Exception; class User extends Controller\Controller{ @@ -35,17 +37,17 @@ class User extends Controller\Controller{ /** * valid reasons for captcha images - * @var string array + * @var array */ private static $captchaReason = [self::SESSION_CAPTCHA_ACCOUNT_UPDATE, self::SESSION_CAPTCHA_ACCOUNT_DELETE]; /** * login a valid character - * @param Model\CharacterModel $character + * @param Pathfinder\CharacterModel $character * @return bool * @throws Exception */ - protected function loginByCharacter(Model\CharacterModel &$character) : bool { + protected function loginByCharacter(Pathfinder\CharacterModel &$character) : bool { $login = false; if($user = $character->getUser()){ @@ -66,25 +68,27 @@ protected function loginByCharacter(Model\CharacterModel &$character) : bool { is_null($currentUser) || $currentUser->_id !== $user->_id ){ - // user has changed OR new user --------------------------------------------------- + // user has changed OR new user ----------------------------------------------------------------------- //-> set user/character data to session $this->getF3()->set(self::SESSION_KEY_USER, [ 'ID' => $user->_id, 'NAME' => $user->name ]); }else{ - // user has NOT changed ----------------------------------------------------------- + // user has NOT changed ------------------------------------------------------------------------------- $sessionCharacters = $character::mergeSessionCharacterData($sessionCharacters); } $this->getF3()->set(self::SESSION_KEY_CHARACTERS, $sessionCharacters); - // save user login information -------------------------------------------------------- - $character->roleId = $character->requestRole(); + $character->updateCloneData(); + $character->updateRoleData(); + + // save user login information ---------------------------------------------------------------------------- $character->touch('lastLogin'); $character->save(); - // write login log -------------------------------------------------------------------- + // write login log ---------------------------------------------------------------------------------------- self::getLogger('CHARACTER_LOGIN')->write( sprintf(self::LOG_LOGGED_IN, $user->_id, @@ -94,7 +98,7 @@ protected function loginByCharacter(Model\CharacterModel &$character) : bool { ) ); - // set temp character data ------------------------------------------------------------ + // set temp character data -------------------------------------------------------------------------------- // -> pass character data over for next http request (reroute()) $this->setTempCharacterData($character->_id); @@ -199,7 +203,6 @@ public function deleteLog(\Base $f3){ /** * log the current user out + clear character system log data * @param \Base $f3 - * @throws \ZMQSocketException */ public function logout(\Base $f3){ $this->logoutCharacter($f3, false, true, true, true); @@ -262,7 +265,7 @@ public function saveAccount(\Base $f3){ if($activeCharacter = $this->getCharacter()){ $user = $activeCharacter->getUser(); - // captcha is send -> check captcha ------------------------------------------- + // captcha is send -> check captcha --------------------------------------------------------------- if( isset($formData['captcha']) && !empty($formData['captcha']) @@ -302,7 +305,7 @@ public function saveAccount(\Base $f3){ } } - // sharing config ------------------------------------------------------------- + // sharing config --------------------------------------------------------------------------------- if(isset($formData['share'])){ $privateSharing = (int)$formData['privateSharing']; $corporationSharing = (int)$formData['corporationSharing']; @@ -326,7 +329,7 @@ public function saveAccount(\Base $f3){ $activeCharacter->save(); } - // character config ----------------------------------------------------------- + // character config ------------------------------------------------------------------------------- if(isset($formData['character'])){ $activeCharacter->copyfrom($formData, ['logLocation', 'selectLocation']); @@ -354,7 +357,6 @@ public function saveAccount(\Base $f3){ * delete current user account from DB * @param \Base $f3 * @throws Exception - * @throws \ZMQSocketException */ public function deleteAccount(\Base $f3){ $data = $f3->get('POST.formData'); diff --git a/app/main/controller/appcontroller.php b/app/main/controller/appcontroller.php index 6079c3651..81723a218 100644 --- a/app/main/controller/appcontroller.php +++ b/app/main/controller/appcontroller.php @@ -14,7 +14,12 @@ class AppController extends Controller { - public function beforeroute(\Base $f3, $params) : bool{ + /** + * @param \Base $f3 + * @param $params + * @return bool + */ + public function beforeroute(\Base $f3, $params) : bool { // page title $f3->set('tplPageTitle', Config::getPathfinderData('name')); @@ -58,7 +63,7 @@ public function afterroute(\Base $f3){ * show main login (index) page * @param \Base $f3 */ - public function init(\Base $f3) { + public function init(\Base $f3){ $resource = Resource::instance(); $resource->register('script', 'app/login'); $resource->register('script', 'app/mappage', 'prefetch'); diff --git a/app/main/controller/ccp/sso.php b/app/main/controller/ccp/sso.php index df1615d09..75201286f 100644 --- a/app/main/controller/ccp/sso.php +++ b/app/main/controller/ccp/sso.php @@ -15,7 +15,7 @@ use Controller; use Controller\Api as Api; -use Model; +use Model\Pathfinder; use Lib; class Sso extends Api\User{ @@ -69,14 +69,14 @@ public function requestAuthorization($f3){ isset($params['characterId']) && ( $activeCharacter = $this->getCharacter() ) ){ - // authentication restricted to a characterId ----------------------------------------------- + // authentication restricted to a characterId ------------------------------------------------------------- // restrict login to this characterId e.g. for character switch on map page $characterId = (int)trim((string)$params['characterId']); /** - * @var Model\CharacterModel $character + * @var $character Pathfinder\CharacterModel */ - $character = Model\BasicModel::getNew('CharacterModel'); + $character = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); $character->getById($characterId, 0); // check if character is valid and exists @@ -114,7 +114,7 @@ public function requestAuthorization($f3){ $f3->set(self::SESSION_KEY_SSO_FROM, 'map'); } - // redirect to CCP SSO ---------------------------------------------------------------------- + // redirect to CCP SSO ---------------------------------------------------------------------------------------- $scopes = self::getScopesByAuthType(); $this->rerouteAuthorization($f3, $scopes); } @@ -222,19 +222,19 @@ public function callbackAuthorization($f3){ if( is_null( $user = $characterModel->getUser()) ){ // no user found (new character) -> create new user and connect to character /** - * @var $user Model\UserModel + * @var $user Pathfinder\UserModel */ - $user = Model\BasicModel::getNew('UserModel'); + $user = Pathfinder\AbstractPathfinderModel::getNew('UserModel'); $user->name = $characterModel->name; $user->save(); } } /** - * @var $userCharactersModel Model\UserCharacterModel + * @var $userCharactersModel Pathfinder\UserCharacterModel */ if( is_null($userCharactersModel = $characterModel->userCharacter) ){ - $userCharactersModel = Model\BasicModel::getNew('UserCharacterModel'); + $userCharactersModel = Pathfinder\AbstractPathfinderModel::getNew('UserCharacterModel'); $userCharactersModel->characterId = $characterModel; } @@ -265,7 +265,7 @@ public function callbackAuthorization($f3){ }else{ // character is not authorized to log in $f3->set(self::SESSION_KEY_SSO_ERROR, - sprintf(self::ERROR_CHARACTER_FORBIDDEN, $characterModel->name, Model\CharacterModel::AUTHORIZATION_STATUS[$authStatus]) + sprintf(self::ERROR_CHARACTER_FORBIDDEN, $characterModel->name, Pathfinder\CharacterModel::AUTHORIZATION_STATUS[$authStatus]) ); } } @@ -465,9 +465,9 @@ public function getCharacterData(int $characterId) : \stdClass{ if($corporationId = (int)$characterDataBasic['corporation']['id']){ /** - * @var Model\CorporationModel $corporation + * @var $corporation Pathfinder\CorporationModel */ - $corporation = Model\BasicModel::getNew('CorporationModel'); + $corporation = Pathfinder\AbstractPathfinderModel::getNew('CorporationModel'); $corporation->getById($corporationId, 0); if( !$corporation->dry() ){ $characterData->corporation = $corporation; @@ -476,9 +476,9 @@ public function getCharacterData(int $characterId) : \stdClass{ if($allianceId = (int)$characterDataBasic['alliance']['id']){ /** - * @var Model\AllianceModel $allianceModel + * @var $alliance Pathfinder\AllianceModel */ - $alliance = Model\BasicModel::getNew('AllianceModel'); + $alliance = Pathfinder\AbstractPathfinderModel::getNew('AllianceModel'); $alliance->getById($allianceId, 0); if( !$alliance->dry() ){ $characterData->alliance = $alliance; @@ -493,17 +493,17 @@ public function getCharacterData(int $characterId) : \stdClass{ /** * update character * @param \stdClass $characterData - * @return \Model\CharacterModel|null + * @return Pathfinder\CharacterModel|null * @throws \Exception */ - protected function updateCharacter(\stdClass $characterData){ + protected function updateCharacter(\stdClass $characterData) : ?Pathfinder\CharacterModel { $character = null; - if( !empty($characterData->character) ){ + if(!empty($characterData->character)){ /** - * @var Model\CharacterModel $character + * @var $character Pathfinder\CharacterModel */ - $character = Model\BasicModel::getNew('CharacterModel'); + $character = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); $character->getById((int)$characterData->character['id'], 0); $character->copyfrom($characterData->character, [ 'id', 'name', 'ownerHash', 'esiAccessToken', 'esiAccessTokenExpires', 'esiRefreshToken', 'esiScopes', 'securityStatus' @@ -511,7 +511,7 @@ protected function updateCharacter(\stdClass $characterData){ $character->corporationId = $characterData->corporation; $character->allianceId = $characterData->alliance; - $character = $character->save(); + $character->save(); } return $character; diff --git a/app/main/controller/ccp/universe.php b/app/main/controller/ccp/universe.php index cd3be2a0e..94f1a1429 100644 --- a/app/main/controller/ccp/universe.php +++ b/app/main/controller/ccp/universe.php @@ -1,7 +1,7 @@ 93 systems) ]; $regionIds = $f3->ccpClient()->getUniverseRegions(); - $regionIds = array_intersect ($regionsWhitelist, $regionIds); + $regionIds = array_intersect($regionsWhitelist, $regionIds); - $region = Model\Universe\BasicUniverseModel::getNew('RegionModel'); + $region = Model\Universe\AbstractUniverseModel::getNew('RegionModel'); foreach($regionIds as $regionId){ $region->loadById($regionId); $region->loadConstellationsData(); @@ -44,8 +44,8 @@ protected function setupConstellations(\Base $f3){ 20000014 // Mal (11 systems) ]; $constellationIds = $f3->ccpClient()->getUniverseConstellations(); - $constellationIds = array_intersect ($constellationsWhitelist, $constellationIds); - $constellation = Model\Universe\BasicUniverseModel::getNew('ConstellationModel'); + $constellationIds = array_intersect($constellationsWhitelist, $constellationIds); + $constellation = Model\Universe\AbstractUniverseModel::getNew('ConstellationModel'); foreach($constellationIds as $constellationId){ $constellation->loadById($constellationId); $constellation->loadSystemsData(); @@ -62,13 +62,13 @@ protected function setupConstellations(\Base $f3){ * @return array * @throws \Exception */ - public function setupCategory(int $categoryId, int $offset = 0, int $length = 0){ + public function setupCategory(int $categoryId, int $offset = 0, int $length = 0) : array { $return = []; if($categoryId){ /** * @var $category Model\Universe\CategoryModel */ - $category = Model\Universe\BasicUniverseModel::getNew('CategoryModel'); + $category = Model\Universe\AbstractUniverseModel::getNew('CategoryModel'); $category->loadById($categoryId); $groupIds = $category->loadGroupsData($offset, $length); foreach((array)$category->groups as $group){ @@ -90,10 +90,10 @@ public function setupCategory(int $categoryId, int $offset = 0, int $length = 0) * @return array * @throws \Exception */ - protected function setupCategories(array $categoriesWhitelist = []){ + protected function setupCategories(array $categoriesWhitelist = []) : array { $return = []; $categoryIds = $this->getF3()->ccpClient()->getUniverseCategories(); - $categoryIds = array_intersect ($categoriesWhitelist, $categoryIds); + $categoryIds = array_intersect($categoriesWhitelist, $categoryIds); foreach($categoryIds as $categoryId){ $return[$categoryId] = $this->setupCategory($categoryId); } @@ -110,14 +110,14 @@ protected function setupCategories(array $categoriesWhitelist = []){ * @return array * @throws \Exception */ - protected function setupGroups(array $groupsWhitelist = []){ + protected function setupGroups(array $groupsWhitelist = []) : array { $return = []; $groupIds = $this->getF3()->ccpClient()->getUniverseGroups(); - $groupIds = array_intersect ($groupsWhitelist, $groupIds); + $groupIds = array_intersect($groupsWhitelist, $groupIds); /** * @var $group Model\Universe\GroupModel */ - $group = Model\Universe\BasicUniverseModel::getNew('GroupModel'); + $group = Model\Universe\AbstractUniverseModel::getNew('GroupModel'); foreach($groupIds as $groupId){ $group->loadById($groupId); $return[$group->_id] = $group->loadTypesData(); @@ -143,7 +143,7 @@ public function buildSystemsIndex(int $offset = 0, int $length = 10) : array { /** * @var $system Model\Universe\SystemModel */ - $system = Model\Universe\BasicUniverseModel::getNew('SystemModel'); + $system = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); $indexData = []; foreach($systemIds as $systemId){ $system->getById($systemId); @@ -174,7 +174,7 @@ public function getSystemIds() : array { /** * @var $system Model\Universe\SystemModel */ - $system = Model\Universe\BasicUniverseModel::getNew('SystemModel'); + $system = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); if($systems = $system->find()){ $systemIds = $systems->getAll('id'); if(count($systemIds)){ @@ -194,7 +194,7 @@ public function getSystemIds() : array { */ public function getSystemsIndex(bool $all = false) : array { $index = []; - $cacheKeyTable = Model\Universe\BasicUniverseModel::generateHashKeyTable('system'); + $cacheKeyTable = Model\Universe\AbstractUniverseModel::generateHashKeyTable('system'); if($this->getF3()->exists($cacheKeyTable,$cacheKeys)){ foreach((array)$cacheKeys as $cacheKeyRow){ if(($data = $this->get($cacheKeyRow)) && is_object($data)){ @@ -209,7 +209,7 @@ public function getSystemsIndex(bool $all = false) : array { * clear complete systems search index for all systems */ public function clearSystemsIndex(){ - $cacheKeyTable = Model\Universe\BasicUniverseModel::generateHashKeyTable('system'); + $cacheKeyTable = Model\Universe\AbstractUniverseModel::generateHashKeyTable('system'); if($this->getF3()->exists($cacheKeyTable,$cacheKeys)){ foreach((array)$cacheKeys as $cacheKeyRow) { $this->clear($cacheKeyRow); @@ -229,14 +229,14 @@ public function getSystemData(int $systemId){ $data = null; if($systemId){ // ...check index for data - $cacheKeyRow = Model\Universe\BasicUniverseModel::generateHashKeyRow('system', $systemId); + $cacheKeyRow = Model\Universe\AbstractUniverseModel::generateHashKeyRow('system', $systemId); $data = $this->get($cacheKeyRow); if(!$data){ // .. try to build index /** * @var $system Model\Universe\SystemModel */ - $system = Model\Universe\BasicUniverseModel::getNew('SystemModel'); + $system = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); $system->getById($systemId); $data = $system->buildIndex(); } @@ -252,7 +252,7 @@ public function getSystemData(int $systemId){ private function get(string $cacheKey){ $data = null; if($this->getF3()->exists($cacheKey,$value)) { - if(is_string($value) && strpos($value, Model\Universe\BasicUniverseModel::CACHE_KEY_PREFIX) === 0) { + if(is_string($value) && strpos($value, Model\Universe\AbstractUniverseModel::CACHE_KEY_PREFIX) === 0) { // value references an other cacheKey that holds data return $this->get($value); }elseif( !empty((array)$value) ){ @@ -269,7 +269,7 @@ private function get(string $cacheKey){ */ private function clear(string $cacheKey){ if($this->getF3()->exists($cacheKey,$value)) { - if(is_string($value) && strpos($value, Model\Universe\BasicUniverseModel::CACHE_KEY_PREFIX) === 0) { + if(is_string($value) && strpos($value, Model\Universe\AbstractUniverseModel::CACHE_KEY_PREFIX) === 0) { // value references another cacheKey -> clear that one as well $this->clear($value); } diff --git a/app/main/controller/controller.php b/app/main/controller/controller.php index beb5557d2..51794b652 100644 --- a/app/main/controller/controller.php +++ b/app/main/controller/controller.php @@ -12,11 +12,11 @@ use Exception\PathfinderException; use lib\api\CcpClient; use lib\Config; +use lib\db\SQL; use lib\Resource; use lib\Monolog; -use lib\Socket; use lib\Util; -use Model; +use Model\Pathfinder; use DB; class Controller { @@ -58,10 +58,19 @@ protected function getTemplate(){ * get $f3 base object * @return \Base */ - protected function getF3(){ + protected function getF3() : \Base { return \Base::instance(); } + /** + * get DB connection + * @param string $alias + * @return SQL|null + */ + protected function getDB(string $alias = 'PF') : ?SQL { + return $this->getF3()->DB->getDB($alias); + } + /** * event handler for all "views" * some global template variables are set in here @@ -69,10 +78,7 @@ protected function getF3(){ * @param $params * @return bool */ - function beforeroute(\Base $f3, $params): bool { - // initiate DB connection - DB\Database::instance()->getDB('PF'); - + function beforeroute(\Base $f3, $params) : bool { // init user session $this->initSession($f3); @@ -111,15 +117,6 @@ public function afterroute(\Base $f3){ } } - /** - * set change the DB connection - * @param string $database - * @return DB\SQL - */ - protected function getDB($database = 'PF'){ - return DB\Database::instance()->getDB($database); - } - /** * init new Session handler * @param \Base $f3 @@ -129,7 +126,7 @@ protected function initSession(\Base $f3){ if( $f3->get('SESSION_CACHE') === 'mysql' && - $this->getDB('PF') instanceof DB\SQL + ($db = $f3->DB->getDB('PF')) instanceof SQL ){ if(!headers_sent() && session_status()!=PHP_SESSION_ACTIVE){ /** @@ -150,10 +147,9 @@ protected function initSession(\Base $f3){ return false; }; - new DB\SQL\MySQL\Session($this->getDB('PF'), 'sessions', true, $onSuspect); + new DB\SQL\MySQL\Session($db, 'sessions', true, $onSuspect); } } - } /** @@ -188,7 +184,7 @@ protected function initResource(\Base $f3){ * -> whether user accepts cookies * @return bool */ - protected function getCookieState(){ + protected function getCookieState() : bool { return (bool)count( $this->getCookieByName(self::COOKIE_NAME_STATE) ); } @@ -200,7 +196,7 @@ protected function getCookieState(){ * @param bool $prefix * @return array */ - protected function getCookieByName($cookieName, $prefix = false){ + protected function getCookieByName($cookieName, $prefix = false) : array { $data = []; if(!empty($cookieName)){ @@ -224,10 +220,10 @@ protected function getCookieByName($cookieName, $prefix = false){ /** * set/update logged in cookie by character model * -> store validation data in DB - * @param Model\CharacterModel $character + * @param Pathfinder\CharacterModel $character * @throws \Exception */ - protected function setLoginCookie(Model\CharacterModel $character){ + protected function setLoginCookie(Pathfinder\CharacterModel $character){ if( $this->getCookieState() ){ $expireSeconds = (int)Config::getPathfinderData('login.cookie_expire'); $expireSeconds *= 24 * 60 * 60; @@ -281,10 +277,10 @@ protected function setLoginCookie(Model\CharacterModel $character){ * * @param array $cookieData * @param bool $checkAuthorization - * @return Model\CharacterModel[] + * @return Pathfinder\CharacterModel[] * @throws \Exception */ - protected function getCookieCharacters($cookieData = [], $checkAuthorization = true){ + protected function getCookieCharacters($cookieData = [], $checkAuthorization = true) : array { $characters = []; if( @@ -292,9 +288,9 @@ protected function getCookieCharacters($cookieData = [], $checkAuthorization = t !empty($cookieData) ){ /** - * @var $characterAuth Model\CharacterAuthenticationModel + * @var $characterAuth Pathfinder\CharacterAuthenticationModel */ - $characterAuth = Model\BasicModel::getNew('CharacterAuthenticationModel'); + $characterAuth = Pathfinder\AbstractPathfinderModel::getNew('CharacterAuthenticationModel'); $timezone = $this->getF3()->get('getTimeZone')(); $currentTime = new \DateTime('now', $timezone); @@ -320,7 +316,7 @@ protected function getCookieCharacters($cookieData = [], $checkAuthorization = t // -> try to update character information from ESI // e.g. Corp has changed, this also ensures valid "access_token" /** - * @var $character Model\CharacterModel + * @var $character Pathfinder\CharacterModel */ $updateStatus = $characterAuth->characterId->updateFromESI(); @@ -388,13 +384,11 @@ protected function getCookieCharacters($cookieData = [], $checkAuthorization = t * @return array * @throws \Exception */ - public function getSessionCharacterData(){ + public function getSessionCharacterData() : array { $data = []; - if($user = $this->getUser()){ $header = self::getRequestHeaders(); $requestedCharacterId = (int)$header['Pf-Character']; - if( !$this->getF3()->get('AJAX') ){ $requestedCharacterId = (int)$_COOKIE['old_char_id']; if(!$requestedCharacterId){ @@ -402,7 +396,6 @@ public function getSessionCharacterData(){ if((int)$tempCharacterData['ID'] > 0){ $requestedCharacterId = (int)$tempCharacterData['ID']; } - } } @@ -415,20 +408,18 @@ public function getSessionCharacterData(){ /** * get current character * @param int $ttl - * @return Model\CharacterModel|null + * @return Pathfinder\CharacterModel|null * @throws \Exception */ - public function getCharacter($ttl = 0){ + public function getCharacter(int $ttl = 0) : ?Pathfinder\CharacterModel { $character = null; - $characterData = $this->getSessionCharacterData(); - if( !empty($characterData) ){ + if(!empty($characterData = $this->getSessionCharacterData())){ /** - * @var $characterModel Model\CharacterModel + * @var $characterModel Pathfinder\CharacterModel */ - $characterModel = Model\BasicModel::getNew('CharacterModel'); - $characterModel->getById( (int)$characterData['ID'], $ttl); - + $characterModel = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); + $characterModel->getById((int)$characterData['ID'], $ttl); if( !$characterModel->dry() && $characterModel->hasUserCharacter() @@ -443,17 +434,17 @@ public function getCharacter($ttl = 0){ /** * get current user * @param int $ttl - * @return Model\UserModel|null + * @return Pathfinder\UserModel|null * @throws \Exception */ - public function getUser($ttl = 0){ + public function getUser($ttl = 0) : ?Pathfinder\UserModel { $user = null; if($this->getF3()->exists(Api\User::SESSION_KEY_USER_ID, $userId)){ /** - * @var $userModel Model\UserModel + * @var $userModel Pathfinder\UserModel */ - $userModel = Model\BasicModel::getNew('UserModel'); + $userModel = Pathfinder\AbstractPathfinderModel::getNew('UserModel'); $userModel->getById($userId, $ttl); if( @@ -491,7 +482,7 @@ protected function setTempCharacterData(int $characterId){ * @param bool $deleteSession * @param bool $deleteLog * @param bool $deleteCookie - * @throws \ZMQSocketException + * @throws \Exception */ protected function logoutCharacter(\Base $f3, bool $all = false, bool $deleteSession = true, bool $deleteLog = true, bool $deleteCookie = false){ $sessionCharacterData = (array)$f3->get(Api\User::SESSION_KEY_CHARACTERS); @@ -499,9 +490,9 @@ protected function logoutCharacter(\Base $f3, bool $all = false, bool $deleteSes if($sessionCharacterData){ $activeCharacterId = ($activeCharacter = $this->getCharacter()) ? $activeCharacter->_id : 0; /** - * @var Model\CharacterModel $character + * @var $character Pathfinder\CharacterModel */ - $character = Model\BasicModel::getNew('CharacterModel'); + $character = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); $characterIds = []; foreach($sessionCharacterData as $characterData){ if($characterData['ID'] === $activeCharacterId){ @@ -517,7 +508,7 @@ protected function logoutCharacter(\Base $f3, bool $all = false, bool $deleteSes if($characterIds){ // broadcast logout information to webSocket server - (new Socket( Config::getSocketUri() ))->sendData('characterLogout', $characterIds); + $f3->webSocket()->write('characterLogout', $characterIds); } } @@ -693,7 +684,7 @@ protected function getRouteUrl($alias = null){ * get a custom userAgent string for API calls * @return string */ - protected function getUserAgent(){ + protected function getUserAgent() : string { $userAgent = ''; $userAgent .= Config::getPathfinderData('name'); $userAgent .= ' - ' . Config::getPathfinderData('version'); @@ -816,7 +807,7 @@ protected function logActivities(){ * get controller by class name * -> controller class is searched within all controller directories * @param $className - * @return null|\Controller\ + * @return null|Controller * @throws \Exception */ static function getController($className){ @@ -866,7 +857,7 @@ static function getScopesByAuthType(string $authType = '') : array { * getallheaders() is not available under nginx * @return array (string $key -> string $value) */ - static function getRequestHeaders(){ + static function getRequestHeaders() : array { $headers = []; $serverData = self::getServerData(); @@ -875,10 +866,10 @@ static function getRequestHeaders(){ function_exists('apache_request_headers') && $serverData->type === 'apache' ){ - // Apache Webserver + // Apache WebServer $headers = apache_request_headers(); }else{ - // Other webserver, e.g. Nginx + // Other WebServer, e.g. Nginx // Unfortunately this "fallback" does not work for me (Apache) // Therefore we can´t use this for all servers // https://github.com/exodus4d/pathfinder/issues/58 @@ -960,9 +951,9 @@ static function getLogger($type = 'DEBUG') : \Log { * @param $key * @return string */ - static function formatHiveKey($key){ + static function formatHiveKey($key) : string { $illegalCharacters = ['-', ' ']; - return strtolower( str_replace($illegalCharacters, '', $key) ); + return strtolower(str_replace($illegalCharacters, '', $key)); } /** @@ -974,15 +965,4 @@ static function getEnvironmentData($key){ return Config::getEnvironmentData($key); } - - /** - * health check for ICP socket -> ping request - * @param $ttl - * @param $load - * @throws \ZMQSocketException - */ - static function checkTcpSocket($ttl, $load){ - (new Socket( Config::getSocketUri(), $ttl ))->sendData('healthCheck', $load); - } - } \ No newline at end of file diff --git a/app/main/controller/logcontroller.php b/app/main/controller/logcontroller.php index d7290ed79..ebe47a497 100644 --- a/app/main/controller/logcontroller.php +++ b/app/main/controller/logcontroller.php @@ -7,11 +7,11 @@ */ namespace controller; -use DB; + + use lib\Config; use lib\logging\MapLog; -use Model\ActivityLogModel; -use Model\BasicModel; +use Model\Pathfinder; class LogController extends \Prefab { @@ -41,9 +41,9 @@ protected function getActivityLogColumns(): array{ $f3 = \Base::instance(); if(!$f3->exists(self::CACHE_KEY_ACTIVITY_COLUMNS, $this->activityLogColumns)){ /** - * @var $activityLogModel ActivityLogModel + * @var $activityLogModel Pathfinder\ActivityLogModel */ - $activityLogModel = BasicModel::getNew('ActivityLogModel'); + $activityLogModel = Pathfinder\AbstractPathfinderModel::getNew('ActivityLogModel'); $this->activityLogColumns = $activityLogModel->getCountableColumnNames(); $f3->set(self::CACHE_KEY_ACTIVITY_COLUMNS, self::CACHE_TTL_ACTIVITY_COLUMNS); } @@ -86,7 +86,7 @@ public function push(MapLog $log){ */ public function logActivities(){ if( !empty($this->activityLogBuffer) ){ - $db = DB\Database::instance()->getDB('PF'); + $db = \Base::instance()->DB->getDB('PF'); $quoteStr = function($str) use ($db) { return $db->quotekey($str); @@ -166,12 +166,8 @@ private function getBufferedActivityIndex(int $characterId, int $mapId): int { */ public static function getLogger(string $type) : \Log { $logFiles = Config::getPathfinderData('logfiles'); - $logFileName = empty($logFiles[$type]) ? 'error' : $logFiles[$type]; - $logFile = $logFileName . '.log'; - $logger = new \Log($logFile); - - return $logger; + return new \Log($logFileName . '.log'); } } \ No newline at end of file diff --git a/app/main/controller/setup.php b/app/main/controller/setup.php index 03484531c..1b15ce4af 100644 --- a/app/main/controller/setup.php +++ b/app/main/controller/setup.php @@ -8,14 +8,14 @@ namespace Controller; -use Controller\Ccp\Universe; +use Controller\Ccp\Universe as UniverseController; use data\filesystem\Search; -use DB; -use DB\SQL; +use DB\SQL\Schema; use DB\SQL\MySQL as MySQL; use lib\Config; use lib\Util; -use Model; +use Model\Pathfinder; +use Model\Universe; class Setup extends Controller { @@ -59,47 +59,47 @@ class Setup extends Controller { 'PF' => [ 'info' => [], 'models' => [ - 'Model\UserModel', - 'Model\AllianceModel', - 'Model\CorporationModel', - 'Model\MapModel', - 'Model\MapScopeModel', - 'Model\MapTypeModel', - 'Model\SystemTypeModel', - 'Model\SystemStatusModel', - 'Model\SystemNeighbourModel', - 'Model\RightModel', - 'Model\RoleModel', - 'Model\StructureModel', - - 'Model\CharacterStatusModel', - 'Model\ConnectionScopeModel', - 'Model\StructureStatusModel', - - 'Model\CharacterMapModel', - 'Model\AllianceMapModel', - 'Model\CorporationMapModel', - - 'Model\CorporationRightModel', - 'Model\CorporationStructureModel', - - 'Model\UserCharacterModel', - 'Model\CharacterModel', - 'Model\CharacterAuthenticationModel', - 'Model\CharacterLogModel', - - 'Model\SystemModel', - - 'Model\ConnectionModel', - 'Model\ConnectionLogModel', - 'Model\SystemSignatureModel', - - 'Model\ActivityLogModel', - - 'Model\SystemShipKillModel', - 'Model\SystemPodKillModel', - 'Model\SystemFactionKillModel', - 'Model\SystemJumpModel' + 'Model\Pathfinder\UserModel', + 'Model\Pathfinder\AllianceModel', + 'Model\Pathfinder\CorporationModel', + 'Model\Pathfinder\MapModel', + 'Model\Pathfinder\MapScopeModel', + 'Model\Pathfinder\MapTypeModel', + 'Model\Pathfinder\SystemTypeModel', + 'Model\Pathfinder\SystemStatusModel', + 'Model\Pathfinder\SystemNeighbourModel', + 'Model\Pathfinder\RightModel', + 'Model\Pathfinder\RoleModel', + 'Model\Pathfinder\StructureModel', + + 'Model\Pathfinder\CharacterStatusModel', + 'Model\Pathfinder\ConnectionScopeModel', + 'Model\Pathfinder\StructureStatusModel', + + 'Model\Pathfinder\CharacterMapModel', + 'Model\Pathfinder\AllianceMapModel', + 'Model\Pathfinder\CorporationMapModel', + + 'Model\Pathfinder\CorporationRightModel', + 'Model\Pathfinder\CorporationStructureModel', + + 'Model\Pathfinder\UserCharacterModel', + 'Model\Pathfinder\CharacterModel', + 'Model\Pathfinder\CharacterAuthenticationModel', + 'Model\Pathfinder\CharacterLogModel', + + 'Model\Pathfinder\SystemModel', + + 'Model\Pathfinder\ConnectionModel', + 'Model\Pathfinder\ConnectionLogModel', + 'Model\Pathfinder\SystemSignatureModel', + + 'Model\Pathfinder\ActivityLogModel', + + 'Model\Pathfinder\SystemShipKillModel', + 'Model\Pathfinder\SystemPodKillModel', + 'Model\Pathfinder\SystemFactionKillModel', + 'Model\Pathfinder\SystemJumpModel' ] ], 'UNIVERSE' => [ @@ -108,6 +108,7 @@ class Setup extends Controller { 'Model\Universe\TypeModel', 'Model\Universe\GroupModel', 'Model\Universe\CategoryModel', + 'Model\Universe\FactionModel', 'Model\Universe\StructureModel', 'Model\Universe\WormholeModel', 'Model\Universe\StargateModel', @@ -121,11 +122,6 @@ class Setup extends Controller { ] ]; - /** - * @var DB\Database - */ - protected $dbLib = null; - /** * database error * @var bool @@ -142,9 +138,6 @@ class Setup extends Controller { function beforeroute(\Base $f3, $params): bool { $this->initResource($f3); - // init dbLib class. Manages all DB connections - $this->dbLib = DB\Database::instance(); - // page title $f3->set('tplPageTitle', 'Setup | ' . Config::getPathfinderData('name')); @@ -199,10 +192,10 @@ public function init(\Base $f3){ switch($params['action']){ case 'createDB': - $this->createDB($params['db']); + $this->createDB($f3, $params['db']); break; case 'bootstrapDB': - $this->bootstrapDB($params['db']); + $this->bootstrapDB($f3, $params['db']); break; case 'fixCols': $fixColumns = true; @@ -262,7 +255,7 @@ public function init(\Base $f3){ // Socket ----------------------------------------------------------------------------------------------------- // WebSocket information - $f3->set('socketInformation', $this->getSocketInformation()); + $f3->set('socketInformation', $this->getSocketInformation($f3)); // Administration --------------------------------------------------------------------------------------------- // Index information @@ -560,23 +553,6 @@ protected function checkRequirements(\Base $f3) : array { 'check' => version_compare( phpversion('redis'), $f3->get('REQUIREMENTS.PHP.REDIS'), '>='), 'tooltip' => 'Redis can replace the default file-caching mechanic. It is much faster!' ], - [ - 'label' => 'ØMQ TCP sockets [optional]' - ], - 'ext_zmq' => [ - 'label' => 'ZeroMQ extension', - 'required' => $f3->get('REQUIREMENTS.PHP.ZMQ'), - 'version' => extension_loaded('zmq') ? phpversion('zmq') : 'missing', - 'check' => version_compare( phpversion('zmq'), $f3->get('REQUIREMENTS.PHP.ZMQ'), '>='), - 'tooltip' => 'ØMQ PHP extension. Required for WebSocket configuration.' - ], - 'lib_zmq' => [ - 'label' => 'ZeroMQ installation', - 'required' => $f3->get('REQUIREMENTS.LIBS.ZMQ'), - 'version' => (class_exists('ZMQ') && defined('ZMQ::LIBZMQ_VER')) ? \ZMQ::LIBZMQ_VER : 'unknown', - 'check' => version_compare( (class_exists('ZMQ') && defined('ZMQ::LIBZMQ_VER')) ? \ZMQ::LIBZMQ_VER : 0, $f3->get('REQUIREMENTS.LIBS.ZMQ'), '>='), - 'tooltip' => 'ØMQ version. Required for WebSocket configuration.' - ], [ 'label' => 'LibEvent library [optional]' ], @@ -742,7 +718,7 @@ class_exists('\Redis') $getClientInfo = function(\Redis $client, array $conf) : array { $redisInfo = [ 'dsn' => [ - 'label' => 'DNS', + 'label' => 'DSN', 'value' => $conf['host'] . ':' . $conf['port'] ], 'connected' => [ @@ -764,6 +740,7 @@ class_exists('\Redis') if($client->isConnected()){ $redisServerInfo = (array)$client->info('SERVER'); + $redisClientsInfo = (array)$client->info('CLIENTS'); $redisMemoryInfo = (array)$client->info('MEMORY'); $redisStatsInfo = (array)$client->info('STATS'); @@ -801,6 +778,18 @@ class_exists('\Redis') 'check' => $redisMemoryInfo['maxmemory_policy'] == $f3->get('REQUIREMENTS.REDIS.MAXMEMORY_POLICY'), 'tooltip' => 'How Redis behaves if \'maxmemory\' limit reached' ], + 'connectedClients' => [ + 'label' => 'connected_clients', + 'version' => $redisClientsInfo['connected_clients'], + 'check' => (bool)$redisClientsInfo['connected_clients'], + 'tooltip' => 'Number of client connections (excluding connections from replicas)' + ], + 'blockedClients' => [ + 'label' => 'blocked_clients', + 'version' => $redisClientsInfo['blocked_clients'], + 'check' => !(bool)$redisClientsInfo['blocked_clients'], + 'tooltip' => 'Number of clients pending on a blocking call (BLPOP, BRPOP, BRPOPLPUSH)' + ], 'evictedKeys' => [ 'label' => 'evicted_keys', 'version' => $redisStatsInfo['evicted_keys'], @@ -863,7 +852,7 @@ class_exists('\Redis') $client = new \Redis(); try{ - $client->connect($conf['host'], $conf['port'], 0.3); + $client->pconnect($conf['host'], $conf['port'], 0.3); if(isset($conf['db'])) { $client->select($conf['db']); } @@ -1087,13 +1076,15 @@ protected function getMapsDefaultConfig(\Base $f3): array { */ protected function checkDatabase(\Base $f3, $exec = false){ - foreach($this->databases as $dbKey => $dbData){ + foreach($this->databases as $dbAlias => $dbData){ $dbLabel = ''; $dbConfig = []; // DB connection status $dbConnected = false; + // DB initialized as persistent connection + $dbPersistent = false; // DB type (e.g. MySql,..) $dbDriver = 'unknown'; // enable database ::create() function on UI @@ -1107,14 +1098,16 @@ protected function checkDatabase(\Base $f3, $exec = false){ // tables that should exist in this DB $requiredTables = []; // get DB config - $dbConfigValues = Config::getDatabaseConfig($dbKey); - // check DB for valid connection - $db = $this->dbLib->getDB($dbKey); + $dbConfigValues = Config::getDatabaseConfig($f3, $dbAlias); // collection for errors $dbErrors = []; + /** + * @var $db \lib\db\SQL + */ + $db = $f3->DB->getDB($dbAlias); // check config that does NOT require a valid DB connection - switch($dbKey){ + switch($dbAlias){ case 'PF': $dbLabel = 'Pathfinder'; break; case 'UNIVERSE': $dbLabel = 'EVE-Online universe'; break; } @@ -1124,7 +1117,7 @@ protected function checkDatabase(\Base $f3, $exec = false){ $dbAlias = $dbConfigValues['ALIAS']; if($db){ - switch($dbKey){ + switch($dbAlias){ case 'PF': case 'UNIVERSE': // enable (table) setup for this DB @@ -1147,11 +1140,12 @@ protected function checkDatabase(\Base $f3, $exec = false){ // db connect was successful $dbConnected = true; + $dbPersistent = $db->pdo()->getAttribute(\PDO::ATTR_PERSISTENT); $dbDriver = $db->driver(); $dbConfig = $this->checkDBConfig($f3, $db); // get tables - $schema = new SQL\Schema($db); + $schema = new Schema($db); $currentTables = $schema->getTables(); // check each table for changes @@ -1170,7 +1164,22 @@ protected function checkDatabase(\Base $f3, $exec = false){ $tableModifierTemp = new MySQL\TableModifier($requiredTableName, $schema); $currentColumns = $tableModifierTemp->getCols(true); // get row count - $tableRows = $this->dbLib->getRowCount($requiredTableName, $dbKey); + $tableRows = $db->getRowCount($requiredTableName); + + + // find deprecated columns that are no longer needed ------------------------------------------ + $deprecatedColumnNames = array_diff(array_keys($currentColumns), array_keys($data['fieldConf']), ['id']); + foreach($deprecatedColumnNames as $deprecatedColumnName){ + $requiredTables[$requiredTableName]['fieldConf'][$deprecatedColumnName]['deprecated'] = true; + $requiredTables[$requiredTableName]['fieldConf'][$deprecatedColumnName]['currentType'] = 'deprecated'; + //$requiredTables[$requiredTableName]['fieldConf'][$deprecatedColumnName]['statusCheck'] = false; + //$tableStatusCheckCount++; + + //$tableModifierTemp->dropColumn($deprecatedColumnName); + } + + //$buildStatus = $tableModifierTemp->build(false); + //$dbColumnQueries = array_merge($dbColumnQueries, (array)$buildStatus); }else{ // table missing $dbStatusCheckCount++; @@ -1358,15 +1367,15 @@ protected function checkDatabase(\Base $f3, $exec = false){ // DB connection failed $dbStatusCheckCount++; - foreach($this->dbLib->getErrors($dbAlias, 10) as $dbException){ + foreach($f3->DB->getErrors($dbAlias, 10) as $dbException){ $dbErrors[] = $dbException->getMessage(); } // try to connect without! DB (-> offer option to create them) // do not log errors (silent) - $this->dbLib->setSilent(true); - $dbServer = $this->dbLib->connectToServer($dbAlias); - $this->dbLib->setSilent(false); + $f3->DB->setSilent(true); + $dbServer = $f3->DB->connectToServer($dbAlias); + $f3->DB->setSilent(false); if(!is_null($dbServer)){ // connection succeeded $dbCreate = true; @@ -1381,11 +1390,10 @@ protected function checkDatabase(\Base $f3, $exec = false){ // sort tables for better readability ksort($requiredTables); - $this->databases[$dbKey]['info'] = [ - // 'db' => $db, + $this->databases[$dbAlias]['info'] = [ 'label' => $dbLabel, - 'host' => Config::getDatabaseDNSValue((string)$dbConfigValues['DNS'], 'host'), - 'port' => Config::getDatabaseDNSValue((string)$dbConfigValues['DNS'], 'port'), + 'host' => $dbConfigValues['SOCKET'] ? : $dbConfigValues['HOST'], + 'port' => $dbConfigValues['PORT'] && !$dbConfigValues['SOCKET'] ? $dbConfigValues['PORT'] : '', 'driver' => $dbDriver, 'name' => $dbName, 'user' => $dbUser, @@ -1394,6 +1402,7 @@ protected function checkDatabase(\Base $f3, $exec = false){ 'dbCreate' => $dbCreate, 'setupEnable' => $dbSetupEnable, 'connected' => $dbConnected, + 'persistent' => $dbPersistent, 'statusCheckCount' => $dbStatusCheckCount, 'columnQueries' => $dbColumnQueries, 'tableData' => $requiredTables, @@ -1411,11 +1420,11 @@ protected function checkDatabase(\Base $f3, $exec = false){ /** * check MySQL params * @param \Base $f3 - * @param SQL $db + * @param \lib\db\SQL $db * @return array */ - protected function checkDBConfig(\Base $f3, SQL $db){ - + protected function checkDBConfig(\Base $f3, \lib\db\SQL $db) : array { + $checkAll = true; // some db like "Maria DB" have some strange version strings.... $dbVersionString = $db->version(); $dbVersionParts = explode('-', $dbVersionString); @@ -1429,50 +1438,76 @@ protected function checkDBConfig(\Base $f3, SQL $db){ } $dbConfig = [ - 'version' => [ - 'label' => 'DB version', - 'required' => $f3->get('REQUIREMENTS.MYSQL.VERSION'), - 'version' => $dbVersion, - 'check' => version_compare($dbVersion, $f3->get('REQUIREMENTS.MYSQL.VERSION'), '>=' ) + 'data' => [ + 'version' => [ + 'label' => 'DB version', + 'required' => $f3->get('REQUIREMENTS.MYSQL.VERSION'), + 'version' => $dbVersion, + 'check' => version_compare($dbVersion, $f3->get('REQUIREMENTS.MYSQL.VERSION'), '>=' ) ? : $checkAll = false + ] ] ]; - $mySQLConfigParams = (array)$f3->get('REQUIREMENTS.MYSQL.VARS'); - foreach($mySQLConfigParams as $param => $requiredValue){ - // get current MySQL config value for $param - $result = $db->exec("SHOW VARIABLES LIKE '" . strtolower($param) . "'"); - $tmpResult = reset($result); - $value = !empty($result)? end($tmpResult) : 'unknown'; + $mySQLConfig = array_change_key_case((array)$f3->get('REQUIREMENTS.MYSQL.VARS')); + $mySQLConfigKeys = array_keys($mySQLConfig); + + $results = $db->exec("SHOW VARIABLES WHERE Variable_Name IN ('" . implode("','", $mySQLConfigKeys) . "')"); + + $getValue = function(string $param) use ($results) : string { + $match = array_filter($results, function($k) use ($param) : bool { + return strtolower($k['Variable_name']) == $param; + }); + return !empty($match) ? end(reset($match)) : 'unknown'; + }; + + $checkValue = function($requiredValue, $value) : bool { + $check = true; + if(!empty($requiredValue)){ + if(is_int($requiredValue)){ + $check = $requiredValue <= $value; + }else{ + $check = $requiredValue == $value; + } + } + return $check; + }; - $dbConfig[] = [ - 'label' => strtolower($param), + foreach($mySQLConfig as $param => $requiredValue){ + $value = $getValue($param); + $dbConfig['data'][] = [ + 'label' => $param, 'required' => $requiredValue, 'version' => $value, - 'check' => !empty($requiredValue) ? ($requiredValue == $value) : true + 'check' => $checkValue($requiredValue, $value) ? : $checkAll = false ]; } + $dbConfig['meta'] = [ + 'check' => $checkAll + ]; + return $dbConfig; } /** * try to create a fresh database - * @param string $dbKey + * @param \Base $f3 + * @param string $dbAlias */ - protected function createDB(string $dbKey){ + protected function createDB(\Base $f3, string $dbAlias){ // check for valid key - if(!empty($this->databases[$dbKey])){ + if(!empty($this->databases[$dbAlias])){ // disable logging (we expect the DB connect to fail -> no db created) - $this->dbLib->setSilent(true); + $f3->DB->setSilent(true); // try to connect - $db = $this->dbLib->getDB($dbKey); + $db = $f3->DB->getDB($dbAlias); // enable logging - $this->dbLib->setSilent(false, true); + $f3->DB->setSilent(false, true); if(is_null($db)){ // try create new db - $db = $this->dbLib->createDB($dbKey); + $db = $f3->DB->createDB($dbAlias); if(is_null($db)){ - foreach($this->dbLib->getErrors($dbKey, 5) as $error){ + foreach($f3->DB->getErrors($dbAlias, 5) as $error){ // ... no further error handling here -> check log files //$error->getMessage() } @@ -1486,18 +1521,19 @@ protected function createDB(string $dbKey){ * - create tables * - create indexes * - set default static values - * @param string $dbKey + * @param \Base $f3 + * @param string $dbAlias * @return array */ - protected function bootstrapDB(string $dbKey){ - $db = $this->dbLib->getDB($dbKey); + protected function bootstrapDB(\Base $f3, string $dbAlias) : array { $checkTables = []; - if($db){ + if($db = $f3->DB->getDB($dbAlias)){ // set some default config for this database - DB\Database::prepareDatabase($db); + $requiredVars = Config::getRequiredDbVars($f3, $db->driver()); + $db->prepareDatabase($requiredVars['CHARACTER_SET_DATABASE'], $requiredVars['COLLATION_DATABASE']); // setup tables - foreach($this->databases[$dbKey]['models'] as $modelClass){ + foreach($this->databases[$dbAlias]['models'] as $modelClass){ $checkTables[] = call_user_func($modelClass . '::setup', $db); } } @@ -1506,51 +1542,98 @@ protected function bootstrapDB(string $dbKey){ /** * get Socket information (TCP (internal)), (WebSocket (clients)) + * @param \Base $f3 * @return array - * @throws \ZMQSocketException + * @throws \Exception */ - protected function getSocketInformation(){ - // $ttl for health check - $ttl = 600; - + protected function getSocketInformation(\Base $f3) : array { + $ttl = 0.6; + $task = 'healthCheck'; $healthCheckToken = microtime(true); - // ping TCP Socket with checkToken - self::checkTcpSocket($ttl, $healthCheckToken); + $statusTcp = [ + 'type' => 'danger', + 'label' => 'INIT CONNECTION…', + 'class' => 'txt-color-danger' + ]; + + $webSocketStatus = [ + 'type' => 'danger', + 'label' => 'INIT CONNECTION…', + 'class' => 'txt-color-danger' + ]; + + $statsTcp = [ + 'startup' => 0, + 'connections' => 0, + 'maxConnections' => 0 + ]; + + // ping TCP Socket with "healthCheck" task + $f3->webSocket(['timeout' => $ttl]) + ->write($task, $healthCheckToken) + ->then( + function($payload) use ($task, $healthCheckToken, &$statusTcp, &$statsTcp) { + if( + $payload['task'] == $task && + $payload['load'] == $healthCheckToken + ){ + $statusTcp['type'] = 'success'; + $statusTcp['label'] = 'PING OK'; + $statusTcp['class'] = 'txt-color-success'; + + // statistics (e.g. current connection count) + if(!empty($payload['stats'])){ + $statsTcp = $payload['stats']; + } + }else{ + $statusTcp['type'] = 'warning'; + $statusTcp['label'] = is_string($payload['load']) ? $payload['load'] : 'INVALID RESPONSE'; + $statusTcp['class'] = 'txt-color-warning'; + } + }, + function($payload) use (&$statusTcp) { + $statusTcp['label'] = $payload['load']; + }); $socketInformation = [ 'tcpSocket' => [ - 'label' => 'Socket (intern) [TCP]', - 'online' => true, + 'label' => 'Socket (intern) [TCP]', + 'status' => $statusTcp, + 'stats' => $statsTcp, 'data' => [ [ 'label' => 'HOST', - 'value' => Config::getEnvironmentData('SOCKET_HOST'), + 'value' => Config::getEnvironmentData('SOCKET_HOST') ? : '[missing]', 'check' => !empty( Config::getEnvironmentData('SOCKET_HOST') ) ],[ 'label' => 'PORT', - 'value' => Config::getEnvironmentData('SOCKET_PORT'), + 'value' => Config::getEnvironmentData('SOCKET_PORT') ? : '[missing]', 'check' => !empty( Config::getEnvironmentData('SOCKET_PORT') ) ],[ 'label' => 'URI', - 'value' => Config::getSocketUri(), + 'value' => Config::getSocketUri() ? : '[missing]', 'check' => !empty( Config::getSocketUri() ) ],[ - 'label' => 'timeout (ms)', + 'label' => 'timeout (seconds)', 'value' => $ttl, 'check' => !empty( $ttl ) + ],[ + 'label' => 'uptime', + 'value' => Config::formatTimeInterval($statsTcp['startup']), + 'check' => $statsTcp['startup'] > 0 ] ], 'token' => $healthCheckToken ], 'webSocket' => [ 'label' => 'WebSocket (clients) [HTTP]', - 'online' => false, + 'status' => $webSocketStatus, 'data' => [ [ 'label' => 'URI', 'value' => '', - 'check' => false + 'check' => null // undefined ] ] ] @@ -1568,8 +1651,20 @@ protected function getSocketInformation(){ protected function getIndexData(\Base $f3){ // active DB and tables are required for obtain index data if(!$this->databaseHasError){ - $categoryUniverseModel = Model\Universe\BasicUniverseModel::getNew('CategoryModel'); - $systemNeighbourModel = Model\BasicModel::getNew('SystemNeighbourModel'); + /** + * @var $categoryUniverseModel Universe\CategoryModel + */ + $categoryUniverseModel = Universe\AbstractUniverseModel::getNew('CategoryModel'); + $categoryUniverseModel->getById(65, 0); + $structureCount = $categoryUniverseModel->getTypesCount(false); + + $categoryUniverseModel->getById(6, 0); + $shipCount = $categoryUniverseModel->getTypesCount(false); + + /** + * @var $systemNeighbourModel Pathfinder\SystemNeighbourModel + */ + $systemNeighbourModel = Pathfinder\AbstractPathfinderModel::getNew('SystemNeighbourModel'); $indexInfo = [ 'Systems' => [ @@ -1587,8 +1682,8 @@ protected function getIndexData(\Base $f3){ ] ], 'label' => 'build systems index', - 'countBuild' => count((new Universe())->getSystemsIndex()), - 'countAll' => count((new Universe())->getSystemIds()), + 'countBuild' => count((new UniverseController())->getSystemsIndex()), + 'countAll' => count((new UniverseController())->getSystemIds()), 'tooltip' => 'build up a static search index over all systems found on DB. Do not refresh page until import is complete (check progress)! Runtime: ~5min' ], 'Structures' => [ @@ -1601,7 +1696,7 @@ protected function getIndexData(\Base $f3){ ] ], 'label' => 'import structures data', - 'countBuild' => $categoryUniverseModel->getById(65, 0)->getTypesCount(false), + 'countBuild' => $structureCount, 'countAll' => (int)$f3->get('REQUIREMENTS.DATA.STRUCTURES'), 'tooltip' => 'import all structure types (e.g. Citadels) from ESI. Runtime: ~15s' ], @@ -1615,7 +1710,7 @@ protected function getIndexData(\Base $f3){ ] ], 'label' => 'import ships data', - 'countBuild' => $categoryUniverseModel->getById(6, 0)->getTypesCount(false), + 'countBuild' => $shipCount, 'countAll' => (int)$f3->get('REQUIREMENTS.DATA.SHIPS'), 'tooltip' => 'import all ships types from ESI. Runtime: ~2min' ], @@ -1629,7 +1724,7 @@ protected function getIndexData(\Base $f3){ ] ], 'label' => 'build neighbour index', - 'countBuild' => $this->dbLib->getRowCount($systemNeighbourModel->getTable()), + 'countBuild' => $f3->DB->getDB('PF')->getRowCount($systemNeighbourModel->getTable()), 'countAll' => (int)$f3->get('REQUIREMENTS.DATA.NEIGHBOURS'), 'tooltip' => 'build up a static search index for route search. This is used as fallback in case ESI is down. Runtime: ~30s' @@ -1651,7 +1746,7 @@ protected function getIndexData(\Base $f3){ ] ], 'label' => 'wormhole', - 'countBuild' => $this->dbLib->getRowCount($wormholeModel->getTable()), + 'countBuild' => $f3->DB->getDB('PF')->getRowCount($wormholeModel->getTable()), 'countAll' => 89 ] */ @@ -1676,7 +1771,7 @@ protected function getIndexData(\Base $f3){ */ protected function importTable($modelClass){ $this->getDB('PF'); - return Model\BasicModel::getNew($modelClass)->importData(); + return Pathfinder\AbstractPathfinderModel::getNew($modelClass)->importData(); } /** @@ -1686,7 +1781,7 @@ protected function importTable($modelClass){ */ protected function exportTable($modelClass){ $this->getDB('PF'); - Model\BasicModel::getNew($modelClass)->exportData(); + Pathfinder\AbstractPathfinderModel::getNew($modelClass)->exportData(); } /** @@ -1776,7 +1871,7 @@ protected function clearFiles(string $path){ */ protected function flushRedisDb(string $host, int $port, int $db = 0){ $client = new \Redis(); - $client->connect($host, $port, 0.3); + $client->pconnect($host, $port, 0.3); $client->select($db); $client->flushDB(); $client->close(); @@ -1789,7 +1884,7 @@ protected function flushRedisDb(string $host, int $port, int $db = 0){ */ protected function invalidateCookies(\Base $f3){ $this->getDB('PF'); - $authenticationModel = Model\BasicModel::getNew('CharacterAuthenticationModel'); + $authenticationModel = Pathfinder\AbstractPathfinderModel::getNew('CharacterAuthenticationModel'); $results = $authenticationModel->find(); if($results){ foreach($results as $result){ diff --git a/app/main/cron/abstractcron.php b/app/main/cron/abstractcron.php index 04b4076da..d98c77064 100644 --- a/app/main/cron/abstractcron.php +++ b/app/main/cron/abstractcron.php @@ -1,7 +1,7 @@ 5, - 'follow_location' => false // otherwise CURLOPT_FOLLOWLOCATION will fail - ]; - /** * table names for all system log tables * @var array @@ -31,23 +26,24 @@ class CcpSystemsUpdate extends AbstractCron { /** * checks if a table exists in DB or not - * @param DB\SQL $db + * @param SQL$db * @param string $table * @return bool */ - protected function tableExists (DB\SQL $db, string $table) : bool { + protected function tableExists (SQL $db, string $table) : bool { return !empty($db->exec('SHOW TABLES LIKE :table', [':table' => $table])); } /** * check all system log tables for the correct number of system entries that will be locked + * @param \Base $f3 * @return array */ - private function prepareSystemLogTables() : array { + private function prepareSystemLogTables(\Base $f3) : array { $systemsData = []; // get all available systems from "universe" DB - $universeDB = DB\Database::instance()->getDB('UNIVERSE'); + $universeDB = $f3->DB->getDB('UNIVERSE'); if($this->tableExists($universeDB, 'system')){ $systemsData = $universeDB->exec('SELECT @@ -62,7 +58,7 @@ private function prepareSystemLogTables() : array { [':ns' => '0.0', ':ls' => 'L', ':hs' => 'H'] ); - $pfDB = DB\Database::instance()->getDB('PF'); + $pfDB = $f3->DB->getDB('PF'); // insert systems into each log table if not exist $pfDB->begin(); @@ -95,12 +91,12 @@ function importSystemData(\Base $f3){ // prepare system jump log table ------------------------------------------------------------------------------ $time_start = microtime(true); - $systemsData = $this->prepareSystemLogTables(); + $systemsData = $this->prepareSystemLogTables($f3); $time_end = microtime(true); $execTimePrepareSystemLogTables = $time_end - $time_start; // switch DB for data import.. - $pfDB = DB\Database::instance()->getDB('PF'); + $pfDB = $f3->DB->getDB('PF'); // get current jump data -------------------------------------------------------------------------------------- $time_start = microtime(true); diff --git a/app/main/cron/characterupdate.php b/app/main/cron/characterupdate.php index 3f74e9e93..325b1339d 100644 --- a/app/main/cron/characterupdate.php +++ b/app/main/cron/characterupdate.php @@ -7,10 +7,10 @@ */ namespace Cron; -use DB; -use Model; +use Model\Pathfinder; + class CharacterUpdate extends AbstractCron { /** @@ -42,13 +42,12 @@ protected function getCharacterLogInactiveTime(\Base $f3){ */ function deleteLogData(\Base $f3){ $this->setMaxExecutionTime(); - DB\Database::instance()->getDB('PF'); $logInactiveTime = $this->getCharacterLogInactiveTime($f3); /** - * @var $characterLogModel Model\CharacterLogModel + * @var $characterLogModel Pathfinder\CharacterLogModel */ - $characterLogModel = Model\BasicModel::getNew('CharacterLogModel'); + $characterLogModel = Pathfinder\AbstractPathfinderModel::getNew('CharacterLogModel'); // find character logs that were not checked recently and update $characterLogs = $characterLogModel->find([ @@ -62,7 +61,7 @@ function deleteLogData(\Base $f3){ if(is_object($characterLogs)){ foreach($characterLogs as $characterLog){ /** - * @var $characterLog Model\CharacterLogModel + * @var $characterLog Pathfinder\CharacterLogModel */ if(is_object($characterLog->characterId)){ // force characterLog as "updated" even if no changes were made @@ -85,12 +84,11 @@ function deleteLogData(\Base $f3){ */ function cleanUpCharacterData(\Base $f3){ $this->setMaxExecutionTime(); - DB\Database::instance()->getDB('PF'); /** - * @var $characterModel Model\CharacterModel + * @var $characterModel Pathfinder\CharacterModel */ - $characterModel = Model\BasicModel::getNew('CharacterModel'); + $characterModel = Pathfinder\AbstractPathfinderModel::getNew('CharacterModel'); $characters = $characterModel->find([ 'active = :active AND TIMESTAMPDIFF(SECOND, kicked, NOW() ) > 0', @@ -100,7 +98,7 @@ function cleanUpCharacterData(\Base $f3){ if(is_object($characters)){ foreach($characters as $character){ /** - * @var $character Model\CharacterModel + * @var $character Pathfinder\CharacterModel */ $character->kick(); $character->save(); @@ -117,12 +115,11 @@ function cleanUpCharacterData(\Base $f3){ */ function deleteAuthenticationData(\Base $f3){ $this->setMaxExecutionTime(); - DB\Database::instance()->getDB('PF'); /** - * @var $authenticationModel Model\CharacterAuthenticationModel + * @var $authenticationModel Pathfinder\CharacterAuthenticationModel */ - $authenticationModel = Model\BasicModel::getNew('CharacterAuthenticationModel'); + $authenticationModel = Pathfinder\AbstractPathfinderModel::getNew('CharacterAuthenticationModel'); // find expired authentication data $authentications = $authenticationModel->find([ diff --git a/app/main/cron/mapupdate.php b/app/main/cron/mapupdate.php index 24c62c5e5..dbf3e4bc9 100644 --- a/app/main/cron/mapupdate.php +++ b/app/main/cron/mapupdate.php @@ -7,9 +7,10 @@ */ namespace cron; -use DB; + + use lib\Config; -use Model; +use Model\Pathfinder; class MapUpdate extends AbstractCron { @@ -28,14 +29,13 @@ function deactivateMapData(\Base $f3){ $privateMapLifetime = (int)Config::getMapsDefaultConfig('private.lifetime'); if($privateMapLifetime > 0){ - $pfDB = DB\Database::instance()->getDB('PF'); - if($pfDB){ + if($pfDB = $f3->DB->getDB('PF')){ $sqlDeactivateExpiredMaps = "UPDATE map SET - active = 0 - WHERE - map.active = 1 AND - map.typeId = 2 AND - TIMESTAMPDIFF(DAY, map.updated, NOW() ) > :lifetime"; + active = 0 + WHERE + map.active = 1 AND + map.typeId = 2 AND + TIMESTAMPDIFF(DAY, map.updated, NOW() ) > :lifetime"; $pfDB->exec($sqlDeactivateExpiredMaps, ['lifetime' => $privateMapLifetime]); } @@ -50,10 +50,9 @@ function deactivateMapData(\Base $f3){ */ function deleteMapData(\Base $f3){ $this->setMaxExecutionTime(); - $pfDB = DB\Database::instance()->getDB('PF'); $deletedMapsCount = 0; - if($pfDB){ + if($pfDB = $f3->DB->getDB('PF')){ $sqlDeleteDisabledMaps = "SELECT id FROM @@ -65,7 +64,7 @@ function deleteMapData(\Base $f3){ $disabledMaps = $pfDB->exec($sqlDeleteDisabledMaps, ['deletion_time' => self::DAYS_UNTIL_MAP_DELETION]); if($deletedMapsCount = $pfDB->count()){ - $mapModel = Model\BasicModel::getNew('MapModel'); + $mapModel = Pathfinder\AbstractPathfinderModel::getNew('MapModel'); foreach($disabledMaps as $data){ $mapModel->getById( (int)$data['id'], 3, false ); if( !$mapModel->dry() ){ @@ -92,8 +91,7 @@ function deleteEolConnections(\Base $f3){ $eolExpire = (int)$f3->get('PATHFINDER.CACHE.EXPIRE_CONNECTIONS_EOL'); if($eolExpire > 0){ - $pfDB = DB\Database::instance()->getDB('PF'); - if($pfDB){ + if($pfDB = $f3->DB->getDB('PF')){ $sql = "SELECT `con`.`id` FROM @@ -112,9 +110,9 @@ function deleteEolConnections(\Base $f3){ if($connectionsData){ /** - * @var $connection Model\ConnectionModel + * @var $connection Pathfinder\ConnectionModel */ - $connection = Model\BasicModel::getNew('ConnectionModel'); + $connection = Pathfinder\AbstractPathfinderModel::getNew('ConnectionModel'); foreach($connectionsData as $data){ $connection->getById( (int)$data['id'] ); if( !$connection->dry() ){ @@ -137,8 +135,7 @@ function deleteExpiredConnections(\Base $f3){ $whExpire = (int)$f3->get('PATHFINDER.CACHE.EXPIRE_CONNECTIONS_WH'); if($whExpire > 0){ - $pfDB = DB\Database::instance()->getDB('PF'); - if($pfDB){ + if($pfDB = $f3->DB->getDB('PF')){ $sql = "SELECT `con`.`id` FROM @@ -159,9 +156,9 @@ function deleteExpiredConnections(\Base $f3){ if($connectionsData){ /** - * @var $connection Model\ConnectionModel + * @var $connection Pathfinder\ConnectionModel */ - $connection = Model\BasicModel::getNew('ConnectionModel'); + $connection = Pathfinder\AbstractPathfinderModel::getNew('ConnectionModel'); foreach($connectionsData as $data){ $connection->getById( (int)$data['id'] ); if( !$connection->dry() ){ @@ -183,8 +180,7 @@ function deleteSignatures(\Base $f3){ $signatureExpire = (int)$f3->get('PATHFINDER.CACHE.EXPIRE_SIGNATURES'); if($signatureExpire > 0){ - $pfDB = DB\Database::instance()->getDB('PF'); - if($pfDB){ + if($pfDB = $f3->DB->getDB('PF')){ $sqlDeleteExpiredSignatures = "DELETE `sigs` FROM `system_signature` `sigs` INNER JOIN `system` ON diff --git a/app/main/cron/statisticsupdate.php b/app/main/cron/statisticsupdate.php index ac9f78ca7..76bc93e92 100644 --- a/app/main/cron/statisticsupdate.php +++ b/app/main/cron/statisticsupdate.php @@ -7,7 +7,6 @@ */ namespace cron; -use DB; class StatisticsUpdate extends AbstractCron { @@ -26,7 +25,7 @@ function deleteStatisticsData(\Base $f3){ $currentWeek = (int)date('W'); $expiredYear = $currentYear - 1; - $pfDB = DB\Database::instance()->getDB('PF'); + $pfDB = $f3->DB->getDB('PF'); $queryData = [ 'yearWeekEnd' => strval($expiredYear) . str_pad($currentWeek, 2, 0, STR_PAD_LEFT) diff --git a/app/main/cron/universe.php b/app/main/cron/universe.php index dda1c05f0..b39d06a75 100644 --- a/app/main/cron/universe.php +++ b/app/main/cron/universe.php @@ -1,7 +1,7 @@ echoLoading(++$count, $importCount, $id); @@ -252,7 +252,7 @@ function setup(\Base $f3){ function updateUniverseSystems(\Base $f3){ $this->setMaxExecutionTime(); - $system = Model\Universe\BasicUniverseModel::getNew('SystemModel'); + $system = Model\Universe\AbstractUniverseModel::getNew('SystemModel'); $systems = $system->find( null, ['order' => 'updated', 'limit' => 2]); if($systems){ foreach ($systems as $system){ diff --git a/app/main/data/file/filehandler.php b/app/main/data/file/filehandler.php index 739a3d613..f1c6e75d1 100644 --- a/app/main/data/file/filehandler.php +++ b/app/main/data/file/filehandler.php @@ -1,7 +1,7 @@ NO database is used - * -> can be used to check if a certain DB exists without connecting to it directly - * @param string $dbKey - * @return SQL|null - */ - public function connectToServer(string $dbKey = 'PF') : ?SQL { - $dbConfig = Config::getDatabaseConfig($dbKey); - $dbConfig['DNS'] = str_replace(';dbname=', '', $dbConfig['DNS'] ); - $dbConfig['NAME'] = ''; - return call_user_func_array([$this, 'connect'], $dbConfig); - } - - /** - * tries to create a database if not exists - * -> DB user needs rights to create a DB - * @param string $dbKey - * @return SQL|null - */ - public function createDB(string $dbKey = 'PF') : ?SQL { - $db = null; - $dbConfig = Config::getDatabaseConfig($dbKey); - // remove database from $dsn (we want to crate it) - $newDbName = $dbConfig['NAME']; - if(!empty($newDbName)){ - $dbConfig['NAME'] = ''; - $dbConfig['DNS'] = str_replace(';dbname=', '', $dbConfig['DNS'] ); - - /** - * @var $db SQL|null - */ - $db = call_user_func_array([$this, 'connect'], $dbConfig); - - if(!is_null($db)){ - $schema = new SQL\Schema($db); - if(!in_array($newDbName, $schema->getDatabases())){ - $db->exec("CREATE DATABASE IF NOT EXISTS - `" . $newDbName . "` DEFAULT CHARACTER SET utf8 - COLLATE utf8_general_ci;"); - $db->exec("USE `" . $newDbName . "`"); - - // check if DB create was successful - $dbCheck = $db->exec("SELECT DATABASE()"); - if( - !empty($dbCheck[0]) && - !empty($checkDbName = reset($dbCheck[0])) && - $checkDbName == $newDbName - ){ - self::prepareDBConnection($db); - self::prepareDatabase($db); - } - } - } - } - - return $db; - } - - /** - * get database - * @param string $dbKey - * @return SQL|null - */ - public function getDB(string $dbKey = 'PF') : ?SQL { - $f3 = \Base::instance(); - // "Hive" Key for DB object cache - $dbHiveKey = $this->getDbHiveKey($dbKey); - if( !$f3->exists($dbHiveKey, $db) ){ - $dbConfig = Config::getDatabaseConfig($dbKey); - /** - * @var $db SQL|null - */ - $db = call_user_func_array([$this, 'connect'], $dbConfig); - if(!is_null($db)){ - self::prepareDBConnection($db); - $f3->set($dbHiveKey, $db); - } - } - - return $db; - } - - /** - * get a unique hive key for each DB connection - * @param $dbKey - * @return string - */ - protected function getDbHiveKey(string $dbKey) : string { - return 'DB_' . $dbKey; - } - - /** - * connect to a database - * @param string $dns - * @param string $name - * @param string $user - * @param string $password - * @param string $alias - * @return SQL|null - */ - protected function connect(string $dns, string $name, string $user, string $password, string $alias) : ?SQL { - $db = null; - $f3 = \Base::instance(); - - $options = [ - \PDO::MYSQL_ATTR_COMPRESS => true, - \PDO::ATTR_TIMEOUT => \Base::instance()->get('REQUIREMENTS.MYSQL.PDO_TIMEOUT'), - ]; - - // set ERRMODE depending on pathfinders global DEBUG level - if($f3->get('DEBUG') >= 1){ - $options[\PDO::ATTR_ERRMODE] = \PDO::ERRMODE_WARNING; - }else{ - $options[\PDO::ATTR_ERRMODE] = \PDO::ERRMODE_EXCEPTION; - } - - try { - $db = new SQL( - $dns . $name, - $user, - $password, - $options - ); - }catch(\PDOException $e){ - $this->pushError($alias, $e); - if(!$this->isSilent()){ - self::getLogger()->write($e); - } - } - - return $db; - } - - /** - * get all table names from a DB - * @param string $dbKey - * @return array|bool - */ - public function getTables(string $dbKey = 'PF'){ - $schema = new SQL\Schema( $this->getDB($dbKey) ); - return $schema->getTables(); - } - - /** - * checks whether a table exists on a DB or not - * @param string $table - * @param string $dbKey - * @return bool - */ - public function tableExists(string $table, string $dbKey = 'PF') : bool { - $tableNames = $this->getTables($dbKey); - return in_array($table, $tableNames); - } - - /** - * get current row (data) count for an existing table - * -> returns 0 if table not exists or empty - * @param string $table - * @param string $dbKey - * @return int - */ - public function getRowCount(string $table, string $dbKey = 'PF') : int { - $count = 0; - if( $this->tableExists($table, $dbKey) ){ - $db = $this->getDB($dbKey); - $countRes = $db->exec("SELECT COUNT(*) `num` FROM " . $db->quotekey($table)); - if(isset($countRes[0]['num'])){ - $count = (int)$countRes[0]['num']; - } - } - return $count; - } - - /** - * @return bool - */ - public function isSilent() : bool { - return $this->silent; - } - - /** - * set "silent" mode (no error logging) - * -> optional clear $this->errors - * @param bool $silent - * @param bool $clearErrors - */ - public function setSilent(bool $silent, bool $clearErrors = false){ - $this->silent = $silent; - if($clearErrors){ - $this->errors = []; - } - } - - /** - * push new Exception into static error history - * @param string $alias - * @param \PDOException $e - */ - protected function pushError(string $alias, \PDOException $e){ - if(!is_array($this->errors[$alias])){ - $this->errors[$alias] = []; - } - - // prevent adding same errors twice - if(!empty($this->errors[$alias])){ - $lastError = array_values($this->errors[$alias])[0]; - if($lastError->getMessage() === $e->getMessage()){ - return; - } - } - - array_unshift($this->errors[$alias], $e); - if(count($this->errors[$alias]) > 5){ - $this->errors[$alias] = array_pop($this->errors[$alias]); - } - } - - /** - * get last recent Exceptions from error history - * @param string $alias - * @param int $limit - * @return \PDOException[] - */ - public function getErrors(string $alias, int $limit = 1){ - return array_slice((array)$this->errors[$alias] , 0, $limit); - } - - /** - * prepare current DB - * -> set session connection variables - * @param SQL $db - */ - public static function prepareDBConnection(SQL &$db){ - // set DB timezone to UTC +00:00 (eve server time) - // set default storage engine - $db->exec([ - 'SET @@session.time_zone = :time_zone', - 'SET @@session.default_storage_engine = :storage_engine' - ], [ - [':time_zone' => '+00:00'], - [':storage_engine' => self::getRequiredMySqlVariables('DEFAULT_STORAGE_ENGINE')] - ] - ); - } - - /** - * set some default config for current DB - * @param SQL $db - */ - public static function prepareDatabase(SQL &$db){ - if($db->name()){ - // set/change default "character set" and "collation" - $db->exec('ALTER DATABASE ' . $db->quotekey($db->name()) - . ' CHARACTER SET ' . self::getRequiredMySqlVariables('CHARACTER_SET_DATABASE') - . ' COLLATE ' . self::getRequiredMySqlVariables('COLLATION_DATABASE') - ); - } - } - - /** - * get required MySQL variable value - * @param string $key - * @return string|null - */ - public static function getRequiredMySqlVariables(string $key) : ?string { - \Base::instance()->exists('REQUIREMENTS[MYSQL][VARS][' . $key . ']', $data); - return $data; - } - - /** - * get logger for DB logging - * @return \Log - */ - static function getLogger() : \Log { - return LogController::getLogger('ERROR'); - } -} \ No newline at end of file diff --git a/app/main/db/sql/mysql/tablemodifier.php b/app/main/db/sql/mysql/tablemodifier.php index 0afa57f0d..b28b62f4f 100644 --- a/app/main/db/sql/mysql/tablemodifier.php +++ b/app/main/db/sql/mysql/tablemodifier.php @@ -23,7 +23,7 @@ class TableModifier extends SQL\TableModifier { /** * return table foreign key constraints as assoc array * -> if §constraint is passed, constraints are limited to that column - * @param null| \DB\SQL\MySQL\Constraint $constraint + * @param null| SQL\MySQL\Constraint $constraint * @return Constraint[] */ public function listConstraint($constraint = null){ @@ -65,7 +65,7 @@ public function listConstraint($constraint = null){ /** * checks whether a constraint name exists or not * -> does not check constraint params - * @param \DB\SQL\MySQL\Constraint $constraint + * @param SQL\MySQL\Constraint $constraint * @return bool */ public function constraintExists($constraint){ @@ -75,7 +75,7 @@ public function constraintExists($constraint){ /** * drop foreign key constraint - * @param \DB\SQL\MySQL\Constraint $constraint + * @param SQL\MySQL\Constraint $constraint */ public function dropConstraint($constraint){ if($constraint->isValid()){ @@ -88,7 +88,7 @@ public function dropConstraint($constraint){ /** * Add/Update foreign key constraint - * @param \DB\SQL\MySQL\Constraint $constraint + * @param SQL\MySQL\Constraint $constraint */ public function addConstraint($constraint){ @@ -147,7 +147,7 @@ public function constraintExists(Constraint $constraint){ * $constraintData['on-update'] => ON UPDATE action (optional) default: see \DB\SQL\MySQL\Constraint const * * @param array $constraintData - * @return \DB\SQL\MySQL\Constraint + * @return SQL\MySQL\Constraint */ public function newConstraint($constraintData){ diff --git a/app/main/exception/configexception.php b/app/main/exception/configexception.php index bfaa34054..9f2bb033f 100644 --- a/app/main/exception/configexception.php +++ b/app/main/exception/configexception.php @@ -1,7 +1,7 @@ 'Monolog\Handler\StreamHandler', 'mail' => 'Monolog\Handler\SwiftMailerHandler', + 'socket' => 'lib\logging\handler\SocketHandler', 'slackMap' => 'lib\logging\handler\SlackMapWebhookHandler', 'slackRally' => 'lib\logging\handler\SlackRallyWebhookHandler', 'discordMap' => 'lib\logging\handler\DiscordMapWebhookHandler', - 'discordRally' => 'lib\logging\handler\DiscordRallyWebhookHandler', - 'zmq' => 'lib\logging\handler\ZMQHandler' + 'discordRally' => 'lib\logging\handler\DiscordRallyWebhookHandler' ]; const PROCESSOR = [ diff --git a/app/main/lib/api/AbstractClient.php b/app/main/lib/api/AbstractClient.php index 69978eca2..4b8d9756b 100644 --- a/app/main/lib/api/AbstractClient.php +++ b/app/main/lib/api/AbstractClient.php @@ -37,6 +37,9 @@ */ abstract class AbstractClient extends \Prefab { + /** + * error msg for missing Composer package + */ const ERROR_CLIENT_INVALID = "HTTP API client not found → Check installed Composer packages"; /** @@ -107,7 +110,7 @@ protected function getCachePool(\Base $f3) : \Closure { return function() use ($poolConfig) : ?CacheItemPoolInterface { // an active CachePool should be re-used - // -> no need for e.g. a new Redis->connect() + // -> no need for e.g. a new Redis->pconnect() // and/or re-init when it is used the next time if(!is_null($this->cachePool)){ return $this->cachePool; @@ -122,7 +125,7 @@ class_exists(RedisCachePool::class) ){ $client = new \Redis(); if( - $client->connect( + $client->pconnect( $poolConfig['host'], $poolConfig['port'], Config::REDIS_OPT_TIMEOUT, @@ -131,6 +134,12 @@ class_exists(RedisCachePool::class) Config::REDIS_OPT_READ_TIMEOUT ) ){ + + if(isset($poolConfig['tag'])){ + $name = 'pathfinder|php|tag:' . strtolower($poolConfig['tag']) . '|pid:' . getmypid(); + $client->client('setname', $name); + } + if(isset($poolConfig['db'])){ $client->select($poolConfig['db']); } @@ -141,6 +150,8 @@ class_exists(RedisCachePool::class) // This helps to separate keys by a namespace // @see http://www.php-cache.com/en/latest/ $this->cachePool = new NamespacedCachePool($poolRedis, static::CLIENT_NAME); + + register_shutdown_function([$this,'unloadCache'], $client); } } @@ -150,11 +161,10 @@ class_exists(RedisCachePool::class) in_array($poolConfig['type'], ['redis', 'folder']) && class_exists(FilesystemCachePool::class) ){ - $filesystemAdapter = new Local('./'); + $filesystemAdapter = new Local(\Base::instance()->get('ROOT')); $filesystem = new Filesystem($filesystemAdapter); + $poolFilesystem = new FilesystemCachePool($filesystem, $poolConfig['folder']); - $poolFilesystem = new FilesystemCachePool($filesystem); - $poolFilesystem->setFolder($poolConfig['folder']); $this->cachePool = $poolFilesystem; } @@ -177,7 +187,8 @@ class_exists(ArrayCachePool::class) * @return array */ protected function getCachePoolConfig(\Base $f3) : array { - $dsn = (string)$f3->get('API_CACHE'); + $tag = 'API_CACHE'; + $dsn = (string)$f3->get($tag); // fallback $conf = ['type' => 'array']; @@ -193,6 +204,10 @@ protected function getCachePoolConfig(\Base $f3) : array { // redis or filesystem -> overwrites $conf Config::parseDSN($dsn, $conf); + // tag name is used as alias name e.g. for debugging + // -> e.g. for Redis https://redis.io/commands/client-setname + $conf['tag'] = $tag; + return $conf; } @@ -264,6 +279,16 @@ protected function getStreamConfig(string $logFileName, bool $abs = false) : \st return $config; } + /** + * unload function + * @param \Redis $client + */ + public function unloadCache(\Redis $client){ + if($client->isConnected()){ + $client->close(); + } + } + /** * call request API data * @param string $name @@ -290,7 +315,7 @@ public function __call(string $name, array $arguments = []){ /** * init web client on __invoke() * -> no need to init client on __construct() - * maybe it is nerer used... + * maybe it is never used... * @return AbstractClient */ function __invoke() : self { @@ -325,7 +350,7 @@ function __invoke() : self { //$client->setProxy('127.0.0.1:8888'); // disable SSL certificate verification -> allow proxy to decode(view) request - $client->setVerify(false); + //$client->setVerify(false); //$client->setDebugRequests(true); diff --git a/app/main/lib/config.php b/app/main/lib/config.php index 42a44be9f..d1a7698a1 100644 --- a/app/main/lib/config.php +++ b/app/main/lib/config.php @@ -9,17 +9,44 @@ namespace lib; +use lib\db\Pool; use lib\api\CcpClient; use lib\api\GitHubClient; use lib\api\SsoClient; +use lib\socket\AbstractSocket; +use lib\socket\SocketInterface; +use lib\socket\TcpSocket; class Config extends \Prefab { + /** + * prefix for custom Pathfinder env vars + */ const PREFIX_KEY = 'PF'; + + /** + * delimiter for custom Pathfinder env vars + */ const ARRAY_DELIMITER = '-'; + + /** + * Hive key for all Pathfinder config vars (*.ini files) + */ const HIVE_KEY_PATHFINDER = 'PATHFINDER'; + + /** + * Hive key for all environment config vars (*.ini files) + */ const HIVE_KEY_ENVIRONMENT = 'ENVIRONMENT'; + + /** + * Hive key for Socket validation check + */ const CACHE_KEY_SOCKET_VALID = 'CACHED_SOCKET_VALID'; + + /** + * Cache time for Socket validation check + */ const CACHE_TTL_SOCKET_VALID = 60; // ================================================================================================================ @@ -55,7 +82,14 @@ class Config extends \Prefab { */ const DOWNTIME_BUFFER = 1; + /** + * error message for missing Composer dependency class + */ const ERROR_CLASS_NOT_EXISTS_COMPOSER = 'Class "%s" not found. → Check installed Composer packages'; + + /** + * error message for missing Composer dependency method + */ const ERROR_METHOD_NOT_EXISTS_COMPOSER = 'Method "%s()" not found in class "%s". → Check installed Composer packages'; @@ -65,6 +99,9 @@ class Config extends \Prefab { */ const ARRAY_KEYS = ['CCP_ESI_SCOPES', 'CCP_ESI_SCOPES_ADMIN']; + /** + * custom HTTP status codes + */ const HTTP_422='Unprocessable Entity'; @@ -74,6 +111,10 @@ class Config extends \Prefab { */ private $serverConfigData = []; + /** + * Config constructor. + * @param \Base $f3 + */ public function __construct(\Base $f3){ // set server data // -> CGI params (Nginx) @@ -96,10 +137,27 @@ public function __construct(\Base $f3){ return new \DateTime($time, $timeZone); }); - // lazy init Web Api clients + // database connection pool ----------------------------------------------------------------------------------- + $f3->set(Pool::POOL_NAME, Pool::instance( + function(string $alias) use ($f3) : array { + // get DB config by alias for new connections + return self::getDatabaseConfig($f3, $alias); + }, + function(string $schema) use ($f3) : array { + // get DB requirement vars from requirements.ini + return self::getRequiredDbVars($f3, $schema); + } + )); + + // lazy init Web Api clients ---------------------------------------------------------------------------------- $f3->set(SsoClient::CLIENT_NAME, SsoClient::instance()); $f3->set(CcpClient::CLIENT_NAME, CcpClient::instance()); $f3->set(GitHubClient::CLIENT_NAME, GitHubClient::instance()); + + // Socket connectors ------------------------------------------------------------------------------------------ + $f3->set(TcpSocket::SOCKET_NAME, function(array $options = ['timeout' => 1]) : SocketInterface { + return AbstractSocket::factory(TcpSocket::class, self::getSocketUri(), $options); + }); } /** @@ -176,7 +234,6 @@ protected function setAllEnvironmentData(\Base $f3){ $f3->set(self::HIVE_KEY_ENVIRONMENT, $environmentData); } - return $environmentData; } @@ -193,13 +250,13 @@ protected function setAllEnvironmentData(\Base $f3){ protected function setServerData(){ $data = []; foreach($_SERVER as $key => $value){ - if( strpos($key, self::PREFIX_KEY . self::ARRAY_DELIMITER) === 0 ){ + if(strpos($key, self::PREFIX_KEY . self::ARRAY_DELIMITER) === 0){ $path = explode( self::ARRAY_DELIMITER, $key); // remove prefix array_shift($path); $tmp = &$data; - foreach ($path as $segment) { + foreach($path as $segment){ $tmp[$segment] = (array)$tmp[$segment]; $tmp = &$tmp[$segment]; } @@ -226,32 +283,66 @@ static function getEnvironmentData($key){ /** * get database config values - * @param string $dbKey + * @param \Base $f3 + * @param string $alias * @return array */ - static function getDatabaseConfig(string $dbKey = 'PF'){ - $dbKey = strtoupper($dbKey); - return [ - 'DNS' => self::getEnvironmentData('DB_' . $dbKey . '_DNS'), - 'NAME' => self::getEnvironmentData('DB_' . $dbKey . '_NAME'), - 'USER' => self::getEnvironmentData('DB_' . $dbKey . '_USER'), - 'PASS' => self::getEnvironmentData('DB_' . $dbKey . '_PASS'), - 'ALIAS' => $dbKey + static function getDatabaseConfig(\Base $f3, string $alias) : array { + $alias = strtoupper($alias); + + $config = [ + 'ALIAS' => $alias, + 'SCHEME' => 'mysql', + 'HOST' => 'localhost', + 'PORT' => 3306, + 'SOCKET' => null, + 'NAME' => self::getEnvironmentData('DB_' . $alias . '_NAME'), + 'USER' => self::getEnvironmentData('DB_' . $alias . '_USER'), + 'PASS' => self::getEnvironmentData('DB_' . $alias . '_PASS') + ]; + + $pdoReg = '/^(?[[:alpha:]]+):((host=(?[a-zA-Z0-9\.]*))|(unix_socket=(?[a-zA-Z0-9\/]*\.sock)))((;dbname=(?\w*))|(;port=(?\d*))){0,2}/'; + if(preg_match($pdoReg, self::getEnvironmentData('DB_' . $alias . '_DNS'), $matches)){ + // remove unnamed matches + $matches = array_intersect_key($matches, $config); + // remove empty matches + $matches = array_filter($matches); + // merge matches with default config + $config = array_merge($config, $matches); + } + + // connect options -------------------------------------------------------------------------------------------- + $options = [ + \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, + \PDO::ATTR_TIMEOUT => $f3->get('REQUIREMENTS.MYSQL.PDO_TIMEOUT') ]; + + if($config['SCHEME'] == 'mysql'){ + $options[\PDO::MYSQL_ATTR_COMPRESS] = true; + $options[\PDO::MYSQL_ATTR_INIT_COMMAND] = implode(',', [ + "SET NAMES " . strtolower(str_replace('-','', $f3->ENCODING)), + "@@session.time_zone = '+00:00'", + "@@session.default_storage_engine = " . self::getRequiredDbVars($f3, $config['SCHEME'])['DEFAULT_STORAGE_ENGINE'] + ]); + } + + if(self::getPathfinderData('experiments.persistent_db_connections')){ + $options[\PDO::ATTR_PERSISTENT] = true; + } + + $config['OPTIONS'] = $options; + + return $config; } /** - * get DB config value from PDO connect $dns string - * @param string $dns - * @param string $key - * @return bool + * get required MySQL variables from requirements.ini + * @param \Base $f3 + * @param string $schema + * @return array */ - static function getDatabaseDNSValue(string $dns, string $key = 'dbname'){ - $value = false; - if(preg_match('/' . preg_quote($key, '/') . '=([[:alnum:]]+)/is', $dns, $parts)){ - $value = $parts[1]; - } - return $value; + static function getRequiredDbVars(\Base $f3, string $schema) : array { + return $f3->exists('REQUIREMENTS[' . strtoupper($schema) . '][VARS]', $vars) ? $vars : []; } /** @@ -336,30 +427,21 @@ static function getMessageFromHTTPStatus(int $status): string { return $message; } - /** - * check whether this installation fulfills all requirements - * -> check for ZMQ PHP extension and installed ZQM version - * -> this does NOT check versions! -> those can be verified on /setup page - * @return bool - */ - static function checkSocketRequirements(): bool { - return extension_loaded('zmq') && class_exists('ZMQ'); - } - /** * use this function to "validate" the socket connection. * The result will be CACHED for a few seconds! * This function is intended to pre-check a Socket connection if it MIGHT exists. * No data will be send to the Socket, this function just validates if a socket is available * -> see pingDomain() + * @param string $uri * @return bool */ - static function validSocketConnect(): bool{ + static function validSocketConnect(string $uri) : bool{ $valid = false; $f3 = \Base::instance(); if( !$f3->exists(self::CACHE_KEY_SOCKET_VALID, $valid) ){ - if(self::checkSocketRequirements() && ($socketUrl = self::getSocketUri()) ){ + if( $socketUrl = self::getSocketUri() ){ // get socket URI parts -> not elegant... $domain = parse_url( $socketUrl, PHP_URL_SCHEME) . '://' . parse_url( $socketUrl, PHP_URL_HOST); $port = parse_url( $socketUrl, PHP_URL_PORT); @@ -390,17 +472,17 @@ static function validSocketConnect(): bool{ * @param int $timeout * @return int */ - static function pingDomain(string $domain, int $port, $timeout = 1): int { - $starttime = microtime(true); + static function pingDomain(string $domain, int $port, $timeout = 1) : int { + $startTime = microtime(true); $file = @fsockopen ($domain, $port, $errno, $errstr, $timeout); - $stoptime = microtime(true); + $stopTime = microtime(true); if (!$file){ // Site is down $status = -1; }else { fclose($file); - $status = ($stoptime - $starttime) * 1000; + $status = ($stopTime - $startTime) * 1000; $status = floor($status); } return $status; @@ -516,4 +598,22 @@ static function inDownTimeRange(\DateTime $dateCheck = null) : bool { return $inRange; } + /** + * format timeInterval in seconds into human readable string + * @param int $seconds + * @return string + * @throws \Exception + */ + static function formatTimeInterval(int $seconds = 0) : string { + $dtF = new \DateTime('@0'); + $dtT = new \DateTime("@" . $seconds); + $diff = $dtF->diff($dtT); + + $format = ($d = $diff->format('%d')) ? $d . 'd ' : ''; + $format .= ($h = $diff->format('%h')) ? $h . 'h ' : ''; + $format .= ($i = $diff->format('%i')) ? $i . 'm ' : ''; + $format .= ($s = $diff->format('%s')) ? $s . 's' : ''; + return $format; + } + } \ No newline at end of file diff --git a/app/main/lib/db/Pool.php b/app/main/lib/db/Pool.php new file mode 100644 index 000000000..a3cbd545e --- /dev/null +++ b/app/main/lib/db/Pool.php @@ -0,0 +1,236 @@ +getConfig = $getConfig; + $this->requiredVars = $requiredVars; + } + + /** + * set "silent" mode (no error logging) + * -> optional clear $this->errors + * @param bool $silent + * @param bool $clearErrors + */ + public function setSilent(bool $silent, bool $clearErrors = false){ + $this->silent = $silent; + if($clearErrors){ + $this->errors = []; + } + } + + /** + * @return bool + */ + public function isSilent() : bool { + return $this->silent; + } + + /** + * connect to the DB server itself -> NO database is used + * -> can be used to check if a certain DB exists without connecting to it directly + * @param string $alias + * @return SQL|null + */ + public function connectToServer(string $alias) : ?SQL { + $config = ($this->getConfig)($alias); + $config['NAME'] = ''; + return $this->newDB($config); + } + + /** + * tries to create a database if not exists + * -> DB user needs rights to create a DB + * @param string $alias + * @return SQL|null + */ + public function createDB(string $alias) : ?SQL { + $db = null; + $config = ($this->getConfig)($alias); + // remove database from $dsn (we want to crate it) + $newDbName = $config['NAME']; + if(!empty($newDbName)){ + $config['NAME'] = ''; + + $db = $this->newDB($config); + if(!is_null($db)){ + $schema = new Schema($db); + if(!in_array($newDbName, $schema->getDatabases())){ + $db->exec("CREATE DATABASE IF NOT EXISTS + `" . $newDbName . "` DEFAULT CHARACTER SET utf8 + COLLATE utf8_general_ci;"); + $db->exec("USE `" . $newDbName . "`"); + + // check if DB create was successful + $dbCheck = $db->exec("SELECT DATABASE()"); + if( + !empty($dbCheck[0]) && + !empty($checkDbName = reset($dbCheck[0])) && + $checkDbName == $newDbName + ){ + // prepare new created DB + $requiredVars = ($this->requiredVars)($db->driver()); + $db->prepareDatabase($requiredVars['CHARACTER_SET_DATABASE'], $requiredVars['COLLATION_DATABASE']); + } + } + } + } + + return $db; + } + + /** + * get active connection from store or init new connection + * @param string $alias + * @return SQL|null + */ + public function getDB(string $alias) : ?SQL { + if(!isset($this->connectionStore[$alias])){ + $db = $this->newDB(($this->getConfig)($alias)); + if(!is_null($db)){ + $this->connectionStore[$alias] = $db; + } + return $db; + }else{ + return $this->connectionStore[$alias]; + } + } + + /** + * get last recent Exceptions from error history + * @param string $alias + * @param int $limit + * @return \Exception[] + */ + public function getErrors(string $alias, int $limit = 1) : array { + return array_slice((array)$this->errors[$alias] , 0, $limit); + } + + /** + * build PDO DNS connect string from DB config array + * -> Hint: dbName is not part of the DNS we need -> passed as extra parameter + * @param array $config + * @return string + */ + protected function buildDnsFromConfig(array $config) : string { + $dns = $config['SCHEME'] . ':'; + $dns .= $config['SOCKET'] ? 'unix_socket=' . $config['SOCKET'] : 'host=' . $config['HOST']; + $dns .= $config['PORT'] && !$config['SOCKET'] ? ';port=' . $config['PORT'] : ''; + $dns .= $config['NAME'] ? ';dbname=' . $config['NAME'] : ''; + return $dns; + } + + /** + * @param array $config + * @return SQL|null + */ + protected function newDB(array $config) : ?SQL { + $db = null; + + if($config['SCHEME'] == 'mysql'){ + try{ + $db = new SQL($this->buildDnsFromConfig($config), $config['USER'], $config['PASS'], $config['OPTIONS']); + }catch(\PDOException $e){ + $this->pushError($config['ALIAS'], $e); + + if(!$this->isSilent()){ + self::getLogger()->write($e); + } + } + }else{ + // unsupported DB type + $this->pushError($config['ALIAS'], new ConfigException( + sprintf(self::ERROR_SCHEME, $config['SCHEME'], $config['ALIAS'])) + ); + } + + return $db; + } + + /** + * push new Exception into static error history + * @param string $alias + * @param \Exception $e + */ + protected function pushError(string $alias, \Exception $e){ + if(!is_array($this->errors[$alias])){ + $this->errors[$alias] = []; + } + + // prevent adding same errors twice + if(!empty($this->errors[$alias])){ + /** + * @var $lastError \Exception + */ + $lastError = array_values($this->errors[$alias])[0]; + if($lastError->getMessage() === $e->getMessage()){ + return; + } + } + + array_unshift($this->errors[$alias], $e); + if(count($this->errors[$alias]) > 5){ + $this->errors[$alias] = array_pop($this->errors[$alias]); + } + } + + /** + * @return \Log + */ + static function getLogger() : \Log { + return LogController::getLogger('ERROR'); + } +} \ No newline at end of file diff --git a/app/main/lib/db/SQL.php b/app/main/lib/db/SQL.php new file mode 100644 index 000000000..dc56edba9 --- /dev/null +++ b/app/main/lib/db/SQL.php @@ -0,0 +1,79 @@ +dsn; + } + + /** + * get all table names + * @return array|bool + */ + public function getTables(){ + $schema = new Schema($this); + return $schema->getTables(); + } + + /** + * checks whether a table exists or not + * @param string $table + * @return bool + */ + public function tableExists(string $table) : bool { + return in_array($table, $this->getTables()); + } + + /** + * get current row (data) count for an existing table + * -> returns 0 if table not exists or empty + * @param string $table + * @return int + */ + public function getRowCount(string $table) : int { + $count = 0; + if($this->tableExists($table)){ + $countRes = $this->exec("SELECT COUNT(*) `num` FROM " . $this->quotekey($table)); + if(isset($countRes[0]['num'])){ + $count = (int)$countRes[0]['num']; + } + } + return $count; + } + + /** + * set some default config for this DB + * @param string $characterSetDatabase + * @param string $collationDatabase + */ + public function prepareDatabase(string $characterSetDatabase, string $collationDatabase){ + if($this->name() && $characterSetDatabase && $collationDatabase){ + // set/change default "character set" and "collation" + $this->exec('ALTER DATABASE ' . $this->quotekey($this->name()) + . ' CHARACTER SET ' . $characterSetDatabase + . ' COLLATE ' . $collationDatabase + ); + } + } +} \ No newline at end of file diff --git a/app/main/lib/logging/AbstractChannelLog.php b/app/main/lib/logging/AbstractChannelLog.php index 0bd1803aa..3da2b9563 100644 --- a/app/main/lib/logging/AbstractChannelLog.php +++ b/app/main/lib/logging/AbstractChannelLog.php @@ -1,7 +1,7 @@ setChannelData($channelData); diff --git a/app/main/lib/logging/AbstractCharacterLog.php b/app/main/lib/logging/AbstractCharacterLog.php index a40830700..17c8bb6f0 100644 --- a/app/main/lib/logging/AbstractCharacterLog.php +++ b/app/main/lib/logging/AbstractCharacterLog.php @@ -1,7 +1,7 @@ data = $data; return $this; } @@ -185,7 +185,7 @@ public function setData(array $data): LogInterface{ * @param array $data * @return LogInterface */ - public function setTempData(array $data): LogInterface{ + public function setTempData(array $data) : LogInterface{ $this->tmpData = $data; return $this; } @@ -198,7 +198,7 @@ public function setTempData(array $data): LogInterface{ * @param \stdClass|null $handlerParams * @return LogInterface */ - public function addHandler(string $handlerKey, string $formatterKey = null, \stdClass $handlerParams = null): LogInterface { + public function addHandler(string $handlerKey, string $formatterKey = null, \stdClass $handlerParams = null) : LogInterface { if(!$this->hasHandlerKey($handlerKey)){ $this->handlerConfig[$handlerKey] = $formatterKey; // add more configuration params for the new handler @@ -244,10 +244,10 @@ public function getHandlerParams(string $handlerKey) : array { switch($handlerKey){ case 'stream': $params = $this->getHandlerParamsStream(); break; - case 'zmq': $params = $this->getHandlerParamsZMQ(); - break; case 'mail': $params = $this->getHandlerParamsMail(); break; + case 'socket': $params = $this->getHandlerParamsSocket(); + break; case 'slackMap': case 'slackRally': case 'discordMap': @@ -267,69 +267,69 @@ public function getHandlerParams(string $handlerKey) : array { /** * @return array */ - public function getHandlerParamsConfig(): array { + public function getHandlerParamsConfig() : array { return $this->handlerParamsConfig; } /** * @return array */ - public function getProcessorConfig(): array { + public function getProcessorConfig() : array { return $this->processorConfig; } /** * @return string */ - public function getMessage(): string{ + public function getMessage() : string{ return $this->message; } /** * @return string */ - public function getAction(): string{ + public function getAction() : string{ return $this->action; } /** * @return string */ - public function getChannelType(): string{ + public function getChannelType() : string{ return $this->channelType; } /** * @return string */ - public function getChannelName(): string{ + public function getChannelName() : string{ return $this->getChannelType(); } /** * @return string */ - public function getLevel(): string{ + public function getLevel() : string{ return $this->level; } /** * @return string */ - public function getTag(): string{ + public function getTag() : string{ return $this->tag; } /** * @return array */ - public function getData(): array{ + public function getData() : array{ return $this->data; } /** * @return array */ - public function getContext(): array{ + public function getContext() : array{ $context = [ 'data' => $this->getData(), 'tag' => $this->getTag() @@ -344,14 +344,14 @@ public function getContext(): array{ /** * @return array */ - protected function getTempData(): array { + protected function getTempData() : array { return $this->tmpData; } /** * @return array */ - public function getHandlerGroups(): array{ + public function getHandlerGroups() : array{ return $this->handlerGroups; } @@ -359,7 +359,7 @@ public function getHandlerGroups(): array{ * get unique hash for this kind of logs (channel) and same $handlerGroups * @return string */ - public function getGroupHash(): string { + public function getGroupHash() : string { $groupName = $this->getChannelName(); if($this->isGrouped()){ $groupName .= '_' . implode('_', $this->getHandlerGroups()); @@ -372,7 +372,7 @@ public function getGroupHash(): string { * @param string $handlerKey * @return bool */ - public function hasHandlerKey(string $handlerKey): bool{ + public function hasHandlerKey(string $handlerKey) : bool{ return array_key_exists($handlerKey, $this->handlerConfig); } @@ -380,21 +380,21 @@ public function hasHandlerKey(string $handlerKey): bool{ * @param string $handlerKey * @return bool */ - public function hasHandlerGroupKey(string $handlerKey): bool{ + public function hasHandlerGroupKey(string $handlerKey) : bool{ return in_array($handlerKey, $this->getHandlerGroups()); } /** * @return bool */ - public function hasBuffer(): bool{ + public function hasBuffer() : bool{ return $this->buffer; } /** * @return bool */ - public function isGrouped(): bool{ + public function isGrouped() : bool{ return !empty($this->getHandlerGroups()); } @@ -416,42 +416,17 @@ public function removeHandlerGroup(string $handlerKey){ } // Handler parameters for Monolog\Handler\AbstractHandler --------------------------------------------------------- - protected function getHandlerParamsStream(): array{ - $params = []; - if( !empty($conf = $this->handlerParamsConfig['stream']) ){ - $params[] = $conf->stream; - $params[] = Logger::toMonologLevel($this->getLevel()); // min level that is handled; - $params[] = true; // bubble - $params[] = 0666; // permissions (default 644) - } - - return $params; - } /** - * get __construct() parameters for ZMQHandler() call * @return array - * @throws \ZMQSocketException */ - protected function getHandlerParamsZMQ(): array { + protected function getHandlerParamsStream() : array{ $params = []; - if( !empty($conf = $this->handlerParamsConfig['zmq']) ){ - // meta data (required by receiver socket) - $meta = [ - 'logType' => 'mapLog', - 'stream'=> $conf->streamConf->stream - ]; - - $context = new \ZMQContext(); - $pusher = $context->getSocket(\ZMQ::SOCKET_PUSH); - $pusher->connect($conf->uri); - - $params[] = $pusher; - $params[] = \ZMQ::MODE_DONTWAIT; - $params[] = false; // multipart - $params[] = Logger::toMonologLevel($this->getLevel()); // min level that is handled + if( !empty($conf = $this->handlerParamsConfig['stream']) ){ + $params[] = $conf->stream; + $params[] = Logger::toMonologLevel($this->getLevel()); // min level that is handled; $params[] = true; // bubble - $params[] = $meta; + $params[] = 0666; // permissions (default 644) } return $params; @@ -461,7 +436,7 @@ protected function getHandlerParamsZMQ(): array { * get __construct() parameters for SwiftMailerHandler() call * @return array */ - protected function getHandlerParamsMail(): array{ + protected function getHandlerParamsMail() : array { $params = []; if( !empty($conf = $this->handlerParamsConfig['mail']) ){ $transport = (new \Swift_SmtpTransport()) @@ -520,12 +495,34 @@ protected function getHandlerParamsMail(): array{ return $params; } + /** + * get __construct() parameters for SocketHandler() call + * @return array + */ + protected function getHandlerParamsSocket() : array { + $params = []; + if( !empty($conf = $this->handlerParamsConfig['socket']) ){ + // meta data (required by receiver socket) + $meta = [ + 'logType' => 'mapLog', + 'stream'=> $conf->streamConf->stream + ]; + + $params[] = $conf->dsn; + $params[] = Logger::toMonologLevel($this->getLevel()); + $params[] = true; + $params[] = $meta; + } + + return $params; + } + /** * get __construct() params for SlackWebhookHandler() call * @param string $handlerKey * @return array */ - protected function getHandlerParamsSlack(string $handlerKey): array { + protected function getHandlerParamsSlack(string $handlerKey) : array { $params = []; if( !empty($conf = $this->handlerParamsConfig[$handlerKey]) ){ $params[] = $conf->slackWebHookURL; diff --git a/app/main/lib/logging/DefaultLog.php b/app/main/lib/logging/DefaultLog.php index 2653b1262..885917d51 100644 --- a/app/main/lib/logging/DefaultLog.php +++ b/app/main/lib/logging/DefaultLog.php @@ -1,7 +1,7 @@ 'json', - //'zmq' => 'json', + //'stream' => 'json', + //'socket' => 'json', //'slackMap' => 'json' ]; @@ -61,21 +61,21 @@ public function getTagFromAction(){ /** * @return string */ - public function getChannelName(): string{ + public function getChannelName() : string { return $this->getChannelType() . '_' . $this->getChannelId(); } /** * @return string */ - public function getMessage() : string{ + public function getMessage() : string { return $this->getActionParts()[0] . " '{objName}'"; } /** * @return array */ - public function getData() : array{ + public function getData() : array { $data = parent::getData(); // add system, connection, signature data ------------------------------------------------- @@ -94,7 +94,7 @@ public function getData() : array{ * @param array $data * @return string */ - protected function formatData(array $data): string{ + protected function formatData(array $data) : string { $actionParts = $this->getActionParts(); $objectString = !empty($data['object']) ? "'" . $data['object']['objName'] . "'" . ' #' . $data['object']['objId'] : ''; $string = ucfirst($actionParts[1]) . 'd ' . $actionParts[0] . " " . $objectString; @@ -103,7 +103,7 @@ protected function formatData(array $data): string{ switch($actionParts[1]){ case 'create': case 'update': - $formatChanges = function(array $changes) use ( &$formatChanges ): string{ + $formatChanges = function(array $changes) use (&$formatChanges) : string { $string = ''; foreach($changes as $field => $value){ if(is_array($value)){ @@ -118,7 +118,7 @@ protected function formatData(array $data): string{ }elseif(empty($value)){ $formattedValue = "' '"; }elseif(is_string($value)){ - $formattedValue = "'" . $value . "'"; + $formattedValue = "'" . $this->f3->clean($value) . "'"; }else{ $formattedValue = (string)$value; } @@ -143,7 +143,7 @@ protected function formatData(array $data): string{ * split $action "CamelCase" wise * @return array */ - protected function getActionParts(): array{ + protected function getActionParts() : array { return array_map('strtolower', preg_split('/(?=[A-Z])/', $this->getAction())); } diff --git a/app/main/lib/logging/RallyLog.php b/app/main/lib/logging/RallyLog.php index bedb7b50d..986b359a5 100644 --- a/app/main/lib/logging/RallyLog.php +++ b/app/main/lib/logging/RallyLog.php @@ -1,7 +1,7 @@ metaData = $metaData; - parent::__construct($zmqSocket, $zmqMode, $multipart, $level, $bubble); + parent::__construct($connectionString, $level, $bubble); } /** @@ -38,7 +30,6 @@ public function __construct( * -> change data structure after processor() calls and before formatter() calls * @param array $record * @return bool - * @throws \Exception */ public function handle(array $record){ if (!$this->isHandling($record)) { @@ -61,5 +52,4 @@ public function handle(array $record){ return false === $this->bubble; } - } \ No newline at end of file diff --git a/app/main/lib/resource.php b/app/main/lib/resource.php index 1187f563b..3324a143b 100644 --- a/app/main/lib/resource.php +++ b/app/main/lib/resource.php @@ -1,7 +1,7 @@ The total timeout for a request is ($tll * $maxRetries) - * @var int - */ - protected $ttl = (self::DEFAULT_TTL_MAX / self::DEFAULT_RETRY_MAX); - - /** - * max retry count for message send - * @var int - */ - protected $maxRetries = self::DEFAULT_RETRY_MAX; - - public function __construct($uri, $ttl = self::DEFAULT_TTL_MAX, $maxRetries = self::DEFAULT_RETRY_MAX){ - $this->setTtl($ttl, $maxRetries); - $this->setSocketUri($uri); - } - - /** - * @param mixed $socketUri - */ - public function setSocketUri($socketUri){ - $this->socketUri = $socketUri; - } - - /** - * @param int $ttl - * @param int $maxRetries - */ - public function setTtl(int $ttl, int $maxRetries){ - if( - $ttl > 0 && - $maxRetries > 0 - ){ - $this->maxRetries = $maxRetries; - $this->ttl = round($ttl / $maxRetries); - } - } - - /** - * init new socket - */ - public function initSocket(){ - if(Config::checkSocketRequirements()){ - $context = new \ZMQContext(); - $this->socket = $context->getSocket(\ZMQ::SOCKET_PUSH); - } - } - - /** - * @param string $task - * @param string $load - * @return bool|string - * @throws \ZMQSocketException - */ - public function sendData(string $task, $load = ''){ - $response = false; - - $this->initSocket(); - - if( - !$this->socket || - !$this->socketUri - ){ - // Socket not active (e.g. URI missing) - return $response; - } - - // add task, and wrap data - $send = [ - 'task' => $task, - 'load' => $load - ]; - - $this->socket->connect($this->socketUri); - //$this->socket->send(json_encode($send), \ZMQ::MODE_DONTWAIT); - - $this->socket->send(json_encode($send)); - // $this->socket->disconnect($this->socketUri); - - $response = 'OK'; - - return $response; - } - - /** - * send data to socket and listen for response - * -> "Request" => "Response" setup - * @param $task - * @param $load - * @return bool|string - */ - /* - public function sendData($task, $load = ''){ - $response = false; - - $this->initSocket(); - - if( !$this->socket ){ - // Socket not active (e.g. URI missing) - return $response; - } - - // add task, and wrap data - $send = [ - 'task' => $task, - 'load' => $load - ]; - - $retriesLeft = $this->maxRetries; - // try sending data - while($retriesLeft){ - // Get list of connected endpoints - $endpoints = $this->socket->getEndpoints(); - if (in_array($this->socketUri, $endpoints['connect'])) { - // disconnect e.g. there was no proper response yet - - $this->socket->disconnect($this->socketUri); - // try new socket connection - $this->initSocket(); - } - - $this->socket->connect($this->socketUri); - $this->socket->send(json_encode($send)); - - $readable = []; - $writable = []; - - $poller = new \ZMQPoll(); - $poller->add($this->socket, \ZMQ::POLL_IN); - - $startTime = microtime(true); - // infinite loop until we get a proper answer - while(true){ - // Amount of events retrieved - $events = 0; - - try{ - // Poll until there is something to do - $events = $poller->poll($readable, $writable, $this->ttl); - $errors = $poller->getLastErrors(); - - if(count($errors) > 0){ - // log errors - foreach($errors as $error){ - LogController::getLogger('SOCKET_ERROR')->write(sprintf(self::ERROR_POLLING, $error)); - } - // break infinite loop - break; - } - }catch(\ZMQPollException $e){ - LogController::getLogger('SOCKET_ERROR')->write(sprintf(self::ERROR_POLLING_FAILED, $e->getMessage() )); - } - - - if($events > 0){ - try{ - $response = $this->socket->recv(); - // everything OK -> stop infinite loop AND retry loop! - break 2; - }catch(\ZMQException $e){ - LogController::getLogger('SOCKET_ERROR')->write(sprintf(self::ERROR_RECV_FAILED, $e->getMessage() )); - } - } - - if((microtime(true) - $startTime) > (self::DEFAULT_RESPONSE_MAX / 1000)){ - // max time for response exceeded - LogController::getLogger('SOCKET_ERROR')->write(sprintf(self::ERROR_SEND_FAILED, self::DEFAULT_RESPONSE_MAX)); - break; - } - - // start inf loop again, no proper answer :( - } - - if(--$retriesLeft <= 0){ - // retry limit exceeded - LogController::getLogger('SOCKET_ERROR')->write(sprintf(self::ERROR_OFFLINE, $this->socketUri, $this->maxRetries, $this->ttl)); - break; - } - } - - $this->socket->disconnect($this->socketUri); - - return $response; - }*/ - - -} \ No newline at end of file diff --git a/app/main/lib/socket/AbstractSocket.php b/app/main/lib/socket/AbstractSocket.php new file mode 100644 index 000000000..f39c98042 --- /dev/null +++ b/app/main/lib/socket/AbstractSocket.php @@ -0,0 +1,257 @@ +uri = $uri; + $this->options = $options; + } + + /** + * @return Socket\ConnectorInterface + */ + abstract protected function getConnector() : Socket\ConnectorInterface; + + /** + * @return EventLoop\LoopInterface + */ + protected function getLoop(): EventLoop\LoopInterface { + if(!($this->loop instanceof EventLoop\LoopInterface)){ + $this->loop = EventLoop\Factory::create(); + } + + return $this->loop; + } + + /** + * connect to socket + * @return Promise\PromiseInterface + */ + protected function connect() : Promise\PromiseInterface { + $deferred = new Promise\Deferred(); + + $this->getConnector() + ->connect($this->uri) + ->then($this->initConnection()) + ->then( + function(Socket\ConnectionInterface $connection) use ($deferred) { + $deferred->resolve($connection); + }, + function(\Exception $e) use ($deferred) { + $deferred->reject($e); + }); + + return $deferred->promise(); + } + + /** + * @param string $task + * @param null $load + * @return Promise\PromiseInterface + */ + public function write(string $task, $load = null) : Promise\PromiseInterface { + $deferred = new Promise\Deferred(); + $payload = $this->newPayload($task, $load); + + $this->connect() + ->then( + function(Socket\ConnectionInterface $connection) use ($payload, $deferred) { + return (new Promise\FulfilledPromise($connection)) + ->then($this->initWrite($payload)) + ->then($this->initRead()) + ->then($this->initClose($connection)) + ->then( + function($payload) use ($deferred) { + // we got valid data from socketServer -> check if $payload contains an error + if(is_array($payload) && $payload['task'] == 'error'){ + // ... wrap error payload in a rejectedPromise + $deferred->reject( + new Promise\RejectedPromise( + new \Exception($payload['load']) + ) + ); + }else{ + // good response + $deferred->resolve($payload); + } + }, + function(\Exception $e) use ($deferred) { + $deferred->reject($e); + }); + }, + function(\Exception $e) use ($deferred) { + // connection error + $deferred->reject($e); + }); + + $this->getLoop()->run(); + + return $deferred->promise() + ->otherwise( + // final exception handler for rejected promises -> convert to payload array + // -> No socket related Exceptions should be thrown down the chain + function(\Exception $e){ + return new Promise\RejectedPromise( + $this->newPayload('error', $e->getMessage()) + ); + }); + } + + /** + * set connection events + * @return callable + */ + protected function initConnection() : callable { + return function(Socket\ConnectionInterface $connection) : Promise\PromiseInterface { + $deferred = new Promise\Deferred(); + + /* connection event callbacks should be added here (if needed) + $connection->on('end', function(){ + echo "pf: connection on end" . PHP_EOL; + }); + + $connection->on('error', function(\Exception $e) { + echo "pf: connection on error: " . $e->getMessage() . PHP_EOL; + }); + + $connection->on('close', function(){ + echo "pf: connection on close" . PHP_EOL; + }); + */ + + $deferred->resolve($connection); + //$deferred->reject(new \RuntimeException('lala')); + + return $deferred->promise(); + }; + } + + /** + * write payload to connection + * @param $payload + * @return callable + */ + protected function initWrite($payload) : callable { + return function(Socket\ConnectionInterface $connection) use ($payload) : Promise\PromiseInterface { + $deferred = new Promise\Deferred(); + + $streamEncoded = new NDJson\Encoder($connection); + + $streamEncoded->on('error', function(\Exception $e) use ($deferred) { + $deferred->reject($e); + }); + + if($streamEncoded->write($payload)){ + $deferred->resolve($connection); + } + + return $deferred->promise(); + }; + } + + /** + * read response data from connection + * @return callable + */ + protected function initRead() : callable { + return function(Socket\ConnectionInterface $connection) : Promise\PromiseInterface { + // new empty stream for processing JSON + $stream = new Stream\ThroughStream(); + + $streamDecoded = new NDJson\Decoder($stream, true); + + // promise get resolved on first emit('data') + $promise = Promise\Stream\first($streamDecoded); + + // register on('data') for main input stream + $connection->once('data', function ($chunk) use ($stream) { + // send current data chunk to processing stream -> resolves promise + $stream->emit('data', [$chunk]); + }); + + return $promise; + }; + } + + /** + * close connection + * @param Socket\ConnectionInterface $connection + * @return callable + */ + protected function initClose(Socket\ConnectionInterface $connection) : callable { + return function($payload) use ($connection) : Promise\PromiseInterface { + $deferred = new Promise\Deferred(); + $deferred->resolve($payload); + + //$connection->close(); + return $deferred->promise(); + }; + } + /** + * get new payload + * @param string $task + * @param null $load + * @return array + */ + protected function newPayload(string $task, $load = null) : array { + $payload = [ + 'task' => $task, + 'load' => $load + ]; + + return $payload; + } + + /** + * use this function to create new Socket instances + * @param string $class + * @param string $uri + * @param array $options + * @return SocketInterface + */ + public static function factory(string $class, string $uri, array $options = []) : SocketInterface { + if(class_exists($class) && $uri){ + return new $class($uri, $options); + }else{ + // invalid Socket requirements -> return NullSocket + return new NullSocket($uri); + } + } +} \ No newline at end of file diff --git a/app/main/lib/socket/NullSocket.php b/app/main/lib/socket/NullSocket.php new file mode 100644 index 000000000..9b60e3cbe --- /dev/null +++ b/app/main/lib/socket/NullSocket.php @@ -0,0 +1,38 @@ +getLoop(), $this->options); + } + + /** + * write to NullSocket can not be performed + * @param string $task + * @param null $load + * @return Promise\PromiseInterface + */ + public function write(string $task, $load = null) : Promise\PromiseInterface { + return new Promise\RejectedPromise(); + } +} \ No newline at end of file diff --git a/app/main/lib/socket/SocketInterface.php b/app/main/lib/socket/SocketInterface.php new file mode 100644 index 000000000..e56bf33df --- /dev/null +++ b/app/main/lib/socket/SocketInterface.php @@ -0,0 +1,31 @@ +getLoop(), $this->options); + } + +} \ No newline at end of file diff --git a/app/main/model/basicmodel.php b/app/main/model/abstractmodel.php similarity index 74% rename from app/main/model/basicmodel.php rename to app/main/model/abstractmodel.php index 817c3d18c..db5e8594e 100644 --- a/app/main/model/basicmodel.php +++ b/app/main/model/abstractmodel.php @@ -8,20 +8,19 @@ namespace Model; +use DB\Cortex; use DB\SQL\Schema; -use Controller; -use DB; use lib\logging; +use Controller; use Exception\ValidationException; use Exception\DatabaseException; -abstract class BasicModel extends \DB\Cortex { +abstract class AbstractModel extends Cortex { /** - * Hive key with DB object - * @var string|DB\SQL + * alias name for database connection */ - protected $db = 'DB_PF'; + const DB_ALIAS = ''; /** * caching time of field schema - seconds @@ -29,28 +28,20 @@ abstract class BasicModel extends \DB\Cortex { * -> leave this at a higher value * @var int */ - protected $ttl = 60; + protected $ttl = 60; /** * caching for relational data * @var int */ - protected $rel_ttl = 0; + protected $rel_ttl = 0; /** * ass static columns for this table * -> can be overwritten in child models * @var bool */ - protected $addStaticFields = true; - - /** - * enables check for $fieldChanges on update/insert - * -> fields that should be checked need an "activity-log" flag - * in $fieldConf config - * @var bool - */ - protected $enableActivityLogging = true; + protected $addStaticFields = true; /** * enables change for "active" column @@ -58,61 +49,79 @@ abstract class BasicModel extends \DB\Cortex { * -> $this->active = false; will NOT work (prevent abuse)! * @var bool */ - private $allowActiveChange = false; + private $allowActiveChange = false; /** * getData() cache key prefix * -> do not change, otherwise cached data is lost * @var string */ - private $dataCacheKeyPrefix = 'DATACACHE'; + private $dataCacheKeyPrefix = 'DATACACHE'; /** * enables data export for this table * -> can be overwritten in child models * @var bool */ - public static $enableDataExport = false; + public static $enableDataExport = false; /** * enables data import for this table * -> can be overwritten in child models * @var bool */ - public static $enableDataImport = false; - - /** - * changed fields (columns) on update/insert - * -> e.g. for character "activity logging" - * @var array - */ - protected $fieldChanges = []; + public static $enableDataImport = false; /** * collection for validation errors * @var array */ - protected $validationError = []; + protected $validationError = []; /** * default caching time of field schema - seconds */ - const DEFAULT_TTL = 86400; + const DEFAULT_TTL = 86400; /** * default TTL for getData(); cache - seconds */ - const DEFAULT_CACHE_TTL = 120; + const DEFAULT_CACHE_TTL = 120; /** * default TTL for SQL query cache */ - const DEFAULT_SQL_TTL = 3; + const DEFAULT_SQL_TTL = 3; - const ERROR_INVALID_MODEL_CLASS = 'Model class (%s) not found'; + /** + * data from Universe tables is static and does not change frequently + * -> refresh static data after X days + */ + const CACHE_MAX_DAYS = 60; + /** + * class not exists error + */ + const ERROR_INVALID_MODEL_CLASS = 'Model class (%s) not found'; + + /** + * AbstractModel constructor. + * @param null $db + * @param null $table + * @param null $fluid + * @param int $ttl + */ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = self::DEFAULT_TTL){ + if(!is_object($db)){ + $db = self::getF3()->DB->getDB(static::DB_ALIAS); + } + + if(is_null($db)){ + // no valid DB connection found -> break on error + self::getF3()->set('HALT', true); + } + $this->addStaticFieldConfig(); parent::__construct($db, $table, $fluid, $ttl); @@ -136,7 +145,6 @@ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = sel }); // erase events ------------------------------------------------------------------------------------- - $this->beforeerase(function($self, $pkeys){ return $self->beforeEraseEvent($self, $pkeys); }); @@ -146,6 +154,22 @@ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = sel }); } + /** + * clear existing table Schema cache + * @return bool + */ + public function clearSchemaCache() : bool { + $f3 = self::getF3(); + $cache=\Cache::instance(); + if( + $f3->CACHE && is_object($this->db) && + $cache->exists($hash = $f3->hash($this->db->getDSN() . $this->table) . '.schema') + ){ + return (bool)$cache->clear($hash); + } + return false; + } + /** * @param string $key * @param mixed $val @@ -153,17 +177,21 @@ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = sel * @throws ValidationException */ public function set($key, $val){ + if(is_string($val)){ + $val = trim($val); + } + if( !$this->dry() && $key != 'updated' ){ - if( $this->exists($key) ){ + if($this->exists($key)){ // get raw column data (no objects) $currentVal = $this->get($key, true); if(is_object($val)){ if( - is_subclass_of($val, 'Model\BasicModel') && + is_subclass_of($val, 'Model\AbstractModel') && $val->_id != $currentVal ){ // relational object changed @@ -176,72 +204,13 @@ public function set($key, $val){ } } - // trim all values - if(is_string($val)){ - $val = trim($val); - } - - if( !$this->validateField($key, $val) ){ + if(!$this->validateField($key, $val)){ $this->throwValidationException($key); - }else{ - $this->checkFieldForActivityLogging($key, $val); } return parent::set($key, $val); } - /** - * change default "activity logging" status - * -> enable/disable - * @param $status - */ - public function setActivityLogging($status){ - $this->enableActivityLogging = (bool) $status; - } - - /** - * check column for value changes, - * --> if column is marked for "activity logging" - * @param string $key - * @param mixed $val - */ - protected function checkFieldForActivityLogging($key, $val){ - if( $this->enableActivityLogging ){ - $fieldConf = $this->fieldConf[$key]; - - // check for value changes if field has "activity logging" active - if($fieldConf['activity-log'] === true){ - if( - is_numeric($val) || - $fieldConf['type'] === Schema::DT_BOOL - ){ - $val = (int)$val; - } - - if(is_object($val)){ - $val = $val->_id; - } - - if( $fieldConf['type'] === self::DT_JSON){ - $currentValue = $this->get($key); - }else{ - $currentValue = $this->get($key, true); - } - - - if($currentValue !== $val){ - // field has changed - if( !array_key_exists($key, $this->fieldChanges) ){ - $this->fieldChanges[$key] = [ - 'old' => $currentValue, - 'new' => $val - ]; - } - } - } - } - } - /** * setter for "active" status * -> default: keep current "active" status @@ -250,7 +219,7 @@ protected function checkFieldForActivityLogging($key, $val){ * @return mixed */ public function set_active($active){ - if( $this->allowActiveChange ){ + if($this->allowActiveChange){ // allowed to set/change -> reset "allowed" property $this->allowActiveChange = false; }else{ @@ -271,14 +240,14 @@ protected function getStaticFieldConf() : array { if($this->addStaticFields){ $staticFieldConfig = [ 'created' => [ - 'type' => Schema::DT_TIMESTAMP, - 'default' => Schema::DF_CURRENT_TIMESTAMP, - 'index' => true + 'type' => Schema::DT_TIMESTAMP, + 'default' => Schema::DF_CURRENT_TIMESTAMP, + 'index' => true ], 'updated' => [ - 'type' => Schema::DT_TIMESTAMP, - 'default' => Schema::DF_CURRENT_TIMESTAMP, - 'index' => true + 'type' => Schema::DT_TIMESTAMP, + 'default' => Schema::DF_CURRENT_TIMESTAMP, + 'index' => true ] ]; } @@ -324,7 +293,7 @@ protected function validateField(string $key, $val) : bool { * @param $key * @param $val * @return bool - * @throws \Exception\ValidationException + * @throws ValidationException */ protected function validate_notDry($key, $val) : bool { $valid = true; @@ -353,7 +322,6 @@ protected function validate_notDry($key, $val) : bool { */ protected function validate_notEmpty($key, $val) : bool { $valid = false; - if($colConf = $this->fieldConf[$key]){ switch($colConf['type']){ case Schema::DT_INT: @@ -373,7 +341,7 @@ protected function validate_notEmpty($key, $val) : bool { * get key for for all objects in this table * @return string */ - private function getTableCacheKey(){ + private function getTableCacheKey() : string { return $this->dataCacheKeyPrefix .'.' . strtoupper($this->table); } @@ -383,22 +351,22 @@ private function getTableCacheKey(){ * @param string $dataCacheTableKeyPrefix * @return null|string */ - protected function getCacheKey($dataCacheTableKeyPrefix = ''){ + protected function getCacheKey(string $dataCacheTableKeyPrefix = '') : ?string { $cacheKey = null; // set a model unique cache key if the model is saved - if( $this->id > 0){ + if($this->_id > 0){ $cacheKey = $this->getTableCacheKey(); // check if there is a given key prefix // -> if not, use the standard key. // this is useful for caching multiple data sets according to one row entry - if( !empty($dataCacheTableKeyPrefix) ){ + if(!empty($dataCacheTableKeyPrefix)){ $cacheKey .= '.' . $dataCacheTableKeyPrefix . '_'; }else{ $cacheKey .= '.ID_'; } - $cacheKey .= (string) $this->_id; + $cacheKey .= (string)$this->_id; } return $cacheKey; @@ -407,18 +375,15 @@ protected function getCacheKey($dataCacheTableKeyPrefix = ''){ /** * get cached data from this model * @param string $dataCacheKeyPrefix - optional key prefix - * @return \stdClass|null + * @return mixed|null */ protected function getCacheData($dataCacheKeyPrefix = ''){ $cacheData = null; - // table cache exists // -> check cache for this row data - $cacheKey = $this->getCacheKey($dataCacheKeyPrefix); - if( !is_null($cacheKey) ){ + if(!is_null($cacheKey = $this->getCacheKey($dataCacheKeyPrefix))){ self::getF3()->exists($cacheKey, $cacheData); } - return $cacheData; } @@ -428,7 +393,7 @@ protected function getCacheData($dataCacheKeyPrefix = ''){ * @param string $dataCacheKeyPrefix * @param int $data_ttl */ - public function updateCacheData($cacheData, $dataCacheKeyPrefix = '', $data_ttl = self::DEFAULT_CACHE_TTL){ + public function updateCacheData($cacheData, string $dataCacheKeyPrefix = '', int $data_ttl = self::DEFAULT_CACHE_TTL){ $cacheDataTmp = (array)$cacheData; // check if data should be cached @@ -438,8 +403,7 @@ public function updateCacheData($cacheData, $dataCacheKeyPrefix = '', $data_ttl !empty($cacheDataTmp) ){ $cacheKey = $this->getCacheKey($dataCacheKeyPrefix); - - if( !is_null($cacheKey) ){ + if(!is_null($cacheKey)){ self::getF3()->set($cacheKey, $cacheData, $data_ttl); } } @@ -450,8 +414,7 @@ public function updateCacheData($cacheData, $dataCacheKeyPrefix = '', $data_ttl * -> see also clearCacheDataWithPrefix(), for more information */ public function clearCacheData(){ - $cacheKey = $this->getCacheKey(); - $this->clearCache($cacheKey); + $this->clearCache($this->getCacheKey()); } /** @@ -459,9 +422,8 @@ public function clearCacheData(){ * -> primarily used by object cache with multiple data caches * @param string $dataCacheKeyPrefix */ - public function clearCacheDataWithPrefix($dataCacheKeyPrefix = ''){ - $cacheKey = $this->getCacheKey($dataCacheKeyPrefix); - $this->clearCache($cacheKey); + public function clearCacheDataWithPrefix(string $dataCacheKeyPrefix = ''){ + $this->clearCache($this->getCacheKey($dataCacheKeyPrefix)); } /** @@ -469,9 +431,9 @@ public function clearCacheDataWithPrefix($dataCacheKeyPrefix = ''){ * @param $cacheKey */ private function clearCache($cacheKey){ - if( !empty($cacheKey) ){ + if(!empty($cacheKey)){ $f3 = self::getF3(); - if( $f3->exists($cacheKey) ){ + if($f3->exists($cacheKey)){ $f3->clear($cacheKey); } } @@ -496,40 +458,12 @@ protected function throwDbException(string $msg){ throw new DatabaseException($msg); } - /** - * set "updated" field to current timestamp - * this is useful to mark a row as "changed" - */ - protected function setUpdated(){ - if($this->_id > 0){ - $pfDB = DB\Database::instance()->getDB('PF'); - - $pfDB->exec( - ["UPDATE " . $this->table . " SET updated=NOW() WHERE id=:id"], - [ - [':id' => $this->_id] - ] - ); - } - } - - /** - * get single dataSet by id - * @param $id - * @param int $ttl - * @param bool $isActive - * @return \DB\Cortex - */ - public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true){ - return $this->getByForeignKey('id', (int)$id, ['limit' => 1], $ttl, $isActive); - } - /** * checks whether this model is active or not * each model should have an "active" column * @return bool */ - public function isActive(){ + public function isActive() : bool { return (bool)$this->active; } @@ -545,32 +479,73 @@ public function setActive(bool $active){ $this->active = $active; } + /** + * get single dataSet by id + * @param int $id + * @param int $ttl + * @param bool $isActive + * @return bool + */ + public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true) : bool { + return $this->getByForeignKey('id', $id, ['limit' => 1], $ttl, $isActive); + } + /** * get dataSet by foreign column (single result) - * @param $key + * @param string $key * @param $value * @param array $options * @param int $ttl * @param bool $isActive - * @return \DB\Cortex + * @return bool */ - public function getByForeignKey($key, $value, $options = [], $ttl = 0, $isActive = true){ - $querySet = []; - $query = []; + public function getByForeignKey(string $key, $value, array $options = [], int $ttl = 0, bool $isActive = true) : bool { + $filters = []; if($this->exists($key)){ - $query[] = $key . " = :" . $key; - $querySet[':' . $key] = $value; + $filters[] = [$key . ' = :' . $key, ':' . $key => $value]; } - // check active column if($isActive && $this->exists('active')){ - $query[] = "active = :active"; - $querySet[':active'] = 1; + $filters[] = self::getFilter('active', true); } - array_unshift($querySet, implode(' AND ', $query)); + $this->filterRel(); + + return $this->load($this->mergeFilter($filters), $options, $ttl); + } + + /** + * apply filter() for relations + * -> overwrite in child classes + * @see https://github.com/ikkez/f3-cortex#filter + */ + protected function filterRel() : void {} + + /** + * get first model from a relation that matches $filter + * @param string $key + * @param array $filter + * @return mixed|null + */ + protected function relFindOne(string $key, array $filter){ + $relModel = null; + $relFilter = []; + if($this->exists($key, true)){ + $fieldConf = $this->getFieldConfiguration(); + if(array_key_exists($key, $fieldConf)){ + if(array_key_exists($type = 'has-many', $fieldConf[$key])){ + $fromConf = $fieldConf[$key][$type]; + $relFilter = self::getFilter($fromConf[1], $this->getRaw($fromConf['relField'])); + } + } + + /** + * @var $relModel self|bool + */ + $relModel = $this->rel($key)->findone($this->mergeFilter([$this->mergeWithRelFilter($key, $filter), $relFilter])); + } - return $this->load( $querySet, $options, $ttl ); + return $relModel ? : null; } /** @@ -581,7 +556,7 @@ public function getByForeignKey($key, $value, $options = [], $ttl = 0, $isActive * @param $pkeys * @return bool */ - public function beforeInsertEvent($self, $pkeys){ + public function beforeInsertEvent($self, $pkeys) : bool { if($this->exists('updated')){ $this->touch('updated'); } @@ -606,7 +581,7 @@ public function afterInsertEvent($self, $pkeys){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { return true; } @@ -627,7 +602,7 @@ public function afterUpdateEvent($self, $pkeys){ * @param $pkeys * @return bool */ - public function beforeEraseEvent($self, $pkeys){ + public function beforeEraseEvent($self, $pkeys) : bool { return true; } @@ -640,15 +615,6 @@ public function beforeEraseEvent($self, $pkeys){ public function afterEraseEvent($self, $pkeys){ } - /** - * function should be overwritten in child classes with access restriction - * @param CharacterModel $characterModel - * @return bool - */ - public function hasAccess(CharacterModel $characterModel){ - return true; - } - /** * function should be overwritten in parent classes * @return bool @@ -673,7 +639,7 @@ public function getFormattedColumn($column, $format = 'Y-m-d H:i'){ * @param array $fields * @return bool */ - public function exportData(array $fields = []){ + public function exportData(array $fields = []) : bool { $status = false; if(static::$enableDataExport){ @@ -761,7 +727,7 @@ public function importData(){ * @param array $tableData * @return array */ - protected function importStaticData($tableData = []){ + protected function importStaticData(array $tableData = []) : array { $rowIDs = []; $addedCount = 0; $updatedCount = 0; @@ -780,7 +746,7 @@ protected function importStaticData($tableData = []){ } $this->copyfrom($rowData, $fields); $this->save(); - $rowIDs[] = $this->id; + $rowIDs[] = $this->_id; $this->reset(); } @@ -801,7 +767,7 @@ protected function importStaticData($tableData = []){ * @param string $action * @return Logging\LogInterface */ - protected function newLog($action = '') : Logging\LogInterface{ + protected function newLog(string $action = '') : Logging\LogInterface{ return new Logging\DefaultLog($action); } @@ -836,74 +802,73 @@ public function getErrors() : array { protected function isOutdated() : bool { $outdated = true; if(!$this->dry()){ - $timezone = $this->getF3()->get('getTimeZone')(); - $currentTime = new \DateTime('now', $timezone); - $updateTime = \DateTime::createFromFormat( - 'Y-m-d H:i:s', - $this->updated, - $timezone - ); - $interval = $updateTime->diff($currentTime); - if($interval->days < Universe\BasicUniverseModel::CACHE_MAX_DAYS){ - $outdated = false; + try{ + $timezone = $this->getF3()->get('getTimeZone')(); + $currentTime = new \DateTime('now', $timezone); + $updateTime = \DateTime::createFromFormat( + 'Y-m-d H:i:s', + $this->updated, + $timezone + ); + $interval = $updateTime->diff($currentTime); + if($interval->days < self::CACHE_MAX_DAYS){ + $outdated = false; + } + }catch(\Exception $e){ + self::getF3()->error($e->getCode(), $e->getMessage(), $e->getTrace()); } } return $outdated; } + /** + * @return mixed + */ public function save(){ + $return = false; try{ - return parent::save(); + $return = parent::save(); }catch(ValidationException $e){ $this->setValidationError($e); }catch(DatabaseException $e){ self::getF3()->error($e->getResponseCode(), $e->getMessage(), $e->getTrace()); } + + return $return; } /** * @return string */ - public function __toString(){ + public function __toString() : string { return $this->getTable(); } /** - * get the current class name - * -> namespace not included - * @return string + * @param string $argument + * @return \ReflectionClass + * @throws \ReflectionException */ - public static function getClassName(){ - $parts = explode('\\', static::class); - return end($parts); + protected static function refClass($argument = self::class) : \ReflectionClass { + return new \ReflectionClass($argument); } /** - * factory for all Models - * @param string $model - * @param int $ttl - * @return BasicModel - * @throws \Exception + * get the framework instance + * @return \Base */ - public static function getNew($model, $ttl = self::DEFAULT_TTL){ - $class = null; - - $model = '\\' . __NAMESPACE__ . '\\' . $model; - if(class_exists($model)){ - $class = new $model( null, null, null, $ttl ); - }else{ - throw new \Exception(sprintf(self::ERROR_INVALID_MODEL_CLASS, $model)); - } - - return $class; + public static function getF3() : \Base { + return \Base::instance(); } /** - * get the framework instance (singleton) - * @return \Base + * get filter for Cortex + * @param string $key + * @param $value + * @return array */ - public static function getF3(){ - return \Base::instance(); + public static function getFilter(string $key, $value) : array { + return [$key . ' = :' . $key, ':' . $key => $value]; } /** @@ -945,12 +910,12 @@ public static function log($text, $type = 'DEBUG'){ /** * get tableModifier class for this table - * @return bool|DB\SQL\TableModifier + * @return bool|\DB\SQL\TableModifier */ public static function getTableModifier(){ $df = parent::resolveConfiguration(); $schema = new Schema($df['db']); - $tableModifier = $schema->alterTable( $df['table'] ); + $tableModifier = $schema->alterTable($df['table']); return $tableModifier; } @@ -981,7 +946,7 @@ public static function indexExists(array $columns = []){ * @param int $length index length for text fields in mysql * @return bool */ - public static function setMultiColumnIndex(array $columns = [], $unique = false, $length = 20){ + public static function setMultiColumnIndex(array $columns = [], $unique = false, $length = 20) : bool { $status = false; $tableModifier = self::getTableModifier(); @@ -996,6 +961,24 @@ public static function setMultiColumnIndex(array $columns = [], $unique = false, return $status; } + /** + * factory for all Models + * @param string $className + * @param int $ttl + * @return AbstractModel|null + * @throws \Exception + */ + public static function getNew(string $className, int $ttl = self::DEFAULT_TTL) : ?self { + $model = null; + $className = self::refClass(static::class)->getNamespaceName() . '\\' . $className; + if(class_exists($className)){ + $model = new $className(null, null, null, $ttl); + }else{ + throw new \Exception(sprintf(self::ERROR_INVALID_MODEL_CLASS, $className)); + } + return $model; + } + /** * overwrites parent * @param null $db @@ -1004,12 +987,12 @@ public static function setMultiColumnIndex(array $columns = [], $unique = false, * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); + public static function setup($db = null, $table = null, $fields = null){ + $status = parent::setup($db, $table, $fields); // set static default data if($status === true && property_exists(static::class, 'tableData')){ - $model = self::getNew(self::getClassName(), 0); + $model = self::getNew(self::refClass(static::class)->getShortName(), 0); $model->importStaticData(static::$tableData); } diff --git a/app/main/model/abstractmaptrackingmodel.php b/app/main/model/pathfinder/abstractmaptrackingmodel.php similarity index 89% rename from app/main/model/abstractmaptrackingmodel.php rename to app/main/model/pathfinder/abstractmaptrackingmodel.php index 9a2cce456..8f4b65cf9 100644 --- a/app/main/model/abstractmaptrackingmodel.php +++ b/app/main/model/pathfinder/abstractmaptrackingmodel.php @@ -1,22 +1,25 @@ [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -28,7 +31,7 @@ abstract class AbstractMapTrackingModel extends BasicModel implements LogModelIn 'updatedCharacterId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -96,7 +99,6 @@ public function getLogData(): array { return []; } - /** * save connection * @param CharacterModel $characterModel diff --git a/app/main/model/pathfinder/abstractpathfindermodel.php b/app/main/model/pathfinder/abstractpathfindermodel.php new file mode 100644 index 000000000..bbd7532ff --- /dev/null +++ b/app/main/model/pathfinder/abstractpathfindermodel.php @@ -0,0 +1,113 @@ + fields that should be checked need an "activity-log" flag + * in $fieldConf config + * @var bool + */ + protected $enableActivityLogging = true; + + /** + * changed fields (columns) on update/insert + * -> e.g. for character "activity logging" + * @var array + */ + protected $fieldChanges = []; + + /** + * change default "activity logging" status + * -> enable/disable + * @param $status + */ + public function setActivityLogging(bool $status){ + $this->enableActivityLogging = $status; + } + + /** + * @param bool $mapper + * @return NULL|void + */ + public function reset($mapper = true){ + $this->fieldChanges = []; + parent::reset($mapper); + } + + /** + * function should be overwritten in child classes with access restriction + * @param CharacterModel $characterModel + * @return bool + */ + public function hasAccess(CharacterModel $characterModel) : bool { + return true; + } + + /** + * set "updated" field to current timestamp + * this is useful to mark a row as "changed" + */ + protected function setUpdated(){ + if($this->_id > 0){ + $this->db->exec( + ["UPDATE " . $this->table . " SET updated=NOW() WHERE id=:id"], + [ + [':id' => $this->_id] + ] + ); + } + } + + /** + * get old and new value from field, in case field is configured with 'activity-log' + * @return array + */ + protected function getFieldChanges() : array { + $changes = []; + + if($this->enableActivityLogging){ + // filter fields, where "activity" (changes) should be logged + $fieldConf = array_filter($this->fieldConf, function($fieldConf, $key) { + return isset($fieldConf['activity-log']) ? (bool)$fieldConf['activity-log'] : false; + }, ARRAY_FILTER_USE_BOTH); + + if($fieldKeys = array_keys($fieldConf)){ + // model has fields where changes should be logged + $schema = $this->getMapper()->schema(); + foreach($fieldKeys as $key){ + if($this->changed($key)){ + $changes[$key] = [ + 'old' => $schema[$key]['initial'], + 'new' => $schema[$key]['value'] + ]; + } + } + } + } + + return $changes; + } + + /** + * @return mixed|void + */ + public function save(){ + // save changed field value BEFORE ->save() it called! + // parent::save() resets the schema and old values get replaced with new values + $this->fieldChanges = $this->getFieldChanges(); + + return parent::save(); + } +} \ No newline at end of file diff --git a/app/main/model/abstractsystemapibasicmodel.php b/app/main/model/pathfinder/abstractsystemapibasicmodel.php similarity index 89% rename from app/main/model/abstractsystemapibasicmodel.php rename to app/main/model/pathfinder/abstractsystemapibasicmodel.php index 66acce0c4..ab531f03d 100644 --- a/app/main/model/abstractsystemapibasicmodel.php +++ b/app/main/model/pathfinder/abstractsystemapibasicmodel.php @@ -6,11 +6,11 @@ * Time: 22:11 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -abstract class AbstractSystemApiBasicModel extends BasicModel { +abstract class AbstractSystemApiBasicModel extends AbstractPathfinderModel { public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = 0){ $this->addStaticKillFieldConfig(); diff --git a/app/main/model/activitylogmodel.php b/app/main/model/pathfinder/activitylogmodel.php similarity index 93% rename from app/main/model/activitylogmodel.php rename to app/main/model/pathfinder/activitylogmodel.php index 33275cb7b..efb8631b5 100644 --- a/app/main/model/activitylogmodel.php +++ b/app/main/model/pathfinder/activitylogmodel.php @@ -6,11 +6,11 @@ * Time: 15:11 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class ActivityLogModel extends BasicModel { +class ActivityLogModel extends AbstractPathfinderModel { protected $table = 'activity_log'; @@ -24,7 +24,7 @@ class ActivityLogModel extends BasicModel { 'characterId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -35,7 +35,7 @@ class ActivityLogModel extends BasicModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -180,16 +180,13 @@ public function getCountableColumnNames(): array { * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['year', 'week', 'characterId', 'mapId'], true); if($status === true){ $status = parent::setMultiColumnIndex(['year', 'week', 'characterId']); } } - return $status; } } \ No newline at end of file diff --git a/app/main/model/alliancemapmodel.php b/app/main/model/pathfinder/alliancemapmodel.php similarity index 77% rename from app/main/model/alliancemapmodel.php rename to app/main/model/pathfinder/alliancemapmodel.php index f8e29c5df..2634d5143 100644 --- a/app/main/model/alliancemapmodel.php +++ b/app/main/model/pathfinder/alliancemapmodel.php @@ -6,11 +6,11 @@ * Time: 20:14 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class AllianceMapModel extends BasicModel { +class AllianceMapModel extends AbstractPathfinderModel { protected $table = 'alliance_map'; @@ -24,7 +24,7 @@ class AllianceMapModel extends BasicModel { 'allianceId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\AllianceModel', + 'belongs-to-one' => 'Model\Pathfinder\AllianceModel', 'constraint' => [ [ 'table' => 'alliance', @@ -35,7 +35,7 @@ class AllianceMapModel extends BasicModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -59,14 +59,12 @@ public function clearCacheData(){ * @param null $table * @param null $fields * @return bool + * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['allianceId', 'mapId'], true); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/alliancemodel.php b/app/main/model/pathfinder/alliancemodel.php similarity index 76% rename from app/main/model/alliancemodel.php rename to app/main/model/pathfinder/alliancemodel.php index 35893629d..1a792f5da 100644 --- a/app/main/model/alliancemodel.php +++ b/app/main/model/pathfinder/alliancemodel.php @@ -6,12 +6,12 @@ * Time: 20:43 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use lib\Config; -class AllianceModel extends BasicModel { +class AllianceModel extends AbstractPathfinderModel { protected $table = 'alliance'; @@ -38,10 +38,10 @@ class AllianceModel extends BasicModel { 'default' => 0 ], 'allianceCharacters' => [ - 'has-many' => ['Model\CharacterModel', 'allianceId'] + 'has-many' => ['Model\Pathfinder\CharacterModel', 'allianceId'] ], 'mapAlliances' => [ - 'has-many' => ['Model\AllianceMapModel', 'allianceId'] + 'has-many' => ['Model\Pathfinder\AllianceMapModel', 'allianceId'] ] ]; @@ -57,7 +57,7 @@ public function getData(){ $allianceData->shared = $this->shared; return $allianceData; - } + }/** @noinspection PhpHierarchyChecksInspection */ /** * Event "Hook" function @@ -66,7 +66,7 @@ public function getData(){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { // if model changed, 'update' col needs to be updated as well // -> data no longer "outdated" $this->touch('updated'); @@ -80,11 +80,7 @@ public function beforeUpdateEvent($self, $pkeys){ */ public function getMaps(){ $maps = []; - - $this->filter('mapAlliances', - ['active = ?', 1], - ['order' => 'created'] - ); + $this->filterRel(); if($this->mapAlliances){ $mapCount = 0; @@ -134,20 +130,34 @@ public function getCharacters($characterIds = [], $options = []) : array { return $characters; } - public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true){ + /** + * load alliance by Id either from DB or load data from API + * @param int $id + * @param int $ttl + * @param bool $isActive + * @return bool + */ + public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true) : bool { /** * @var AllianceModel $alliance */ - $alliance = parent::getById($id, $ttl, $isActive); - if($alliance->isOutdated()){ + $loaded = parent::getById($id, $ttl, $isActive); + if($this->isOutdated()){ // request alliance data $allianceData = self::getF3()->ccpClient()->getAllianceData($id); if( !empty($allianceData) ){ - $alliance->copyfrom($allianceData, ['id', 'name', 'ticker']); - $alliance->save(); + $this->copyfrom($allianceData, ['id', 'name', 'ticker']); + $this->save(); } } - return $alliance; + return $loaded; + } + + /** + * @see parent + */ + public function filterRel() : void { + $this->filter('mapAlliances', self::getFilter('active', true), ['order' => 'created']); } } \ No newline at end of file diff --git a/app/main/model/characterauthenticationmodel.php b/app/main/model/pathfinder/characterauthenticationmodel.php similarity index 87% rename from app/main/model/characterauthenticationmodel.php rename to app/main/model/pathfinder/characterauthenticationmodel.php index 3b2ab69e7..b80e773b0 100644 --- a/app/main/model/characterauthenticationmodel.php +++ b/app/main/model/pathfinder/characterauthenticationmodel.php @@ -6,12 +6,12 @@ * Time: 19:33 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use Controller; -class CharacterAuthenticationModel extends BasicModel{ +class CharacterAuthenticationModel extends AbstractPathfinderModel{ protected $table = 'character_authentication'; @@ -25,7 +25,7 @@ class CharacterAuthenticationModel extends BasicModel{ 'characterId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -61,12 +61,11 @@ class CharacterAuthenticationModel extends BasicModel{ * @param $pkeys * @return bool */ - public function beforeEraseEvent($self, $pkeys){ + public function beforeEraseEvent($self, $pkeys) : bool { // clear existing client Cookies as well $cookieName = Controller\Controller::COOKIE_PREFIX_CHARACTER; $cookieName .= '_' . $this->characterId->getCookieName(); $self::getF3()->clear('COOKIE.' . $cookieName); - return true; } diff --git a/app/main/model/characterlogmodel.php b/app/main/model/pathfinder/characterlogmodel.php similarity index 96% rename from app/main/model/characterlogmodel.php rename to app/main/model/pathfinder/characterlogmodel.php index 5361b42b6..2394e6508 100644 --- a/app/main/model/characterlogmodel.php +++ b/app/main/model/pathfinder/characterlogmodel.php @@ -6,13 +6,13 @@ * Time: 00:04 */ -namespace Model; +namespace Model\Pathfinder; use Controller\Api\User as User; use Controller\Controller as Controller; use DB\SQL\Schema; -class CharacterLogModel extends BasicModel { +class CharacterLogModel extends AbstractPathfinderModel { protected $table = 'character_log'; @@ -27,7 +27,7 @@ class CharacterLogModel extends BasicModel { 'type' => Schema::DT_INT, 'index' => true, 'unique' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -93,7 +93,7 @@ class CharacterLogModel extends BasicModel { ]; /** - * set log data from array + * set log data by associative array * @param array $logData */ public function setData($logData){ @@ -198,7 +198,7 @@ public function afterInsertEvent($self, $pkeys){ */ public function afterUpdateEvent($self, $pkeys){ // check if any "relevant" column has changed - if( !empty($this->fieldChanges) ){ + if(!empty($this->fieldChanges)){ $self->clearCacheData(); } } diff --git a/app/main/model/charactermapmodel.php b/app/main/model/pathfinder/charactermapmodel.php similarity index 79% rename from app/main/model/charactermapmodel.php rename to app/main/model/pathfinder/charactermapmodel.php index 846a65a8b..688ce91e7 100644 --- a/app/main/model/charactermapmodel.php +++ b/app/main/model/pathfinder/charactermapmodel.php @@ -6,11 +6,11 @@ * Time: 12:31 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class CharacterMapModel extends BasicModel { +class CharacterMapModel extends AbstractPathfinderModel { protected $table = 'character_map'; @@ -24,7 +24,7 @@ class CharacterMapModel extends BasicModel { 'characterId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -35,7 +35,7 @@ class CharacterMapModel extends BasicModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -61,13 +61,10 @@ public function clearCacheData(){ * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['characterId', 'mapId'], true); } - return $status; } diff --git a/app/main/model/charactermodel.php b/app/main/model/pathfinder/charactermodel.php similarity index 86% rename from app/main/model/charactermodel.php rename to app/main/model/pathfinder/charactermodel.php index a33c63a2b..8fd7d0997 100644 --- a/app/main/model/charactermodel.php +++ b/app/main/model/pathfinder/charactermodel.php @@ -6,17 +6,19 @@ * Time: 15:20 */ -namespace Model; +namespace Model\Pathfinder; use Controller\Ccp\Sso as Sso; use Controller\Api\User as User; use DB\SQL\Schema; use lib\Config; -use lib\Socket; use Model\Universe; -class CharacterModel extends BasicModel { +class CharacterModel extends AbstractPathfinderModel { + /** + * @var string + */ protected $table = 'character'; /** @@ -24,6 +26,9 @@ class CharacterModel extends BasicModel { */ const DATA_CACHE_KEY_LOG = 'LOG'; + /** + * log message for character access + */ const LOG_ACCESS = 'charId: [%20s], status: %s, charName: %s'; /** @@ -53,8 +58,10 @@ class CharacterModel extends BasicModel { * @var bool */ private $allowBanChange = false; - + /** + * @var array + */ protected $fieldConf = [ 'lastLogin' => [ 'type' => Schema::DT_TIMESTAMP, @@ -93,7 +100,7 @@ class CharacterModel extends BasicModel { 'corporationId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CorporationModel', + 'belongs-to-one' => 'Model\Pathfinder\CorporationModel', 'constraint' => [ [ 'table' => 'corporation', @@ -104,7 +111,7 @@ class CharacterModel extends BasicModel { 'allianceId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\AllianceModel', + 'belongs-to-one' => 'Model\Pathfinder\AllianceModel', 'constraint' => [ [ 'table' => 'alliance', @@ -117,7 +124,7 @@ class CharacterModel extends BasicModel { 'nullable' => false, 'default' => 1, 'index' => true, - 'belongs-to-one' => 'Model\RoleModel', + 'belongs-to-one' => 'Model\Pathfinder\RoleModel', 'constraint' => [ [ 'table' => 'role', @@ -125,6 +132,16 @@ class CharacterModel extends BasicModel { ] ], ], + 'cloneLocationId' => [ + 'type' => Schema::DT_BIGINT, + 'index' => true, + 'activity-log' => true + ], + 'cloneLocationType' => [ + 'type' => Schema::DT_VARCHAR128, + 'nullable' => false, + 'default' => '' + ], 'kicked' => [ 'type' => Schema::DT_TIMESTAMP, 'index' => true @@ -154,16 +171,16 @@ class CharacterModel extends BasicModel { 'default' => 0 ], 'userCharacter' => [ - 'has-one' => ['Model\UserCharacterModel', 'characterId'] + 'has-one' => ['Model\Pathfinder\UserCharacterModel', 'characterId'] ], 'characterLog' => [ - 'has-one' => ['Model\CharacterLogModel', 'characterId'] + 'has-one' => ['Model\Pathfinder\CharacterLogModel', 'characterId'] ], 'characterMaps' => [ - 'has-many' => ['Model\CharacterMapModel', 'characterId'] + 'has-many' => ['Model\Pathfinder\CharacterMapModel', 'characterId'] ], 'characterAuthentications' => [ - 'has-many' => ['Model\CharacterAuthenticationModel', 'characterId'] + 'has-many' => ['Model\Pathfinder\CharacterAuthenticationModel', 'characterId'] ] ]; @@ -186,17 +203,17 @@ public function getData($addCharacterLogData = false){ if(is_null($characterData)){ // no cached character data found - $characterData = (object) []; - $characterData->id = $this->_id; - $characterData->name = $this->name; - $characterData->role = $this->roleId->getData(); - $characterData->shared = $this->shared; - $characterData->logLocation = $this->logLocation; - $characterData->selectLocation = $this->selectLocation; + $characterData = (object) []; + $characterData->id = $this->_id; + $characterData->name = $this->name; + $characterData->role = $this->roleId->getData(); + $characterData->shared = $this->shared; + $characterData->logLocation = $this->logLocation; + $characterData->selectLocation = $this->selectLocation; if($addCharacterLogData){ if($logModel = $this->getLog()){ - $characterData->log = $logModel->getData(); + $characterData->log = $logModel->getData(); } } @@ -218,7 +235,30 @@ public function getData($addCharacterLogData = false){ // temp "authStatus" should not be cached if($this->authStatus){ - $characterData->authStatus = $this->authStatus; + $characterData->authStatus = $this->authStatus; + } + + return $characterData; + } + + /** + * get "basic" character data + * @return \stdClass + * @throws \Exception + */ + public function getBasicData() : \stdClass { + $characterData = (object) []; + $characterData->id = $this->_id; + $characterData->name = $this->name; + + // check for corporation + if($corporation = $this->getCorporation()){ + $characterData->corporation = $corporation->getData(false); + } + + // check for alliance + if($alliance = $this->getAlliance()){ + $characterData->alliance = $alliance->getData(); } return $characterData; @@ -407,7 +447,7 @@ private function resetAdminColumns(){ * check whether this character has already a user assigned to it * @return bool */ - public function hasUserCharacter(){ + public function hasUserCharacter() : bool { return is_object($this->userCharacter); } @@ -415,7 +455,7 @@ public function hasUserCharacter(){ * check whether this character has an active location log * @return bool */ - public function hasLog(){ + public function hasLog() : bool { return is_object($this->characterLog); } @@ -423,7 +463,7 @@ public function hasLog(){ * check whether this character has a corporation * @return bool */ - public function hasCorporation(){ + public function hasCorporation() : bool { return is_object($this->corporationId); } @@ -431,14 +471,14 @@ public function hasCorporation(){ * check whether this character has an alliance * @return bool */ - public function hasAlliance(){ + public function hasAlliance() : bool { return is_object($this->allianceId); } /** * @return UserModel|null */ - public function getUser(){ + public function getUser() : ?UserModel { $user = null; if($this->hasUserCharacter()){ /** @@ -450,57 +490,60 @@ public function getUser(){ } /** - * get the corporation for this user - * @return \Model\CorporationModel|null + * get the corporation from character + * @return CorporationModel|null */ - public function getCorporation(){ + public function getCorporation() : ?CorporationModel { return $this->corporationId; } /** - * get the alliance of this user - * @return \Model\AllianceModel|null + * get the alliance from character + * @return AllianceModel|null */ - public function getAlliance(){ + public function getAlliance() : ?AllianceModel { return $this->allianceId; } /** * get ESI API "access_token" from OAuth * @return bool|mixed - * @throws \Exception */ public function getAccessToken(){ $accessToken = false; $refreshToken = true; - $timezone = self::getF3()->get('getTimeZone')(); - $now = new \DateTime('now', $timezone); + try{ + $timezone = self::getF3()->get('getTimeZone')(); + $now = new \DateTime('now', $timezone); - if( - !empty($this->esiAccessToken) && - !empty($this->esiAccessTokenExpires) - ){ - $expireTime = \DateTime::createFromFormat( - 'Y-m-d H:i:s', - $this->esiAccessTokenExpires, - $timezone - ); - - // check if token is not expired - if($expireTime->getTimestamp() > $now->getTimestamp()){ - // token still valid - $accessToken = $this->esiAccessToken; - - // check if token should be renewed (close to expire) - $timeBuffer = 2 * 60; - $expireTime->sub(new \DateInterval('PT' . $timeBuffer . 'S')); + if( + !empty($this->esiAccessToken) && + !empty($this->esiAccessTokenExpires) + ){ + $expireTime = \DateTime::createFromFormat( + 'Y-m-d H:i:s', + $this->esiAccessTokenExpires, + $timezone + ); + // check if token is not expired if($expireTime->getTimestamp() > $now->getTimestamp()){ - // token NOT close to expire - $refreshToken = false; + // token still valid + $accessToken = $this->esiAccessToken; + + // check if token should be renewed (close to expire) + $timeBuffer = 2 * 60; + $expireTime->sub(new \DateInterval('PT' . $timeBuffer . 'S')); + + if($expireTime->getTimestamp() > $now->getTimestamp()){ + // token NOT close to expire + $refreshToken = false; + } } } + }catch(\Exception $e){ + self::getF3()->error(500, $e->getMessage(), $e->getTrace()); } // no valid "accessToken" found OR @@ -651,7 +694,7 @@ public function isAuthorized() : string { * @return RoleModel * @throws \Exception */ - public function requestRole() : RoleModel{ + protected function requestRole() : RoleModel { $role = null; // check config files for hardcoded character roles @@ -696,7 +739,7 @@ public function requestRole() : RoleModel{ * @return array * @throws \Exception */ - protected function requestRoles(){ + protected function requestRoles() : array { $rolesData = []; // check if character has accepted all admin scopes (one of them is required for "role" request) @@ -719,16 +762,39 @@ protected function requestRoles(){ * check whether this char has accepted all "basic" api scopes * @return bool */ - public function hasBasicScopes(){ - return empty( array_diff(Sso::getScopesByAuthType(), $this->esiScopes) ); + public function hasBasicScopes() : bool { + return empty(array_diff(Sso::getScopesByAuthType(), $this->esiScopes)); } /** * check whether this char has accepted all admin api scopes * @return bool */ - public function hasAdminScopes(){ - return empty( array_diff(Sso::getScopesByAuthType('admin'), $this->esiScopes) ); + public function hasAdminScopes() : bool { + return empty(array_diff(Sso::getScopesByAuthType('admin'), $this->esiScopes)); + } + + /** + * update clone data + */ + public function updateCloneData(){ + if($accessToken = $this->getAccessToken()){ + $clonesData = self::getF3()->ccpClient()->getCharacterClonesData($this->_id, $accessToken); + if(!isset($clonesData['error'])){ + if(!empty($homeLocationData = $clonesData['home']['location'])){ + // clone home location data + $this->cloneLocationId = (int)$homeLocationData['id']; + $this->cloneLocationType = (string)$homeLocationData['type']; + } + } + } + } + + /** + * @throws \Exception + */ + public function updateRoleData(){ + $this->roleId = $this->requestRole(); } /** @@ -738,7 +804,7 @@ public function hasAdminScopes(){ * @return CharacterModel * @throws \Exception */ - public function updateLog($additionalOptions = []){ + public function updateLog($additionalOptions = []) : self { $deleteLog = false; $invalidResponse = false; @@ -839,7 +905,7 @@ public function updateLog($additionalOptions = []){ /** * @var $structureModel Universe\StructureModel */ - $structureModel = Universe\BasicUniverseModel::getNew('StructureModel'); + $structureModel = Universe\AbstractUniverseModel::getNew('StructureModel'); $structureModel->loadById($lookupStructureId, $accessToken, $additionalOptions); if(!$structureModel->dry()){ $structureData['structure'] = (array)$structureModel->getData(); @@ -878,7 +944,7 @@ public function updateLog($additionalOptions = []){ /** * @var $typeModel Universe\TypeModel */ - $typeModel = Universe\BasicUniverseModel::getNew('TypeModel'); + $typeModel = Universe\AbstractUniverseModel::getNew('TypeModel'); $typeModel->loadById($lookupShipTypeId, '', $additionalOptions); if(!$typeModel->dry()){ $shipData['ship'] = (array)$typeModel->getShipData(); @@ -924,7 +990,6 @@ public function updateLog($additionalOptions = []){ } if($deleteLog){ - self::log('DELETE LOG!'); $this->deleteLog(); } @@ -933,11 +998,11 @@ public function updateLog($additionalOptions = []){ /** * broadcast characterData - * @throws \ZMQSocketException */ public function broadcastCharacterUpdate(){ $characterData = $this->getData(true); - (new Socket( Config::getSocketUri() ))->sendData('characterUpdate', $characterData); + + self::getF3()->webSocket()->write('characterUpdate', $characterData); } /** @@ -945,7 +1010,7 @@ public function broadcastCharacterUpdate(){ * @return array (some status messages) * @throws \Exception */ - public function updateFromESI(){ + public function updateFromESI() : array { $status = []; if( $accessToken = $this->getAccessToken() ){ @@ -984,7 +1049,7 @@ public function updateFromESI(){ * -> but is should be unique * @return string */ - public function getCookieName(){ + public function getCookieName() : string { return md5($this->name); } @@ -1010,32 +1075,21 @@ public function getLog(){ * @return MapModel|null * @throws \Exception */ - public function getMap($mapId){ + public function getMap(int $mapId) : ?MapModel { /** * @var $map MapModel */ $map = self::getNew('MapModel'); - $map->getById( (int)$mapId ); + $map->getById($mapId); - $returnMap = null; - if($map->hasAccess($this)){ - $returnMap = $map; - } - - return $returnMap; + return $map->hasAccess($this) ? $map : null; } /** * get all accessible map models for this character * @return MapModel[] */ - public function getMaps(){ - $this->filter( - 'characterMaps', - ['active = ?', 1], - ['order' => 'created'] - ); - + public function getMaps() : array { $maps = []; if($alliance = $this->getAlliance()){ @@ -1046,7 +1100,7 @@ public function getMaps(){ $maps = array_merge($maps, $corporation->getMaps()); } - if( is_object($this->characterMaps) ){ + if(is_object($this->characterMaps)){ $mapCountPrivate = 0; foreach($this->characterMaps as $characterMap){ if( @@ -1119,6 +1173,16 @@ public function logout(bool $deleteSession = true, bool $deleteLog = true, bool } } + /** + * @see parent + */ + public function filterRel() : void { + $this->filter('userCharacter', self::getFilter('active', true)); + $this->filter('corporationId', self::getFilter('active', true)); + $this->filter('allianceId', self::getFilter('active', true)); + $this->filter('characterMaps', self::getFilter('active', true), ['order' => 'created']); + } + /** * merges two multidimensional characterSession arrays by checking characterID * @param array $characterDataBase diff --git a/app/main/model/characterstatusmodel.php b/app/main/model/pathfinder/characterstatusmodel.php similarity index 92% rename from app/main/model/characterstatusmodel.php rename to app/main/model/pathfinder/characterstatusmodel.php index 21fb7435e..1d5eab8f4 100644 --- a/app/main/model/characterstatusmodel.php +++ b/app/main/model/pathfinder/characterstatusmodel.php @@ -6,11 +6,11 @@ * Time: 21:12 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class CharacterStatusModel extends BasicModel { +class CharacterStatusModel extends AbstractPathfinderModel { protected $table = 'character_status'; diff --git a/app/main/model/connectionlogmodel.php b/app/main/model/pathfinder/connectionlogmodel.php similarity index 94% rename from app/main/model/connectionlogmodel.php rename to app/main/model/pathfinder/connectionlogmodel.php index 065e6c82e..8f3aab9c1 100644 --- a/app/main/model/connectionlogmodel.php +++ b/app/main/model/pathfinder/connectionlogmodel.php @@ -1,16 +1,16 @@ [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\ConnectionModel', + 'belongs-to-one' => 'Model\Pathfinder\ConnectionModel', 'constraint' => [ [ 'table' => 'connection', @@ -68,7 +68,7 @@ class ConnectionLogModel extends BasicModel { ]; /** - * set map data by an associative array + * set data by associative array * @param array $data */ public function setData(array $data){ diff --git a/app/main/model/connectionmodel.php b/app/main/model/pathfinder/connectionmodel.php similarity index 78% rename from app/main/model/connectionmodel.php rename to app/main/model/pathfinder/connectionmodel.php index 8d2956821..3f29cda34 100644 --- a/app/main/model/connectionmodel.php +++ b/app/main/model/pathfinder/connectionmodel.php @@ -6,7 +6,7 @@ * Time: 21:12 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use Controller\Api\Route; @@ -26,7 +26,7 @@ class ConnectionModel extends AbstractMapTrackingModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -37,7 +37,7 @@ class ConnectionModel extends AbstractMapTrackingModel { 'source' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\SystemModel', + 'belongs-to-one' => 'Model\Pathfinder\SystemModel', 'constraint' => [ [ 'table' => 'system', @@ -49,7 +49,7 @@ class ConnectionModel extends AbstractMapTrackingModel { 'target' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\SystemModel', + 'belongs-to-one' => 'Model\Pathfinder\SystemModel', 'constraint' => [ [ 'table' => 'system', @@ -68,15 +68,23 @@ class ConnectionModel extends AbstractMapTrackingModel { 'type' => self::DT_JSON, 'activity-log' => true ], + 'sourceEndpointType' => [ + 'type' => self::DT_JSON, + 'activity-log' => true + ], + 'targetEndpointType' => [ + 'type' => self::DT_JSON, + 'activity-log' => true + ], 'eolUpdated' => [ 'type' => Schema::DT_TIMESTAMP, 'default' => null ], 'signatures' => [ - 'has-many' => ['Model\SystemSignatureModel', 'connectionId'] + 'has-many' => ['Model\Pathfinder\SystemSignatureModel', 'connectionId'] ], 'connectionLog' => [ - 'has-many' => ['Model\ConnectionLogModel', 'connectionId'] + 'has-many' => ['Model\Pathfinder\ConnectionLogModel', 'connectionId'] ] ]; @@ -97,6 +105,10 @@ public function getData($addSignatureData = false, $addLogData = false){ $connectionData->created = strtotime($this->created); $connectionData->eolUpdated = strtotime($this->eolUpdated); + if( !empty($endpointsData = $this->getEndpointsData()) ){ + $connectionData->endpoints = $endpointsData; + } + if($addSignatureData){ if( !empty($signaturesData = $this->getSignaturesData()) ){ $connectionData->signatures = $signaturesData; @@ -134,6 +146,33 @@ public function set_type($type){ return $type; } + /** + * setter for endpoints data (data for source/target endpoint) + * @param $endpointsData + */ + public function set_endpoints($endpointsData){ + if(!empty($endpointData = (array)$endpointsData['source'])){ + $this->setEndpointData('source', $endpointData); + } + if(!empty($endpointData = (array)$endpointsData['target'])){ + $this->setEndpointData('target', $endpointData); + } + } + + /** + * set connection endpoint related data + * @param string $label (source||target) + * @param array $endpointData + */ + public function setEndpointData(string $label, array $endpointData = []){ + if($this->exists($field = $label . 'EndpointType')){ + $types = empty($types = (array)$endpointData['types']) ? null : $types; + if($this->$field != $types){ + $this->$field = $types; + } + } + } + /** * check object for model access * @param CharacterModel $characterModel @@ -181,7 +220,7 @@ public function setDefaultTypeData(){ * check whether this connection is a wormhole or not * @return bool */ - public function isWormhole(){ + public function isWormhole() : bool { return ($this->scope === 'wh'); } @@ -190,7 +229,7 @@ public function isWormhole(){ * @return bool * @throws \Exception\DatabaseException */ - public function isValid(): bool { + public function isValid() : bool { if($valid = parent::isValid()){ // check if source/target system are not equal // check if source/target belong to same map @@ -211,12 +250,12 @@ public function isValid(): bool { * Event "Hook" function * can be overwritten * return false will stop any further action - * @param BasicModel $self + * @param self $self * @param $pkeys * @return bool * @throws \Exception\DatabaseException */ - public function beforeInsertEvent($self, $pkeys){ + public function beforeInsertEvent($self, $pkeys) : bool { // check for "default" connection type and add them if missing // -> get() with "true" returns RAW data! important for JSON table column check! $types = (array)json_decode($this->get('type', true)); @@ -268,14 +307,14 @@ public function afterEraseEvent($self, $pkeys){ * @return logging\LogInterface * @throws \Exception\ConfigException */ - public function newLog($action = ''): Logging\LogInterface{ + public function newLog($action = '') : Logging\LogInterface { return $this->getMap()->newLog($action)->setTempData($this->getLogObjectData()); } /** * @return MapModel */ - public function getMap(): MapModel{ + public function getMap() : MapModel{ return $this->get('mapId'); } @@ -342,6 +381,38 @@ public function getLogs(){ return $logs; } + /** + * get endpoint data for $type (source || target) + * @param string $type + * @return array + */ + protected function getEndpointData(string $type) : array { + $endpointData = []; + + if($this->exists($field = $type . 'EndpointType') && !empty($types = (array)$this->$field)){ + $endpointData['types'] = $types; + } + + return $endpointData; + } + + /** + * get all endpoint data for this connection + * @return array + */ + protected function getEndpointsData() : array { + $endpointsData = []; + + if(!empty($endpointData = $this->getEndpointData('source'))){ + $endpointsData['source'] = $endpointData; + } + if(!empty($endpointData = $this->getEndpointData('target'))){ + $endpointsData['target'] = $endpointData; + } + + return $endpointsData; + } + /** * get all signature data linked to this connection * @return array @@ -414,13 +485,10 @@ public function logMass(CharacterLogModel $characterLog) : self { * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['source', 'target', 'scope']); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/connectionscopemodel.php b/app/main/model/pathfinder/connectionscopemodel.php similarity index 94% rename from app/main/model/connectionscopemodel.php rename to app/main/model/pathfinder/connectionscopemodel.php index 325258874..fd9c30212 100644 --- a/app/main/model/connectionscopemodel.php +++ b/app/main/model/pathfinder/connectionscopemodel.php @@ -6,11 +6,11 @@ * Time: 20:01 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class ConnectionScopeModel extends BasicModel{ +class ConnectionScopeModel extends AbstractPathfinderModel { protected $table = 'connection_scope'; diff --git a/app/main/model/corporationmapmodel.php b/app/main/model/pathfinder/corporationmapmodel.php similarity index 78% rename from app/main/model/corporationmapmodel.php rename to app/main/model/pathfinder/corporationmapmodel.php index d95652fb5..5cdcc5717 100644 --- a/app/main/model/corporationmapmodel.php +++ b/app/main/model/pathfinder/corporationmapmodel.php @@ -6,11 +6,11 @@ * Time: 20:01 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class CorporationMapModel extends BasicModel { +class CorporationMapModel extends AbstractPathfinderModel { protected $table = 'corporation_map'; @@ -24,7 +24,7 @@ class CorporationMapModel extends BasicModel { 'corporationId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CorporationModel', + 'belongs-to-one' => 'Model\Pathfinder\CorporationModel', 'constraint' => [ [ 'table' => 'corporation', @@ -35,7 +35,7 @@ class CorporationMapModel extends BasicModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -61,13 +61,10 @@ public function clearCacheData(){ * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['corporationId', 'mapId'], true); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/corporationmodel.php b/app/main/model/pathfinder/corporationmodel.php similarity index 85% rename from app/main/model/corporationmodel.php rename to app/main/model/pathfinder/corporationmodel.php index e0d7d27cf..c6fbf478e 100644 --- a/app/main/model/corporationmodel.php +++ b/app/main/model/pathfinder/corporationmodel.php @@ -6,12 +6,12 @@ * Time: 20:43 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use lib\Config; -class CorporationModel extends BasicModel { +class CorporationModel extends AbstractPathfinderModel { protected $table = 'corporation'; @@ -124,37 +124,40 @@ class CorporationModel extends BasicModel { 'default' => 0 ], 'corporationCharacters' => [ - 'has-many' => ['Model\CharacterModel', 'corporationId'] + 'has-many' => ['Model\Pathfinder\CharacterModel', 'corporationId'] ], 'mapCorporations' => [ - 'has-many' => ['Model\CorporationMapModel', 'corporationId'] + 'has-many' => ['Model\Pathfinder\CorporationMapModel', 'corporationId'] ], 'corporationRights' => [ - 'has-many' => ['Model\CorporationRightModel', 'corporationId'] + 'has-many' => ['Model\Pathfinder\CorporationRightModel', 'corporationId'] ], 'corporationStructures' => [ - 'has-many' => ['Model\CorporationStructureModel', 'corporationId'] + 'has-many' => ['Model\Pathfinder\CorporationStructureModel', 'corporationId'] ], 'structures' => [ - 'has-many' => ['Model\StructureModel', 'corporationId'] + 'has-many' => ['Model\Pathfinder\StructureModel', 'corporationId'] ] ]; /** * get cooperation data - * @return object + * @param bool $addRights + * @return \stdClass * @throws \Exception */ - public function getData(){ + public function getData(bool $addRights = true) : \stdClass { $cooperationData = (object) []; $cooperationData->id = $this->id; $cooperationData->name = $this->name; $cooperationData->shared = $this->shared; - if($corporationRights = $this->getRights()){ - foreach($corporationRights as $corporationRight){ - $cooperationData->rights[] = $corporationRight->getData(); + if($addRights){ + if($corporationRights = $this->getRights()){ + foreach($corporationRights as $corporationRight){ + $cooperationData->rights[] = $corporationRight->getData(); + } } } @@ -168,7 +171,7 @@ public function getData(){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { // if model changed, 'update' col needs to be updated as well // -> data no longer "outdated" $this->touch('updated'); @@ -184,15 +187,14 @@ public function beforeUpdateEvent($self, $pkeys){ */ public function getMaps($mapIds = [], $options = []){ $maps = []; - $filter = ['active = ?', 1]; + $this->filterRel(); - if( !empty($mapIds) ){ - $filter[0] .= ' AND mapId IN (?)'; - $filter[] = $mapIds; + if(!empty($mapIds)){ + $filters = []; + $filters[] = ['mapId IN (:mapId)', ':mapId' => $mapIds]; + $this->filter('mapCorporations', $this->mergeWithRelFilter('mapCorporations', $this->mergeFilter($filters)), $this->getRelFilterOption('mapCorporations')); } - $this->filter('mapCorporations', $filter, ['order' => 'created']); - if($this->mapCorporations){ $mapCount = 0; foreach($this->mapCorporations as $mapCorporation){ @@ -342,26 +344,23 @@ public function getRights($options = []) : array { * @param int $id * @param int $ttl * @param bool $isActive - * @return \DB\Cortex + * @return bool */ - public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true){ - /** - * @var CorporationModel $corporation - */ - $corporation = parent::getById($id, $ttl, $isActive); - if($corporation->isOutdated()){ + public function getById(int $id, int $ttl = self::DEFAULT_SQL_TTL, bool $isActive = true) : bool { + $loaded = parent::getById($id, $ttl, $isActive); + if($this->isOutdated()){ // request corporation data $corporationData = self::getF3()->ccpClient()->getCorporationData($id); if( !empty($corporationData) ){ // check for NPC corporation $corporationData['isNPC'] = self::getF3()->ccpClient()->isNpcCorporation($id); - $corporation->copyfrom($corporationData, ['id', 'name', 'ticker', 'memberCount', 'isNPC']); - $corporation->save(); + $this->copyfrom($corporationData, ['id', 'name', 'ticker', 'memberCount', 'isNPC']); + $this->save(); } } - return $corporation; + return $loaded; } /** @@ -377,6 +376,13 @@ public function saveStructure(StructureModel $structure){ } } + /** + * @see parent + */ + public function filterRel() : void { + $this->filter('mapCorporations', self::getFilter('active', true), ['order' => 'created']); + } + /** * get all corporations * @param array $options diff --git a/app/main/model/corporationrightmodel.php b/app/main/model/pathfinder/corporationrightmodel.php similarity index 79% rename from app/main/model/corporationrightmodel.php rename to app/main/model/pathfinder/corporationrightmodel.php index 9bed0dd41..1587968c4 100644 --- a/app/main/model/corporationrightmodel.php +++ b/app/main/model/pathfinder/corporationrightmodel.php @@ -1,19 +1,25 @@ [ 'type' => Schema::DT_BOOL, @@ -24,7 +30,7 @@ class CorporationRightModel extends BasicModel { 'corporationId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CorporationModel', + 'belongs-to-one' => 'Model\Pathfinder\CorporationModel', 'constraint' => [ [ 'table' => 'corporation', @@ -35,7 +41,7 @@ class CorporationRightModel extends BasicModel { 'rightId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\RightModel', + 'belongs-to-one' => 'Model\Pathfinder\RightModel', 'constraint' => [ [ 'table' => 'right', @@ -46,7 +52,7 @@ class CorporationRightModel extends BasicModel { 'roleId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\RoleModel', + 'belongs-to-one' => 'Model\Pathfinder\RoleModel', 'constraint' => [ [ 'table' => 'role', @@ -57,7 +63,7 @@ class CorporationRightModel extends BasicModel { ]; /** - * set map data by an associative array + * set data by associative array * @param array $data */ public function setData($data){ @@ -95,13 +101,10 @@ public function getData(){ * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['corporationId', 'rightId'], true); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/corporationstructuremodel.php b/app/main/model/pathfinder/corporationstructuremodel.php similarity index 75% rename from app/main/model/corporationstructuremodel.php rename to app/main/model/pathfinder/corporationstructuremodel.php index d52366cd7..5dcfe47b6 100644 --- a/app/main/model/corporationstructuremodel.php +++ b/app/main/model/pathfinder/corporationstructuremodel.php @@ -1,16 +1,16 @@ [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CorporationModel', + 'belongs-to-one' => 'Model\Pathfinder\CorporationModel', 'constraint' => [ [ 'table' => 'corporation', @@ -35,7 +35,7 @@ class CorporationStructureModel extends BasicModel { 'structureId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\StructureModel', + 'belongs-to-one' => 'Model\Pathfinder\StructureModel', 'constraint' => [ [ 'table' => 'structure', @@ -53,13 +53,10 @@ class CorporationStructureModel extends BasicModel { * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['corporationId', 'structureId'], true); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/logmodelinterface.php b/app/main/model/pathfinder/logmodelinterface.php similarity index 83% rename from app/main/model/logmodelinterface.php rename to app/main/model/pathfinder/logmodelinterface.php index cca816aaf..aa145a572 100644 --- a/app/main/model/logmodelinterface.php +++ b/app/main/model/pathfinder/logmodelinterface.php @@ -1,12 +1,12 @@ [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapScopeModel', + 'belongs-to-one' => 'Model\Pathfinder\MapScopeModel', 'constraint' => [ [ 'table' => 'map_scope', @@ -50,7 +50,7 @@ class MapModel extends AbstractMapTrackingModel { 'typeId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapTypeModel', + 'belongs-to-one' => 'Model\Pathfinder\MapTypeModel', 'constraint' => [ [ 'table' => 'map_type', @@ -152,24 +152,24 @@ class MapModel extends AbstractMapTrackingModel { 'validate' => true ], 'systems' => [ - 'has-many' => ['Model\SystemModel', 'mapId'] + 'has-many' => ['Model\Pathfinder\SystemModel', 'mapId'] ], 'connections' => [ - 'has-many' => ['Model\ConnectionModel', 'mapId'] + 'has-many' => ['Model\Pathfinder\ConnectionModel', 'mapId'] ], 'mapCharacters' => [ - 'has-many' => ['Model\CharacterMapModel', 'mapId'] + 'has-many' => ['Model\Pathfinder\CharacterMapModel', 'mapId'] ], 'mapCorporations' => [ - 'has-many' => ['Model\CorporationMapModel', 'mapId'] + 'has-many' => ['Model\Pathfinder\CorporationMapModel', 'mapId'] ], 'mapAlliances' => [ - 'has-many' => ['Model\AllianceMapModel', 'mapId'] + 'has-many' => ['Model\Pathfinder\AllianceMapModel', 'mapId'] ] ]; /** - * set map data by an associative array + * set data by associative array * @param array $data */ public function setData($data){ @@ -321,7 +321,7 @@ public function getData(){ * @return bool * @throws \Exception\ValidationException */ - protected function validate_name(string $key, string $val): bool { + protected function validate_name(string $key, string $val) : bool { $valid = true; if(mb_strlen($val) < 3){ $valid = false; @@ -337,7 +337,7 @@ protected function validate_name(string $key, string $val): bool { * @return bool * @throws \Exception\ValidationException */ - protected function validate_slackWebHookURL(string $key, string $val): bool { + protected function validate_slackWebHookURL(string $key, string $val) : bool { return $this->validate_WebHookURL($key, $val, 'slack'); } @@ -348,7 +348,7 @@ protected function validate_slackWebHookURL(string $key, string $val): bool { * @return bool * @throws \Exception\ValidationException */ - protected function validate_discordWebHookURLHistory(string $key, string $val): bool { + protected function validate_discordWebHookURLHistory(string $key, string $val) : bool { return $this->validate_WebHookURL($key, $val, 'discord'); } @@ -359,7 +359,7 @@ protected function validate_discordWebHookURLHistory(string $key, string $val): * @return bool * @throws \Exception\ValidationException */ - protected function validate_discordWebHookURLRally(string $key, string $val): bool { + protected function validate_discordWebHookURLRally(string $key, string $val) : bool { return $this->validate_WebHookURL($key, $val, 'discord'); } @@ -371,7 +371,7 @@ protected function validate_discordWebHookURLRally(string $key, string $val): bo * @return bool * @throws \Exception\ValidationException */ - protected function validate_WebHookURL(string $key, string $val, string $type): bool { + protected function validate_WebHookURL(string $key, string $val, string $type) : bool { $valid = true; if( !empty($val) ){ $hosts = [ @@ -508,19 +508,22 @@ public function getNewConnection(SystemModel $sourceSystem, SystemModel $targetS /** * search for a system by id * @param int $id - * @return null|SystemModel + * @return SystemModel|null */ - public function getSystemById(int $id){ + public function getSystemById(int $id) : ?SystemModel { /** * @var $system SystemModel */ $system = $this->rel('systems'); - $result = $system->findone([ - 'active = 1 AND mapId = :mapId AND id = :id', - ':mapId' => $this->id, - ':id' => $id - ]); - return is_object($result) ? $result : null; + $system->filterRel(); + + $filters = [ + self::getFilter('id', $id), + self::getFilter('mapId', $this->_id), + self::getFilter('active', true) + ]; + + return $system->findone($this->mergeFilter($filters)) ? : null; } /** @@ -528,29 +531,27 @@ public function getSystemById(int $id){ * -> "active" column is NOT checked * -> removed systems become "active" = 0 * @param int $systemId - * @param array $filter - * @return null|SystemModel + * @param array $addFilters + * @return SystemModel|null */ - public function getSystemByCCPId(int $systemId, array $filter = []){ + public function getSystemByCCPId(int $systemId, array $addFilters = []) : ?SystemModel { /** * @var $system SystemModel */ $system = $this->rel('systems'); + $system->filterRel(); - $query = [ - 'mapId = :mapId AND systemId = :systemId', - ':mapId' => $this->_id, - ':systemId' => $systemId + $filters = [ + self::getFilter('systemId', $systemId), + self::getFilter('mapId', $this->_id) ]; // add optional filter -> e.g. search for "active = 1" system - foreach($filter as $column => $value){ - $query[0] .= ' AND' . $this->db->quotekey($column) . ' = :' . $column; - $query[':' . $column] = $value; + foreach($addFilters as $filter){ + $filters[] = $filter; } - $result = $system->findone($query); - return is_object($result) ? $result : null; + return $system->findone($this->mergeFilter($filters)) ? : null; } /** @@ -594,19 +595,22 @@ public function getSystemsData() : array{ /** * search for a connection by id * @param int $id - * @return null|ConnectionModel + * @return ConnectionModel|null */ - public function getConnectionById(int $id){ + public function getConnectionById(int $id) : ?ConnectionModel { /** * @var $connection ConnectionModel */ $connection = $this->rel('connections'); - $result = $connection->findone([ - 'active = 1 AND mapId = :mapId AND id = :id', - ':mapId' => $this->id, - ':id' => $id - ]); - return is_object($result) ? $result : null; + $connection->filterRel(); + + $filters = [ + self::getFilter('id', $id), + self::getFilter('mapId', $this->_id), + self::getFilter('active', true) + ]; + + return $connection->findone($this->mergeFilter($filters)) ? : null; } /** @@ -707,13 +711,13 @@ public function setAccess($obj){ if($result === false){ // grant access for the character $characterMap = self::getNew('CharacterMapModel'); - $characterMap-> characterId = $obj; + $characterMap->characterId = $obj; $characterMap->mapId = $this; $characterMap->save(); $newAccessGranted = true; } - } elseif($obj instanceof CorporationModel){ + }elseif($obj instanceof CorporationModel){ // check whether the corporation already has map access $this->has('mapCorporations', ['active = 1 AND corporationId = :corporationId', ':corporationId' => $obj->id]); @@ -728,7 +732,7 @@ public function setAccess($obj){ $newAccessGranted = true; } - } elseif($obj instanceof AllianceModel){ + }elseif($obj instanceof AllianceModel){ // check whether the alliance already has map access $this->has('mapAlliances', ['active = 1 AND allianceId = :allianceId', ':allianceId' => $obj->id]); @@ -973,7 +977,7 @@ public function getAllCorporations() : array { * @return logging\LogInterface * @throws ConfigException */ - public function newLog($action = ''): Logging\LogInterface{ + public function newLog($action = '') : Logging\LogInterface{ $logChannelData = $this->getLogChannelData(); $logObjectData = $this->getLogObjectData(); $log = (new logging\MapLog($action, $logChannelData))->setTempData($logObjectData); @@ -981,8 +985,8 @@ public function newLog($action = ''): Logging\LogInterface{ // update map history *.log files ----------------------------------------------------------------------------- if($this->isHistoryLogEnabled()){ // check socket config - if(Config::validSocketConnect()){ - $log->addHandler('zmq', 'json', $this->getSocketConfig()); + if(Config::validSocketConnect(Config::getSocketUri())){ + $log->addHandler('socket', 'json', $this->getSocketConfig()); }else{ // update log file local (slow) $log->addHandler('stream', 'json', $this->getStreamConfig()); @@ -1012,7 +1016,7 @@ public function newLog($action = ''): Logging\LogInterface{ /** * @return MapModel */ - public function getMap(): MapModel{ + public function getMap() : MapModel{ return $this; } @@ -1051,7 +1055,7 @@ protected function getLogFormatter(){ * check if "activity logging" is enabled for this map type * @return bool */ - public function isActivityLogEnabled(): bool { + public function isActivityLogEnabled() : bool { return $this->logActivity && (bool) Config::getMapsDefaultConfig($this->typeId->name)['log_activity_enabled']; } @@ -1059,7 +1063,7 @@ public function isActivityLogEnabled(): bool { * check if "history logging" is enabled for this map type * @return bool */ - public function isHistoryLogEnabled(): bool { + public function isHistoryLogEnabled() : bool { return $this->logHistory && (bool) Config::getMapsDefaultConfig($this->typeId->name)['log_history_enabled']; } @@ -1069,7 +1073,7 @@ public function isHistoryLogEnabled(): bool { * @return bool * @throws ConfigException */ - public function isSlackChannelEnabled(string $channel): bool { + public function isSlackChannelEnabled(string $channel) : bool { $enabled = false; // check global Slack status if((bool)Config::getPathfinderData('slack.status')){ @@ -1097,7 +1101,7 @@ public function isSlackChannelEnabled(string $channel): bool { * @return bool * @throws ConfigException */ - public function isDiscordChannelEnabled(string $channel): bool { + public function isDiscordChannelEnabled(string $channel) : bool { $enabled = false; // check global Slack status if((bool)Config::getPathfinderData('discord.status')){ @@ -1124,7 +1128,7 @@ public function isDiscordChannelEnabled(string $channel): bool { * @param string $type * @return bool */ - public function isMailSendEnabled(string $type): bool{ + public function isMailSendEnabled(string $type) : bool{ $enabled = false; if((bool) Config::getMapsDefaultConfig($this->typeId->name)['send_rally_mail_enabled']){ $enabled = Config::isValidSMTPConfig($this->getSMTPConfig($type)); @@ -1138,7 +1142,7 @@ public function isMailSendEnabled(string $type): bool{ * @param bool $abs absolute path * @return \stdClass */ - public function getStreamConfig(bool $abs = false): \stdClass{ + public function getStreamConfig(bool $abs = false) : \stdClass{ $config = (object) []; $config->stream = ''; if( $this->getF3()->exists('PATHFINDER.HISTORY.LOG', $dir) ){ @@ -1153,9 +1157,9 @@ public function getStreamConfig(bool $abs = false): \stdClass{ * get config for Socket connection (e.g. where to send log data) * @return \stdClass */ - public function getSocketConfig(): \stdClass{ + public function getSocketConfig() : \stdClass{ $config = (object) []; - $config->uri = Config::getSocketUri(); + $config->dsn = Config::getSocketUri(); $config->streamConf = $this->getStreamConfig(true); return $config; } @@ -1166,7 +1170,7 @@ public function getSocketConfig(): \stdClass{ * @param string $channel * @return \stdClass */ - public function getSlackWebHookConfig(string $channel = ''): \stdClass{ + public function getSlackWebHookConfig(string $channel = '') : \stdClass{ $config = (object) []; $config->slackWebHookURL = $this->slackWebHookURL; $config->slackUsername = $this->slackUsername; @@ -1182,7 +1186,7 @@ public function getSlackWebHookConfig(string $channel = ''): \stdClass{ * @param string $channel * @return \stdClass */ - public function getDiscordWebHookConfig(string $channel = ''): \stdClass { + public function getDiscordWebHookConfig(string $channel = '') : \stdClass { $config = (object) []; $config->slackUsername = $this->discordUsername; if($channel && $this->exists($channel) && !empty($this->$channel)){ @@ -1197,7 +1201,7 @@ public function getDiscordWebHookConfig(string $channel = ''): \stdClass { * @param bool $addJson * @return \stdClass */ - public function getSMTPConfig(string $type, bool $addJson = true): \stdClass{ + public function getSMTPConfig(string $type, bool $addJson = true) : \stdClass { $config = Config::getSMTPConfig(); $config->to = Config::getNotificationMail($type); $config->addJson = $addJson; @@ -1417,7 +1421,7 @@ public function getUserData(){ /** * @param CharacterModel|null $characterModel - * @return false|MapModel + * @return false|ConnectionModel|MapModel */ public function save(CharacterModel $characterModel = null){ /** diff --git a/app/main/model/mapscopemodel.php b/app/main/model/pathfinder/mapscopemodel.php similarity index 92% rename from app/main/model/mapscopemodel.php rename to app/main/model/pathfinder/mapscopemodel.php index 372961fa5..9ae222913 100644 --- a/app/main/model/mapscopemodel.php +++ b/app/main/model/pathfinder/mapscopemodel.php @@ -6,11 +6,11 @@ * Time: 20:01 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class MapScopeModel extends BasicModel{ +class MapScopeModel extends AbstractPathfinderModel{ protected $table = 'map_scope'; diff --git a/app/main/model/maptypemodel.php b/app/main/model/pathfinder/maptypemodel.php similarity index 96% rename from app/main/model/maptypemodel.php rename to app/main/model/pathfinder/maptypemodel.php index fed21ecd4..c25f2d6a9 100644 --- a/app/main/model/maptypemodel.php +++ b/app/main/model/pathfinder/maptypemodel.php @@ -6,11 +6,11 @@ * Time: 20:01 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class MapTypeModel extends BasicModel { +class MapTypeModel extends AbstractPathfinderModel { protected $table = 'map_type'; diff --git a/app/main/model/rightmodel.php b/app/main/model/pathfinder/rightmodel.php similarity index 90% rename from app/main/model/rightmodel.php rename to app/main/model/pathfinder/rightmodel.php index 624c76382..71dd0fa37 100644 --- a/app/main/model/rightmodel.php +++ b/app/main/model/pathfinder/rightmodel.php @@ -1,16 +1,16 @@ '' ], 'corporationRights' => [ - 'has-many' => ['Model\CorporationRightModel', 'rightId'] + 'has-many' => ['Model\Pathfinder\CorporationRightModel', 'rightId'] ] ]; diff --git a/app/main/model/rolemodel.php b/app/main/model/pathfinder/rolemodel.php similarity index 91% rename from app/main/model/rolemodel.php rename to app/main/model/pathfinder/rolemodel.php index e209ab904..75763924b 100644 --- a/app/main/model/rolemodel.php +++ b/app/main/model/pathfinder/rolemodel.php @@ -1,16 +1,16 @@ '' ], 'corporationRights' => [ - 'has-many' => ['Model\CorporationRightModel', 'roleId'] + 'has-many' => ['Model\Pathfinder\CorporationRightModel', 'roleId'] ] ]; @@ -113,7 +113,8 @@ public static function getCorporationManagerRole(){ * @return self|null */ public static function getRoleById(int $roleId = 1){ - $role = (new self())->getById($roleId); + $role = new self(); + $role->getById($roleId); return $role->dry() ? null : $role; } diff --git a/app/main/model/structuremodel.php b/app/main/model/pathfinder/structuremodel.php similarity index 85% rename from app/main/model/structuremodel.php rename to app/main/model/pathfinder/structuremodel.php index 05211e671..3f3b64d41 100644 --- a/app/main/model/structuremodel.php +++ b/app/main/model/pathfinder/structuremodel.php @@ -1,18 +1,22 @@ [ 'type' => Schema::DT_BOOL, @@ -34,7 +41,7 @@ class StructureModel extends BasicModel { 'corporationId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\CorporationModel', + 'belongs-to-one' => 'Model\Pathfinder\CorporationModel', 'constraint' => [ [ 'table' => 'corporation', @@ -51,7 +58,7 @@ class StructureModel extends BasicModel { 'type' => Schema::DT_INT, 'default' => 1, 'index' => true, - 'belongs-to-one' => 'Model\StructureStatusModel', + 'belongs-to-one' => 'Model\Pathfinder\StructureStatusModel', 'constraint' => [ [ 'table' => 'structure_status', @@ -70,10 +77,17 @@ class StructureModel extends BasicModel { 'default' => '' ], 'structureCorporations' => [ - 'has-many' => ['Model\CorporationStructureModel', 'structureId'] + 'has-many' => ['Model\Pathfinder\CorporationStructureModel', 'structureId'] ] ]; + /** + * set data by associative array + * @param array $data + */ + public function setData(array $data){ + $this->copyfrom($data, ['structureId', 'corporationId', 'systemId', 'statusId', 'name', 'description']); + } /** * get structure data * @return \stdClass @@ -108,7 +122,7 @@ public function getData() : \stdClass { * @param $structureId * @return int|null */ - public function set_structureId($structureId){ + public function set_structureId($structureId) : ?int { $structureId = (int)$structureId; return $structureId ? : null; } @@ -116,12 +130,11 @@ public function set_structureId($structureId){ /** * set corporationId (owner) for this structure * -> if corporation does not exists in DB -> load from API - * @param $corporationId + * @param int $corporationId * @return int|null */ - public function set_corporationId($corporationId){ + public function set_corporationId(int $corporationId) : ?int { $oldCorporationId = $this->get('corporationId', true) ? : 0; - $corporationId = !is_string($corporationId) ? : (int)$corporationId; if($corporationId){ if($corporationId !== $oldCorporationId){ @@ -177,11 +190,11 @@ public function isValid(): bool { * Event "Hook" function * can be overwritten * return false will stop any further action - * @param BasicModel $self + * @param self $self * @param $pkeys * @return bool */ - public function beforeInsertEvent($self, $pkeys){ + public function beforeInsertEvent($self, $pkeys) : bool { return $this->isValid() ? parent::beforeInsertEvent($self, $pkeys) : false; } @@ -225,6 +238,12 @@ public function getDataByCorporations() : array { return $structuresData; } + /** + * load structure by $corporation, $name and $systemId + * @param CorporationModel $corporation + * @param string $name + * @param int $systemId + */ public function getByName(CorporationModel $corporation, string $name, int $systemId) { if( !$corporation->dry() && $name){ $this->has('structureCorporations', ['corporationId = :corporationId', ':corporationId' => $corporation->_id]); @@ -246,8 +265,8 @@ protected function getUniverseTypeData(int $structureId) : \stdClass { /** * @var $type Universe\TypeModel */ - $type = Universe\BasicUniverseModel::getNew('TypeModel')->getById($structureId); + $type = Universe\AbstractUniverseModel::getNew('TypeModel'); + $type->getById($structureId); return $type->dry() ? (object)[] : $type->getData(); } - } \ No newline at end of file diff --git a/app/main/model/structurestatusmodel.php b/app/main/model/pathfinder/structurestatusmodel.php similarity index 91% rename from app/main/model/structurestatusmodel.php rename to app/main/model/pathfinder/structurestatusmodel.php index 22e38d800..bb37d6f1e 100644 --- a/app/main/model/structurestatusmodel.php +++ b/app/main/model/pathfinder/structurestatusmodel.php @@ -1,17 +1,17 @@ '' ], 'structures' => [ - 'has-many' => ['Model\StructureModel', 'statusId'] + 'has-many' => ['Model\Pathfinder\StructureModel', 'statusId'] ] ]; diff --git a/app/main/model/systemfactionkillmodel.php b/app/main/model/pathfinder/systemfactionkillmodel.php similarity index 95% rename from app/main/model/systemfactionkillmodel.php rename to app/main/model/pathfinder/systemfactionkillmodel.php index 1eab973f0..2d4d7f6b2 100644 --- a/app/main/model/systemfactionkillmodel.php +++ b/app/main/model/pathfinder/systemfactionkillmodel.php @@ -6,7 +6,7 @@ * Time: 21:04 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; diff --git a/app/main/model/systemjumpmodel.php b/app/main/model/pathfinder/systemjumpmodel.php similarity index 95% rename from app/main/model/systemjumpmodel.php rename to app/main/model/pathfinder/systemjumpmodel.php index afc43b25e..885a55340 100644 --- a/app/main/model/systemjumpmodel.php +++ b/app/main/model/pathfinder/systemjumpmodel.php @@ -6,7 +6,7 @@ * Time: 21:04 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; diff --git a/app/main/model/systemmodel.php b/app/main/model/pathfinder/systemmodel.php similarity index 82% rename from app/main/model/systemmodel.php rename to app/main/model/pathfinder/systemmodel.php index dccb6dd32..7fe7b0727 100644 --- a/app/main/model/systemmodel.php +++ b/app/main/model/pathfinder/systemmodel.php @@ -6,7 +6,7 @@ * Time: 23:56 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use lib\logging; @@ -14,13 +14,44 @@ class SystemModel extends AbstractMapTrackingModel { - const MAX_POS_X = 2440; - const MAX_POS_Y = 1480; + /** + * system position x max + */ + const MAX_POS_X = 2440; + + /** + * system position y max + */ + const MAX_POS_Y = 1480; + + /** + * max count of history signature data in cache + */ + const MAX_HISTORY_SIGNATURES = 10; - protected $table = 'system'; + /** + * TTL for history signature data + */ + const TTL_HISTORY_SIGNATURES = 7200; + + /** + * cache key prefix for getData(); result WITH log data + */ + const DATA_CACHE_KEY_SIGNATURES = 'SIGNATURES'; + + /** + * @var string + */ + protected $table = 'system'; - protected $staticSystemDataCache = []; + /** + * @var array + */ + protected $staticSystemDataCache = []; + /** + * @var array + */ protected $fieldConf = [ 'active' => [ 'type' => Schema::DT_BOOL, @@ -32,7 +63,7 @@ class SystemModel extends AbstractMapTrackingModel { 'mapId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\MapModel', + 'belongs-to-one' => 'Model\Pathfinder\MapModel', 'constraint' => [ [ 'table' => 'map', @@ -54,7 +85,7 @@ class SystemModel extends AbstractMapTrackingModel { 'typeId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\SystemTypeModel', + 'belongs-to-one' => 'Model\Pathfinder\SystemTypeModel', 'constraint' => [ [ 'table' => 'system_type', @@ -67,7 +98,7 @@ class SystemModel extends AbstractMapTrackingModel { 'nullable' => false, 'default' => 1, 'index' => true, - 'belongs-to-one' => 'Model\SystemStatusModel', + 'belongs-to-one' => 'Model\Pathfinder\SystemStatusModel', 'constraint' => [ [ 'table' => 'system_status', @@ -109,18 +140,18 @@ class SystemModel extends AbstractMapTrackingModel { 'default' => 0 ], 'signatures' => [ - 'has-many' => ['Model\SystemSignatureModel', 'systemId'] + 'has-many' => ['Model\Pathfinder\SystemSignatureModel', 'systemId'] ], 'connectionsSource' => [ - 'has-many' => ['Model\ConnectionModel', 'source'] + 'has-many' => ['Model\Pathfinder\ConnectionModel', 'source'] ], 'connectionsTarget' => [ - 'has-many' => ['Model\ConnectionModel', 'target'] + 'has-many' => ['Model\Pathfinder\ConnectionModel', 'target'] ] ]; /** - * set map data by an associative array + * set data by associative array * @param array $data */ public function setData(array $data){ @@ -193,6 +224,10 @@ public function getData(){ $systemData->planets = $this->planets ? : []; $systemData->statics = $this->statics ? : []; + if(is_object($this->faction)){ + $systemData->faction = $this->faction; + } + // max caching time for a system // the cached date has to be cleared manually on any change // this includes system, connection,... changes (all dependencies) @@ -228,7 +263,7 @@ private function getStaticSystemData(){ */ private function getStaticSystemValue(string $key){ $value = null; - if( $staticData = $this->getStaticSystemData()){ + if($staticData = $this->getStaticSystemData()){ if(isset($staticData->$key)){ $value = $staticData->$key; } @@ -242,7 +277,7 @@ private function getStaticSystemValue(string $key){ * @return bool * @throws \Exception */ - protected function validate_systemId(string $key, int $val): bool { + protected function validate_systemId(string $key, int $val) : bool { $valid = true; // check if static system data exists for systemId = $val if( !(bool)(new Universe())->getSystemData($val) ){ @@ -259,7 +294,7 @@ protected function validate_systemId(string $key, int $val): bool { * @return bool * @throws \Exception\ValidationException */ - protected function validate_statusId(string $key, int $val): bool { + protected function validate_statusId(string $key, int $val) : bool { $valid = true; if( !$this->rel('statusId')::getStatusById($val) ){ $valid = false; @@ -275,7 +310,7 @@ protected function validate_statusId(string $key, int $val): bool { * @return bool * @throws \Exception\ValidationException */ - protected function validate_description(string $key, string $val): bool { + protected function validate_description(string $key, string $val) : bool { $valid = true; if(mb_strlen($val) > 9000){ $valid = false; @@ -400,6 +435,10 @@ public function get_region(){ return ($constellationData && $constellationData->region) ? $constellationData->region->name : null; } + public function get_faction(){ + return $this->getStaticSystemValue('faction'); + } + public function get_security(){ return $this->getStaticSystemValue('security'); } @@ -441,7 +480,7 @@ public function afterInsertEvent($self, $pkeys){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { $status = parent::beforeUpdateEvent($self, $pkeys); if( !$self->isActive()){ @@ -499,14 +538,14 @@ public function getNewSignature() : SystemSignatureModel { * @return logging\LogInterface * @throws \Exception\ConfigException */ - public function newLog($action = ''): Logging\LogInterface{ + public function newLog($action = '') : Logging\LogInterface{ return $this->getMap()->newLog($action)->setTempData($this->getLogObjectData()); } /** * @return MapModel */ - public function getMap(): MapModel{ + public function getMap() : MapModel{ return $this->get('mapId'); } @@ -515,8 +554,8 @@ public function getMap(): MapModel{ * @param CharacterModel $characterModel * @return bool */ - public function hasAccess(CharacterModel $characterModel){ - return ($this->mapId) ? $this->mapId->hasAccess($characterModel) : false; + public function hasAccess(CharacterModel $characterModel) : bool { + return $this->mapId ? $this->mapId->hasAccess($characterModel) : false; } /** @@ -567,23 +606,18 @@ public function getConnections(){ /** * get all signatures of this system + * -> might be filtered by active has() filter * @return SystemSignatureModel[] */ public function getSignatures(){ - $signatures = []; - $this->filter('signatures', ['active = ?', 1], ['order' => 'name']); - if($this->signatures){ - $signatures = $this->signatures; - } - - return $signatures; + return $this->signatures ? : []; } /** * get data for all Signatures in this system * @return \stdClass[] */ - public function getSignaturesData(){ + public function getSignaturesData() : array { $signaturesData = []; $signatures = $this->getSignatures(); foreach($signatures as $signature){ @@ -595,38 +629,20 @@ public function getSignaturesData(){ /** * get Signature by id and check for access - * @param CharacterModel $characterModel - * @param $id - * @return null|SystemSignatureModel - */ - public function getSignatureById(CharacterModel $characterModel, $id){ - $signature = null; - if($this->hasAccess($characterModel)){ - $this->filter('signatures', ['active = ? AND id = ?', 1, $id]); - if($this->signatures){ - $signature = reset( $this->signatures ); - } - } - - return $signature; + * @param int $id + * @return SystemSignatureModel|null + */ + public function getSignatureById(int $id) : ?SystemSignatureModel { + return $this->relFindOne('signatures', self::getFilter('id', $id)); } /** * get a signature by its "unique" 3-digit name - * @param CharacterModel $characterModel * @param string $name - * @return null|SystemSignatureModel - */ - public function getSignatureByName(CharacterModel $characterModel, $name){ - $signature = null; - if($this->hasAccess($characterModel)){ - $this->filter('signatures', ['active = ? AND name = ?', 1, $name]); - if($this->signatures){ - $signature = reset( $this->signatures ); - } - } - - return $signature; + * @return SystemSignatureModel|null + */ + public function getSignatureByName(string $name) : ?SystemSignatureModel { + return $this->relFindOne('signatures', self::getFilter('name', $name)); } /** @@ -775,7 +791,53 @@ public function getLogObjectData($fullData = false) : array{ } /** - * see parent + * @param string $stamp + * @return array|null + */ + public function getSignatureHistoryData(string $stamp) : ?array { + $signatureHistoryData = array_filter($this->getSignaturesHistoryData(), function($historyEntry) use ($stamp){ + return md5($historyEntry['stamp']) == $stamp; + }); + return empty($signatureHistoryData) ? null : reset($signatureHistoryData); + } + + /** + * @return array + */ + public function getSignaturesHistoryData() : array { + if(!is_array($signaturesHistoryData = $this->getCacheData(self::DATA_CACHE_KEY_SIGNATURES))){ + $signaturesHistoryData = []; + } + return $signaturesHistoryData; + } + + /** + * CharacterModel $character + * @param CharacterModel $character + * @param string $action + * @throws \Exception + */ + public function updateSignaturesHistory(CharacterModel $character, string $action = 'edit'){ + if(!$this->dry()){ + $signaturesHistoryData = $this->getSignaturesHistoryData(); + $historyEntry = [ + 'stamp' => microtime(true), + 'character' => $character->getBasicData(), + 'action' => $action, + 'signatures' => $this->getSignaturesData() + ]; + + array_unshift($signaturesHistoryData, $historyEntry); + + // limit max history data + array_splice($signaturesHistoryData, self::MAX_HISTORY_SIGNATURES); + + $this->updateCacheData($signaturesHistoryData, self::DATA_CACHE_KEY_SIGNATURES, self::TTL_HISTORY_SIGNATURES); + } + } + + /** + * @see parent */ public function clearCacheData(){ parent::clearCacheData(); @@ -784,6 +846,15 @@ public function clearCacheData(){ $this->mapId->clearCacheData(); } + /** + * @see parent + */ + public function filterRel() : void { + $this->filter('signatures', self::getFilter('active', true), ['order' => 'name']); + $this->filter('connectionsTarget', self::getFilter('active', true)); + $this->filter('connectionsSource', self::getFilter('active', true)); + } + /** * @param null $db * @param null $table @@ -791,10 +862,8 @@ public function clearCacheData(){ * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['mapId', 'systemId'], true); } diff --git a/app/main/model/systemneighbourmodel.php b/app/main/model/pathfinder/systemneighbourmodel.php similarity index 91% rename from app/main/model/systemneighbourmodel.php rename to app/main/model/pathfinder/systemneighbourmodel.php index 8ec8f9d2e..289ded4fd 100644 --- a/app/main/model/systemneighbourmodel.php +++ b/app/main/model/pathfinder/systemneighbourmodel.php @@ -6,11 +6,11 @@ * Time: 00:59 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class SystemNeighbourModel extends BasicModel { +class SystemNeighbourModel extends AbstractPathfinderModel { protected $table = 'system_neighbour'; diff --git a/app/main/model/systempodkillmodel.php b/app/main/model/pathfinder/systempodkillmodel.php similarity index 95% rename from app/main/model/systempodkillmodel.php rename to app/main/model/pathfinder/systempodkillmodel.php index 932f110dd..d6cb5bdec 100644 --- a/app/main/model/systempodkillmodel.php +++ b/app/main/model/pathfinder/systempodkillmodel.php @@ -6,7 +6,7 @@ * Time: 21:04 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; diff --git a/app/main/model/systemshipkillmodel.php b/app/main/model/pathfinder/systemshipkillmodel.php similarity index 95% rename from app/main/model/systemshipkillmodel.php rename to app/main/model/pathfinder/systemshipkillmodel.php index 082b0e49e..4727b654a 100644 --- a/app/main/model/systemshipkillmodel.php +++ b/app/main/model/pathfinder/systemshipkillmodel.php @@ -6,7 +6,7 @@ * Time: 21:04 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; diff --git a/app/main/model/systemsignaturemodel.php b/app/main/model/pathfinder/systemsignaturemodel.php similarity index 87% rename from app/main/model/systemsignaturemodel.php rename to app/main/model/pathfinder/systemsignaturemodel.php index 80f4071a6..f03fc12e2 100644 --- a/app/main/model/systemsignaturemodel.php +++ b/app/main/model/pathfinder/systemsignaturemodel.php @@ -6,7 +6,7 @@ * Time: 14:34 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use lib\logging; @@ -25,7 +25,7 @@ class SystemSignatureModel extends AbstractMapTrackingModel { 'systemId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\SystemModel', + 'belongs-to-one' => 'Model\Pathfinder\SystemModel', 'constraint' => [ [ 'table' => 'system', @@ -50,7 +50,7 @@ class SystemSignatureModel extends AbstractMapTrackingModel { 'connectionId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\ConnectionModel', + 'belongs-to-one' => 'Model\Pathfinder\ConnectionModel', 'constraint' => [ [ 'table' => 'connection', @@ -74,6 +74,14 @@ class SystemSignatureModel extends AbstractMapTrackingModel { ] ]; + /** + * set data by associative array + * @param array $data + */ + public function setData(array $data){ + $this->copyfrom($data, ['name', 'groupId', 'typeId', 'description', 'connectionId']); + } + /** * get signature data * @return \stdClass @@ -91,20 +99,20 @@ public function getData(){ $signatureData->description = $this->description; if($connection = $this->getConnection()){ - $signatureData->connection = (object) []; - $signatureData->connection->id = $connection->_id; + $signatureData->connection = (object) []; + $signatureData->connection->id = $connection->_id; } $signatureData->created = (object) []; $signatureData->created->created = strtotime($this->created); if( is_object($this->createdCharacterId) ){ - $signatureData->created->character = $this->createdCharacterId->getData(); + $signatureData->created->character = $this->createdCharacterId->getBasicData(); } $signatureData->updated = (object) []; $signatureData->updated->updated = strtotime($this->updated); if( is_object($this->updatedCharacterId) ){ - $signatureData->updated->character = $this->updatedCharacterId->getData(); + $signatureData->updated->character = $this->updatedCharacterId->getBasicData(); } return $signatureData; @@ -178,7 +186,7 @@ public function getMap(): MapModel{ /** * get the connection (if attached) - * @return \Model\ConnectionModel|null + * @return ConnectionModel|null */ public function getConnection(){ return $this->connectionId; @@ -214,24 +222,16 @@ public function hasChanged(array $signatureData) : bool { * @param CharacterModel $characterModel * @return bool */ - public function hasAccess(CharacterModel $characterModel){ - return $this->systemId->hasAccess($characterModel); + public function hasAccess(CharacterModel $characterModel) : bool { + return $this->systemId ? $this->systemId->hasAccess($characterModel) : false; } /** * delete signature - * @param CharacterModel $characterModel * @return bool */ - public function delete(CharacterModel $characterModel) : bool { - $deleted = false; - if( !$this->dry() ){ - // check if character has access - if($this->hasAccess($characterModel)){ - $deleted = $this->erase(); - } - } - return $deleted; + public function delete() : bool { + return !$this->dry() ? $this->erase() : false; } /** @@ -252,7 +252,7 @@ public function afterInsertEvent($self, $pkeys){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { // "updated" column should always be updated if no changes made this signature // -> makes it easier to see what signatures have not been updated $this->touch('updated'); @@ -299,13 +299,10 @@ public function getLogObjectData() : array{ * @return bool * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['systemId', 'typeId', 'groupId']); } - return $status; } } \ No newline at end of file diff --git a/app/main/model/systemstatusmodel.php b/app/main/model/pathfinder/systemstatusmodel.php similarity index 93% rename from app/main/model/systemstatusmodel.php rename to app/main/model/pathfinder/systemstatusmodel.php index 0781d5bf1..65a236b40 100644 --- a/app/main/model/systemstatusmodel.php +++ b/app/main/model/pathfinder/systemstatusmodel.php @@ -6,11 +6,11 @@ * Time: 21:53 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class SystemStatusModel extends BasicModel { +class SystemStatusModel extends AbstractPathfinderModel { protected $table = 'system_status'; @@ -96,7 +96,8 @@ public function getData(){ * @return self|null */ public static function getStatusById(int $statusId = 1){ - $status = (new self())->getById($statusId); + $status = new self(); + $status->getById($statusId); return $status->dry() ? null : $status; } } \ No newline at end of file diff --git a/app/main/model/systemtypemodel.php b/app/main/model/pathfinder/systemtypemodel.php similarity index 92% rename from app/main/model/systemtypemodel.php rename to app/main/model/pathfinder/systemtypemodel.php index 8afe1f5ad..87e0c5c76 100644 --- a/app/main/model/systemtypemodel.php +++ b/app/main/model/pathfinder/systemtypemodel.php @@ -6,11 +6,11 @@ * Time: 21:59 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class SystemTypeModel extends BasicModel { +class SystemTypeModel extends AbstractPathfinderModel { protected $table = 'system_type'; diff --git a/app/main/model/usercharactermodel.php b/app/main/model/pathfinder/usercharactermodel.php similarity index 82% rename from app/main/model/usercharactermodel.php rename to app/main/model/pathfinder/usercharactermodel.php index c6cbf84f3..e96cb7edb 100644 --- a/app/main/model/usercharactermodel.php +++ b/app/main/model/pathfinder/usercharactermodel.php @@ -6,11 +6,11 @@ * Time: 21:49 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; -class UserCharacterModel extends BasicModel { +class UserCharacterModel extends AbstractPathfinderModel { protected $table = 'user_character'; @@ -24,7 +24,7 @@ class UserCharacterModel extends BasicModel { 'userId' => [ 'type' => Schema::DT_INT, 'index' => true, - 'belongs-to-one' => 'Model\UserModel', + 'belongs-to-one' => 'Model\Pathfinder\UserModel', 'constraint' => [ [ 'table' => 'user', @@ -36,7 +36,7 @@ class UserCharacterModel extends BasicModel { 'type' => Schema::DT_INT, 'index' => true, 'unique' => true, - 'belongs-to-one' => 'Model\CharacterModel', + 'belongs-to-one' => 'Model\Pathfinder\CharacterModel', 'constraint' => [ [ 'table' => 'character', @@ -75,14 +75,12 @@ public function getCharacter(){ * @param null $table * @param null $fields * @return bool + * @throws \Exception */ - public static function setup($db=null, $table=null, $fields=null){ - $status = parent::setup($db,$table,$fields); - - if($status === true){ + public static function setup($db = null, $table = null, $fields = null){ + if($status = parent::setup($db, $table, $fields)){ $status = parent::setMultiColumnIndex(['userId', 'characterId'], true); } - return $status; } diff --git a/app/main/model/usermodel.php b/app/main/model/pathfinder/usermodel.php similarity index 95% rename from app/main/model/usermodel.php rename to app/main/model/pathfinder/usermodel.php index 4438c1372..0ced12f09 100644 --- a/app/main/model/usermodel.php +++ b/app/main/model/pathfinder/usermodel.php @@ -6,7 +6,7 @@ * Time: 20:43 */ -namespace Model; +namespace Model\Pathfinder; use DB\SQL\Schema; use Controller; @@ -15,10 +15,16 @@ use lib\Config; use lib\logging; -class UserModel extends BasicModel { +class UserModel extends AbstractPathfinderModel { + /** + * @var string + */ protected $table = 'user'; + /** + * @var array + */ protected $fieldConf = [ 'active' => [ 'type' => Schema::DT_BOOL, @@ -40,7 +46,7 @@ class UserModel extends BasicModel { 'validate' => true ], 'userCharacters' => [ - 'has-many' => ['Model\UserCharacterModel', 'userId'] + 'has-many' => ['Model\Pathfinder\UserCharacterModel', 'userId'] ] ]; @@ -96,7 +102,7 @@ public function getSimpleData(){ * @return bool * @throws Exception\RegistrationException */ - public function beforeInsertEvent($self, $pkeys){ + public function beforeInsertEvent($self, $pkeys) : bool { $registrationStatus = Controller\Controller::getRegistrationStatus(); switch($registrationStatus){ case 0: @@ -111,7 +117,7 @@ public function beforeInsertEvent($self, $pkeys){ } /** - * @param BasicModel $self + * @param self $self * @param $pkeys */ public function afterEraseEvent($self, $pkeys){ @@ -195,15 +201,6 @@ public function hasUserCharacters(){ return is_object($this->userCharacters); } - /** - * search for user by unique username - * @param $name - * @return \DB\Cortex - */ - public function getByName($name){ - return $this->getByForeignKey('name', $name, []); - } - /** * get current character data from session * -> if §characterID == 0 -> get first character data (random) @@ -212,7 +209,7 @@ public function getByName($name){ * @return array * @throws Exception */ - public function getSessionCharacterData($characterId = 0, $objectCheck = true){ + public function getSessionCharacterData($characterId = 0, $objectCheck = true) : array { $data = []; $characterId = (int)$characterId; $currentSessionUser = (array)$this->getF3()->get(User::SESSION_KEY_USER); @@ -237,7 +234,7 @@ public function getSessionCharacterData($characterId = 0, $objectCheck = true){ /** * @var $character CharacterModel */ - $character = BasicModel::getNew('CharacterModel'); + $character = AbstractPathfinderModel::getNew('CharacterModel'); $character->getById( (int)$data['ID']); if( @@ -257,7 +254,7 @@ public function getSessionCharacterData($characterId = 0, $objectCheck = true){ * @param int $characterId * @return array */ - public function findSessionCharacterData(int $characterId): array{ + public function findSessionCharacterData(int $characterId): array { $data = []; if($characterId){ $sessionCharacters = (array)$this->getF3()->get(User::SESSION_KEY_CHARACTERS); diff --git a/app/main/model/universe/basicuniversemodel.php b/app/main/model/universe/abstractuniversemodel.php similarity index 76% rename from app/main/model/universe/basicuniversemodel.php rename to app/main/model/universe/abstractuniversemodel.php index 7fa78bf74..118b379c6 100644 --- a/app/main/model/universe/basicuniversemodel.php +++ b/app/main/model/universe/abstractuniversemodel.php @@ -1,33 +1,32 @@ refresh static data after X days + * alias name for database connection */ - const CACHE_MAX_DAYS = 60; + const DB_ALIAS = 'UNIVERSE'; - const CACHE_KEY_PREFIX = 'index_universe_'; + /** + * + */ + const CACHE_KEY_PREFIX = 'index_universe_'; /** * cache key for model data -> should "never" expire * -> until manual remove and or global cache clear */ - const CACHE_INDEX_EXPIRE_KEY = 86400 * 356 * 5; - - protected $db = 'DB_UNIVERSE'; + const CACHE_INDEX_EXPIRE_KEY = 86400 * 356 * 5; /** * get model data -> should be overwritten @@ -44,7 +43,7 @@ public function getData(){ * @param $pkeys * @return bool */ - public function beforeUpdateEvent($self, $pkeys){ + public function beforeUpdateEvent($self, $pkeys) : bool { // if model changed, 'update' col needs to be updated as well // -> data no longer "outdated" $this->touch('updated'); @@ -113,10 +112,10 @@ public function buildIndex(){ /** * add $rowKeys (hashKeys) to a search index that holds all rowKeys of a table - * @param BasicUniverseModel $model + * @param AbstractUniverseModel $model * @param array $rowKeys */ - public static function buildTableIndex(BasicUniverseModel $model, array $rowKeys = []){ + public static function buildTableIndex(AbstractUniverseModel $model, array $rowKeys = []){ $hashKeyTable = self::generateHashKeyTable($model->getTable()); if( !self::getF3()->exists($hashKeyTable, $cachedData) ){ $cachedData = []; @@ -153,9 +152,9 @@ public function loadById(int $id, string $accessToken = '', array $additionalOpt /** * @var $model self */ - $model = $this->getById($id, 0); - if($model->isOutdated()){ - $model->loadData($id, $accessToken, $additionalOptions); + $this->getById($id, 0); + if($this->isOutdated()){ + $this->loadData($id, $accessToken, $additionalOptions); } } @@ -173,7 +172,7 @@ abstract protected function loadData(int $id, string $accessToken = '', array $a * @param $value * @return string */ - public static function generateHashKeyRow(string $table, $value){ + public static function generateHashKeyRow(string $table, $value) : string { return self::generateHashKeyTable($table) . '_' . md5(strtolower((string)$value)); } @@ -183,28 +182,7 @@ public static function generateHashKeyRow(string $table, $value){ * @param string $table * @return string */ - public static function generateHashKeyTable(string $table){ + public static function generateHashKeyTable(string $table) : string { return self::CACHE_KEY_PREFIX . strtolower($table); } - - /** - * factory for all UniverseModels - * @param string $model - * @param int $ttl - * @return BasicModel|null - * @throws \Exception - */ - public static function getNew($model, $ttl = self::DEFAULT_TTL){ - $class = null; - - $model = '\\' . __NAMESPACE__ . '\\' . $model; - if(class_exists($model)){ - $db = Database::instance()->getDB('UNIVERSE'); - $class = new $model($db, null, null, $ttl); - }else{ - throw new \Exception(sprintf(self::ERROR_INVALID_MODEL_CLASS, $model)); - } - - return $class; - } } \ No newline at end of file diff --git a/app/main/model/universe/categorymodel.php b/app/main/model/universe/categorymodel.php index 0cf4ca565..f8ba50526 100644 --- a/app/main/model/universe/categorymodel.php +++ b/app/main/model/universe/categorymodel.php @@ -1,7 +1,7 @@ [ 'type' => Schema::DT_VARCHAR128, diff --git a/app/main/model/universe/factionmodel.php b/app/main/model/universe/factionmodel.php new file mode 100644 index 000000000..11764aabb --- /dev/null +++ b/app/main/model/universe/factionmodel.php @@ -0,0 +1,78 @@ + [ + 'type' => Schema::DT_VARCHAR128, + 'nullable' => false, + 'default' => '' + ], + 'description' => [ + 'type' => Schema::DT_TEXT + ], + 'sizeFactor' => [ + 'type' => Schema::DT_INT, + 'nullable' => false, + 'default' => 0 + ], + 'stationCount' => [ + 'type' => Schema::DT_INT, + 'nullable' => false, + 'default' => 0 + ], + 'stationSystemCount' => [ + 'type' => Schema::DT_INT, + 'nullable' => false, + 'default' => 0 + ], + 'systems' => [ + 'has-many' => ['Model\Universe\SystemModel', 'factionId'] + ] + ]; + + /** + * get data + * @return \stdClass + */ + public function getData(){ + $factionData = (object) []; + $factionData->id = $this->_id; + $factionData->name = $this->name; + + return $factionData; + } + + /** + * @param int $id + * @param string $accessToken + * @param array $additionalOptions + */ + protected function loadData(int $id, string $accessToken = '', array $additionalOptions = []){ + $data = self::getF3()->ccpClient()->getUniverseFactionData($id); + if(!empty($data)){ + $this->copyfrom($data, ['id', 'name', 'description', 'sizeFactor', 'stationCount', 'stationSystemCount']); + $this->save(); + } + } +} \ No newline at end of file diff --git a/app/main/model/universe/groupmodel.php b/app/main/model/universe/groupmodel.php index f0f97fc47..ec712ab92 100644 --- a/app/main/model/universe/groupmodel.php +++ b/app/main/model/universe/groupmodel.php @@ -1,7 +1,7 @@ [ 'type' => Schema::DT_VARCHAR128, @@ -25,7 +32,7 @@ class RegionModel extends BasicUniverseModel { ], 'constellations' => [ 'has-many' => ['Model\Universe\ConstellationModel', 'regionId'] - ], + ] ]; /** diff --git a/app/main/model/universe/stargatemodel.php b/app/main/model/universe/stargatemodel.php index c30baf8b7..d50e5eb6a 100644 --- a/app/main/model/universe/stargatemodel.php +++ b/app/main/model/universe/stargatemodel.php @@ -1,7 +1,7 @@ findQuery($schema->dataTypes[Schema::DT_BIGINT]); $db->exec("ALTER TABLE " . $db->quotekey('structure') . " MODIFY COLUMN " . $db->quotekey('id') . " " . $typeQuery . " NOT NULL"); } - return $status; } diff --git a/app/main/model/universe/systemmodel.php b/app/main/model/universe/systemmodel.php index 802a96161..b56152d66 100644 --- a/app/main/model/universe/systemmodel.php +++ b/app/main/model/universe/systemmodel.php @@ -1,7 +1,7 @@ [ 'type' => Schema::DT_VARCHAR128, @@ -46,6 +55,18 @@ class SystemModel extends BasicUniverseModel { ], 'validate' => 'notDry' ], + 'factionId' => [ + 'type' => Schema::DT_INT, + 'index' => true, + 'belongs-to-one' => 'Model\Universe\FactionModel', + 'constraint' => [ + [ + 'table' => 'faction', + 'on-delete' => 'CASCADE' + ] + ], + 'validate' => 'notDry' + ], 'security' => [ 'type' => Schema::DT_VARCHAR128 ], @@ -116,6 +137,10 @@ public function getData(){ $systemData->star = $this->starId->getData(); } + if($this->factionId){ + $systemData->faction = $this->factionId->getData(); + } + if( !empty($planetsData = $this->getPlanetsData()) ){ $systemData->planets = $planetsData; } diff --git a/app/main/model/universe/systemstaticmodel.php b/app/main/model/universe/systemstaticmodel.php index 8664ef736..f736b7819 100644 --- a/app/main/model/universe/systemstaticmodel.php +++ b/app/main/model/universe/systemstaticmodel.php @@ -1,7 +1,7 @@ ccpClient()->getUniverseTypesData($id); if(!empty($data)){ + /** + * @var $group GroupModel + */ $group = $this->rel('groupId'); $group->loadById($data['groupId'], $accessToken, $additionalOptions); $data['groupId'] = $group; diff --git a/app/main/model/universe/wormholemodel.php b/app/main/model/universe/wormholemodel.php index 725e5df3c..93d257a0a 100644 --- a/app/main/model/universe/wormholemodel.php +++ b/app/main/model/universe/wormholemodel.php @@ -1,7 +1,7 @@ true . +; http://php.net/manual/en/pdo.connections.php#example-1030 +; Hint: Set 'wait_timeout' to a high value in your my.conf to keep them open +; Syntax: 0 | 1 +; Default: 0 +PERSISTENT_DB_CONNECTIONS = 1 \ No newline at end of file diff --git a/app/requirements.ini b/app/requirements.ini index 77b7683ee..81afcba7c 100644 --- a/app/requirements.ini +++ b/app/requirements.ini @@ -70,6 +70,8 @@ COLLATION_DATABASE = utf8_general_ci COLLATION_CONNECTION = utf8_general_ci FOREIGN_KEY_CHECKS = ON INNODB_FILE_PER_TABLE = ON +WAIT_TIMEOUT = 28800 +INTERACTIVE_TIMEOUT = {{ @REQUIREMENTS.MYSQL.VARS.WAIT_TIMEOUT }} [REQUIREMENTS.REDIS] VERSION = 3.0 diff --git a/composer-dev.json b/composer-dev.json index f9eb6335f..8a3b377f8 100644 --- a/composer-dev.json +++ b/composer-dev.json @@ -27,10 +27,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-ctype": "*", - "ext-zmq": ">=1.1.3", - "react/zmq": "0.3.*", "monolog/monolog": "1.*", - "websoftwares/monolog-zmq-handler": "0.2.*", "swiftmailer/swiftmailer": "^6.0", "league/html-to-markdown": "4.8.*", "cache/redis-adapter": "1.0.*", @@ -38,6 +35,9 @@ "cache/array-adapter": "1.0.*", "cache/void-adapter": "1.0.*", "cache/namespaced-cache": "1.0.*", + "react/socket": "1.2.*", + "react/promise-stream": "1.1.*", + "clue/ndjson-react": "1.0.*", "exodus4d/pathfinder_esi": "dev-develop as 0.0.x-dev" }, "suggest": { diff --git a/composer.json b/composer.json index e6169d122..340560628 100644 --- a/composer.json +++ b/composer.json @@ -27,10 +27,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-ctype": "*", - "ext-zmq": ">=1.1.3", - "react/zmq": "0.3.*", "monolog/monolog": "1.*", - "websoftwares/monolog-zmq-handler": "0.2.*", "swiftmailer/swiftmailer": "^6.0", "league/html-to-markdown": "4.8.*", "cache/redis-adapter": "1.0.*", @@ -38,7 +35,10 @@ "cache/array-adapter": "1.0.*", "cache/void-adapter": "1.0.*", "cache/namespaced-cache": "1.0.*", - "exodus4d/pathfinder_esi": "dev-master#v1.3.0" + "react/socket": "1.2.*", + "react/promise-stream": "1.1.*", + "clue/ndjson-react": "1.0.*", + "exodus4d/pathfinder_esi": "v1.3.1" }, "suggest": { "ext-redis": "Redis can be used as cache backend." diff --git a/export/sql/eve_universe.sql.zip b/export/sql/eve_universe.sql.zip index 1ab3c3dc9..f88481dc7 100644 Binary files a/export/sql/eve_universe.sql.zip and b/export/sql/eve_universe.sql.zip differ diff --git a/js/app/datatables.loader.js b/js/app/datatables.loader.js index 58c2109c4..387514340 100644 --- a/js/app/datatables.loader.js +++ b/js/app/datatables.loader.js @@ -1,12 +1,14 @@ define([ 'jquery', 'app/init', + 'app/promises/promise.deferred', + 'app/promises/promise.timeout', 'datatables.net', 'datatables.net-buttons', 'datatables.net-buttons-html', 'datatables.net-responsive', 'datatables.net-select' -], ($, Init) => { +], ($, Init, DeferredPromise, TimeoutPromise) => { 'use strict'; // all Datatables stuff is available... @@ -32,10 +34,127 @@ define([ // global open event $(document).on('destroy.dt', '.dataTable ', function(e, settings){ let table = $(this); + let tableApi = new $.fn.dataTable.Api(settings); + // end all active processes (e.g. table lock) + // -> this custom extension is only available if "StatusTable" feature is enabled with it + if(typeof tableApi.endProcesses === 'function'){ + tableApi.endProcesses(); + } // remove all active counters in table table.destroyTimestampCounter(true); }); + + let StatusTable = function(settings){ + let me = this; + me.statusContainer = $('
', { + class: 'dt-stats pull-right' + }); + + me.statusLock = $('', { + class: ['dt-stat', 'disabled', 'fade'].join(' ') + }).append($('', {class: ['fas', 'fa-fw', 'fa-lock'].join(' ')})); + + me.statusRequest = $('', { + class: ['dt-stat', 'disabled', 'fade'].join(' ') + }).append($('', {class: ['fas', 'fa-fw', 'fa-sync', 'fa-spin'].join(' ')})); + + me.statusContainer.append(me.statusLock, me.statusRequest); + + // processStore holds "unfulfilled" promises + me.processStore = {}; + me.defaultProcessName = 'default'; + + me.lock = () => me.statusLock.addClass('in'); + me.unlock = () => me.statusLock.removeClass('in'); + me.request = () => me.statusRequest.addClass('in'); + me.unrequest = () => me.statusRequest.removeClass('in'); + + me.endProcess = deferredPromise => { + me.processStore[deferredPromise.data.name].delete(deferredPromise); + // update table processStatus + me.updateProcessStatus(deferredPromise.data.name); + }; + + me.hasProcesses = name => { + let hasProcesses = false; + if(me.processStore[name] instanceof Map){ + hasProcesses = me.processStore[name].size > 0; + } + return hasProcesses; + }; + + me.updateProcessStatus = name => { + let method = me.hasProcesses(name) ? name : 'un' + name; + me[method](); + }; + + $.fn.dataTable.Api.register('newProcess()', function(name = me.defaultProcessName){ + // new DeferredPromise for process + let deferredPromise = new DeferredPromise(); + deferredPromise.data = {name: name}; + + // reject DeferredPromise after timeout (if not resolved + let timeoutPromise = new TimeoutPromise(deferredPromise); + timeoutPromise + .then(function(name, payload){ + // resolved within timeout -> wait for finally() block + }.bind(me, name)) + .catch(error => { + if(error instanceof Error){ + // either timeout error or error from rejected deferredPromise + console.warn(error); + } + }) + .finally(function(deferredPromise){ + // no matter if TimeoutPromise is resolved or rejected + // -> remove from processStore + this.endProcess(deferredPromise); + }.bind(me, deferredPromise)); + + // store TimeoutPromise ------------------------------------------------------------------------------- + if(!(me.processStore[name] instanceof Map)){ + me.processStore[name] = new Map(); + } + me.processStore[name].set(deferredPromise); + + // update table processStatus + me.updateProcessStatus(name); + + return deferredPromise; + }); + + $.fn.dataTable.Api.register('hasProcesses()', function(name = me.defaultProcessName){ + return me.hasProcesses(name); + }); + + $.fn.dataTable.Api.register('endProcess()', function(deferredPromise){ + me.endProcess(deferredPromise); + deferredPromise.resolve(); + }); + + $.fn.dataTable.Api.register('endProcesses()', function(){ + for(let [name, store] of Object.entries(me.processStore)){ + for(let [deferredPromise, value] of store.entries()){ + me.endProcess(deferredPromise); + deferredPromise.resolve(); + } + } + }); + }; + + StatusTable.prototype.getContainer = function(){ + return this.statusContainer; + }; + + $.fn.dataTable.ext.feature.push({ + fnInit: settings => { + let oStatusTable = new StatusTable(settings); + return oStatusTable.getContainer(); + }, + cFeature: 'S', + sFeature: 'StatusTable' + }); }; initDefaultDatatablesConfig(); diff --git a/js/app/init.js b/js/app/init.js index bd925aac7..3e3c008e4 100644 --- a/js/app/init.js +++ b/js/app/init.js @@ -34,16 +34,9 @@ define(['jquery'], ($) => { getMapConnectionData: '/api/map/getConnectionData', // ajax URL - get connection data getMapLogData: '/api/map/getLogData', // ajax URL - get logs data // system API - getSystemData: '/api/system/getData', // ajax URL - get system data getSystemGraphData: '/api/system/graphData', // ajax URL - get all system graph data setDestination: '/api/system/setDestination', // ajax URL - set destination pokeRally: '/api/system/pokeRally', // ajax URL - send rally point pokes - // signature API - saveSignatureData: '/api/signature/save', // ajax URL - save signature data for system - deleteSignatureData: '/api/signature/delete', // ajax URL - delete signature data for system - // structure API - saveStructureData: '/api/structure/save', // ajax URL - save structure data - deleteStructureData: '/api/structure/delete', // ajax URL - delete structure data // route API searchRoute: '/api/route/search', // ajax URL - search system routes // stats API @@ -323,6 +316,12 @@ define(['jquery'], ($) => { }, // map scopes defaultMapScope: 'wh', // default scope for connection + // map endpoint types + endpointTypes: { + bubble: { + cssClass: 'pf-map-endpoint-bubble', + } + }, // map connection types connectionTypes: { abyssal: { @@ -376,7 +375,7 @@ define(['jquery'], ($) => { ['Label', { label: 'frig', - cssClass: ['pf-map-connection-overlay', 'frig'].join(' '), + cssClass: ['pf-map-component-overlay', 'frig'].join(' '), location: 0.6 }] ] @@ -387,43 +386,54 @@ define(['jquery'], ($) => { ['Label', { label: ' save mass', - cssClass: ['pf-map-connection-overlay', 'mass'].join(' '), + cssClass: ['pf-map-component-overlay', 'mass'].join(' '), location: 0.6 }] ] }, - active: { + state_active: { cssClass: 'pf-map-connection-active' + }, + state_process: { + cssClass: 'pf-map-connection-process', + overlays:[ + ['Label', + { + label: '', + cssClass: ['pf-map-connection-state-overlay'].join(' '), + location: 0.6 + }] + ] } }, // signature groups signatureGroups: { 1: { - name: '(combat site|kampfgebiet|site de combat)', //* + name: '(combat site|kampfgebiet|site de combat|Боевой район)', //* label: 'Combat' }, 2: { - name: '(relic site|reliktgebiet|site de reliques)', //* + name: '(relic site|reliktgebiet|site de reliques|Археологический район)', //* label: 'Relic' }, 3: { - name: '(data site|datengebiet|site de données)', + name: '(data site|datengebiet|site de données|Информационный район)', label: 'Data' }, 4: { - name: '(gas site|gasgebiet|site de collecte de gaz)', + name: '(gas site|gasgebiet|site de collecte de gaz|Газовый район)', label: 'Gas' }, 5: { - name: '(wormhole|wurmloch|trou de ver)', + name: '(wormhole|wurmloch|trou de ver|Червоточина)', label: 'Wormhole' }, 6: { - name: '(ore site|mineraliengebiet|site de minerai)', + name: '(ore site|mineraliengebiet|site de minerai|Астероидный район)', label: 'Ore' }, 7: { - name: '(ghost)', + name: '(ghost|Призрачный)', label: 'Ghost' } }, diff --git a/js/app/logging.js b/js/app/logging.js index 3eb00ab69..aee421831 100644 --- a/js/app/logging.js +++ b/js/app/logging.js @@ -100,7 +100,7 @@ define([ // init log table logDataTable = logTable.DataTable({ - dom: '<"row"<"col-xs-3"l><"col-xs-5"B><"col-xs-4"f>>' + + dom: '<"row"<"col-xs-3"l><"col-xs-5"B><"col-xs-4"fS>>' + '<"row"<"col-xs-12"tr>>' + '<"row"<"col-xs-5"i><"col-xs-7"p>>', buttons: { diff --git a/js/app/login.js b/js/app/login.js index 602d841f4..c544f308b 100644 --- a/js/app/login.js +++ b/js/app/login.js @@ -213,20 +213,6 @@ define([ .addClass('text-content') .attr('imgTitle', obj.title); - let moduleConfig = { - name: obj.href, // template name - position: newSlideContent, - functions: { - after: function(){ - // element inserted -> load complete - callback({ - type: 'complete', - target: newSlideContent[0] - }); - } - } - }; - // render HTML file (template) let moduleData = { id: config.headHeaderMapId, @@ -236,7 +222,9 @@ define([ mapBgImageId: config.mapBgImageId }; - Render.showModule(moduleConfig, moduleData); + Render.render(obj.href, moduleData) + .then(payload => newSlideContent.append(payload)) + .then(payload => callback({type: 'complete', target: payload[0]})); return newSlideContent[0]; }; diff --git a/js/app/map/contextmenu.js b/js/app/map/contextmenu.js index aff35380f..26fc68f20 100644 --- a/js/app/map/contextmenu.js +++ b/js/app/map/contextmenu.js @@ -10,146 +10,58 @@ define([ 'use strict'; let config = { - dynamicElementWrapperId: 'pf-dialog-wrapper', // wrapper div for context menus (initial hidden) - - mapContextMenuId: 'pf-map-contextmenu', // id for "maps" context menu - connectionContextMenuId: 'pf-map-connection-contextmenu', // id for "connections" context menu - systemContextMenuId: 'pf-map-system-contextmenu' // id for "systems" context menu + mapContextMenuId: 'pf-map-contextmenu', // id for "maps" context menu + connectionContextMenuId: 'pf-map-connection-contextmenu', // id for "connections" context menu + endpointContextMenuId: 'pf-map-endpoint-contextmenu', // id for "endpoints" context menu + systemContextMenuId: 'pf-map-system-contextmenu', // id for "systems" context menu + + animationInType: 'transition.flipXIn', + animationInDuration: 150, + animationOutType: 'transition.flipXOut', + animationOutDuration: 150 }; - $.fn.contextMenu = function(settings){ - - // animation - let animationInType = 'transition.flipXIn'; - let animationInDuration = 150; - let animationOutType = 'transition.flipXOut'; - let animationOutDuration = 150; - - return this.each(function(){ - - // Open context menu - $(this).off('pf:openContextMenu').on('pf:openContextMenu', function(e, originalEvent, component, hiddenOptions, activeOptions, disabledOptions){ - - // hide all other open context menus - $('#pf-dialog-wrapper > .dropdown-menu').hide(); - - let contextMenu = $(settings.menuSelector); - - let menuLiElements = contextMenu.find('li'); - - // reset all menu entries - menuLiElements.removeClass('active').removeClass('disabled').show(); - - // hide specific menu entries - for(let action of hiddenOptions){ - contextMenu.find('li[data-action="' + action + '"]').hide(); - } - - //set active specific menu entries - for(let action of activeOptions){ - contextMenu.find('li[data-action="' + action + '"]').addClass('active'); - } - - //disable specific menu entries - for(let action of disabledOptions){ - contextMenu.find('li[data-action="' + action + '"]').addClass('disabled'); - } - - //open menu - contextMenu.css({ - position: 'absolute', - left: getLeftLocation(originalEvent), - top: getTopLocation(originalEvent) - }).velocity(animationInType, { - duration: animationInDuration, - complete: function(){ - - let posX = 0; - let posY = 0; - - if( - originalEvent.offsetX && - originalEvent.offsetY - ){ - // Chrome - posX = originalEvent.offsetX; - posY = originalEvent.offsetY; - }else if(originalEvent.originalEvent){ - // Firefox -> #415 - posX = originalEvent.originalEvent.layerX; - posY = originalEvent.originalEvent.layerY; - } - - let position = { - x: posX, - y: posY - }; - - $(this).off('click').one('click', {component: component, position: position}, function(e){ - // hide contextmenu - $(this).hide(); - - let params = { - selectedMenu: $(e.target), - component: e.data.component, - position: e.data.position - }; - - settings.menuSelected.call(this, params); - return false; - }); - } - }); - - //make sure menu closes on any click - $(document).one('click.closeContextmenu', function(){ - $('.dropdown-menu[role="menu"]').velocity(animationOutType, { - duration: animationOutDuration - }); - }); - - return false; - }); - - }); - - function getLeftLocation(e){ - let mouseWidth = e.pageX; - let pageWidth = $(window).width(); - let menuWidth = $(settings.menuSelector).width(); - - // opening menu would pass the side of the page - if(mouseWidth + menuWidth > pageWidth && - menuWidth < mouseWidth){ - return mouseWidth - menuWidth; - } - return mouseWidth; + /** + * calc menu X coordinate + * @param e + * @param menuWidth + * @returns {number|*} + */ + let getMenuLeftCoordinate = (e, menuWidth) => { + let mouseWidth = e.pageX; + let pageWidth = $(window).width(); + + // opening menu would pass the side of the page + if(mouseWidth + menuWidth > pageWidth && + menuWidth < mouseWidth){ + return mouseWidth - menuWidth; } + return mouseWidth; + }; - function getTopLocation(e){ - let mouseHeight = e.pageY; - let pageHeight = $(window).height(); - let menuHeight = $(settings.menuSelector).height(); - - // opening menu would pass the bottom of the page - if(mouseHeight + menuHeight > pageHeight && - menuHeight < mouseHeight){ - return mouseHeight - menuHeight; - } - return mouseHeight; + /** + * calc menu Y coordinate + * @param e + * @param menuHeight + * @returns {number|*} + */ + let getMenuTopCoordinate = (e, menuHeight) => { + let mouseHeight = e.pageY; + let pageHeight = $(window).height(); + + // opening menu would pass the bottom of the page + if(mouseHeight + menuHeight > pageHeight && + menuHeight < mouseHeight){ + return mouseHeight - menuHeight; } - + return mouseHeight; }; /** - * load context menu template for maps + * render context menu template for maps + * @returns {*} */ - let initMapContextMenu = () => { - let moduleConfig = { - name: 'modules/contextmenu', - position: $('#' + config.dynamicElementWrapperId) - }; - + let renderMapContextMenu = () => { let moduleData = { id: config.mapContextMenuId, items: [ @@ -170,18 +82,14 @@ define([ ] }; - Render.showModule(moduleConfig, moduleData); + return Render.render('modules/contextmenu', moduleData); }; /** - * load context menu template for connections + * render context menu template for connections + * @returns {*} */ - let initConnectionContextMenu = () => { - let moduleConfig = { - name: 'modules/contextmenu', - position: $('#' + config.dynamicElementWrapperId) - }; - + let renderConnectionContextMenu = () => { let moduleData = { id: config.connectionContextMenuId, items: [ @@ -206,15 +114,30 @@ define([ ] }; - Render.showModule(moduleConfig, moduleData); + return Render.render('modules/contextmenu', moduleData); }; /** - * load context menu template for systems - * @param systemStatusData + * render context menu template for endpoints + * @returns {*} */ - let initSystemContextMenu = (systemStatusData) => { + let renderEndpointContextMenu = () => { + let moduleData = { + id: config.endpointContextMenuId, + items: [ + {icon: 'fa-globe', action: 'bubble', text: 'bubbled'} + ] + }; + + return Render.render('modules/contextmenu', moduleData); + }; + /** + * render context menu template for systems + * @param systemStatusData + * @returns {*} + */ + let renderSystemContextMenu = systemStatusData => { let statusData = []; for(let [statusName, data] of Object.entries(systemStatusData)){ statusData.push({ @@ -225,11 +148,6 @@ define([ }); } - let moduleConfig = { - name: 'modules/contextmenu', - position: $('#' + config.dynamicElementWrapperId) - }; - let moduleData = { id: config.systemContextMenuId, items: [ @@ -250,12 +168,132 @@ define([ ] }; - Render.showModule(moduleConfig, moduleData); + return Render.render('modules/contextmenu', moduleData); + }; + + /** + * prepare (hide/activate/disable) some menu options + * @param menuElement + * @param hiddenOptions + * @param activeOptions + * @param disabledOptions + * @returns {*} + */ + let prepareMenu = (menuElement, hiddenOptions, activeOptions, disabledOptions) => { + let menuLiElements = menuElement.find('li'); + + // reset all menu entries + menuLiElements.removeClass('active').removeClass('disabled').show(); + + // hide specific menu entries + for(let action of hiddenOptions){ + menuElement.find('li[data-action="' + action + '"]').hide(); + } + + //set active specific menu entries + for(let action of activeOptions){ + menuElement.find('li[data-action="' + action + '"]').addClass('active'); + } + + //disable specific menu entries + for(let action of disabledOptions){ + menuElement.find('li[data-action="' + action + '"]').addClass('disabled'); + } + + return menuElement; + }; + + /** + * close all context menus (map, connection,...) + * @param excludeMenu + */ + let closeMenus = excludeMenu => { + let allMenus = $('.dropdown-menu[role="menu"]'); + if(excludeMenu){ + allMenus = allMenus.not(excludeMenu); + } + + allMenus.velocity(config.animationOutType, { + duration: config.animationOutDuration + }); + }; + + /** + * open menu handler + * @param menuConfig + * @param e + * @param context + */ + let openMenu = (menuConfig, e, context) => { + let menuElement = $('#' + menuConfig.id); + + // close all other context menus + closeMenus(menuElement); + + // remove menu list click event + // -> required in case the close handler could not remove them properly + // -> this happens if menu re-opens without closing (2x right click) + menuElement.off('click.contextMenuSelect', 'li'); + + // hide/activate/disable + menuElement = prepareMenu(menuElement, menuConfig.hidden, menuConfig.active, menuConfig.disabled); + + menuElement.css({ + position: 'absolute', + left: getMenuLeftCoordinate(e, menuElement.width()), + top: getMenuTopCoordinate(e, menuElement.height()) + }).velocity(config.animationInType, { + duration: config.animationInDuration, + complete: function(){ + context = { + original: { + event: e, + context: context, + }, + selectCallback: menuConfig.selectCallback + }; + + $(this).one('click.contextMenuSelect', 'li', context, selectHandler); + } + }); + }; + + /** + * menu item select handler + * @param e + */ + let selectHandler = e => { + if(e.data.selectCallback){ + e.data.selectCallback( + $(e.currentTarget).attr('data-action'), + e.data.original.context.component, + e.data.original.event + ); + } + }; + + /** + * default config (skeleton) for valid context menu configuration + * @returns {{hidden: Array, active: Array, disabled: Array, id: string, selectCallback: null}} + */ + let defaultMenuOptionConfig = () => { + return { + 'id': '', + 'selectCallback': null, + 'hidden': [], + 'active': [], + 'disabled': [] + }; }; return { - initMapContextMenu: initMapContextMenu, - initConnectionContextMenu: initConnectionContextMenu, - initSystemContextMenu: initSystemContextMenu + config: config, + defaultMenuOptionConfig: defaultMenuOptionConfig, + renderMapContextMenu: renderMapContextMenu, + renderConnectionContextMenu: renderConnectionContextMenu, + renderEndpointContextMenu: renderEndpointContextMenu, + renderSystemContextMenu: renderSystemContextMenu, + openMenu: openMenu, + closeMenus: closeMenus }; }); \ No newline at end of file diff --git a/js/app/map/layout.js b/js/app/map/layout.js index 25e9d3560..a40f95e57 100644 --- a/js/app/map/layout.js +++ b/js/app/map/layout.js @@ -394,7 +394,30 @@ define(() => { } } + /** + * return mouse coordinates from event + * @param e + * @returns {{x: number, y: number}} + */ + let getEventCoordinates = e => { + let posX = 0; + let posY = 0; + + if(e.offsetX && e.offsetY){ + // Chrome + posX = e.offsetX; + posY = e.offsetY; + }else if(e.originalEvent){ + // Firefox -> #415 + posX = e.originalEvent.layerX; + posY = e.originalEvent.layerY; + } + + return {x: posX, y: posY}; + }; + return { - Position: Position + Position: Position, + getEventCoordinates: getEventCoordinates }; }); \ No newline at end of file diff --git a/js/app/map/magnetizing.js b/js/app/map/magnetizing.js index 409541842..f63f8ed20 100644 --- a/js/app/map/magnetizing.js +++ b/js/app/map/magnetizing.js @@ -74,7 +74,7 @@ define([ } if(markAsUpdated === true){ - $(system).markAsChanged(); + MapUtil.markAsChanged($(system)); } }; diff --git a/js/app/map/map.js b/js/app/map/map.js index 237fccb17..a79bf830b 100644 --- a/js/app/map/map.js +++ b/js/app/map/map.js @@ -6,9 +6,9 @@ define([ 'jquery', 'app/init', 'app/util', - 'app/render', 'bootbox', 'app/map/util', + 'app/map/contextmenu', 'app/map/system', 'app/map/layout', 'app/map/magnetizing', @@ -16,7 +16,7 @@ define([ 'dragToSelect', 'app/map/overlay', 'app/map/local' -], ($, Init, Util, Render, bootbox, MapUtil, System, Layout, MagnetizerWrapper) => { +], ($, Init, Util, bootbox, MapUtil, MapContextMenu, System, Layout, MagnetizerWrapper) => { 'use strict'; @@ -49,11 +49,6 @@ define([ endpointSourceClass: 'pf-map-endpoint-source', endpointTargetClass: 'pf-map-endpoint-target', - // context menus - mapContextMenuId: 'pf-map-contextmenu', - connectionContextMenuId: 'pf-map-connection-contextmenu', - systemContextMenuId: 'pf-map-system-contextmenu', - // system security classes systemSec: 'pf-system-sec' }; @@ -113,9 +108,38 @@ define([ // uniqueEndpoint: false, anchor: 'Continuous' }, + endpointTypes: Init.endpointTypes, connectionTypes: Init.connectionTypes }; + /** + * revalidate (repaint) all connections of el + * -> in addition this re-calculates the Location of potential Endpoint Overlays + * @param map + * @param element (can also be an array) + */ + let revalidate = (map, element) => { + map.revalidate(element); + + // get attached connections + let elements = (typeof element === 'object' && element.length) ? element : [element]; + for(let element of elements){ + let connectionsInfo = map.anchorManager.getConnectionsFor(element.id); + for(let connectionInfo of connectionsInfo){ + // index 0 -> Connection, 1 -> Endpoint + // -> we need BOTH endpoints of a connection -> index 0 + for(let endpoint of connectionInfo[0].endpoints){ + // check if there is a Label overlay + let overlay = endpoint.getOverlay('pf-map-endpoint-overlay'); + if(overlay instanceof jsPlumb.Overlays.Label){ + let label = overlay.getParameter('label'); + overlay.setLocation(MapUtil.getLabelEndpointOverlayLocation(endpoint, label)); + } + } + } + } + }; + /** * updates a system with current information * @param map @@ -286,7 +310,7 @@ define([ duration: 50, display: 'auto', progress: function(){ - //revalidate element size and repaint + //re-validate element size and repaint map.revalidate( systemDomId ); }, complete: function(){ @@ -375,7 +399,6 @@ define([ // get system info classes let effectBasicClass = MapUtil.getEffectInfoForSystem('effect', 'class'); - let effectName = MapUtil.getEffectInfoForSystem(data.effect, 'name'); let effectClass = MapUtil.getEffectInfoForSystem(data.effect, 'class'); let secClass = Util.getSecurityClassForSystem(data.security); @@ -453,14 +476,14 @@ define([ // move them to the "top" $(system).updateSystemZIndex(); }, - progress: function(){ - map.revalidate( systemId ); + progress: function(system){ + revalidate(map, system); }, complete: function(system){ // show tooltip $(system).toggleSystemTooltip('show', {show: true}); - map.revalidate( systemId ); + revalidate(map, system); } } ); @@ -489,6 +512,7 @@ define([ system.data('region', data.region.name); system.data('constellationId', parseInt(data.constellation.id)); system.data('constellation', data.constellation.name); + system.data('faction', data.faction); system.data('planets', data.planets); system.data('shattered', data.shattered); system.data('statics', data.statics); @@ -497,7 +521,7 @@ define([ system.attr('data-mapid', parseInt(mapContainer.data('id'))); // locked system - if( Boolean( system.data('locked') ) !== data.locked ){ + if( Boolean(system.data('locked')) !== data.locked ){ system.toggleLockSystem(false, {hideNotification: true, hideCounter: true, map: map}); } @@ -512,124 +536,279 @@ define([ }; /** - * set observer for a given connection + * system actions (e.g. for contextmenu) + * @param action + * @param system + */ + let systemActions = (action, system) => { + let mapContainer = system.closest('.' + config.mapClass); + let map = MapUtil.getMapInstance(system.attr('data-mapid')); + let systemData = {}; + + switch(action){ + case 'add_system': + // add a new system + System.showNewSystemDialog(map, {sourceSystem: system}, saveSystemCallback); + break; + case 'lock_system': + // lock system + system.toggleLockSystem(true, {map: map}); + + // repaint connections, -> system changed its size! + map.repaint(system); + + MapUtil.markAsChanged(system); + break; + case 'set_rally': + // toggle rally point + if(!system.data('rallyUpdated')){ + $.fn.showRallyPointDialog(system); + }else{ + // remove rally point + system.setSystemRally(0); + MapUtil.markAsChanged(system); + } + break; + case 'find_route': + // show find route dialog + systemData = system.getSystemData(); + MapUtil.showFindRouteDialog(mapContainer, { + systemId: systemData.systemId, + name: systemData.name + }); + break; + case 'select_connections': + let connections = MapUtil.searchConnectionsBySystems(map, [system], '*'); + MapUtil.showConnectionInfo(map, connections); + break; + case 'change_status_unknown': + case 'change_status_friendly': + case 'change_status_occupied': + case 'change_status_hostile': + case 'change_status_empty': + case 'change_status_unscanned': + // change system status + system.getMapOverlay('timer').startMapUpdateCounter(); + + let statusString = action.split('_'); + + system.setSystemStatus(statusString[2]); + + MapUtil.markAsChanged(system); + break; + case 'delete_system': + // delete this system AND delete selected systems as well + let selectedSystems = mapContainer.getSelectedSystems(); + $.merge(selectedSystems, system); + $.uniqueSort(selectedSystems); + $.fn.showDeleteSystemDialog(map, selectedSystems); + break; + case 'set_destination': + case 'add_first_waypoint': + case 'add_last_waypoint': + systemData = system.getSystemData(); + Util.setDestination(systemData, action); + break; + } + }; + + /** + * map actions (e.g. for contextmenu) + * @param action * @param map - * @param connection + * @param e */ - let setConnectionObserver = function(map, connection){ + let mapActions = (action, map, e) => { + let mapElement = $(map.getContainer()); + let mapId = parseInt(mapElement.data('id')); + + switch(action){ + case 'add_system': + // add new system dialog + let position = Layout.getEventCoordinates(e); + + let grid = [MapUtil.config.mapSnapToGridDimension, MapUtil.config.mapSnapToGridDimension]; + let positionFinder = new Layout.Position({ + container: mapElement[0], + center: [position.x, position.y], + loops: 5, + defaultGapX: 10, + defaultGapY: 10, + grid: mapElement.hasClass(MapUtil.config.mapGridClass) ? grid : false, + debug: false + }); - // get map container - let mapElement = $( map.getContainer() ); - let connectionCanvas = $(connection.canvas); + let dimensions = positionFinder.findNonOverlappingDimensions(1, 8); - // if the connection already exists -> do not set it twice - connection.unbind('contextmenu').bind('contextmenu', function(component, e){ - e.preventDefault(); - e.stopPropagation(); + if(dimensions.length){ + position.x = dimensions[0].left; + position.y = dimensions[0].top; + } - // trigger menu "open - Promise.all([ - getHiddenContextMenuOptions(component), - getActiveContextMenuOptions(component), - getDisabledContextMenuOptions(component) - ]).then(payload => { - $(e.target).trigger('pf:openContextMenu', [e, component, payload[0], payload[1], payload[2]]); - }); + System.showNewSystemDialog(map, {position: position}, saveSystemCallback); + break; + case 'select_all': + mapElement.selectAllSystems(); + break; + case 'filter_wh': + case 'filter_stargate': + case 'filter_jumpbridge': + case 'filter_abyssal': + // filter (show/hide) + let filterScope = action.split('_')[1]; + let filterScopeLabel = MapUtil.getScopeInfoForConnection( filterScope, 'label'); + + let promiseStore = MapUtil.getLocaleData('map', mapId); + promiseStore.then(data => { + let filterScopes = []; + if(data && data.filterScopes){ + filterScopes = data.filterScopes; + } + // add or remove this scope from filter + let index = filterScopes.indexOf(filterScope); + if(index >= 0){ + filterScopes.splice(index, 1); + }else{ + filterScopes.push(filterScope); + // "all filters active" == "no filter" + if(filterScopes.length === Object.keys(Init.connectionScopes).length){ + filterScopes = []; + } + } - return false; - }); + // save filterScopes in IndexDB + MapUtil.storeLocalData('map', mapId, 'filterScopes', filterScopes); + MapUtil.filterMapByScopes(map, filterScopes); - /** - * init context menu for all connections - * must be triggered manually on demand - */ - connectionCanvas.contextMenu({ - menuSelector: '#' + config.connectionContextMenuId, - menuSelected: function(params){ - - let action = params.selectedMenu.attr('data-action'); - let activeConnection = params.component; - let activeScope = activeConnection.scope; - let activeScopeName = MapUtil.getScopeInfoForConnection( activeScope, 'label'); - - switch(action){ - case 'delete_connection': - // delete a single connection - - // confirm dialog - bootbox.confirm('Is this connection really gone?', function(result){ - if(result){ - MapUtil.deleteConnections([activeConnection]); - } - }); - break; - case 'frigate': // set as frigate hole - case 'preserve_mass': // set "preserve mass - case 'wh_eol': // set "end of life" - mapElement.getMapOverlay('timer').startMapUpdateCounter(); + Util.showNotify({title: 'Scope filter changed', text: filterScopeLabel, type: 'success'}); + }); + break; + case 'delete_systems': + // delete all selected systems with its connections + let selectedSystems = mapElement.getSelectedSystems(); + $.fn.showDeleteSystemDialog(map, selectedSystems); + break; + case 'map_edit': + // open map edit dialog tab + $(document).triggerMenuEvent('ShowMapSettings', {tab: 'edit'}); + break; + case 'map_info': + // open map info dialog tab + $(document).triggerMenuEvent('ShowMapInfo', {tab: 'information'}); + break; + } + }; - activeConnection.toggleType( action ); + /** + * connection actions (e.g. for contextmenu) + * @param action + * @param connection + */ + let connectionActions = (action, connection) => { + if(!connection._jsPlumb){ + Util.showNotify({title: 'Connection not found', type: 'error'}); + return; + } - $(activeConnection).markAsChanged(); - break; - case 'status_fresh': - case 'status_reduced': - case 'status_critical': - let newStatus = action.split('_')[1]; - mapElement.getMapOverlay('timer').startMapUpdateCounter(); + let map = connection._jsPlumb.instance; + let mapElement = $(map.getContainer()); - MapUtil.setConnectionWHStatus(activeConnection, 'wh_' + newStatus); - $(activeConnection).markAsChanged(); - break; - case 'scope_wh': - case 'scope_stargate': - case 'scope_jumpbridge': - let newScope = action.split('_')[1]; - let newScopeName = MapUtil.getScopeInfoForConnection( newScope, 'label'); + let scope = connection.scope; + let scopeName = MapUtil.getScopeInfoForConnection(scope, 'label'); - bootbox.confirm('Change scope from ' + activeScopeName + ' to ' + newScopeName + '?', function(result){ - if(result){ + switch(action){ + case 'delete_connection': + // delete a single connection - mapElement.getMapOverlay('timer').startMapUpdateCounter(); + // confirm dialog + bootbox.confirm('Is this connection really gone?', function(result){ + if(result){ + MapUtil.deleteConnections([connection]); + } + }); + break; + case 'frigate': // set as frigate hole + case 'preserve_mass': // set "preserve mass + case 'wh_eol': // set "end of life" + mapElement.getMapOverlay('timer').startMapUpdateCounter(); + connection.toggleType(action); + MapUtil.markAsChanged(connection); + break; + case 'status_fresh': + case 'status_reduced': + case 'status_critical': + let newStatus = action.split('_')[1]; + mapElement.getMapOverlay('timer').startMapUpdateCounter(); + + MapUtil.setConnectionWHStatus(connection, 'wh_' + newStatus); + MapUtil.markAsChanged(connection); + break; + case 'scope_wh': + case 'scope_stargate': + case 'scope_jumpbridge': + let newScope = action.split('_')[1]; + let newScopeName = MapUtil.getScopeInfoForConnection( newScope, 'label'); + + bootbox.confirm('Change scope from ' + scopeName + ' to ' + newScopeName + '?', function(result){ + if(result){ + mapElement.getMapOverlay('timer').startMapUpdateCounter(); - setConnectionScope(activeConnection, newScope); + setConnectionScope(connection, newScope); - Util.showNotify({title: 'Connection scope changed', text: 'New scope: ' + newScopeName, type: 'success'}); + Util.showNotify({title: 'Connection scope changed', text: 'New scope: ' + newScopeName, type: 'success'}); - $(activeConnection).markAsChanged(); - } - }); - break; - } + MapUtil.markAsChanged(connection); + } + }); + break; + } + }; - } - }); + /** + * endpoint actions (e.g. for contextmenu) + * @param action + * @param endpoint + */ + let endpointActions = (action, endpoint) => { + let map = endpoint._jsPlumb.instance; + let mapElement = $(map.getContainer()); - // connection click events ==================================================================================== + switch(action){ + case 'bubble': + mapElement.getMapOverlay('timer').startMapUpdateCounter(); + endpoint.toggleType(action); - let single = function(e){ - let connection = this; - // left mouse button - if(e.which === 1){ - if(e.ctrlKey === true){ - // an "active" connection is required before adding more "selected" connections - let activeConnections = MapUtil.getConnectionsByType(map, 'active'); - if(activeConnections.length >= config.maxActiveConnections && !connection.hasType('active')){ - Util.showNotify({title: 'Connection select limit', text: 'You can´t select more connections', type: 'warning'}); + for(let connection of endpoint.connections){ + MapUtil.markAsChanged(connection); + } + break; + } + }; + + /** + * click event handler for a Connection + * @param connection + * @param e + */ + let connectionClickHandler = (connection, e) => { + if(e.which === 1){ + let map = connection._jsPlumb.instance; + if(e.ctrlKey === true){ + // an "state_active" connection is required before adding more "selected" connections + let activeConnections = MapUtil.getConnectionsByType(map, 'state_active'); + if(activeConnections.length >= config.maxActiveConnections && !connection.hasType('state_active')){ + Util.showNotify({title: 'Connection select limit', text: 'You can´t select more connections', type: 'warning'}); + }else{ + if(activeConnections.length > 0){ + MapUtil.toggleConnectionActive(map, [connection]); }else{ - if(activeConnections.length > 0){ - MapUtil.toggleConnectionActive(map, [connection]); - }else{ - MapUtil.showConnectionInfo(map, [connection]); - } + MapUtil.showConnectionInfo(map, [connection]); } - }else{ - MapUtil.showConnectionInfo(map, [connection]); } + }else{ + MapUtil.showConnectionInfo(map, [connection]); } - }.bind(connection); - - Util.singleDoubleClick(connectionCanvas, single, () => {}); + } }; /** @@ -637,28 +816,23 @@ define([ * @param connection * @param scope */ - let setConnectionScope = function(connection, scope){ - let map = connection._jsPlumb.instance; + let setConnectionScope = (connection, scope) => { let currentConnector = connection.getConnector(); let newConnector = MapUtil.getScopeInfoForConnection(scope, 'connectorDefinition'); if(currentConnector.type !== newConnector[0]){ // connector has changed - - connection.setConnector( newConnector ); + connection.setConnector(newConnector); // remove all connection types connection.clearTypes(); // set new new connection type // if scope changed -> connection type == scope - connection.setType( MapUtil.getDefaultConnectionTypeByScope(scope) ); + connection.setType(MapUtil.getDefaultConnectionTypeByScope(scope)); // change scope connection.scope = scope; - - // new observer is required after scope change - setConnectionObserver(map, connection); } }; @@ -668,13 +842,13 @@ define([ * @param connectionData * @returns new connection */ - let drawConnection = function(map, connectionData){ - let mapContainer = $( map.getContainer() ); + let drawConnection = (map, connectionData) => { + let mapContainer = $(map.getContainer()); let mapId = mapContainer.data('id'); let connectionId = connectionData.id || 0; let connection; - let sourceSystem = $('#' + MapUtil.getSystemId(mapId, connectionData.source) ); - let targetSystem = $('#' + MapUtil.getSystemId(mapId, connectionData.target) ); + let sourceSystem = $('#' + MapUtil.getSystemId(mapId, connectionData.source)); + let targetSystem = $('#' + MapUtil.getSystemId(mapId, connectionData.target)); // check if both systems exists // (If not -> something went wrong e.g. DB-Foreign keys for "ON DELETE",...) @@ -685,13 +859,15 @@ define([ connection = map.connect({ source: sourceSystem[0], target: targetSystem[0], - /* - parameters: { - connectionId: connectionId, - updated: connectionData.updated - }, - */ - type: null + scope: connectionData.scope || map.Defaults.Scope, + type: (connectionData.type || MapUtil.getDefaultConnectionTypeByScope(map.Defaults.Scope)).join(' ') + /* experimental set "static" connection parameters in initial load + parameters: { + connectionId: connectionId, + updated: connectionData.updated, + created: connectionData.created, + eolUpdated: connectionData.eolUpdated + }*/ /* experimental (straight connections) anchors: [ [ "Perimeter", { shape: 'Rectangle' }], @@ -701,35 +877,41 @@ define([ }); // check if connection is valid (e.g. source/target exist - if( connection instanceof jsPlumb.Connection ){ + if(connection instanceof jsPlumb.Connection){ // set connection parameters // they should persist even through connection type change (e.g. wh -> stargate,..) - // therefore they should be part of the connection not of the connector + // therefore they should be part of the connection not of the "Endpoint" or "connectionType" connection.setParameters({ - connectionId: connectionId, - updated: connectionData.updated, - created: connectionData.created, - eolUpdated: connectionData.eolUpdated + connectionId: connectionId, + updated: connectionData.updated, + created: connectionData.created, + eolUpdated: connectionData.eolUpdated }); - // add connection types ------------------------------------------------------------------------------- - if(connectionData.type){ - for(let i = 0; i < connectionData.type.length; i++){ - connection.addType(connectionData.type[i]); - } + if(connection.scope !== map.Defaults.Scope){ + let newConnector = MapUtil.getScopeInfoForConnection(connection.scope, 'connectorDefinition'); + connection.setConnector(newConnector); + + // we need to "reapply" the types after "Connector" was changed + connection.reapplyTypes(); } - // add connection scope ------------------------------------------------------------------------------- - // connection have the default map Scope scope - let scope = map.Defaults.Scope; - if(connectionData.scope){ - scope = connectionData.scope; + // add endpoint types --------------------------------------------------------------------------------- + if(connectionData.endpoints){ + for(let endpoint of connection.endpoints){ + let label = MapUtil.getEndpointLabel(connection, endpoint); + if( + label && connectionData.endpoints[label] && + Array.isArray(connectionData.endpoints[label].types) + ){ + for(let type of connectionData.endpoints[label].types){ + endpoint.addType(type); + } + } + } } - setConnectionScope(connection, scope); } - - // set Observer for new Connection -> is automatically set }else{ if( !sourceSystem.length ){ console.warn('drawConnection(): source system (id: ' + connectionData.source + ') not found'); @@ -745,64 +927,80 @@ define([ /** * compares the current data and new data of a connection and updates status * @param connection - * @param connectionData * @param newConnectionData * @returns {*} */ - let updateConnection = function(connection, connectionData, newConnectionData){ - + let updateConnection = (connection, newConnectionData) => { + let connectionData = MapUtil.getDataByConnection(connection); let map = connection._jsPlumb.instance; - let mapContainer = $( map.getContainer() ); + let mapContainer = $(map.getContainer()); let mapId = mapContainer.data('id'); - // check id, IDs should never change but must be set after initial save + // type "process" is not included in connectionData + // -> if "process" type exists, add it types for removal + if(connection.hasType('state_process')){ + connectionData.type.push('state_process'); + } + + // check id, IDs should never change but must be set after initial save --------------------------------------- if(connection.getParameter('connectionId') !== newConnectionData.id){ connection.setParameter('connectionId', newConnectionData.id); } - // check scope + // update scope ----------------------------------------------------------------------------------------------- if(connectionData.scope !== newConnectionData.scope){ setConnectionScope(connection, newConnectionData.scope); - // for some reason the observers are gone after scope change... - setConnectionObserver(map, connection); } - let addType = newConnectionData.type.diff( connectionData.type ); - let removeType = connectionData.type.diff( newConnectionData.type ); + let addType = newConnectionData.type.diff(connectionData.type); + let removeType = connectionData.type.diff(newConnectionData.type); - // check if source or target has changed - if(connectionData.source !== newConnectionData.source ){ - map.setSource(connection, MapUtil.getSystemId(mapId, newConnectionData.source) ); + // update source/target (after drag&drop) --------------------------------------------------------------------- + if(connectionData.source !== newConnectionData.source){ + map.setSource(connection, MapUtil.getSystemId(mapId, newConnectionData.source)); } - if(connectionData.target !== newConnectionData.target ){ - map.setTarget(connection, MapUtil.getSystemId(mapId, newConnectionData.target) ); + if(connectionData.target !== newConnectionData.target){ + map.setTarget(connection, MapUtil.getSystemId(mapId, newConnectionData.target)); } - // connection.targetId - // add types - for(let i = 0; i < addType.length; i++){ - if( - addType[i].indexOf('fresh') !== -1 || - addType[i].indexOf('reduced') !== -1 || - addType[i].indexOf('critical') !== -1 - ){ - MapUtil.setConnectionWHStatus(connection, addType[i]); - }else if( connection.hasType(addType[i]) !== true ){ + // update connection types ------------------------------------------------------------------------------------ + let checkAvailability = (arr, val) => arr.some(arrVal => arrVal === val); + + for(let type of addType){ + if(checkAvailability(['fresh', 'reduced', 'critical'], type)){ + MapUtil.setConnectionWHStatus(connection, type); + }else if(connection.hasType(type) !== true){ // additional types e.g. eol, frig, preserve mass - connection.addType(addType[i]); - setConnectionObserver(map, connection); + connection.addType(type); } } - // remove types - for(let j = 0; j < removeType.length; j++){ - if( - removeType[j] === 'wh_eol' || - removeType[j] === 'frigate' || - removeType[j] === 'preserve_mass' - ){ - connection.removeType(removeType[j]); - setConnectionObserver(map, connection); + for(let type of removeType){ + if(checkAvailability(['wh_eol', 'frigate', 'preserve_mass', 'state_process'], type)){ + connection.removeType(type); + } + } + + // update endpoints ------------------------------------------------------------------------------------------- + // important: In case source or target changed (drag&drop) (see above lines..) + // -> NEW endpoints are created (default Endpoint properties from makeSource()/makeTarget() call are used + // -> connectionData.endpoints might no longer be valid -> get fresh endpointData + let endpointData = MapUtil.getEndpointsDataByConnection(connection); + + for(let endpoint of connection.endpoints){ + let label = MapUtil.getEndpointLabel(connection, endpoint); + let endpointTypes = Util.getObjVal(endpointData, [label, 'types'].join('.')) || []; + let newEndpointTypes = Util.getObjVal(newConnectionData, ['endpoints', label, 'types'].join('.')) || []; + + let addEndpointTypes = newEndpointTypes.diff(endpointTypes); + let removeEndpointTypes = endpointTypes.diff(newEndpointTypes); + + for(let type of addEndpointTypes){ + endpoint.addType(type); + } + + for(let type of removeEndpointTypes){ + endpoint.removeType(type); } } @@ -935,8 +1133,7 @@ define([ parentElement.prepend(mapWrapper); // set main Container for current map -> the container exists now in DOM !! very important - // mapConfig.map.setContainer( config.mapIdPrefix + mapId ); - mapConfig.map.setContainer( mapContainer ); + mapConfig.map.setContainer(mapContainer); // init custom scrollbars and add overlay parentElement.initMapScrollbar(); @@ -970,7 +1167,7 @@ define([ * @param mapConfig * @returns {Promise} */ - let updateMap = (mapConfig) => { + let updateMap = mapConfig => { /** * update map promise @@ -996,7 +1193,8 @@ define([ } // get map data - let mapData = mapContainer.getMapDataFromClient({forceData: false}); + let mapData = getMapDataForSync(mapContainer, [], true); + if(mapData !== false){ // map data available -> map not locked by update counter :) @@ -1012,7 +1210,7 @@ define([ for(let k = 0; k < currentSystemData.length; k++){ if(currentSystemData[k].id === systemData.id){ - if( currentSystemData[k].updated.updated < systemData.updated.updated ){ + if(currentSystemData[k].updated.updated < systemData.updated.updated){ // system changed -> update mapContainer.getSystem(mapConfig.map, systemData); } @@ -1030,7 +1228,6 @@ define([ // check for systems that are gone -> delete system for(let a = 0; a < currentSystemData.length; a++){ - let deleteThisSystem = true; for(let b = 0; b < mapConfig.data.systems.length; b++){ @@ -1043,7 +1240,7 @@ define([ } if(deleteThisSystem === true){ - let deleteSystem = $('#' + MapUtil.getSystemId(mapContainer.data('id'), currentSystemData[a].id) ); + let deleteSystem = $('#' + MapUtil.getSystemId(mapContainer.data('id'), currentSystemData[a].id)); // system not found -> delete system System.removeSystems(mapConfig.map, deleteSystem); @@ -1063,18 +1260,23 @@ define([ let addNewConnection= true; for(let c = 0; c < currentConnectionData.length; c++){ - if( - currentConnectionData[c].id === connectionData.id - ){ + if(currentConnectionData[c].id === connectionData.id){ // connection already exists -> check for updates - if( - currentConnectionData[c].updated < connectionData.updated - ){ + if(currentConnectionData[c].updated < connectionData.updated){ // connection changed -> update - let tempConnection = $().getConnectionById(mapData.config.id, connectionData.id); - updateConnection(tempConnection, currentConnectionData[c], connectionData); + updateConnection(currentConnectionData[c].connection, connectionData); } + addNewConnection = false; + break; + }else if( + currentConnectionData[c].id === 0 && + currentConnectionData[c].source === connectionData.source && + currentConnectionData[c].target === connectionData.target + ){ + // if ids don´t match -> check for unsaved connection + updateConnection(currentConnectionData[c].connection, connectionData); + addNewConnection = false; break; } @@ -1087,6 +1289,10 @@ define([ // check for connections that are gone -> delete connection for(let d = 0; d < currentConnectionData.length; d++){ + // skip connections with id = 0 -> they might get updated before + if(currentConnectionData[d].id === 0){ + continue; + } let deleteThisConnection = true; @@ -1100,8 +1306,8 @@ define([ } if(deleteThisConnection === true){ - // get connection from cache -> delete connection - let deleteConnection = $().getConnectionById(mapData.config.id, currentConnectionData[d].id); + // connection not found -> delete connection + let deleteConnection = currentConnectionData[d].connection; if(deleteConnection){ // check if "source" and "target" still exist before remove @@ -1164,15 +1370,14 @@ define([ * update local connections cache (cache all connections from a map) * @param map */ - let updateConnectionsCache = (map) => { + let updateConnectionsCache = map => { let connections = map.getAllConnections(); - let mapContainer = $( map.getContainer() ); + let mapContainer = $(map.getContainer()); let mapId = mapContainer.data('id'); if(mapId > 0){ // clear cache connectionCache[mapId] = []; - for(let i = 0; i < connections.length; i++){ updateConnectionCache(mapId, connections[i]); } @@ -1186,14 +1391,12 @@ define([ * @param mapId * @param connection */ - let updateConnectionCache = function(mapId, connection){ - + let updateConnectionCache = (mapId, connection) => { if( mapId > 0 && connection ){ - let connectionId = parseInt( connection.getParameter('connectionId') ); - + let connectionId = parseInt(connection.getParameter('connectionId')); if(connectionId > 0){ connectionCache[mapId][connectionId] = connection; } @@ -1227,8 +1430,8 @@ define([ * @param map * @param system */ - let makeSource = function(map, system){ - if( !map.isSource(system) ){ + let makeSource = (map, system) => { + if(!map.isSource(system)){ // get scope from map defaults let sourceConfig = globalMapConfig.source; sourceConfig.scope = map.Defaults.Scope; // set all allowed connections for this scopes @@ -1245,8 +1448,8 @@ define([ * @param map * @param system */ - let makeTarget = function(map, system){ - if( !map.isTarget(system) ){ + let makeTarget = (map, system) => { + if(!map.isTarget(system)){ // get scope from map defaults let targetConfig = globalMapConfig.target; targetConfig.scope = map.Defaults.Scope; // set all allowed connections for this scopes @@ -1260,9 +1463,8 @@ define([ * @param systemData * @returns {boolean} */ - let isValidSystem = function(systemData){ + let isValidSystem = systemData => { let isValid = true; - if( !systemData.hasOwnProperty('name') || systemData.name.length === 0 @@ -1306,11 +1508,13 @@ define([ // connect new system (if connection data is given) if(connectedSystem){ - // hint: "type" will be auto detected by jump distance + // hint: "scope + type" might be changed automatically when it gets saved + // -> based on jump distance,.. let connectionData = { source: $(connectedSystem).data('id'), target: newSystem.data('id'), - type: ['wh_fresh'] // default type. + scope: map.Defaults.Scope, + type: [MapUtil.getDefaultConnectionTypeByScope(map.Defaults.Scope)] }; let connection = drawConnection(map, connectionData); @@ -1324,7 +1528,7 @@ define([ * make a system name/alias editable by x-editable * @param system */ - let makeEditable = function(system){ + let makeEditable = system => { system = $(system); let headElement = $(system).find('.' + config.systemHeadNameClass); @@ -1343,7 +1547,7 @@ define([ headElement.on('save', function(e, params){ // system alias changed -> mark system as updated - system.markAsChanged(); + MapUtil.markAsChanged(system); }); headElement.on('shown', function(e, editable){ @@ -1365,7 +1569,7 @@ define([ // if system with changed (e.g. long alias) -> revalidate system let map = MapUtil.getMapInstance(system.attr('data-mapid')); - map.revalidate(system.attr('id')); + revalidate(map, system); }); }; @@ -1384,8 +1588,9 @@ define([ * stores a connection in database * @param connection */ - let saveConnection = function(connection){ + let saveConnection = connection => { if(connection instanceof jsPlumb.Connection){ + connection.addType('state_process'); let map = connection._jsPlumb.instance; let mapContainer = $(map.getContainer()); @@ -1403,34 +1608,12 @@ define([ payload => { let newConnectionData = payload.data; - if( !$.isEmptyObject(newConnectionData) ){ - let updateCon = false; + if(!$.isEmptyObject(newConnectionData)){ + // update connection data e.g. "scope" has auto detected + connection = updateConnection(payload.context.connection, newConnectionData); - if(payload.context.oldConnectionData.id > 0){ - // connection exists (e.g. drag&drop new target system... (ids should never changed) - let connection = $().getConnectionById(payload.context.mapId, payload.context.oldConnectionData.id); - updateCon = true; - }else{ - // new connection, check if connectionId was already updated (webSocket push is faster than ajax callback) - let connection = $().getConnectionById(payload.context.mapId, newConnectionData.id); - - if(connection){ - // connection already updated - payload.context.map.detach(payload.context.connection, {fireEvent: false}); - }else{ - // .. else update this connection - connection = payload.context.connection; - updateCon = true; - } - } - - if(updateCon){ - // update connection data e.g. "scope" has auto detected - connection = updateConnection(connection, payload.context.oldConnectionData, newConnectionData); - - // new/updated connection should be cached immediately! - updateConnectionCache(payload.context.mapId, connection); - } + // new/updated connection should be cached immediately! + updateConnectionCache(payload.context.mapId, connection); // connection scope let scope = MapUtil.getScopeInfoForConnection(newConnectionData.scope, 'label'); @@ -1456,136 +1639,171 @@ define([ }; /** - * get hidden menu entry options for a context menu + * get context menu config for a map component (e.g. system, connection,..) * @param component * @returns {Promise} */ - let getHiddenContextMenuOptions = component => { - - let getHiddenContextMenuOptionsExecutor = (resolve, reject) => { - let hiddenOptions = []; - - if(component instanceof jsPlumb.Connection){ - // disable connection menu entries - let scope = component.scope; - if(scope === 'abyssal'){ - hiddenOptions.push('frigate'); - hiddenOptions.push('preserve_mass'); - hiddenOptions.push('change_status'); - - hiddenOptions.push('change_scope'); - hiddenOptions.push('separator'); - }else if(scope === 'stargate'){ - hiddenOptions.push('frigate'); - hiddenOptions.push('preserve_mass'); - hiddenOptions.push('change_status'); - - hiddenOptions.push('scope_stargate'); - }else if(scope === 'jumpbridge'){ - hiddenOptions.push('frigate'); - hiddenOptions.push('preserve_mass'); - hiddenOptions.push('change_status'); - hiddenOptions.push('scope_jumpbridge'); - }else if(scope === 'wh'){ - hiddenOptions.push('scope_wh'); - } - }else if( component.hasClass(config.systemClass) ){ - // disable system menu entries - if(component.data('locked') === true){ - hiddenOptions.push('delete_system'); - } + let getContextMenuConfig = component => { + if(component instanceof $ && component.hasClass(config.systemClass)){ + return getSystemContextMenuConfig(component); + }else if(component instanceof window.jsPlumbInstance){ + return getMapContextMenuConfig(component); + }else if(component instanceof jsPlumb.Connection){ + return getConnectionContextMenuConfig(component); + }else if(component instanceof jsPlumb.Endpoint){ + return getEndpointContextMenuConfig(component); + } + }; - let mapElement = component.closest('.' + config.mapClass); - if( !mapElement.find('.' + config.systemActiveClass).length ){ - hiddenOptions.push('find_route'); - } + /** + * get context menu config for system + * @param system + * @returns {Promise} + */ + let getSystemContextMenuConfig = system => { + let executor = resolve => { + let options = MapContextMenu.defaultMenuOptionConfig(); + options.id = MapContextMenu.config.systemContextMenuId; + options.selectCallback = systemActions; + + let mapContainer = system.closest('.' + config.mapClass); + + // hidden menu actions + if(system.data('locked') === true){ + options.hidden.push('delete_system'); + } + + if( !mapContainer.find('.' + config.systemActiveClass).length){ + options.hidden.push('find_route'); + } + + // active menu actions + if(system.data('locked') === true){ + options.active.push('lock_system'); + } + if(system.data('rallyUpdated') > 0){ + options.active.push('set_rally'); + } + + // disabled menu actions + if(system.hasClass(config.systemActiveClass)){ + options.disabled.push('find_route'); } - resolve(hiddenOptions); + resolve(options); }; - return new Promise(getHiddenContextMenuOptionsExecutor); + return new Promise(executor); }; /** - * get active menu entry options for a context menu - * @param component + * get context menu config for map + * @param map * @returns {Promise} */ - let getActiveContextMenuOptions = component => { - - let getActiveContextMenuOptionsExecutor = (resolve, reject) => { - let activeOptions = []; + let getMapContextMenuConfig = map => { + let executor = resolve => { + let options = MapContextMenu.defaultMenuOptionConfig(); + options.id = MapContextMenu.config.mapContextMenuId; + options.selectCallback = mapActions; - if(component instanceof jsPlumb.Connection){ - let scope = component.scope; + let mapContainer = $(map.getContainer()); - if(component.hasType('wh_eol') === true){ - activeOptions.push('wh_eol'); + // active menu actions + let promiseStore = MapUtil.getLocaleData('map', mapContainer.data('id')); + promiseStore.then(dataStore => { + if(dataStore && dataStore.filterScopes){ + options.active = dataStore.filterScopes.map(scope => 'filter_' + scope); } + resolve(options); + }); + }; - if(component.hasType('frigate') === true){ - activeOptions.push('frigate'); - } - if(component.hasType('preserve_mass') === true){ - activeOptions.push('preserve_mass'); - } - if(component.hasType('wh_reduced') === true){ - activeOptions.push('status_reduced'); - }else if(component.hasType('wh_critical') === true){ - activeOptions.push('status_critical'); - }else{ - // not reduced is default - activeOptions.push('status_fresh'); - } + return new Promise(executor); + }; - resolve(activeOptions); - }else if( component.hasClass(config.mapClass) ){ - // active map menu entries - let promiseStore = MapUtil.getLocaleData('map', component.data('id')); - promiseStore.then(dataStore => { - if(dataStore && dataStore.filterScopes){ - activeOptions = dataStore.filterScopes.map(scope => 'filter_' + scope); - } - resolve(activeOptions); - }); - }else if( component.hasClass(config.systemClass) ){ - // active system menu entries - if(component.data('locked') === true){ - activeOptions.push('lock_system'); - } - if(component.data('rallyUpdated') > 0){ - activeOptions.push('set_rally'); - } + /** + * get context menu config for connection + * @param connection + * @returns {Promise} + */ + let getConnectionContextMenuConfig = connection => { + let executor = resolve => { + let options = MapContextMenu.defaultMenuOptionConfig(); + options.id = MapContextMenu.config.connectionContextMenuId; + options.selectCallback = connectionActions; + + let scope = connection.scope; + + // hidden menu actions + if(scope === 'abyssal'){ + options.hidden.push('frigate'); + options.hidden.push('preserve_mass'); + options.hidden.push('change_status'); + + options.hidden.push('change_scope'); + options.hidden.push('separator'); + }else if(scope === 'stargate'){ + options.hidden.push('frigate'); + options.hidden.push('preserve_mass'); + options.hidden.push('change_status'); + + options.hidden.push('scope_stargate'); + }else if(scope === 'jumpbridge'){ + options.hidden.push('frigate'); + options.hidden.push('preserve_mass'); + options.hidden.push('change_status'); + options.hidden.push('scope_jumpbridge'); + }else if(scope === 'wh'){ + options.hidden.push('scope_wh'); + } + + // active menu actions + if(connection.hasType('wh_eol') === true){ + options.active.push('wh_eol'); + } - resolve(activeOptions); + if(connection.hasType('frigate') === true){ + options.active.push('frigate'); } + if(connection.hasType('preserve_mass') === true){ + options.active.push('preserve_mass'); + } + if(connection.hasType('wh_reduced') === true){ + options.active.push('status_reduced'); + }else if(connection.hasType('wh_critical') === true){ + options.active.push('status_critical'); + }else{ + // not reduced is default + options.active.push('status_fresh'); + } + + resolve(options); }; - return new Promise(getActiveContextMenuOptionsExecutor); + return new Promise(executor); }; /** - * get disabled menu entry options for a context menu - * @param component + * get context menu config for endpoint + * @param endpoint * @returns {Promise} */ - let getDisabledContextMenuOptions = component => { - - let getDisabledContextMenuOptionsExecutor = (resolve, reject) => { - let disabledOptions = []; - - if( component.hasClass(config.systemClass) ){ - // disable system menu entries - if( component.hasClass(config.systemActiveClass) ){ - disabledOptions.push('find_route'); - } + let getEndpointContextMenuConfig = endpoint => { + let executor = resolve => { + let options = MapContextMenu.defaultMenuOptionConfig(); + options.id = MapContextMenu.config.endpointContextMenuId; + options.selectCallback = endpointActions; + + // active menu actions + if(endpoint.hasType('bubble') === true){ + options.active.push('bubble'); } - resolve(disabledOptions); + resolve(options); }; - return new Promise(getDisabledContextMenuOptionsExecutor); + return new Promise(executor); }; /** @@ -1597,9 +1815,7 @@ define([ system = $(system); // get map container - let mapContainer = $( map.getContainer() ); - let systemHeadExpand = $( system.find('.' + config.systemHeadExpandClass) ); - let systemBody = $( system.find('.' + config.systemBodyClass) ); + let mapContainer = $(map.getContainer()); let grid = [MapUtil.config.mapSnapToGridDimension, MapUtil.config.mapSnapToGridDimension]; // map overlay will be set on "drag" start let mapOverlayTimer = null; @@ -1620,7 +1836,7 @@ define([ mapOverlayTimer.startMapUpdateCounter(); // check if grid-snap is enable -> this enables napping for !CURRENT! Element - if( mapContainer.hasClass(MapUtil.config.mapGridClass) ){ + if(mapContainer.hasClass(MapUtil.config.mapGridClass)){ params.drag.params.grid = grid; }else{ delete( params.drag.params.grid ); @@ -1631,7 +1847,7 @@ define([ // drag system is not always selected let selectedSystems = mapContainer.getSelectedSystems().get(); - selectedSystems = selectedSystems.concat( dragSystem.get() ); + selectedSystems = selectedSystems.concat(dragSystem.get()); selectedSystems = $.unique( selectedSystems ); // hide tooltip @@ -1665,7 +1881,7 @@ define([ dragSystem.toggleSystemTooltip('show', {show: true}); // mark as "changed" - dragSystem.markAsChanged(); + MapUtil.markAsChanged(dragSystem); // set new position for popover edit field (system name) let newPosition = dragSystem.position(); @@ -1681,14 +1897,11 @@ define([ // drag system is not always selected let selectedSystems = mapContainer.getSelectedSystems().get(); - selectedSystems = selectedSystems.concat( dragSystem.get() ); + selectedSystems = selectedSystems.concat(dragSystem.get()); selectedSystems = $.unique( selectedSystems ); - for(let i = 0; i < selectedSystems.length; i++){ - let tempSystem = $(selectedSystems[i]); - // repaint connections -> just in case something fails... - map.revalidate( tempSystem.attr('id') ); - } + // repaint connections (and overlays) -> just in case something fails... + revalidate(map, selectedSystems); } }); @@ -1705,112 +1918,6 @@ define([ }; system.find('.fas').tooltip(systemTooltipOptions); - // context menu =============================================================================================== - - // trigger context menu - system.off('contextmenu').on('contextmenu', function(e){ - e.preventDefault(); - e.stopPropagation(); - - let systemElement = $(this); - - // trigger menu "open - Promise.all([ - getHiddenContextMenuOptions(systemElement), - getActiveContextMenuOptions(systemElement), - getDisabledContextMenuOptions(systemElement) - ]).then(payload => { - $(e.target).trigger('pf:openContextMenu', [e, this, payload[0], payload[1], payload[2]]); - }); - - return false; - }); - - // init context menu - system.contextMenu({ - menuSelector: '#' + config.systemContextMenuId, - menuSelected: function(params){ - - // click action - let action = params.selectedMenu.attr('data-action'); - - // current system - let currentSystem = $(params.component); - - // system name - let currentSystemName = currentSystem.getSystemInfo( ['alias'] ); - - let systemData = {}; - - switch(action){ - case 'add_system': - // add a new system - System.showNewSystemDialog(map, {sourceSystem: currentSystem}, saveSystemCallback); - - break; - case 'lock_system': - // lock system - currentSystem.toggleLockSystem(true, {map: map}); - - // repaint connections, -> system changed its size! - map.repaint( currentSystem ); - - currentSystem.markAsChanged(); - break; - case 'set_rally': - // toggle rally point - if( !currentSystem.data('rallyUpdated') ){ - $.fn.showRallyPointDialog(currentSystem); - }else{ - // remove rally point - currentSystem.setSystemRally(0); - currentSystem.markAsChanged(); - } - break; - case 'find_route': - // show find route dialog - systemData = system.getSystemData(); - MapUtil.showFindRouteDialog(mapContainer, { - systemId: systemData.systemId, - name: systemData.name - }); - break; - case 'select_connections': - let connections = MapUtil.searchConnectionsBySystems(map, [currentSystem], '*'); - MapUtil.showConnectionInfo(map, connections); - break; - case 'change_status_unknown': - case 'change_status_friendly': - case 'change_status_occupied': - case 'change_status_hostile': - case 'change_status_empty': - case 'change_status_unscanned': - // change system status - currentSystem.getMapOverlay('timer').startMapUpdateCounter(); - - let statusString = action.split('_'); - - currentSystem.setSystemStatus(statusString[2]); - - currentSystem.markAsChanged(); - break; - case 'delete_system': - // delete this system AND delete selected systems as well - let selectedSystems = mapContainer.getSelectedSystems(); - $.merge(selectedSystems, currentSystem); - $.uniqueSort(selectedSystems); - $.fn.showDeleteSystemDialog(map, selectedSystems); - break; - case 'set_destination': - case 'add_first_waypoint': - case 'add_last_waypoint': - systemData = system.getSystemData(); - Util.setDestination(systemData, action); - break; - } - } - }); - // system click events ======================================================================================== let double = function(e){ let system = $(this); @@ -1832,11 +1939,11 @@ define([ } // continue if click was *not* on a popover dialog of a system - if( !popoverClick ){ + if(!popoverClick){ let system = $(this); // check if system is locked for "click" events - if( !system.hasClass('no-click') ){ + if(!system.hasClass('no-click')){ // left mouse button if(e.which === 1){ if(e.ctrlKey === true){ @@ -1868,42 +1975,6 @@ define([ MagnetizerWrapper.setElements(map); }; - /** - * mark a dom element (map, system, connection) as changed - */ - $.fn.markAsChanged = function(){ - return this.each(function(){ - let element = $(this); - - if( element.hasClass(config.systemClass) ){ - // system element - element.data('changed', true); - }else{ - // connection element - this.setParameter('changed', true); - } - }); - }; - - /** - * check if an dom element (system, connection) has changed - * @returns {boolean} - */ - $.fn.hasChanged = function(){ - let element = $(this); - let changed = false; - - if( element.hasClass(config.systemClass) ){ - // system element - changed = element.data('changed') || false; - }else{ - // connection element - changed = this[0].getParameter('changed') || false; - } - - return changed; - }; - /** * select all (selectable) systems on a mapElement */ @@ -1935,9 +2006,7 @@ define([ * @param options */ $.fn.toggleLockSystem = function(poke, options){ - let system = $(this); - let map = options.map; let hideNotification = false; @@ -1975,13 +2044,11 @@ define([ } // repaint connections - map.revalidate( system.attr('id') ); + revalidate(map, system); - - if(! hideCounter){ + if(!hideCounter){ $(system).getMapOverlay('timer').startMapUpdateCounter(); } - }; /** @@ -1991,7 +2058,7 @@ define([ */ let getMapInstance = function(mapId){ - if( !MapUtil.existsMapInstance(mapId) ){ + if(!MapUtil.existsMapInstance(mapId)){ // create new instance jsPlumb.Defaults.LogEnabled = true; @@ -2011,21 +2078,18 @@ define([ LogEnabled: true }); - // register all available connection types ---------------------------------------------------------------- - newJsPlumbInstance.registerConnectionTypes(globalMapConfig.connectionTypes); - - // event after a new connection is established ------------------------------------------------------------ - newJsPlumbInstance.bind('connection', function(info, e){ - // set connection observer - setConnectionObserver(newJsPlumbInstance, info.connection); - }); + // register all available endpoint types + newJsPlumbInstance.registerEndpointTypes(globalMapConfig.endpointTypes); - // event after connection moved --------------------------------------------------------------------------- - newJsPlumbInstance.bind('connectionMoved', function(info, e){ + // register all available connection types + newJsPlumbInstance.registerConnectionTypes(globalMapConfig.connectionTypes); - }); + // ======================================================================================================== + // Event Interceptors https://community.jsplumbtoolkit.com/doc/interceptors.html + //========================================================================================================= - // event after DragStop a connection or new connection ---------------------------------------------------- + // This is called when a new or existing connection has been dropped + // If you return false (or nothing) from this callback, the new Connection is aborted and removed from the UI. newJsPlumbInstance.bind('beforeDrop', function(info){ let connection = info.connection; let dropEndpoint = info.dropEndpoint; @@ -2063,7 +2127,7 @@ define([ // set "default" connection status only for NEW connections if(!connection.suspendedElement){ - MapUtil.setConnectionWHStatus(connection, MapUtil.getDefaultConnectionTypeByScope(connection.scope) ); + MapUtil.setConnectionWHStatus(connection, MapUtil.getDefaultConnectionTypeByScope(connection.scope)); } // prevent multiple connections between same systems @@ -2083,22 +2147,64 @@ define([ return true; }); - // event before detach (existing connection) -------------------------------------------------------------- + // This is called when the user starts to drag an existing Connection. + // Returning false from beforeStartDetach prevents the Connection from being dragged. newJsPlumbInstance.bind('beforeStartDetach', function(info){ return true; }); - // event before detach connection ------------------------------------------------------------------------- - newJsPlumbInstance.bind('beforeDetach', function(info){ + // This is called when the user has detached a Connection, which can happen for a number of reasons: + // by default, jsPlumb allows users to drag Connections off of target Endpoints, but this can also result from a programmatic 'detach' call. + newJsPlumbInstance.bind('beforeDetach', function(connection){ return true; }); + // ======================================================================================================== + // Events https://community.jsplumbtoolkit.com/doc/events.html + //========================================================================================================= + + // Notification a Connection was established. + // Note: jsPlumb.connect causes this event to be fired, but there is of course no original event when a connection is established programmatically. + newJsPlumbInstance.bind('connection', function(info, e){ + + }); + + // Notification a Connection or Endpoints was clicked. + newJsPlumbInstance.bind('click', function(component, e){ + if(component instanceof jsPlumb.Connection){ + connectionClickHandler(component,e); + } + }); + + // Notification that an existing connection's source or target endpoint was dragged to some new location. + newJsPlumbInstance.bind('connectionMoved', function(info, e){ + + }); + + // Notification a Connection was detached. + // In the event that the Connection was new and had never been established between two Endpoints, it has a pending flag set on it. newJsPlumbInstance.bind('connectionDetached', function(info, e){ // a connection is manually (drag&drop) detached! otherwise this event should not be send! let connection = info.connection; MapUtil.deleteConnections([connection]); }); + // Right-click on some given component. jsPlumb will report right clicks on both Connections and Endpoints. + newJsPlumbInstance.bind('contextmenu', function(component, e){ + getContextMenuConfig(component).then(payload => { + let context = { + component: component + }; + MapContextMenu.openMenu(payload, e, context); + }); + + }); + + // ======================================================================================================== + // Events for interactive CSS classes https://community.jsplumbtoolkit.com/doc/styling-via-css.html + //========================================================================================================= + + // This event is responsible for dynamic CSS classes "_jsPlumb_target_hover", "_jsPlumb_drag_select" newJsPlumbInstance.bind('checkDropAllowed', function(params){ let sourceEndpoint = params.sourceEndpoint; let targetEndpoint = params.targetEndpoint; @@ -2166,124 +2272,38 @@ define([ * set observer for a map container * @param map */ - let setMapObserver = function(map){ + let setMapObserver = map => { // get map container let mapContainer = $(map.getContainer()); - mapContainer.bind('contextmenu', function(e){ + // context menu for mapContainer + mapContainer.on('contextmenu', function(e){ e.preventDefault(); e.stopPropagation(); // make sure map is clicked and NOT a connection - if($(e.target).hasClass( config.mapClass )){ - let mapElement = $(this); - - // trigger menu "open - Promise.all([ - getHiddenContextMenuOptions(mapElement), - getActiveContextMenuOptions(mapElement), - getDisabledContextMenuOptions(mapElement) - ]).then(payload => { - $(e.target).trigger('pf:openContextMenu', [e, mapElement, payload[0], payload[1], payload[2]]); + if($(e.target).hasClass(config.mapClass)){ + getContextMenuConfig(map).then(payload => { + let context = { + component: map + }; + MapContextMenu.openMenu(payload, e, context); }); } - - return false; }); - mapContainer.contextMenu({ - menuSelector: '#' + config.mapContextMenuId, - menuSelected: function(params){ - - // click action - let action = params.selectedMenu.attr('data-action'); - - // current map - let currentMapElement = $(params.component); - - let currentMapId = parseInt( currentMapElement.data('id') ); - - // get map instance - let currentMap = getMapInstance(currentMapId); - - // click position - let position = params.position; - - switch(action){ - case 'add_system': - // add new system dialog - let grid = [MapUtil.config.mapSnapToGridDimension, MapUtil.config.mapSnapToGridDimension]; - let positionFinder = new Layout.Position({ - container: currentMapElement[0], - center: [position.x, position.y], - loops: 5, - defaultGapX: 10, - defaultGapY: 10, - grid: currentMapElement.hasClass(MapUtil.config.mapGridClass) ? grid : false, - debug: false - }); - - let dimensions = positionFinder.findNonOverlappingDimensions(1, 8); - - if(dimensions.length){ - position.x = dimensions[0].left; - position.y = dimensions[0].top; - } - - System.showNewSystemDialog(currentMap, {position: position}, saveSystemCallback); - break; - case 'select_all': - currentMapElement.selectAllSystems(); - break; - case 'filter_wh': - case 'filter_stargate': - case 'filter_jumpbridge': - case 'filter_abyssal': - // filter (show/hide) - let filterScope = action.split('_')[1]; - let filterScopeLabel = MapUtil.getScopeInfoForConnection( filterScope, 'label'); - - let promiseStore = MapUtil.getLocaleData('map', currentMapId); - promiseStore.then(data => { - let filterScopes = []; - if(data && data.filterScopes){ - filterScopes = data.filterScopes; - } - // add or remove this scope from filter - let index = filterScopes.indexOf(filterScope); - if(index >= 0){ - filterScopes.splice(index, 1); - }else{ - filterScopes.push(filterScope); - // "all filters active" == "no filter" - if(filterScopes.length === Object.keys(Init.connectionScopes).length){ - filterScopes = []; - } - } - - // save filterScopes in IndexDB - MapUtil.storeLocalData('map', currentMapId, 'filterScopes', filterScopes); - MapUtil.filterMapByScopes(currentMap, filterScopes); - - Util.showNotify({title: 'Scope filter changed', text: filterScopeLabel, type: 'success'}); - }); - break; - case 'delete_systems': - // delete all selected systems with its connections - let selectedSystems = currentMapElement.getSelectedSystems(); - $.fn.showDeleteSystemDialog(currentMap, selectedSystems); - break; - case 'map_edit': - // open map edit dialog tab - $(document).triggerMenuEvent('ShowMapSettings', {tab: 'edit'}); - break; - case 'map_info': - // open map info dialog tab - $(document).triggerMenuEvent('ShowMapInfo', {tab: 'information'}); - break; + // context menu for systems + mapContainer.on('contextmenu', '.' + config.systemClass, function(e){ + e.preventDefault(); + e.stopPropagation(); - } - } + let systemElement = $(e.currentTarget); + getContextMenuConfig(systemElement).then(payload => { + let context = { + component: systemElement + }; + MapContextMenu.openMenu(payload, e, context); + }); }); // init drag-frame selection @@ -2458,7 +2478,7 @@ define([ // get map menu config options let data = MapUtil.mapOptions[mapOption.option]; - let promiseStore = MapUtil.getLocaleData('map', mapElement.data('id') ); + let promiseStore = MapUtil.getLocaleData('map', mapElement.data('id')); promiseStore.then(function(dataStore){ let notificationText = 'disabled'; let button = $('#' + this.data.buttonId); @@ -2634,7 +2654,7 @@ define([ // get current system alias let systemHeadNameElement = $(this).find('.' + config.systemHeadNameClass); let alias = ''; - if( systemHeadNameElement.hasClass('editable') ){ + if(systemHeadNameElement.hasClass('editable')){ // xEditable is initiated alias = systemHeadNameElement.editable('getValue', true); } @@ -2777,149 +2797,147 @@ define([ return new Promise(updateUserDataExecutor); }; + /** + * collect all map data from client for server or client sync + * @param mapContainer + * @param filter + * @param minimal + * @returns {boolean} + */ + let getMapDataForSync = (mapContainer, filter = [], minimal = false) => { + let mapData = false; + // check if there is an active map counter that prevents collecting map data (locked map) + if(!mapContainer.getMapOverlayInterval()){ + mapData = mapContainer.getMapDataFromClient(filter, minimal); + } + return mapData; + }; + /** * collect all map data for export/save for a map * this function returns the "client" data NOT the "server" data for a map - * @param options - * @returns {*} + * @param filter + * @param minimal */ - $.fn.getMapDataFromClient = function(options){ - let mapElement = $(this); - let map = getMapInstance( mapElement.data('id') ); - let mapData = {}; - - // check if there is an active map counter that prevents collecting map data (locked map) - let interval = mapElement.getMapOverlayInterval(); + $.fn.getMapDataFromClient = function(filter = [], minimal = false){ + let mapContainer = $(this); + let map = getMapInstance(mapContainer.data('id')); - if( - !interval || - options.forceData === true - ){ + let filterHasId = filter.includes('hasId'); + let filterHasChanged = filter.includes('hasChanged'); - // map config --------------------------------------------------------------------------------------------- - mapData.config = { - id: parseInt( mapElement.data('id') ), - name: mapElement.data('name'), - scope: { - id: parseInt( mapElement.data('scopeId') ) - }, - icon: mapElement.data('icon'), - type: { - id: parseInt( mapElement.data('typeId') ) - }, - created: parseInt( mapElement.data('created') ), - updated: parseInt( mapElement.data('updated') ), - }; + let mapData = {}; - // map data ----------------------------------------------------------------------------------------------- - let data = {}; + // map config ------------------------------------------------------------------------------------------------- + mapData.config = { + id: parseInt(mapContainer.data('id')), + name: mapContainer.data('name'), + scope: { + id: parseInt(mapContainer.data('scopeId')) + }, + icon: mapContainer.data('icon'), + type: { + id: parseInt(mapContainer.data('typeId')) + }, + created: parseInt(mapContainer.data('created')), + updated: parseInt(mapContainer.data('updated')) + }; - // systems data ------------------------------------------------------------------------------------------- - let systemsData = []; - let systems = mapElement.getSystems(); + let data = {}; - for(let i = 0; i < systems.length; i++){ - let tempSystem = $(systems[i]); + // systems data ----------------------------------------------------------------------------------------------- + let systemsData = []; + let systems = mapContainer.getSystems(); - // check if system data should be added - let addSystemData = true; - if( - options.getAll !== true && - options.checkForChange === true && - !tempSystem.hasChanged() - ){ - addSystemData = false; - } + for(let i = 0; i < systems.length; i++){ + let system = $(systems[i]); - if(addSystemData){ - systemsData.push( tempSystem.getSystemData() ); - } + if(filterHasChanged && !MapUtil.hasChanged(system)){ + continue; } - data.systems = systemsData; - - // connections -------------------------------------------------------------------------------------------- - let connections = map.getAllConnections(); - let connectionsFormatted = []; + systemsData.push(system.getSystemData(minimal)); + } - // format connections - for(let j = 0; j < connections.length; j++){ - let tempConnection = connections[j]; - let connectionData = MapUtil.getDataByConnection(tempConnection); + data.systems = systemsData; - // only add valid connections (id is required, this is not the case if connection is new) - if(connectionData.id > 0){ - // check if connection data should be added - let addConnectionData = true; - if( - options.getAll !== true && - options.checkForChange === true && - !$(tempConnection).hasChanged() - ){ - addConnectionData = false; - } + // connections ------------------------------------------------------------------------------------------------ + let connectionsData = []; + let connections = map.getAllConnections(); + for(let j = 0; j < connections.length; j++) { + let connection = connections[j]; - if(addConnectionData){ - connectionsFormatted.push( connectionData ); - } + // add to cache + updateConnectionCache(mapData.config.id, connection); - // add to cache - updateConnectionCache(mapData.config.id, tempConnection); - } + if(filterHasChanged && !MapUtil.hasChanged(connection)){ + continue; } - data.connections = connectionsFormatted; + if(filterHasId && !connection.getParameter('connectionId')){ + continue; + } - mapData.data = data; - }else{ - return false; + connectionsData.push(MapUtil.getDataByConnection(connection, minimal)); } + data.connections = connectionsData; + + mapData.data = data; + return mapData; }; /** * get all relevant data for a system object - * @returns {{}} + * @param minimal + * @returns {{id: number, updated: {updated: number}}} */ - $.fn.getSystemData = function(){ + $.fn.getSystemData = function(minimal = false){ let system = $(this); - let systemData = {}; - systemData.id = parseInt( system.data('id') ); - systemData.systemId = parseInt( system.data('systemId') ); - systemData.name = system.data('name'); - systemData.alias = system.getSystemInfo(['alias']); - systemData.effect = system.data('effect'); - systemData.type = { - id: system.data('typeId') - }; - systemData.security = system.data('security'); - systemData.trueSec = system.data('trueSec'); - systemData.region = { - id: system.data('regionId'), - name: system.data('region') - }; - systemData.constellation = { - id: system.data('constellationId'), - name: system.data('constellation') - }; - systemData.status = { - id: system.data('statusId') - }; - systemData.locked = system.data('locked') ? 1 : 0; - systemData.rallyUpdated = system.data('rallyUpdated') || 0; - systemData.rallyPoke = system.data('rallyPoke') ? 1 : 0; - systemData.currentUser = system.data('currentUser'); // if user is currently in this system - systemData.planets = system.data('planets'); - systemData.shattered = system.data('shattered') ? 1 : 0; - systemData.statics = system.data('statics'); - systemData.updated = { - updated: parseInt( system.data('updated') ) + let systemData = { + id: parseInt(system.data('id')), + updated: { + updated: parseInt(system.data('updated')) + } }; - systemData.userCount = (system.data('userCount') ? parseInt( system.data('userCount') ) : 0); - systemData.position = MapUtil.getSystemPosition(system); + + if(!minimal){ + systemData = Object.assign(systemData, { + systemId: parseInt(system.data('systemId')), + name: system.data('name'), + alias: system.getSystemInfo(['alias']), + effect: system.data('effect'), + type: { + id: system.data('typeId') + }, + security: system.data('security'), + trueSec: system.data('trueSec'), + region: { + id: system.data('regionId'), + name: system.data('region') + }, + constellation: { + id: system.data('constellationId'), + name: system.data('constellation') + }, + status: { + id: system.data('statusId') + }, + locked: system.data('locked') ? 1 : 0, + rallyUpdated: system.data('rallyUpdated') || 0, + rallyPoke: system.data('rallyPoke') ? 1 : 0, + currentUser: system.data('currentUser'), // if user is currently in this system + faction: system.data('faction'), + planets: system.data('planets'), + shattered: system.data('shattered') ? 1 : 0, + statics: system.data('statics'), + userCount: (system.data('userCount') ? parseInt(system.data('userCount')) : 0), + position: MapUtil.getSystemPosition(system) + }); + } return systemData; }; @@ -3041,6 +3059,7 @@ define([ getMapInstance: getMapInstance, loadMap: loadMap, updateUserData: updateUserData, + getMapDataForSync: getMapDataForSync, saveSystemCallback: saveSystemCallback }; diff --git a/js/app/map/overlay.js b/js/app/map/overlay.js index 29e4ba891..d7318c9d4 100644 --- a/js/app/map/overlay.js +++ b/js/app/map/overlay.js @@ -26,16 +26,17 @@ define([ systemHeadClass: 'pf-system-head', // class for system head // overlay IDs - connectionOverlayId: 'pf-map-connection-overlay', // connection "normal size" ID (jsPlumb) + connectionOverlayWhId: 'pf-map-connection-wh-overlay', // connection WH overlay ID (jsPlumb) connectionOverlayEolId: 'pf-map-connection-eol-overlay', // connection EOL overlay ID (jsPlumb) connectionOverlayArrowId: 'pf-map-connection-arrow-overlay', // connection Arrows overlay ID (jsPlumb) - connectionOverlaySmallId: 'pf-map-connection-small-overlay', // connection "smaller" overlay ID (jsPlumb) + + endpointOverlayId: 'pf-map-endpoint-overlay', // endpoint overlay ID (jsPlumb) // overlay classes - connectionOverlayClass: 'pf-map-connection-overlay', // class for "normal size" overlay + componentOverlayClass: 'pf-map-component-overlay', // class for "normal size" overlay + connectionArrowOverlayClass: 'pf-map-connection-arrow-overlay', // class for "connection arrow" overlay - connectionDiamondOverlayClass: 'pf-map-connection-diamond-overlay', // class for "connection diamond" overlay - connectionOverlaySmallClass: 'pf-map-connection-small-overlay' // class for "smaller" overlays + connectionDiamondOverlayClass: 'pf-map-connection-diamond-overlay' // class for "connection diamond" overlay }; /** @@ -73,13 +74,18 @@ define([ * @param label */ let addEndpointOverlay = (endpoint, label) => { + label = label.join(', '); + endpoint.addOverlay([ 'Label', { label: MapUtil.getEndpointOverlayContent(label), - id: config.connectionOverlaySmallId, - cssClass: config.connectionOverlaySmallClass, - location: [ 0.9, 0.9 ] + id: config.endpointOverlayId, + cssClass: [config.componentOverlayClass, label.length ? 'small' : 'icon'].join(' '), + location: MapUtil.getLabelEndpointOverlayLocation(endpoint, label), + parameters: { + label: label + } } ]); }; @@ -89,10 +95,6 @@ define([ let connectionId = connection.getParameter('connectionId'); let sourceEndpoint = connection.endpoints[0]; let targetEndpoint = connection.endpoints[1]; - let sourceSystem = $(sourceEndpoint.element); - let targetSystem = $(targetEndpoint.element); - let sourceId = sourceSystem.data('id'); - let targetId = targetSystem.data('id'); let signatureTypeNames = { sourceLabels: [], @@ -165,7 +167,7 @@ define([ * @param i */ let removeEndpointOverlay = (endpoint, i) => { - endpoint.removeOverlays(config.connectionOverlaySmallId); + endpoint.removeOverlays(config.endpointOverlayId); }; /** @@ -324,24 +326,29 @@ define([ over: function(e){ let mapElement = Util.getMapElementFromOverlay(this); mapElement.find('.' + config.systemHeadClass).each(function(){ - let system = $(this); - // init tooltip if not already exists - if( !system.data('bs.tooltip') ){ - system.tooltip({ - container: mapElement, + let systemHead = $(this); + // init popover if not already exists + if(!systemHead.data('bs.popover')){ + let system = systemHead.parent(); + systemHead.popover({ placement: 'right', - title: function(){ - return $(this).parent().data('region'); - }, - trigger: 'manual' + html: true, + trigger: 'manual', + container: mapElement, + title: false, + content: Util.getSystemRegionTable( + system.data('region'), + system.data('faction') || null + ) }); } - system.tooltip('show'); + systemHead.setPopoverSmall(); + systemHead.popover('show'); }); }, out: function(e){ let mapElement = Util.getMapElementFromOverlay(this); - mapElement.find('.' + config.systemHeadClass).tooltip('hide'); + mapElement.find('.' + config.systemHeadClass).popover('hide'); } } }, @@ -369,7 +376,7 @@ define([ connection: { title: 'WH data', trigger: 'hover', - class: 'pf-map-overlay-connection', + class: 'pf-map-overlay-connection-wh', iconClass: ['fas', 'fa-fw', 'fa-fighter-jet'], hoverIntent: { over: function(e){ @@ -400,8 +407,8 @@ define([ 'Label', { label: labels.join('
'), - id: config.connectionOverlayId, - cssClass: config.connectionOverlaySmallClass, + id: config.connectionOverlayWhId, + cssClass: [config.componentOverlayClass, 'small'].join(' '), location: 0.35 } ]); @@ -413,7 +420,7 @@ define([ let connections = MapUtil.searchConnectionsByScopeAndType(map, 'wh'); for(let connection of connections){ - connection.removeOverlays(config.connectionOverlayId); + connection.removeOverlays(config.connectionOverlayWhId); } } } @@ -440,7 +447,7 @@ define([ { label: ' ' + formatTimeParts(diff), id: config.connectionOverlayEolId, - cssClass: [config.connectionOverlayClass, 'eol'].join(' '), + cssClass: [config.componentOverlayClass, 'eol'].join(' '), location: 0.25 } ]); diff --git a/js/app/map/system.js b/js/app/map/system.js index 48acf9596..b6187040c 100644 --- a/js/app/map/system.js +++ b/js/app/map/system.js @@ -134,13 +134,8 @@ define([ // show loading animation dialogElement.find('[data-type="spinner"]').addClass('in'); - MapUtil.requestSystemData({ - mapId: mapId, - systemId: systemId, - isCcpId: 1 - }, { - dialogElement: dialogElement - }).then(payload => updateDialog(payload.context.dialogElement, payload.data)) + Util.request('GET', 'system', systemId, {mapId: mapId, isCcpId: 1}, {dialogElement: dialogElement}) + .then(payload => updateDialog(payload.context.dialogElement, payload.data)) .catch(payload => updateDialog(payload.context.dialogElement)); }; @@ -150,7 +145,7 @@ define([ let statusData = [{id: 0, text: 'auto'}]; // get current map data --------------------------------------------------------------------------------------- - let mapData = mapContainer.getMapDataFromClient({forceData: true}); + let mapData = mapContainer.getMapDataFromClient(['hasId']); let mapSystems = mapData.data.systems; let mapSystemCount = mapSystems.length; let mapTypeName = mapContainer.data('typeName'); diff --git a/js/app/map/util.js b/js/app/map/util.js index 7ea01bdae..d6894311e 100644 --- a/js/app/map/util.js +++ b/js/app/map/util.js @@ -5,9 +5,8 @@ define([ 'jquery', 'app/init', - 'app/util', - 'bootbox' -], ($, Init, Util, bootbox) => { + 'app/util' +], ($, Init, Util) => { 'use strict'; let config = { @@ -81,24 +80,20 @@ define([ * @param mapId * @returns {*} */ - let getMapInstance = (mapId) => { - return activeInstances[mapId]; - }; + let getMapInstance = mapId => activeInstances[mapId]; /** * check for mapInstance is set * @param mapId * @returns {boolean} */ - let existsMapInstance = (mapId) => { - return typeof activeInstances[mapId] === 'object'; - }; + let existsMapInstance = mapId => typeof activeInstances[mapId] === 'object'; /** * removes a map instance * @param mapId */ - let clearMapInstance = (mapId) => { + let clearMapInstance = mapId => { if(existsMapInstance(mapId)){ delete activeInstances[mapId]; } @@ -266,6 +261,33 @@ define([ return effectInfo; }; + /** + * flag map component (map, system, connection) as "changed" + * @param component + */ + let markAsChanged = component => { + if(component instanceof $ && component.hasClass(config.systemClass)){ + component.data('changed', true); + }else if(component instanceof jsPlumb.Connection){ + component.setParameter('changed', true); + } + }; + + /** + * check if map component (system, connection) is flagged as "changed" + * @param component + * @returns {boolean} + */ + let hasChanged = component => { + let changed = false; + if(component instanceof $ && component.hasClass(config.systemClass)){ + changed = component.data('changed') || false; + }else if(component instanceof jsPlumb.Connection){ + changed = component.getParameter('changed') || false; + } + return changed; + }; + /** * get system elements on a map * @returns {*|jQuery} @@ -283,58 +305,109 @@ define([ return mapElement.find('.' + config.systemSelectedClass); }; + /** + * filter jsPlumb connection or endpoint types + * -> remove default type(s) + * @param types + * @returns {*} + */ + let filterDefaultTypes = types => { + let defaultTypes = ['', 'default', 'state_active', 'state_process']; + return types.diff(defaultTypes); + }; + + /** + * returns "target/source" label from endpoint + * @param connection + * @param endpoint + * @returns {string} + */ + let getEndpointLabel = (connection, endpoint) => { + return endpoint.element === connection.source ? 'source' : endpoint.element === connection.target ? 'target' : false; + }; + + /** + * get data from endpoint + * @param connection + * @param endpoint + * @returns {{types: *, label: string}} + */ + let getDataByEndpoint = (connection, endpoint) => { + return { + label: getEndpointLabel(connection, endpoint), + types: filterDefaultTypes(endpoint.getType()) + }; + }; + /** * filter connections by type * @param map * @param type + * @param exclude * @returns {Array} */ - let getConnectionsByType = (map, type) => { + let getConnectionsByType = (map, type, exclude = false) => { let connections = []; - // iterate through ALL connections and filter... - // -> there is no "filterByScope()" method in jsPlumb - for(let connection of map.getAllConnections()){ - if(connection.getType().indexOf(type) !== -1){ - connections.push(connection); + for(let data of map.select().hasType(type)){ + if(data[0] !== exclude){ + connections.push(data[1]); } } return connections; }; /** - * get all relevant data for a connection object + * get endpoints data from connection * @param connection - * @returns {{id: Number, source: Number, sourceName: (*|T|JQuery|{}), target: Number, targetName: (*|T|JQuery), scope: *, type: *, updated: Number}} + * @returns {{source: {}, target: {}}} */ - let getDataByConnection = (connection) => { + let getEndpointsDataByConnection = connection => { + let endpointsData = {source: {}, target: {}}; + for(let endpoint of connection.endpoints){ + let endpointData = getDataByEndpoint(connection, endpoint); + if(endpointData.label === 'source'){ + endpointsData.source = endpointData; + }else if(endpointData.label === 'target'){ + endpointsData.target = endpointData; + } + } + return endpointsData; + }; + + /** + * get connection data from connection + * @param connection + * @param minimal + * @returns {{id: (*|number), updated: (*|number)}} + */ + let getDataByConnection = (connection, minimal = false) => { let source = $(connection.source); let target = $(connection.target); - let id = connection.getParameter('connectionId'); - let updated = connection.getParameter('updated'); - - let connectionTypes = connection.getType(); - - // normalize connection array - connectionTypes = $.grep(connectionTypes, function(n){ - // 'default' is added by jsPlumb by default -_- - return ( n.length > 0 && n !== 'default' && n !== 'active'); - }); - - let data = { - id: id ? id : 0, - source: parseInt( source.data('id') ), - sourceName: source.data('name'), - sourceAlias: source.getSystemInfo(['alias']) || source.data('name'), - target: parseInt( target.data('id') ), - targetName: target.data('name'), - targetAlias: target.getSystemInfo(['alias']) || target.data('name'), - scope: connection.scope, - type: connectionTypes, - updated: updated ? updated : 0 + let connectionData = { + id: connection.getParameter('connectionId') || 0, + updated: connection.getParameter('updated') || 0, + source: parseInt(source.data('id')), + target: parseInt(target.data('id')) }; - return data; + if(minimal){ + connectionData = Object.assign(connectionData, { + connection: connection + }); + }else{ + connectionData = Object.assign(connectionData, { + sourceName: source.data('name'), + sourceAlias: source.getSystemInfo(['alias']) || source.data('name'), + targetName: target.data('name'), + targetAlias: target.getSystemInfo(['alias']) || target.data('name'), + scope: connection.scope, + type: filterDefaultTypes(connection.getType()), + endpoints: getEndpointsDataByConnection(connection) + }); + } + + return connectionData; }; /** @@ -342,7 +415,7 @@ define([ * @param connections * @returns {Array} */ - let getDataByConnections = (connections) => { + let getDataByConnections = connections => { let data = []; for(let connection of connections){ data.push(getDataByConnection(connection)); @@ -372,6 +445,8 @@ define([ // connectionIds for delete request let connectionIds = []; for(let connection of connections){ + connection.addType('state_process'); + let connectionId = connection.getParameter('connectionId'); // drag&drop a new connection does not have an id yet, if connection is not established correct if(connectionId !== undefined){ @@ -386,6 +461,13 @@ define([ connections: connections }).then( payload => { + for(let connection of payload.context.connections){ + // connection might be removed rom global map update before this requests ends + if(connection._jsPlumb){ + connection.removeType('state_process'); + } + } + // check if all connections were deleted that should get deleted let deletedConnections = payload.context.connections.filter( function(connection){ @@ -430,7 +512,6 @@ define([ ){ let SystemSignatures = require('app/ui/module/system_signature'); - let connectionId = connection.getParameter('connectionId'); let sourceEndpoint = connection.endpoints[0]; let targetEndpoint = connection.endpoints[1]; let sourceSystem = $(sourceEndpoint.element); @@ -477,30 +558,53 @@ define([ return signatureTypeNames; }; + /** + * get Location [x,y] for Endpoint Overlays (e.g. wh type from Signature mapping) + * -> Coordinates are relative to the Endpoint (not the system!) + * -> jsPlumb specific format + * @param endpoint + * @param label + * @returns {number[]} + */ + let getLabelEndpointOverlayLocation = (endpoint, label) => { + let chars = label.length ? label.length : 2; + let xTop = chars === 2 ? +0.05 : chars <= 4 ? -0.75 : 3; + let xLeft = chars === 2 ? -1.10 : chars <= 4 ? -2.75 : 3; + let xRight = chars === 2 ? +1.25 : chars <= 4 ? +1.25 : 3; + let xBottom = chars === 2 ? +0.05 : chars <= 4 ? -0.75 : 3; + + let yTop = chars === 2 ? -1.10 : chars <= 4 ? -1.75 : 3; + + switch(endpoint._continuousAnchorEdge){ + case 'top': return [xTop, yTop]; + case 'left': return [xLeft, 0]; + case 'right': return [xRight, 0]; + case 'bottom': return [xBottom , 1.3]; + default: return [0.0, 0.0]; + } + }; + /** * get overlay HTML for connection endpoints by Label array * @param label * @returns {string} */ let getEndpointOverlayContent = label => { - let newLabel = ''; let colorClass = 'txt-color-grayLighter'; if(label.length > 0){ - newLabel = label.join(', '); - // check if multiple labels found => conflict - if( newLabel.includes(', ') ){ + if( label.includes(', ') ){ colorClass = 'txt-color-orangeLight'; - }else if( !newLabel.includes('K162') ){ + }else if( !label.includes('K162') ){ colorClass = 'txt-color-yellow'; } }else{ // endpoint not connected with a signature - newLabel = ''; + label = ''; colorClass = 'txt-color-red'; } - return '' + newLabel + ''; + return '' + label + ''; }; /** @@ -516,7 +620,7 @@ define([ * @returns {boolean} */ let hasActiveConnection = map => { - let activeConnections = getConnectionsByType(map, 'active'); + let activeConnections = getConnectionsByType(map, 'state_active'); return activeConnections.length > 0; }; @@ -647,12 +751,12 @@ define([ */ let setConnectionsActive = (map, connections) => { // set all inactive - for(let connection of getConnectionsByType(map, 'active')){ - connection.removeType('active'); + for(let connection of getConnectionsByType(map, 'state_active')){ + connection.removeType('state_active'); } for(let connection of connections){ - connection.addType('active'); + connection.addType('state_active'); } }; @@ -694,11 +798,11 @@ define([ let selectedConnections = []; let deselectedConnections = []; for(let connection of connections){ - if(connection.hasType('active')){ - connection.removeType('active'); + if(connection.hasType('state_active')){ + connection.removeType('state_active'); deselectedConnections.push(connection); }else{ - connection.addType('active'); + connection.addType('state_active'); selectedConnections.push(connection); } } @@ -1682,46 +1786,6 @@ define([ return url; }; - /** - * request system data - * @param requestData - * @param context - * @returns {Promise} - */ - let requestSystemData = (requestData, context) => { - - let requestSystemDataExecutor = (resolve, reject) => { - let payload = { - action: 'systemData' - }; - - $.ajax({ - url: Init.path.getSystemData, - type: 'POST', - dataType: 'json', - data: requestData, - context: context - }).done(function(data){ - payload.context = this; - - if(data.system){ - // system data found - payload.data = data.system; - resolve(payload); - }else{ - // no system data returned/found - reject(payload); - } - }).fail(function(jqXHR, status, error){ - console.warn('Fail request systemData!', requestData); - payload.context = this; - reject(payload); - }); - }; - - return new Promise(requestSystemDataExecutor); - }; - return { config: config, mapOptions: mapOptions, @@ -1738,13 +1802,17 @@ define([ getSystemData: getSystemData, getSystemTypeInfo: getSystemTypeInfo, getEffectInfoForSystem: getEffectInfoForSystem, + markAsChanged: markAsChanged, + hasChanged: hasChanged, toggleSystemsSelect: toggleSystemsSelect, toggleConnectionActive: toggleConnectionActive, setSystemActive: setSystemActive, showSystemInfo: showSystemInfo, showConnectionInfo: showConnectionInfo, showFindRouteDialog: showFindRouteDialog, + getEndpointLabel: getEndpointLabel, getConnectionsByType: getConnectionsByType, + getEndpointsDataByConnection: getEndpointsDataByConnection, getDataByConnection: getDataByConnection, searchConnectionsBySystems: searchConnectionsBySystems, searchConnectionsByScopeAndType: searchConnectionsByScopeAndType, @@ -1757,6 +1825,7 @@ define([ getDataByConnections: getDataByConnections, deleteConnections: deleteConnections, getConnectionDataFromSignatures: getConnectionDataFromSignatures, + getLabelEndpointOverlayLocation: getLabelEndpointOverlayLocation, getEndpointOverlayContent: getEndpointOverlayContent, getTabContentElementByMapElement: getTabContentElementByMapElement, hasActiveConnection: hasActiveConnection, @@ -1771,7 +1840,6 @@ define([ scrollToDefaultPosition: scrollToDefaultPosition, getSystemId: getSystemId, checkRight: checkRight, - getMapDeeplinkUrl: getMapDeeplinkUrl, - requestSystemData: requestSystemData + getMapDeeplinkUrl: getMapDeeplinkUrl }; }); \ No newline at end of file diff --git a/js/app/mappage.js b/js/app/mappage.js index fa605afb5..8fe8ae50e 100644 --- a/js/app/mappage.js +++ b/js/app/mappage.js @@ -209,7 +209,7 @@ define([ Page.initTabChangeObserver(); // init hidden context menu elements - Page.initMapContextMenus(); + Page.renderMapContextMenus(); // init map module mapModule.initMapModule(); @@ -415,7 +415,7 @@ define([ // map update done, init new trigger // get the current update delay (this can change if a user is inactive) - let mapUpdateDelay = Util.getCurrentTriggerDelay( logKeyServerMapData, 0 ); + let mapUpdateDelay = Util.getCurrentTriggerDelay(logKeyServerMapData, 0); // init new trigger initMapUpdatePing(false); diff --git a/js/app/module_map.js b/js/app/module_map.js index ad131bd14..df3d1e3ca 100644 --- a/js/app/module_map.js +++ b/js/app/module_map.js @@ -355,10 +355,7 @@ define([ // request "additional" system data (e.g. Structures, Description) // -> this is used to update some modules after initial draw - let promiseRequestData = MapUtil.requestSystemData({ - mapId: currentSystemData.mapId, - systemId: currentSystemData.systemData.id - }); + let promiseRequestData = Util.request('GET', 'system', currentSystemData.systemData.id, {mapId: currentSystemData.mapId}); // draw modules ------------------------------------------------------------------------------------------- @@ -1353,7 +1350,7 @@ define([ let data = []; for(let i = 0; i < mapElements.length; i++){ // get all changed (system / connection) data from this map - let mapData = $(mapElements[i]).getMapDataFromClient({forceData: false, checkForChange: true}); + let mapData = Map.getMapDataForSync($(mapElements[i]), ['hasId', 'hasChanged']); if(mapData !== false){ if( mapData.data.systems.length > 0 || diff --git a/js/app/page.js b/js/app/page.js index ffca40235..bd21cf420 100644 --- a/js/app/page.js +++ b/js/app/page.js @@ -603,12 +603,11 @@ define([ */ let setPageObserver = function(){ let documentElement = $(document); + let bodyElement = $(document.body); // on "full-screen" change event documentElement.on('fscreenchange', function(e, state, elem){ - let menuButton = $('#' + Util.config.menuButtonFullScreenId); - if(state === true){ // full screen active @@ -702,7 +701,7 @@ define([ let activeMap = Util.getMapModule().getActiveMap(); if(activeMap){ - mapData = activeMap.getMapDataFromClient({forceData: true}); + mapData = activeMap.getMapDataFromClient(['hasId']); } $.fn.showDeleteMapDialog(mapData); @@ -739,7 +738,7 @@ define([ }); // global "modal" callback (for all modals) - $('body').on('hide.bs.modal', '> .modal', function(e){ + bodyElement.on('hide.bs.modal', '> .modal', function(e){ let modalElement = $(this); modalElement.destroyTimestampCounter(true); @@ -749,6 +748,11 @@ define([ .select2('destroy'); }); + // global "close" trigger for context menus + bodyElement.on('click.contextMenuClose', function(e){ + MapContextMenu.closeMenus(); + }); + // disable menu links based on current map config documentElement.on('pf:updateMenuOptions', function(e, data){ let hasRightMapDelete = MapUtil.checkRight('map_delete', data.mapConfig); @@ -1181,12 +1185,15 @@ define([ /** * add "hidden" context menu elements to page */ - let initMapContextMenus = () => { - $('#' + config.dynamicElementWrapperId).append( - MapContextMenu.initMapContextMenu(), - MapContextMenu.initConnectionContextMenu(), - MapContextMenu.initSystemContextMenu(Init.systemStatus) - ); + let renderMapContextMenus = () => { + Promise.all([ + MapContextMenu.renderMapContextMenu(), + MapContextMenu.renderConnectionContextMenu(), + MapContextMenu.renderEndpointContextMenu(), + MapContextMenu.renderSystemContextMenu(Init.systemStatus) + ]).then(payloads => { + $('#' + config.dynamicElementWrapperId).append(payloads.join('')); + }); }; /** @@ -1315,7 +1322,7 @@ define([ return { initTabChangeObserver: initTabChangeObserver, - initMapContextMenus: initMapContextMenus + renderMapContextMenus: renderMapContextMenus }; }); \ No newline at end of file diff --git a/js/app/promises/promise.deferred.js b/js/app/promises/promise.deferred.js new file mode 100644 index 000000000..153161ab1 --- /dev/null +++ b/js/app/promises/promise.deferred.js @@ -0,0 +1,39 @@ +define([], () => { + 'use strict'; + + /** + * Deferred Promise implementation + * @see https://stackoverflow.com/a/47112177/4329969 + */ + return class DeferredPromise { + + constructor(){ + this._promise = new Promise((resolve, reject) => { + // assign the resolve and reject functions to `this` + // making them usable on the class instance + this.resolve = resolve; + this.reject = reject; + }); + + // bind `then` and `catch` to implement the same interface as Promise + this.then = this._promise.then.bind(this._promise); + this.catch = this._promise.catch.bind(this._promise); + } + + set data(data){ + if(data){ + this._data = data; + } + + return this._data; + } + + get data(){ + return this._data; + } + + get [Symbol.toStringTag]() { + return 'Promise'; + } + }; +}); \ No newline at end of file diff --git a/js/app/promises/promise.timeout.js b/js/app/promises/promise.timeout.js new file mode 100644 index 000000000..4c7c8b71e --- /dev/null +++ b/js/app/promises/promise.timeout.js @@ -0,0 +1,69 @@ +define([], () => { + 'use strict'; + + /* + Example1 callback ------------------------------------------------------------------------------------------------- + new TimeoutPromise((resolve, reject) => { + request.get(options, (error, response, body) => { + if (!error && response.statusCode === 200) { + resolve(body); + } else { + reject(error); + } + }); + }, 2000).then(data => { + console.info((Date.now() - start)/1000, '--data --> = ', data); + }).catch(error => { + console.info((Date.now() - start)/1000, '--error --> = ', error); + }); + + Example2 DeferredPromise ------------------------------------------------------------------------------------------ + let deferredPromise = new DeferredPromise(); + + new TimeoutPromise(deferredPromise, 2000).then(data => { + console.info((Date.now() - start)/1000, '--data --> = ', data); + }).catch(error => { + console.info((Date.now() - start)/1000, '--error --> = ', error); + }); + + deferredPromise.resolve('OK'); + */ + + + /** + * Timeout Promise implementation + * -> wraps Promise into TimeoutPromise + * -> rejects Promise after timeout + * + * Example1: + * + */ + return class TimeoutPromise extends Promise { + + constructor(callback, timeout = 6000){ + let timer; + let promise = callback[Symbol.toStringTag] === 'Promise' ? callback : new Promise(callback); + //let promise = new Promise(callback); + + let wrapperPromise = Promise.race([ + promise, + new Promise((resolve, reject) => { + timer = setTimeout(timeout => { + reject(new Error('Promise timeout after ' + timeout + 'ms')); + }, timeout, timeout); + }), + ]); + + super(function(resolve, reject){ + wrapperPromise.then(data => { + clearTimeout(timer); + resolve(data); + }).catch(error => { + clearTimeout(timer); + reject(error); + }); + }); + + } + }; +}); \ No newline at end of file diff --git a/js/app/render.js b/js/app/render.js index 1a3d5006b..3a5bd2d0b 100644 --- a/js/app/render.js +++ b/js/app/render.js @@ -2,59 +2,23 @@ * Render controller */ -define(['jquery', 'mustache'], function($, Mustache){ +define(['jquery', 'mustache'], ($, Mustache) => { 'use strict'; /** - * init function will be called before and after a new module is loaded - * @param functionName - * @param config - */ - let initModule = function(functionName, config){ - - if( - typeof config.functions === 'object' && - typeof config.functions[functionName] === 'function' - ){ - config.functions[functionName](config); - } - }; - - /** - * load a template and render is with Mustache - * @param config + * render Mustache template + * @param path * @param data + * @returns {Promise} */ - let showModule = function(config, data){ - // require module template - requirejs(['text!templates/' + config.name + '.html'], function(template){ - // check for an id, if module already exists, do not insert again - if( - data.id === 'undefined' || - $('#' + data.id).length === 0 - ){ - let content = Mustache.render(template, data); - - // display module - switch(config.link){ - case 'prepend': - config.position.prepend(content); - break; - case 'before': - config.position.before(content); - break; - case 'after': - config.position.after(content); - break; - default: - config.position.append(content); - } - } - - // init module function after render - initModule('after', config); - }); + let render = (path, data) => { + let renderExecutor = resolve => { + requirejs(['text!templates/' + path + '.html'], template => { + resolve(Mustache.render(template, data)); + }); + }; + return new Promise(renderExecutor); }; /** @@ -180,7 +144,7 @@ define(['jquery', 'mustache'], function($, Mustache){ }; return { - showModule: showModule, + render: render, highlightJson: highlightJson }; }); \ No newline at end of file diff --git a/js/app/setup.js b/js/app/setup.js index b623b1468..faf5f6509 100644 --- a/js/app/setup.js +++ b/js/app/setup.js @@ -201,7 +201,7 @@ define([ }, status: { type: 'warning', - label: 'CONNECTING...', + label: 'CONNECTING…', class: 'txt-color-warning' } }); @@ -213,7 +213,7 @@ define([ updateWebSocketPanel({ status: { type: 'warning', - label: 'OPEN wait for response...', + label: 'OPEN wait for response…', class: 'txt-color-warning' } }); diff --git a/js/app/ui/dialog/map_info.js b/js/app/ui/dialog/map_info.js index 8b6885201..8e5c717a7 100644 --- a/js/app/ui/dialog/map_info.js +++ b/js/app/ui/dialog/map_info.js @@ -200,7 +200,7 @@ define([ let mapUrl = $(this).find('span').text().trim(); Util.copyToClipboard(mapUrl).then(payload => { if(payload.data){ - Util.showNotify({title: 'Copied to clipbaord', text: mapUrl, type: 'success'}); + Util.showNotify({title: 'Copied to clipboard', text: mapUrl, type: 'success'}); } }); }); @@ -322,7 +322,8 @@ define([ },{ name: 'region', title: 'region', - data: 'region.name' + data: 'region.name', + className: 'min-screen-l', },{ name: 'planets', title: '', @@ -442,7 +443,7 @@ define([ title: 'updated', width: 80, searchable: false, - className: ['text-right', config.tableCellCounterClass, 'min-screen-l'].join(' '), + className: ['text-right', config.tableCellCounterClass].join(' '), data: 'updated.updated', defaultContent: '', },{ @@ -480,7 +481,7 @@ define([ // refresh connection table (connections might have changed) -------------- let connectionsElement = $('#' + config.mapInfoConnectionsId); - let mapDataNew = activeMap.getMapDataFromClient({forceData: true}); + let mapDataNew = activeMap.getMapDataFromClient(['hasId']); connectionsElement.initConnectionInfoTable(mapDataNew); }else{ @@ -522,55 +523,22 @@ define([ // table init complete connectionTable.on('init.dt', function(){ connectionsElement.hideLoadingAnimation(); + + // init table tooltips + let tooltipElements = connectionsElement.find('[data-toggle="tooltip"]'); + tooltipElements.tooltip(); }); // connections table ------------------------------------------------------------------------------------------ - - // prepare data for dataTables - let connectionData = []; - for(let j = 0; j < mapData.data.connections.length; j++){ - let tempConnectionData = mapData.data.connections[j]; - - let tempConData = {}; - - tempConData.id = tempConnectionData.id; - - tempConData.scope = { - scope: MapUtil.getScopeInfoForConnection(tempConnectionData.scope, 'label'), - scope_sort: tempConnectionData.scope - }; - - tempConData.source = { - id: tempConnectionData.source, - name: tempConnectionData.sourceName, - }; - - // connection - let connectionClasses = MapUtil.getConnectionFakeClassesByTypes(tempConnectionData.type); - connectionClasses = connectionClasses.join(' '); - tempConData.connection = '
'; - - tempConData.target = { - id: tempConnectionData.target, - name: tempConnectionData.targetName, - }; - - tempConData.updated = tempConnectionData.updated; - - tempConData.clear = ''; - - connectionData.push(tempConData); - } - let connectionDataTable = connectionTable.dataTable({ pageLength: 20, paging: true, lengthMenu: [[5, 10, 20, 50, -1], [5, 10, 20, 50, 'All']], ordering: true, - order: [ 0, 'desc' ], + order: [ 6, 'desc' ], autoWidth: false, hover: false, - data: connectionData, + data: mapData.data.connections, columnDefs: [], language: { emptyTable: 'No connections', @@ -582,46 +550,85 @@ define([ { name: 'scope', title: 'scope', - width: '50px', + width: 50, orderable: true, data: 'scope', render: { - _: 'scope', - sort: 'scope_sort' + display: (cellData, type, rowData, meta) => { + return MapUtil.getScopeInfoForConnection(cellData, 'label'); + } } },{ name: 'sourceName', title: 'source system', - data: 'source.name', + data: 'sourceName', className: [config.tableCellLinkClass].join(' '), createdCell: function(cell, cellData, rowData, rowIndex, colIndex){ // select system $(cell).on('click', function(e){ - Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: rowData.source.id}); + Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: rowData.source}); }); } + },{ + name: 'sourceBubble', + title: '', + width: 10, + data: 'endpoints.source', + className: 'text-right', + render: { + display: (cellData, type, rowData, meta) => { + let value = ''; + if(cellData.types.includes('bubble')){ + value = ''; + } + return value; + } + } },{ name: 'connection', title: 'connection', - width: '80px', + width: 80, className: 'text-center', orderable: false, searchable: false, - data: 'connection' - }, { + data: 'type', + render: { + display: (cellData, type, rowData, meta) => { + let connectionClasses = MapUtil.getConnectionFakeClassesByTypes(cellData); + connectionClasses = connectionClasses.join(' '); + return '
'; + } + } + },{ + name: 'targetBubble', + title: '', + width: 10, + data: 'endpoints.target', + className: 'text-left', + render: { + display: (cellData, type, rowData, meta) => { + let value = ''; + if(cellData.types.includes('bubble')){ + value = ''; + } + return value; + } + } + },{ + name: 'targetName', title: 'target system', - data: 'target.name', + data: 'targetName', className: [config.tableCellLinkClass].join(' '), createdCell: function(cell, cellData, rowData, rowIndex, colIndex){ // select system $(cell).on('click', function(e){ - Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: rowData.target.id}); + Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: rowData.target}); }); } },{ name: 'updated', title: 'updated', - width: '80px', + width: 80, searchable: false, className: ['text-right', config.tableCellCounterClass].join(' '), data: 'updated', @@ -640,9 +647,10 @@ define([ title: '', orderable: false, searchable: false, - width: '10px', + width: 10, className: ['text-center', config.tableCellActionClass].join(' '), - data: 'clear', + data: null, + defaultContent: '', createdCell: function(cell, cellData, rowData, rowIndex, colIndex){ let tempTableElement = this; @@ -1155,26 +1163,33 @@ define([ createdCell: function(cell, cellData, rowData, rowIndex, colIndex){ // unset formatted string (to much content) - if(cellData.formatted){ - // clone data before delete() values - cellData = Object.assign({}, cellData); - delete(cellData.formatted); - } + $(cell).on('mouseenter', function(e){ + let cell = $(this); + if(!cell.data('bs.popover')){ + if(cellData.formatted){ + // clone data before delete() values + cellData = Object.assign({}, cellData); + delete(cellData.formatted); + } + + let jsonHighlighted = Render.highlightJson(cellData); + let content = '
' + jsonHighlighted + '
'; + + // open popover with raw log data + cell.popover({ + placement: 'left', + html: true, + trigger: 'hover', + content: content, + container: 'body', + title: 'Raw data', + delay: { + show: 180, + hide: 0 + } + }); - let jsonHighlighted = Render.highlightJson(cellData); - let content = '
' + jsonHighlighted + '
'; - - // open popover with raw log data - $(cell).popover({ - placement: 'left', - html: true, - trigger: 'hover', - content: content, - container: 'body', - title: 'Raw data', - delay: { - show: 180, - hide: 0 + cell.popover('show'); } }); } @@ -1254,7 +1269,7 @@ define([ */ $.fn.showMapInfoDialog = function(options){ let activeMap = Util.getMapModule().getActiveMap(); - let mapData = activeMap ? activeMap.getMapDataFromClient({forceData: true}) : false; + let mapData = activeMap ? activeMap.getMapDataFromClient(['hasId']) : false; if(mapData !== false){ // "log" tab -> get "Origin", not all config options are set in mapData @@ -1311,7 +1326,7 @@ define([ let menuAction = $(this).attr('data-action'); if(menuAction === 'refresh'){ // get new map data - let mapData = activeMap.getMapDataFromClient({forceData: true}); + let mapData = activeMap.getMapDataFromClient(['hasId']); // find active tab let activeTabLink = $(this).parents('.navbar').find('.navbar-header.pull-left li.active a'); if(activeTabLink.attr('href') === '#' + config.dialogMapInfoLogsId){ diff --git a/js/app/ui/dialog/map_settings.js b/js/app/ui/dialog/map_settings.js index b61e14344..bd02f526a 100644 --- a/js/app/ui/dialog/map_settings.js +++ b/js/app/ui/dialog/map_settings.js @@ -496,10 +496,7 @@ define([ // IMPORTANT: Get map data from client (NOT from global mapData which is available in here) // -> This excludes some data (e.g. wh statics) // -> Bring export inline with main map toggle requests - let exportMapData = mapElement.getMapDataFromClient({ - forceData: true, - getAll: true - }); + let exportMapData = mapElement.getMapDataFromClient(['hasId']); let exportButton = $(this); // set map data right before download diff --git a/js/app/ui/module/connection_info.js b/js/app/ui/module/connection_info.js index 32c428a33..bcac90cb5 100644 --- a/js/app/ui/module/connection_info.js +++ b/js/app/ui/module/connection_info.js @@ -308,8 +308,8 @@ define([ let sourceLabel = signatureTypeNames.sourceLabels; let targetLabel = signatureTypeNames.targetLabels; - sourceLabelElement.html(MapUtil.getEndpointOverlayContent(sourceLabel)); - targetLabelElement.html(MapUtil.getEndpointOverlayContent(targetLabel)); + sourceLabelElement.html(MapUtil.getEndpointOverlayContent(sourceLabel.join(', '))); + targetLabelElement.html(MapUtil.getEndpointOverlayContent(targetLabel.join(', '))); // remove K162 sourceLabel = sourceLabel.diff(['K162']); @@ -1153,7 +1153,7 @@ define([ */ let getConnectionsDataFromModule = (moduleElement, mapId) => { let activeMap = Util.getMapModule().getActiveMap(); - let mapData = activeMap.getMapDataFromClient({forceData: true}); + let mapData = activeMap.getMapDataFromClient(['hasId']); let connectionsData = { connectionsDataUpdate: [], connectionsDataRemove: [], diff --git a/js/app/ui/module/system_info.js b/js/app/ui/module/system_info.js index c3fe5beda..a59899dee 100644 --- a/js/app/ui/module/system_info.js +++ b/js/app/ui/module/system_info.js @@ -343,7 +343,7 @@ define([ let mapUrl = $(this).attr('data-url'); Util.copyToClipboard(mapUrl).then(payload => { if(payload.data){ - Util.showNotify({title: 'Copied to clipbaord', text: mapUrl, type: 'success'}); + Util.showNotify({title: 'Copied to clipboard', text: mapUrl, type: 'success'}); } }); }); diff --git a/js/app/ui/module/system_intel.js b/js/app/ui/module/system_intel.js index 62b5caae9..8ae99f7eb 100644 --- a/js/app/ui/module/system_intel.js +++ b/js/app/ui/module/system_intel.js @@ -67,16 +67,6 @@ define([ return tableApi.rows().ids().toArray().find(rowId => rowId === config.tableRowIdPrefix + id); }; - /** - * callback -> add structure rows from responseData - * @param context - * @param responseData - */ - let callbackAddStructureRows = (context, responseData) => { - let systemData = Util.getObjVal(responseData, 'system'); - callbackUpdateStructureRows(context, systemData); - }; - /** * callback -> add structure rows from systemData * @param context @@ -160,10 +150,9 @@ define([ /** * callback -> delete structure rows * @param context - * @param responseData + * @param structureIds */ - let callbackDeleteStructures = (context, responseData) => { - let structureIds = Util.getObjVal(responseData, 'deletedStructureIds'); + let callbackDeleteStructures = (context, structureIds) => { let deletedCounter = 0; if(structureIds && structureIds.length){ for(let structureId of structureIds){ @@ -209,36 +198,6 @@ define([ }); }; - /** - * requests system data - * @param requestData - * @param context - * @param callback - */ - let getStructureData = (requestData, context, callback) => { - sendRequest(Init.path.getSystemData, requestData, context, callback); - }; - - /** - * save structure data - * @param requestData - * @param context - * @param callback - */ - let saveStructureData = (requestData, context, callback) => { - sendRequest(Init.path.saveStructureData, requestData, context, callback); - }; - - /** - * delete structure - * @param requestData - * @param context - * @param callback - */ - let deleteStructure = (requestData, context, callback) => { - sendRequest(Init.path.deleteStructureData, requestData, context, callback); - }; - /** * show structure dialog * @param moduleElement @@ -248,7 +207,6 @@ define([ */ let showStructureDialog = (moduleElement, tableApi, systemId, structureData) => { let structureStatusData = Util.getObjVal(Init, 'structureStatus'); - let structureTypeData = Util.getObjVal(Init, 'structureStatus'); let statusData = Object.keys(structureStatusData).map((k) => { let data = structureStatusData[k]; @@ -300,12 +258,19 @@ define([ formData.corporationId = Util.getObjVal(formData, 'corporationId') | 0; formData.systemId = systemId | 0; - saveStructureData({ - structures: [formData] - }, { - moduleElement: moduleElement, - tableApi: tableApi - }, callbackUpdateStructureRows); + moduleElement.showLoadingAnimation(); + + let method = formData.id ? 'PATCH' : 'PUT'; + Util.request(method, 'structure', formData.id, formData, + { + moduleElement: moduleElement, + tableApi: tableApi + }, + context => context.moduleElement.hideLoadingAnimation() + ).then( + payload => callbackUpdateStructureRows(payload.context, {structures: payload.data}), + Util.handleAjaxErrorResponse + ); }else{ return false; } @@ -620,12 +585,18 @@ define([ // let deleteRowElement = $(cell).parents('tr'); // tableApi.rows(deleteRowElement).remove().draw(); - deleteStructure({ - id: rowData.id - },{ - moduleElement: moduleElement, - tableApi: tableApi - }, callbackDeleteStructures); + + moduleElement.showLoadingAnimation(); + Util.request('DELETE', 'structure', rowData.id, {}, + { + moduleElement: moduleElement, + tableApi: tableApi + }, + context => context.moduleElement.hideLoadingAnimation() + ).then( + payload => callbackDeleteStructures(payload.context, payload.data), + Util.handleAjaxErrorResponse + ); } }; @@ -769,11 +740,40 @@ define([ * @param context */ let updateStructureTableByClipboard = (systemData, clipboard, context) => { + + let saveStructureData = (structureData, context) => { + context.moduleElement.showLoadingAnimation(); + + Util.request('POST', 'structure', [], structureData, context, context => context.moduleElement.hideLoadingAnimation()) + .then( + payload => callbackUpdateStructureRows(payload.context, {structures: payload.data}), + Util.handleAjaxErrorResponse + ); + }; + let structureData = parseDscanString(systemData, clipboard); if(structureData.length){ - saveStructureData({ - structures: structureData - }, context, callbackUpdateStructureRows); + // valid structure data parsed + + // check if structures will be added to a system where character is currently in + // if character is not in any system -> id === undefined -> no "confirmation required + let currentLocationData = Util.getCurrentLocationData(); + if( + currentLocationData.id && + currentLocationData.id !== systemData.id + ){ + let systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')'; + systemNameStr = '' + systemNameStr + ''; + + let msg = 'Update structures in ' + systemNameStr + ' ? This not your current location, "' + currentLocationData.name + '" !'; + bootbox.confirm(msg, result => { + if(result){ + saveStructureData(structureData, context); + } + }); + }else{ + saveStructureData(structureData, context); + } } }; @@ -822,14 +822,16 @@ define([ // init refresh button ---------------------------------------------------------------------------------------- moduleElement.find('.' + config.moduleHeadlineIconRefreshClass).on('click', function(e){ - getStructureData({ - mapId: mapId, - systemId: systemData.id - },{ - moduleElement: moduleElement, - tableApi: tableApi, - removeMissing: true - }, callbackAddStructureRows); + moduleElement.showLoadingAnimation(); + + Util.request('GET', 'system', systemData.id, {mapId: mapId}, + { + moduleElement: moduleElement, + tableApi: tableApi, + removeMissing: true + }, + context => context.moduleElement.hideLoadingAnimation() + ).then(payload => callbackUpdateStructureRows(payload.context, payload.data)); }); // init listener for global "past" dScan into this page ------------------------------------------------------- @@ -846,8 +848,6 @@ define([ * @param moduleElement */ let beforeDestroy = moduleElement => { - // Destroying the data tables throws - // -> safety remove all dataTables let structureTableElement = moduleElement.find('.' + config.systemStructuresTableClass); let tableApi = structureTableElement.DataTable(); tableApi.destroy(); diff --git a/js/app/ui/module/system_route.js b/js/app/ui/module/system_route.js index b1de290d9..d65add0ad 100644 --- a/js/app/ui/module/system_route.js +++ b/js/app/ui/module/system_route.js @@ -232,6 +232,7 @@ define([ wormholesCritical: (rowData.hasOwnProperty('wormholesCritical')) ? rowData.wormholesCritical | 0 : 1, wormholesFrigate: (rowData.hasOwnProperty('wormholesFrigate')) ? rowData.wormholesFrigate | 0 : 1, wormholesEOL: (rowData.hasOwnProperty('wormholesEOL')) ? rowData.wormholesEOL | 0 : 1, + endpointsBubble: (rowData.hasOwnProperty('endpointsBubble')) ? rowData.endpointsBubble | 0 : 1, connections: (rowData.hasOwnProperty('connections')) ? rowData.connections.value | 0 : 0, flag: (rowData.hasOwnProperty('flag')) ? rowData.flag.value : 'shortest' }; @@ -324,7 +325,8 @@ define([ wormholesReduced: routeDialogData.hasOwnProperty('wormholesReduced') ? parseInt(routeDialogData.wormholesReduced) : 0, wormholesCritical: routeDialogData.hasOwnProperty('wormholesCritical') ? parseInt(routeDialogData.wormholesCritical) : 0, wormholesFrigate: routeDialogData.hasOwnProperty('wormholesFrigate') ? parseInt(routeDialogData.wormholesFrigate) : 0, - wormholesEOL: routeDialogData.hasOwnProperty('wormholesEOL') ? parseInt(routeDialogData.wormholesEOL) : 0 + wormholesEOL: routeDialogData.hasOwnProperty('wormholesEOL') ? parseInt(routeDialogData.wormholesEOL) : 0, + endpointsBubble: routeDialogData.hasOwnProperty('endpointsBubble') ? parseInt(routeDialogData.endpointsBubble) : 0 }] }; @@ -731,7 +733,7 @@ define([ // button class for flag (e.g. "secure" routes) let flagButtonClass = routeData.flag === 'secure' ? 'txt-color-success' : ''; - let connectionButton = ''; + let connectionButton = ''; let flagButton = ''; let reloadButton = ''; let searchButton = ''; @@ -760,6 +762,7 @@ define([ wormholesCritical: routeData.wormholesCritical, wormholesFrigate: routeData.wormholesFrigate, wormholesEOL: routeData.wormholesEOL, + endpointsBubble: routeData.endpointsBubble, connections: { value: 0, button: connectionButton @@ -994,7 +997,7 @@ define([ } },{ targets: 5, - title: '', + title: '', orderable: false, searchable: false, width: 10, @@ -1354,14 +1357,24 @@ define([ drawRouteTable(mapId, moduleElement, systemFromData, routesTable, systemsToData); }); + }; + /** + * before module destroy callback + * @param moduleElement + */ + let beforeDestroy = moduleElement => { + let routeTableElement = moduleElement.find('.' + config.systemInfoRoutesTableClass); + let tableApi = routeTableElement.DataTable(); + tableApi.destroy(); }; return { config: config, getModule: getModule, initModule: initModule, - updateModule: updateModule + updateModule: updateModule, + beforeDestroy: beforeDestroy }; }); \ No newline at end of file diff --git a/js/app/ui/module/system_signature.js b/js/app/ui/module/system_signature.js index 13821487d..1a9c48708 100644 --- a/js/app/ui/module/system_signature.js +++ b/js/app/ui/module/system_signature.js @@ -60,19 +60,21 @@ define([ signatureGroupsNames: Util.getSignatureGroupOptions('name') }; - let lockedTables = {}; // locked tables (e.g. disable cops&paste, disable table update) - let sigNameCache = {}; // cache signature names let validSignatureNames = [ // allowed signature type/names 'Cosmic Anomaly', 'Cosmic Signature', - 'Kosmische Anomalie', - 'Kosmische Signatur', - 'Anomalie cosmique', - 'Signature cosmique', - 'Космическая аномалия', // == "Cosmic Anomaly" - 'Источники сигналов' // == "Cosmic Signature" + 'Kosmische Anomalie', // de: "Cosmic Anomaly" + 'Kosmische Signatur', // de: "Cosmic Signature" + 'Космическая аномалия', // ru: "Cosmic Anomaly" + 'Скрытый сигнал', // rm: "Cosmic Signature" + 'Anomalie cosmique', // fr: "Cosmic Anomaly" + 'Signature cosmique', // fr: "Cosmic Signature" + '宇宙の特異点', // ja: "Cosmic Anomaly" + '宇宙のシグネチャ', // ja: "Cosmic Signature" + '异常空间', // zh: "Cosmic Anomaly" + '空间信号' // zh: "Cosmic Signature" ]; let emptySignatureData = { @@ -83,7 +85,23 @@ define([ }; let editableDefaults = { // xEditable default options for signature fields - url: Init.path.saveSignatureData, + url: function(params){ + let saveExecutor = (resolve, reject) => { + // only submit params if id (pk) is set + if(params.pk){ + let requestData = {}; + requestData[params.name] = params.value; + + Util.request('PATCH', 'signature', params.pk, requestData) + .then(payload => resolve(payload.data)) + .catch(payload => reject(payload.data.jqXHR)); + }else{ + resolve(); + } + }; + + return new Promise(saveExecutor); + }, dataType: 'json', container: 'body', highlight: false, // i use a custom implementation. xEditable uses inline styles for bg color animation -> does not work properly on datatables "sort" cols @@ -121,68 +139,6 @@ define([ return data; }; - /** - * lock signature tableApi and lockType - * @param tableApi - * @param lockType - */ - let lockTable = (tableApi, lockType = 'update') => { - let metaData = getTableMetaData(tableApi); - if(metaData.systemId){ - if( !lockedTables.hasOwnProperty(metaData.systemId) ){ - lockedTables[metaData.systemId] = {}; - } - lockedTables[metaData.systemId][lockType] = true; - }else{ - console.warn('metaData.systemId required in lockTable()', metaData.systemId); - } - }; - - /** - * check whether a signature tableApi is locked by lockType - * @param tableApi - * @param lockType - * @returns {boolean} - */ - let isLockedTable = (tableApi, lockType = 'update') => { - let locked = false; - if(tableApi){ - let metaData = getTableMetaData(tableApi); - if(metaData.systemId){ - if( - lockedTables.hasOwnProperty(metaData.systemId) && - lockedTables[metaData.systemId].hasOwnProperty(lockType) - ){ - locked = true; - } - }else{ - console.warn('metaData.systemId required in isLockedTable()', metaData.systemId); - } - } - - return locked; - }; - - /** - * unlock signature tableApi and lockType - * @param tableApi - * @param lockType - */ - let unlockTable = (tableApi, lockType = 'update') => { - if(tableApi){ - let metaData = getTableMetaData(tableApi); - if(isLockedTable(tableApi, lockType)){ - delete lockedTables[metaData.systemId][lockType]; - } - if( - lockedTables.hasOwnProperty(metaData.systemId) && - !Object.getOwnPropertyNames(lockedTables[metaData.systemId]).length - ){ - delete lockedTables[metaData.systemId]; - } - } - }; - /** * get dataTable id * @param mapId @@ -683,8 +639,22 @@ define([ // wormhole type cant be extracted from signature string -> skip function call if(sigGroupId !== 5){ - // try to get "typeId" by description string - typeId = Util.getSignatureTypeIdByName(systemData, sigGroupId, sigDescription); + // try to get "typeId" from description string + let sigDescriptionLowerCase = sigDescription.toLowerCase(); + + let typeOptions = getAllSignatureNames( + systemData, + systemData.type.id, + Util.getAreaIdBySecurity(systemData.security), + sigGroupId + ); + + for(let [key, name] of Object.entries(Util.flattenXEditableSelectArray(typeOptions))){ + if(name.toLowerCase() === sigDescriptionLowerCase){ + typeId = parseInt(key); + break; + } + } // set signature name as "description" if signature matching failed sigDescription = (typeId === 0) ? sigDescription : ''; @@ -695,7 +665,7 @@ define([ // map array values to signature Object let signatureObj = { systemId: systemData.id, - name: $.trim( rowData[0] ).toLowerCase(), + name: $.trim(rowData[0]).toLowerCase(), groupId: sigGroupId, typeId: typeId, description: sigDescription @@ -726,42 +696,40 @@ define([ * @param options */ let updateSignatureTableByClipboard = (tableApi, systemData, clipboard, options) => { - if(isLockedTable(tableApi, 'clipboard')) return; + if(tableApi.hasProcesses('request')){ + console.info('Update signature table By clipboard locked.'); + return; + } let saveSignatureData = signatureData => { // lock update function until request is finished - lockTable(tableApi); - - // lock copy during request (prevent spamming (ctrl + c ) - lockTable(tableApi, 'clipboard'); - - let requestData = { - signatures: signatureData, - deleteOld: (options.deleteOld) ? 1 : 0, - systemId: parseInt(systemData.id) - }; + let processLockPromise = tableApi.newProcess('lock'); + let processRequestPromise = tableApi.newProcess('request'); - $.ajax({ - type: 'POST', - url: Init.path.saveSignatureData, - data: requestData, - dataType: 'json', - context: { - tableApi: tableApi - } - }).done(function(responseData){ - // unlock table for update - unlockTable(this.tableApi); - // updates table with new/updated signature information - updateSignatureTable(this.tableApi, responseData.signatures, false); - }).fail(function(jqXHR, status, error){ - let reason = status + ' ' + error; - Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'}); - $(document).setProgramStatus('problem'); - }).always(function(){ - unlockTable(this.tableApi); - unlockTable(this.tableApi, 'clipboard'); - }); + Util.request( + 'POST', + 'signature', + [], + { + signatures: signatureData, + deleteOld: options.deleteOld, + systemId: parseInt(systemData.id) + }, + { + tableApi: tableApi, + processLockPromise: processLockPromise, + processRequestPromise: processRequestPromise + }, + context => { + context.tableApi.endProcess(context.processLockPromise); + context.tableApi.endProcess(context.processRequestPromise); + }).then( + payload => { + // updates table with new/updated signature information + updateSignatureTable(payload.context.tableApi, payload.data, !!options.deleteOld); + }, + Util.handleAjaxErrorResponse + ); }; // parse input stream @@ -770,13 +738,12 @@ define([ // valid signature data parsed // check if signatures will be added to a system where character is currently in - // if user is not in any system -> id === undefined -> no "confirmation required + // if character is not in any system -> id === undefined -> no "confirmation required let currentLocationData = Util.getCurrentLocationData(); if( currentLocationData.id && currentLocationData.id !== systemData.id ){ - let systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')'; systemNameStr = '' + systemNameStr + ''; @@ -801,60 +768,60 @@ define([ let deleteSignatures = (tableApi, rows) => { // get unique id array from rows -> in case there are 2 rows with same id -> you never know let signatureIds = [...new Set(rows.data().toArray().map(rowData => rowData.id))]; + let metaData = getTableMetaData(tableApi); - let requestData = { - signatureIds: signatureIds - }; - - $.ajax({ - type: 'POST', - url: Init.path.deleteSignatureData, - data: requestData, - dataType: 'json', - context: { - tableApi: tableApi - } - }).done(function(responseData){ - // promises for all delete rows - let promisesToggleRow = []; - // get deleted rows -> match with response data - let rows = this.tableApi.rows((idx, rowData, node) => responseData.deletedSignatureIds.includes(rowData.id)); - // toggle hide animation for rows one by one... - rows.every(function(rowIdx, tableLoop, rowLoop){ - let row = this; - let rowElement = row.nodes().to$(); - - rowElement.pulseBackgroundColor('deleted'); + let processRequestPromise = tableApi.newProcess('request'); - promisesToggleRow.push(toggleTableRow(rowElement)); - }); + Util.request('DELETE', 'signature', signatureIds, { + systemId: metaData.systemId + }, { + tableApi: tableApi, + processRequestPromise: processRequestPromise + }, + context => { + context.tableApi.endProcess(context.processRequestPromise); + }).then( + payload => { + let tableApi = payload.context.tableApi; + + // promises for all delete rows + let promisesToggleRow = []; + // get deleted rows -> match with response data + let rows = tableApi.rows((idx, rowData, node) => payload.data.includes(rowData.id)); + // toggle hide animation for rows one by one... + rows.every(function (rowIdx, tableLoop, rowLoop) { + let row = this; + let rowElement = row.nodes().to$(); + + rowElement.pulseBackgroundColor('deleted'); + + promisesToggleRow.push(toggleTableRow(rowElement)); + }); - // ... all hide animations done ... - Promise.all(promisesToggleRow).then(payloads => { - // ... get deleted (hide animation done) and delete them - this.tableApi.rows(payloads.map(payload => payload.row)).remove().draw(); + // ... all hide animations done ... + Promise.all(promisesToggleRow).then(payloads => { + // ... get deleted (hide animation done) and delete them + tableApi.rows(payloads.map(payload => payload.row)).remove().draw(); - // update signature bar - updateScannedSignaturesBar(this.tableApi, {showNotice: false}); + // update signature bar + updateScannedSignaturesBar(tableApi, {showNotice: false}); - // update connection conflicts - checkConnectionConflicts(); + // update connection conflicts + checkConnectionConflicts(); - let notificationOptions = { - type: 'success' - }; - if(payloads.length === 1){ - notificationOptions.title = 'Signature deleted'; - }else{ - notificationOptions.title = payloads.length + ' Signatures deleted '; - } - Util.showNotify(notificationOptions); - }); - }).fail(function(jqXHR, status, error){ - let reason = status + ' ' + error; - Util.showNotify({title: jqXHR.status + ': Delete signature', text: reason, type: 'warning'}); - $(document).setProgramStatus('problem'); - }); + let notificationOptions = { + type: 'success' + }; + if (payloads.length === 1) { + notificationOptions.title = 'Signature deleted'; + } else { + notificationOptions.title = payloads.length + ' Signatures deleted '; + } + Util.showNotify(notificationOptions); + }); + }, + Util.handleAjaxErrorResponse + ); }; /** @@ -1134,16 +1101,69 @@ define([ /** * helper function - set 'shown' observer for xEditable connection cell * -> enable Select2 for xEditable form + * @param tableApi * @param cell */ - let editableConnectionOnShown = cell => { + let editableConnectionOnShown = (tableApi, cell) => { $(cell).on('shown', function(e, editable){ let inputField = editable.input.$input; + if(!$(tableApi.table().node()).hasClass(config.sigTablePrimaryClass)){ + // we need the primary table API to get selected connections + let metaData = getTableMetaData(tableApi); + tableApi = getDataTableInstance(metaData.mapId, metaData.systemId, 'primary'); + } + // Select2 init would work without passing select options as "data", Select2 would grap data from DOM // -> We want to pass "meta" data for each option into Select2 for formatting + let selectOptions = Util.convertXEditableOptionsToSelect2(editable); + + // for better UX, systems that are already linked to a wh signatures should be "disabled" + // -> and grouped into a new + let linkedConnectionIds = tableApi.column('connection:name').data().toArray(); + linkedConnectionIds = linkedConnectionIds.filter(id => id > 0); + + if(linkedConnectionIds.length){ + let groupedSelectOptions = []; + let newSelectOptionGroupDisabled = []; + for(let selectOptionGroup of selectOptions){ + if(Array.isArray(selectOptionGroup.children)){ + let newSelectOptionGroup = []; + for(let option of selectOptionGroup.children){ + if(!option.selected && linkedConnectionIds.includes(option.id)){ + // connection already linked -> move to "disabled" group + option.disabled = true; + newSelectOptionGroupDisabled.push(option); + }else{ + // connection is available for link + newSelectOptionGroup.push(option); + } + } + + if(newSelectOptionGroup.length){ + groupedSelectOptions.push({ + text: selectOptionGroup.text, + children: newSelectOptionGroup + }); + } + }else{ + // option has no children -> is prepend (id = 0) option + groupedSelectOptions.push(selectOptionGroup); + } + } + + if(newSelectOptionGroupDisabled.length){ + groupedSelectOptions.push({ + text: 'linked', + children: newSelectOptionGroupDisabled + }); + } + + selectOptions = groupedSelectOptions; + } + let options = { - data: Util.convertXEditableOptionsToSelect2(editable) + data: selectOptions }; inputField.addClass('pf-select2').initSignatureConnectionSelect(options); @@ -1304,7 +1324,7 @@ define([ updateTooltip(cell, newValue); if(response){ - let newRowData = response.signatures[0]; + let newRowData = response[0]; updateSignatureCell(tableApi, rowIndex, 'status:name', newRowData.updated); updateSignatureCell(tableApi, rowIndex, 'updated:name', newRowData.updated.updated); } @@ -1369,7 +1389,7 @@ define([ $(this).pulseBackgroundColor('changed'); if(response){ - let newRowData = response.signatures[0]; + let newRowData = response[0]; updateSignatureCell(tableApi, rowIndex, 'status:name', newRowData.updated); updateSignatureCell(tableApi, rowIndex, 'updated:name', newRowData.updated.updated); } @@ -1466,7 +1486,7 @@ define([ $(this).pulseBackgroundColor('changed'); if(response){ - let newRowData = response.signatures[0]; + let newRowData = response[0]; updateSignatureCell(tableApi, rowIndex, 'status:name', newRowData.updated); updateSignatureCell(tableApi, rowIndex, 'updated:name', newRowData.updated.updated); } @@ -1510,7 +1530,7 @@ define([ $(this).pulseBackgroundColor('changed'); if(response){ - let newRowData = response.signatures[0]; + let newRowData = response[0]; updateSignatureCell(tableApi, rowIndex, 'status:name', newRowData.updated); updateSignatureCell(tableApi, rowIndex, 'updated:name', newRowData.updated.updated); } @@ -1535,7 +1555,7 @@ define([ editableOnSave(tableApi, cell, [], ['action:name']); editableOnHidden(tableApi, cell); editableConnectionOnInit(cell); - editableConnectionOnShown(cell); + editableConnectionOnShown(tableApi, cell); editableConnectionOnSave(cell); $(cell).editable($.extend({ @@ -1583,7 +1603,7 @@ define([ $(this).pulseBackgroundColor('changed'); if(response){ - let newRowData = response.signatures[0]; + let newRowData = response[0]; updateSignatureCell(tableApi, rowIndex, 'status:name', newRowData.updated); updateSignatureCell(tableApi, rowIndex, 'updated:name', newRowData.updated.updated); } @@ -1695,13 +1715,23 @@ define([ // otherwise, changes would not be submitted in this field (not necessary) formFields.editable('hide'); + let processLockPromise = null; + let processRequestPromise = null; + // submit all xEditable fields formFields.editable('submit', { - url: Init.path.saveSignatureData, + url: Init.path.api + '/signature', ajaxOptions: { + processData: false, // we need to "process" data in beforeSend() + type: 'PUT', dataType: 'json', //assuming json response + contentType: 'application/json', beforeSend: function(xhr, settings){ - lockTable(primaryTableApi); + settings.data = JSON.stringify(settings.data); + + processLockPromise = primaryTableApi.newProcess('lock'); + processRequestPromise = primaryTableApi.newProcess('request'); + }, context: { primaryTableApi: primaryTableApi, @@ -1709,18 +1739,15 @@ define([ } }, data: { - systemId: metaData.systemId, // additional data to submit - pk: 0 // new data no primary key + systemId: metaData.systemId }, error: editableDefaults.error, // user default xEditable error function - success: function(data, editableConfig){ + success: function(response, editableConfig){ let context = editableConfig.ajaxOptions.context; let primaryTableApi = context.primaryTableApi; let secondaryTableApi = context.secondaryTableApi; - unlockTable(primaryTableApi); - - let signatureData = data.signatures[0]; + let signatureData = response[0]; let row = addSignatureRow(primaryTableApi, signatureData); if(row){ primaryTableApi.draw(); @@ -1739,6 +1766,9 @@ define([ // update signature bar updateScannedSignaturesBar(primaryTableApi, {showNotice: true}); } + + primaryTableApi.endProcess(processLockPromise); + primaryTableApi.endProcess(processRequestPromise); } }); }); @@ -1906,8 +1936,6 @@ define([ * @param tableApi */ let initGroupFilterButton = tableApi => { - let characterId = Util.getCurrentCharacterId(); - let promiseStore = MapUtil.getLocaleData('character', Util.getCurrentCharacterId()); promiseStore.then(data => { let filterButton = tableApi.button('tableTools', 'filterGroup:name').node(); @@ -1938,7 +1966,7 @@ define([ inputclass: config.editableUnknownInputClass, display: function(value, sourceData){ // update filter button label - let html = 'group'; + let html = 'filter'; let allSelected = value.length >= sourceData.length; if( !allSelected ){ html += ' (' + value.length + ')'; @@ -1965,6 +1993,175 @@ define([ }); }; + /** + * init table undo button + * @param tableApi + */ + let initUndoButton = tableApi => { + let undoButton = tableApi.button('tableTools', 'undo:name').node(); + let metaData = getTableMetaData(tableApi); + + let getIconByAction = action => { + switch(action){ + case 'add': return 'fa-plus txt-color-green'; + case 'delete': return 'fa-times txt-color-redDarker'; + case 'edit': return 'fa-pen txt-color-orangeDark'; + case 'undo': return 'fa-undo txt-color-grayLight'; + case 'sync': return 'fa-exchange-alt txt-color-orangeDark'; + } + }; + + undoButton.on('shown', function(e, editable){ + // check if history options loaded -> else forward to error function + if(!editable.input.$input.length){ + editable.options.error.call(editable, ['No record found']); + }else{ + // disable first option + editable.input.$input.first().prop('disabled', true); + // preselect second option + //editable.input.$input.eq(1).prop('checked', true); + //editable.setValue('ad78172b72d0327b237c4a7dc1daa5d7'); + + + // "fake" radio button behaviour + editable.input.$input.attr('name', 'test').attr('type', 'radio'); + + // preselect second option + editable.input.$input.eq(1).prop('checked', true); + + let labels = editable.container.$form.find('label'); + labels.addClass('radio'); + + for(let span of labels.find('span')){ + span.style.display = 'inline-block'; + span.style.width = '100%'; + let parts = span.innerText.trim().split('%%'); + parts[0] = '' + parts[0] + ''; + parts[1] = ''; + parts[2] = '' + parts[2] + ''; + parts[3] = '' + parts[3] + ''; + span.innerHTML = parts.join(''); + } + + labels.initTooltips(); + } + }); + + let processLockPromise = null; + + undoButton.editable({ + url: Init.path.api + '/signaturehistory', + ajaxOptions: { + processData: false, + type: 'PUT', + dataType: 'json', //assuming json response + contentType: 'application/json', + beforeSend: function(xhr, settings){ + processLockPromise = tableApi.newProcess('lock'); + }, + }, + params: function(params){ + return JSON.stringify({ + systemId: params.pk, + stamp: params.value[0] + }); + }, + mode: 'popup', + container: 'body', + type: 'checklist', + showbuttons: true, + highlight: false, + title: 'historical records', + name: 'history', + pk: metaData.systemId, + source: Init.path.api + '/signaturehistory/' + metaData.systemId, + sourceOptions: { + type: 'GET', + data: { + mapId: metaData.mapId + } + }, + sourceCache: false, // always get new source options on open + display: function(value){ + $(this).html('undo'); + }, + success: function(response, newValue){ + // update signature table + tableApi.endProcess(processLockPromise); + + updateSignatureTable(tableApi, response, true); + }, + error: function(errors){ + let errorAll = []; + if(errors && errors.responseText){ //ajax error, errors = xhr object + if(errors.responseJSON && errors.responseJSON.error){ + for(let error of errors.responseJSON.error){ + errorAll.push(error.message); + } + }else{ + //fallback -> other ajax error + errorAll.push(errors.responseText); + } + }else if(errors.length){ + // manual called error + errorAll = errors; + + let form = this.container.$form.addClass('has-error'); + form.find('.editable-buttons').hide(); + form.find('.editable-input').hide(); + form.find('.editable-error-block').html(errorAll.join('
')).show(); + } + + return errorAll.join(' | '); + }, + validate: function(value){ + if(!Array.isArray(value) || value.length !== 1){ + return {newValue: value, msg: 'No record selected', field: this}; + } + } + }); + }; + + /** + * init table selectAll button + * @param tableApi + */ + let initSelectAllButton = tableApi => { + let selectButton = tableApi.button('tableTools', 'selectAll:name').node(); + + selectButton.on('click', function(){ + let allRows = tableApi.rows(); + let selectedRows = getSelectedRows(tableApi); + let allRowElements = allRows.nodes().to$(); + + if(allRows.data().length === selectedRows.data().length){ + allRowElements.removeClass('selected'); + }else{ + allRowElements.addClass('selected'); + } + + // check delete button + checkDeleteSignaturesButton(tableApi); + }); + }; + + /** + * init table delete button + * @param tableApi + */ + let initDeleteButton = tableApi => { + let deleteButton = tableApi.button('tableTools', 'delete:name').node(); + + deleteButton.on('click', function(){ + let selectedRows = getSelectedRows(tableApi); + bootbox.confirm('Delete ' + selectedRows.data().length + ' signature?', function(result){ + if(result){ + deleteSignatures(tableApi, selectedRows); + } + }); + }); + }; + /** * draw empty signature table * @param moduleElement @@ -1981,7 +2178,7 @@ define([ let dataTableOptions = { tabIndex: -1, - dom: '<"row"<"col-xs-3"l><"col-xs-5"B><"col-xs-4"f>>' + + dom: '<"row"<"col-xs-3"l><"col-xs-5"B><"col-xs-4"fS>>' + '<"row"<"col-xs-12"tr>>' + '<"row"<"col-xs-5"i><"col-xs-7"p>>', buttons: { @@ -1992,37 +2189,20 @@ define([ className: config.moduleHeadlineIconClass, text: '' // set by js (xEditable) }, + { + name: 'undo', + className: config.moduleHeadlineIconClass, + text: '' // set by js (xEditable) + }, { name: 'selectAll', className: config.moduleHeadlineIconClass, - text: 'select all', - action: function(e, tableApi, node, conf){ - let allRows = tableApi.rows(); - let selectedRows = getSelectedRows(tableApi); - let allRowElements = allRows.nodes().to$(); - - if(allRows.data().length === selectedRows.data().length){ - allRowElements.removeClass('selected'); - }else{ - allRowElements.addClass('selected'); - } - - // check delete button - checkDeleteSignaturesButton(tableApi); - } + text: 'select all' }, { name: 'delete', className: [config.moduleHeadlineIconClass, config.sigTableClearButtonClass].join(' '), - text: 'delete (0)', - action: function(e, tableApi, node, conf){ - let selectedRows = getSelectedRows(tableApi); - bootbox.confirm('Delete ' + selectedRows.data().length + ' signature?', function(result){ - if(result){ - deleteSignatures(tableApi, selectedRows); - } - }); - } + text: 'delete (0)' } ] }, @@ -2030,6 +2210,9 @@ define([ let tableApi = this.api(); initGroupFilterButton(tableApi); + initUndoButton(tableApi); + initSelectAllButton(tableApi); + initDeleteButton(tableApi); $(this).on('keyup', 'td', {tableApi: tableApi}, function(e){ keyNavigation(tableApi, e); @@ -2048,7 +2231,7 @@ define([ new $.fn.dataTable.Responsive(tableApi); // lock table until module is fully rendered - lockTable(tableApi); + moduleElement.data('lockPromise', tableApi.newProcess('lock')); }; /** @@ -2266,10 +2449,13 @@ define([ * @param deleteOutdatedSignatures */ let updateSignatureTable = (tableApi, signaturesDataOrig, deleteOutdatedSignatures = false) => { - if(isLockedTable(tableApi)) return; + if(tableApi.hasProcesses('lock')){ + console.info('Signature table locked. Skip table update'); + return; + } // disable tableApi until update finished; - lockTable(tableApi); + let processLockPromise = tableApi.newProcess('lock'); // clone signature array because of further manipulation let signaturesData = $.extend([], signaturesDataOrig); @@ -2322,11 +2508,16 @@ define([ } }; + let getPromiseForRow = (action, rowId) => { + return new Promise((resolve, reject) => { + resolve({action: action, rowId: rowId}); + }); + }; + // update signatures ------------------------------------------------------------------------------------------ allRows.every(function(rowIdx, tableLoop, rowLoop){ let row = this; let rowData = row.data(); - let rowElement = row.nodes().to$(); for(let i = 0; i < signaturesData.length; i++){ if(signaturesData[i].id === rowData.id){ @@ -2341,9 +2532,7 @@ define([ row.cells(row.id(true), ['id:name', 'group:name', 'type:name', 'description:name', 'connection:name', 'updated:name']) .every(rowUpdate); - promisesChanged.push(new Promise((resolve, reject) => { - resolve({action: 'changed', rowId: rowId}); - })); + promisesChanged.push(getPromiseForRow('changed', rowId)); } rowIdsExist.push(rowId); @@ -2384,9 +2573,7 @@ define([ let rowElement = row.nodes().to$(); rowElement.pulseBackgroundColor('added'); - promisesAdded.push(new Promise((resolve, reject) => { - resolve({action: 'added', rowId: rowId}); - })); + promisesAdded.push(getPromiseForRow('added', rowId)); } // done ------------------------------------------------------------------------------------------------------- @@ -2428,10 +2615,20 @@ define([ } // unlock table - unlockTable(tableApi); + tableApi.endProcess(processLockPromise); }); }; + /** + * update signature "history" popover + * @param tableApi + * @param historyData + */ + let updateSignatureHistory = (tableApi, historyData) => { + let tableElement = tableApi.table().node(); + $(tableElement).data('history', historyData); + }; + /** * update trigger function for this module * compare data and update module @@ -2440,11 +2637,15 @@ define([ */ let updateModule = (moduleElement, systemData) => { - if(systemData.signatures){ + if( + systemData.signatures && + systemData.sigHistory + ){ let mapId = moduleElement.data('mapId'); let systemId = moduleElement.data('systemId'); let tableApi = getDataTableInstance(mapId, systemId, 'primary'); updateSignatureTable(tableApi, systemData.signatures, true); + updateSignatureHistory(tableApi, systemData.sigHistory); } moduleElement.hideLoadingAnimation(); @@ -2458,7 +2659,7 @@ define([ */ let initModule = (moduleElement, mapId, systemData) => { let tableApi = getDataTableInstance(mapId, systemData.id, 'primary'); - unlockTable(tableApi); + tableApi.endProcess(moduleElement.data('lockPromise')); }; /** @@ -2553,7 +2754,7 @@ define([ let mapId = moduleElement.data('mapId'); let systemId = moduleElement.data('systemId'); let tableApi = getDataTableInstance(mapId, systemId, 'primary'); - lockTable(tableApi); + tableApi.newProcess('lock'); }; /** diff --git a/js/app/util.js b/js/app/util.js index 8ce5e45f1..b49c270d0 100644 --- a/js/app/util.js +++ b/js/app/util.js @@ -1046,6 +1046,10 @@ define([ data.selected = true; } + if(option.disabled === true){ + data.disabled = true; + } + // optional "metaData" that belongs to this option if(option.hasOwnProperty('metaData')){ data.metaData = option.metaData; @@ -1228,12 +1232,14 @@ define([ let initDefaultEditableConfig = () => { // use fontAwesome buttons template $.fn.editableform.buttons = - ''+ + '
'+ ''; + '' + + ''+ + '
'; // loading spinner template $.fn.editableform.loading = @@ -1618,14 +1624,23 @@ define([ } url += path; - $.ajax({ + let ajaxOptions = { type: action, url: url, - data: JSON.stringify(data), - contentType: 'application/json; charset=utf-8', - dataType: 'json', + dataType: 'json', // expected response dataType context: context - }).done(function(response){ + }; + + if(action === 'GET'){ + // data as url params + ajaxOptions.data = data; + }else{ + // json data in body + ajaxOptions.data = JSON.stringify(data); + ajaxOptions.contentType = 'application/json; charset=utf-8'; + } + + $.ajax(ajaxOptions).done(function(response){ payload.data = response; payload.context = this; resolve(payload); @@ -2023,6 +2038,38 @@ define([ return table; }; + /** + * get a HTML table with universe region information + * e.g. for popover + * @param regionName + * @param faction + * @returns {string} + */ + let getSystemRegionTable = (regionName, faction) => { + let table = ''; + table += ''; + table += ''; + table += ''; + table += ''; + table += ''; + if(faction){ + table += ''; + table += ''; + table += ''; + } + table += '
'; + table += 'Region'; + table += ''; + table += regionName; + table += '
'; + table += 'Faction'; + table += ''; + table += faction.name; + table += '
'; + + return table; + }; + /** * get a HTML table with pilots/ship names * @param users @@ -2211,32 +2258,6 @@ define([ return signatureNames; }; - /** - * get the typeID of a signature name - * @param systemData - * @param sigGroupId - * @param name - * @returns {number} - */ - let getSignatureTypeIdByName = (systemData, sigGroupId, name) => { - let signatureTypeId = 0; - let areaId = getAreaIdBySecurity(systemData.security); - if(areaId > 0){ - let signatureNames = getAllSignatureNames(systemData.type.id, areaId, sigGroupId); - name = name.toLowerCase(); - for(let prop in signatureNames){ - if( - signatureNames.hasOwnProperty(prop) && - signatureNames[prop].toLowerCase() === name - ){ - signatureTypeId = parseInt(prop); - break; - } - } - } - return signatureTypeId; - }; - /** * get array key that points to map data catching mapId * @param data @@ -2912,7 +2933,7 @@ define([ }; /** - * check an element for attached event by name + * check an element for attached jQuery event by name * -> e.g. eventName = 'click.myNamespace' * @param element * @param eventName @@ -2920,22 +2941,25 @@ define([ */ let hasEvent = (element, eventName) => { let exists = false; - let parts = eventName.split('.'); - let name = parts[0]; - let namespace = parts.length === 2 ? parts[1] : false; - let events = $._data( element[0], 'events')[name]; - if(events){ - if(namespace){ - // seach events by namespace - for(let event of events){ - if(event.namespace === namespace){ - exists = true; - break; + let allEvents = $._data(element[0], 'events'); + if(allEvents){ + let parts = eventName.split('.'); + let name = parts[0]; + let events = allEvents[name]; + if(events){ + let namespace = parts.length === 2 ? parts[1] : false; + if(namespace){ + // search events by namespace + for(let event of events){ + if(event.namespace === namespace){ + exists = true; + break; + } } + }else{ + // at least ONE event of the given name found + exists = true; } - }else{ - // at least ONE event of the given name found - exists = true; } } return exists; @@ -3186,6 +3210,7 @@ define([ getSystemEffectData: getSystemEffectData, getSystemEffectTable: getSystemEffectTable, getSystemPlanetsTable: getSystemPlanetsTable, + getSystemRegionTable: getSystemRegionTable, getSystemPilotsTable: getSystemPilotsTable, getSystemsInfoTable: getSystemsInfoTable, getStatusInfoForCharacter: getStatusInfoForCharacter, @@ -3194,7 +3219,6 @@ define([ getStatusInfoForSystem: getStatusInfoForSystem, getSignatureGroupOptions: getSignatureGroupOptions, getAllSignatureNames: getAllSignatureNames, - getSignatureTypeIdByName: getSignatureTypeIdByName, getAreaIdBySecurity: getAreaIdBySecurity, setCurrentMapUserData: setCurrentMapUserData, getCurrentMapUserData: getCurrentMapUserData, diff --git a/js/lib/dom.jsPlumb-1.7.6.js b/js/lib/dom.jsPlumb-1.7.6.js index adf0c8da1..04237fb26 100644 --- a/js/lib/dom.jsPlumb-1.7.6.js +++ b/js/lib/dom.jsPlumb-1.7.6.js @@ -10388,7 +10388,12 @@ // in IE the top left corner is what it placed at the desired location. This will not // be fixed. IE8 is not going to be supported for much longer. - var ts = "translate(-50%, calc(-50% - .5px))"; + //var ts = "translate(calc(-50% + 3px), calc(-50% + 3px))"; + //var ts = "translate3d(-50%, -50, 0)"; + var ts = "translate3d(0, 0, 0)"; + //var ts = "translate3d(50%, -50, 0)"; + //var ts = "translate3d(-8px, 5px, 0)"; + //var ts = "translate(-50%, -50%)"; div.style.webkitTransform = ts; div.style.mozTransform = ts; div.style.msTransform = ts; diff --git a/package.json b/package.json index 67c097485..277ea4f0d 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,14 @@ "main": "index.php", "dependencies": {}, "devDependencies": { - "ansi-colors": "^3.1.0", - "fancy-log": "1.3.x", + "ansi-colors": "^3.2.4", + "fancy-log": "^1.3.3", "file-extension": "^4.0.5", "flat": "^4.1.0", "gulp": "next", "gulp-brotli": "1.2.x", "gulp-bytediff": "1.0.x", - "gulp-clean-css": "^3.10.0", + "gulp-clean-css": "^4.0.0", "gulp-compass": "2.1.x", "gulp-debug": "^4.0.0", "gulp-filter": "5.1.x", @@ -24,12 +24,12 @@ "gulp-jshint": "2.1.x", "gulp-rename": "^1.4.0", "gulp-requirejs-optimize": "1.3.x", - "gulp-sourcemaps": "2.6.x", - "gulp-uglify": "^3.0.1", - "jshint": "^2.9.6", + "gulp-sourcemaps": "^2.6.5", + "gulp-uglify": "^3.0.2", + "jshint": "^2.10.2", "jshint-stylish": "^2.x.x", "lodash.padend": "4.6.x", - "node-notifier": "^5.3.0", + "node-notifier": "^5.4.0", "pretty-bytes": "^5.1.0", "promised-del": "1.0.x", "slash": "2.x.x", diff --git a/public/css/v1.5.0/pathfinder.css.br b/public/css/v1.5.0/pathfinder.css.br deleted file mode 100644 index af8941e2d..000000000 Binary files a/public/css/v1.5.0/pathfinder.css.br and /dev/null differ diff --git a/public/css/v1.5.0/pathfinder.css b/public/css/v1.5.1/pathfinder.css similarity index 73% rename from public/css/v1.5.0/pathfinder.css rename to public/css/v1.5.1/pathfinder.css index ce3bcd0da..e9fecd196 100644 --- a/public/css/v1.5.0/pathfinder.css +++ b/public/css/v1.5.1/pathfinder.css @@ -33,7 +33,7 @@ */table.dataTable thead th{position:relative;background-image:none !important}table.dataTable thead th.sorting:after,table.dataTable thead th.sorting_asc:after,table.dataTable thead th.sorting_desc:after{position:absolute;top:12px;right:5px;display:block;font-family:'Font Awesome 5 Free';margin-top:-8px}table.dataTable thead th.sorting:after{content:"\f0dc";font-size:0.8em;margin-top:-8px}table.dataTable thead th.sorting_asc:after{content:"\f0de";color:#5cb85c}table.dataTable thead th.sorting_desc:after{content:"\f0dd";color:#5cb85c}div.dataTables_scrollBody table.dataTable thead th.sorting:after,div.dataTables_scrollBody table.dataTable thead th.sorting_asc:after,div.dataTables_scrollBody table.dataTable thead th.sorting_desc:after{content:""}div.dataTables_paginate a.paginate_button.first,div.dataTables_paginate a.paginate_button.previous{position:relative;padding-left:24px}div.dataTables_paginate a.paginate_button.next,div.dataTables_paginate a.paginate_button.last{position:relative;padding-right:24px}div.dataTables_paginate a.first:before,div.dataTables_paginate a.previous:before{position:absolute;top:4px;left:10px;display:block;font-weight:bold;font-family:'Font Awesome 5 Free'}div.dataTables_paginate a.next:after,div.dataTables_paginate a.last:after{position:absolute;top:4px;right:10px;display:block;font-weight:bold;font-family:'Font Awesome 5 Free'}div.dataTables_paginate a.first:before{content:"\f100"}div.dataTables_paginate a.previous:before{content:"\f104"}div.dataTables_paginate a.next:after{content:"\f105"}div.dataTables_paginate a.last:after{content:"\f101"}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:9px;left:4px;height:14px;width:14px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#1b2326}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#1b2326}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#925909}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#171e20}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#171e20}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#171e20}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#925909}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable td.select-checkbox{position:relative}table.dataTable td.select-checkbox:before,table.dataTable td.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable td.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}/*! X-editable - v1.5.0 * In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery * http://github.com/vitalets/x-editable -* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .form-group{margin-left:0 !important}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{height:25px;width:auto;min-width:25px;display:flex;flex-direction:column;justify-content:center;align-items:center}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type="checkbox"],.editable-input .editable-checklist>div>label>span input[type="checkbox"],.editable-checklist label span,.editable-input .editable-checklist>div>label>span span{vertical-align:middle;margin:0}.editable-checklist label,.editable-input .editable-checklist>div>label>span{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:0.9em;text-decoration:none;text-align:right}.editable-clear-x{display:block;width:13px;height:13px;position:absolute;opacity:0.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none !important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:hover,.editable-empty:focus{font-style:italic;color:#d9534f;text-decoration:none}.editable-unsaved{font-weight:bold}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}/*! +* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .form-group{margin-left:0 !important}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editable-buttons{display:inline-block;vertical-align:top;margin-left:10px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:5px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{height:25px;width:auto;min-width:25px;display:flex;flex-direction:column;justify-content:center;align-items:center}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type="checkbox"],.editable-input .editable-checklist>div>label>span input[type="checkbox"],.editable-checklist label input[type="radio"],.editable-input .editable-checklist>div>label>span input[type="radio"],.editable-checklist label span,.editable-input .editable-checklist>div>label>span span{vertical-align:middle;margin:0}.editable-checklist label,.editable-input .editable-checklist>div>label>span{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:0.9em;text-decoration:none;text-align:right}.editable-clear-x{display:block;width:13px;height:13px;position:absolute;opacity:0.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none !important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:hover,.editable-empty:focus{font-style:italic;color:#d9534f;text-decoration:none}.editable-unsaved{font-weight:bold}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}/*! * Datepicker for Bootstrap * * Copyright 2012 Stefan Petre @@ -51,5 +51,5 @@ Link : http://sciactive.com/pnotify/ * ======================================================================== * Copyright 2014 Min Hur, The New York Times Company * Licensed under MIT - * ======================================================================== */.checkbox label .toggle,.editable-input .editable-checklist>div>label label .toggle,.editable-input .editable-checklist>div>label>span .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}.toggle{position:relative;overflow:hidden}.toggle input[type="checkbox"]{display:none}.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left 0.18s ease-in-out;-webkit-transition:left 0.18s ease-in-out;-moz-user-select:none;-webkit-user-select:none}.toggle.off .toggle-group{left:-100%}.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0}.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px;background:#54585a}.toggle.btn{min-width:59px;min-height:34px}.toggle-on.btn{padding-right:24px}.toggle-off.btn{padding-left:24px}.toggle.btn-lg,.btn-group-lg>.toggle.btn{min-width:79px;min-height:45px}.toggle-on.btn-lg,.btn-group-lg>.toggle-on.btn{padding-right:31px}.toggle-off.btn-lg,.btn-group-lg>.toggle-off.btn{padding-left:31px}.toggle-handle.btn-lg,.btn-group-lg>.toggle-handle.btn{width:40px}.toggle.btn-sm,.btn-group-sm>.toggle.btn{min-width:50px;min-height:28px}.toggle-on.btn-sm,.btn-group-sm>.toggle-on.btn{padding-right:10px;padding-left:0}.toggle-off.btn-sm,.btn-group-sm>.toggle-off.btn{padding-left:10px;padding-right:0}.toggle.btn-xs,.btn-group-xs>.toggle.btn{min-width:35px;min-height:22px}.toggle-on.btn-xs,.btn-group-xs>.toggle-on.btn{padding-right:5px}.toggle-off.btn-xs,.btn-group-xs>.toggle-off.btn{padding-left:5px}.checkbox,.editable-input .editable-checklist>div>label{padding-left:20px}.checkbox label,.editable-input .editable-checklist>div>label label,.editable-input .editable-checklist>div>label>span{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.checkbox label::before,.editable-input .editable-checklist>div>label label::before,.editable-input .editable-checklist>div>label>span::before{content:"";display:inline-block;position:absolute;width:17px;height:17px;left:0;margin-left:-20px;border:1px solid #63676a;border-radius:3px;background-color:#313335;-webkit-transition:border 0.18s ease,color 0.18s ease,background-color 0.18s ease;transition:border 0.18s ease,color 0.18s ease,background-color 0.18s ease}.checkbox label::after,.editable-input .editable-checklist>div>label label::after,.editable-input .editable-checklist>div>label>span::after{font-family:"Font Awesome 5 Free";content:"\f00c";font-weight:bold;display:inline-block;position:absolute;width:16px;height:16px;left:0;top:0;opacity:0;transform:scale(2) rotateZ(-20deg);transition:all .18s ease-out;will-change:transform, opacity;margin-left:-20px;padding-left:3px;padding-top:1px;font-size:calc(100% - 1px);color:#adadad}.checkbox input[type="checkbox"],.editable-input .editable-checklist>div>label input[type="checkbox"],.checkbox input[type="radio"],.editable-input .editable-checklist>div>label input[type="radio"]{opacity:0;z-index:1;cursor:pointer}.checkbox input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after{font-family:"Font Awesome 5 Free";content:"\f00c"}.checkbox input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after{transform:scale(1) rotateZ(0deg);opacity:1}.checkbox input[type="checkbox"]:indeterminate+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:indeterminate+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox input[type="radio"]:indeterminate+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:indeterminate+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{display:block;content:"";width:10px;height:3px;background-color:#555555;border-radius:2px;margin-left:-16.5px;margin-top:7px}.checkbox input[type="checkbox"]:disabled+label,.editable-input .editable-checklist>div>label input[type="checkbox"]:disabled+label,.editable-input .editable-checklist>div>label>input[type="checkbox"]:disabled+span,.checkbox input[type="radio"]:disabled+label,.editable-input .editable-checklist>div>label input[type="radio"]:disabled+label,.editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span{opacity:0.65}.checkbox input[type="checkbox"]:disabled+label::before,.editable-input .editable-checklist>div>label input[type="checkbox"]:disabled+label::before,.editable-input .editable-checklist>div>label>input[type="checkbox"]:disabled+span::before,.checkbox input[type="radio"]:disabled+label::before,.editable-input .editable-checklist>div>label input[type="radio"]:disabled+label::before,.editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span::before{background-color:#3c3f41;cursor:not-allowed}.checkbox.checkbox-circle label::before,.editable-input .editable-checklist>div>label.checkbox-circle label::before,.checkbox.checkbox-circle .editable-input .editable-checklist>div>label>span::before,.editable-input .checkbox.checkbox-circle .editable-checklist>div>label>span::before,.editable-input .editable-checklist>div>label.checkbox-circle .editable-checklist>div>label>span::before{border-radius:50%}.checkbox.checkbox-inline,.editable-input .editable-checklist>div>label.checkbox-inline{margin-top:0}.checkbox-primary input[type="checkbox"]:checked+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-primary input[type="radio"]:checked+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#375959;border-color:#375959}.checkbox-primary input[type="checkbox"]:checked+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-primary input[type="radio"]:checked+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-danger input[type="checkbox"]:checked+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-danger input[type="radio"]:checked+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#a52521;border-color:#a52521}.checkbox-danger input[type="checkbox"]:checked+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-danger input[type="radio"]:checked+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-info input[type="checkbox"]:checked+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-info input[type="radio"]:checked+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#316490;border-color:#316490}.checkbox-info input[type="checkbox"]:checked+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-info input[type="radio"]:checked+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-warning input[type="checkbox"]:checked+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-warning input[type="radio"]:checked+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#e28a0d;border-color:#e28a0d}.checkbox-warning input[type="checkbox"]:checked+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-warning input[type="radio"]:checked+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-success input[type="checkbox"]:checked+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-success input[type="radio"]:checked+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#4f9e4f;border-color:#4f9e4f}.checkbox-success input[type="checkbox"]:checked+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-success input[type="radio"]:checked+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-primary input[type="checkbox"]:indeterminate+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-primary input[type="radio"]:indeterminate+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#375959;border-color:#375959}.checkbox-primary input[type="checkbox"]:indeterminate+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-primary input[type="radio"]:indeterminate+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-danger input[type="checkbox"]:indeterminate+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-danger input[type="radio"]:indeterminate+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#a52521;border-color:#a52521}.checkbox-danger input[type="checkbox"]:indeterminate+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-danger input[type="radio"]:indeterminate+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-info input[type="checkbox"]:indeterminate+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-info input[type="radio"]:indeterminate+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#316490;border-color:#316490}.checkbox-info input[type="checkbox"]:indeterminate+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-info input[type="radio"]:indeterminate+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-warning input[type="checkbox"]:indeterminate+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-warning input[type="radio"]:indeterminate+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#e28a0d;border-color:#e28a0d}.checkbox-warning input[type="checkbox"]:indeterminate+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-warning input[type="radio"]:indeterminate+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-success input[type="checkbox"]:indeterminate+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-success input[type="radio"]:indeterminate+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#4f9e4f;border-color:#4f9e4f}.checkbox-success input[type="checkbox"]:indeterminate+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-success input[type="radio"]:indeterminate+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.radio{padding-left:20px}.radio label,.radio .editable-input .editable-checklist>div>label>span,.editable-input .radio .editable-checklist>div>label>span{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.radio label::before,.radio .editable-input .editable-checklist>div>label>span::before,.editable-input .radio .editable-checklist>div>label>span::before{content:"";display:inline-block;position:absolute;width:17px;height:17px;left:0;margin-left:-20px;border:1px solid #63676a;border-radius:50%;background-color:#313335;-webkit-transition:border 0.18s ease,color 0.18s ease;transition:border 0.18s ease,color 0.18s ease}.radio label::after,.radio .editable-input .editable-checklist>div>label>span::after,.editable-input .radio .editable-checklist>div>label>span::after{display:inline-block;position:absolute;content:" ";width:11px;height:11px;left:3px;top:3px;opacity:0;transform:scale(2) rotateZ(-20deg);transition:all .18s ease;will-change:transform, opacity;margin-left:-20px;border-radius:50%;background-color:#adadad;-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition:-webkit-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);-moz-transition:-moz-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);-o-transition:-o-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);transition:transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33)}.radio input[type="radio"]{opacity:0;z-index:1;cursor:pointer}.radio input[type="radio"]:checked+label::after,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:checked+span::after{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);opacity:1}.radio input[type="radio"]:disabled+label,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:disabled+span{opacity:0.65}.radio input[type="radio"]:disabled+label::before,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span::before,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:disabled+span::before{cursor:not-allowed}.radio.radio-inline{margin-top:0}.radio-primary input[type="radio"]+label::after,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#375959}.radio-primary input[type="radio"]:checked+label::before,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#375959}.radio-primary input[type="radio"]:checked+label::after,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#375959}.radio-danger input[type="radio"]+label::after,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#a52521}.radio-danger input[type="radio"]:checked+label::before,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#a52521}.radio-danger input[type="radio"]:checked+label::after,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#a52521}.radio-info input[type="radio"]+label::after,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#316490}.radio-info input[type="radio"]:checked+label::before,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#316490}.radio-info input[type="radio"]:checked+label::after,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#316490}.radio-warning input[type="radio"]+label::after,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#e28a0d}.radio-warning input[type="radio"]:checked+label::before,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#e28a0d}.radio-warning input[type="radio"]:checked+label::after,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#e28a0d}.radio-success input[type="radio"]+label::after,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#4f9e4f}.radio-success input[type="radio"]:checked+label::before,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#4f9e4f}.radio-success input[type="radio"]:checked+label::after,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#4f9e4f}input[type="checkbox"].styled:checked+label:after,.editable-input .editable-checklist>div>label>input[type="checkbox"].styled:checked+span:after,input[type="radio"].styled:checked+label:after,.editable-input .editable-checklist>div>label>input[type="radio"].styled:checked+span:after{font-family:"Font Awesome 5 Free";content:"\f00c"}input[type="checkbox"] .styled:checked+label::before,input[type="checkbox"] .editable-input .editable-checklist>div>label>.styled:checked+span::before,.editable-input input[type="checkbox"] .editable-checklist>div>label>.styled:checked+span::before,input[type="radio"] .styled:checked+label::before,input[type="radio"] .editable-input .editable-checklist>div>label>.styled:checked+span::before,.editable-input input[type="radio"] .editable-checklist>div>label>.styled:checked+span::before{color:#fff}input[type="checkbox"] .styled:checked+label::after,input[type="checkbox"] .editable-input .editable-checklist>div>label>.styled:checked+span::after,.editable-input input[type="checkbox"] .editable-checklist>div>label>.styled:checked+span::after,input[type="radio"] .styled:checked+label::after,input[type="radio"] .editable-input .editable-checklist>div>label>.styled:checked+span::after,.editable-input input[type="radio"] .editable-checklist>div>label>.styled:checked+span::after{color:#fff}@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("../../fonts/summernote.eot?dbafe969167589eda84514394d126413");src:url("../../fonts/summernote.eot?#iefix") format("embedded-opentype"),url("../../fonts/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("../../fonts/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:""}.note-icon-align-indent:before{content:""}.note-icon-align-justify:before{content:""}.note-icon-align-left:before{content:""}.note-icon-align-outdent:before{content:""}.note-icon-align-right:before{content:""}.note-icon-align:before{content:""}.note-icon-arrow-circle-down:before{content:""}.note-icon-arrow-circle-left:before{content:""}.note-icon-arrow-circle-right:before{content:""}.note-icon-arrow-circle-up:before{content:""}.note-icon-arrows-alt:before{content:""}.note-icon-arrows-h:before{content:""}.note-icon-arrows-v:before{content:""}.note-icon-bold:before{content:""}.note-icon-caret:before{content:""}.note-icon-chain-broken:before{content:""}.note-icon-circle:before{content:""}.note-icon-close:before{content:""}.note-icon-code:before{content:""}.note-icon-col-after:before{content:""}.note-icon-col-before:before{content:""}.note-icon-col-remove:before{content:""}.note-icon-eraser:before{content:""}.note-icon-font:before{content:""}.note-icon-frame:before{content:""}.note-icon-italic:before{content:""}.note-icon-link:before{content:""}.note-icon-magic:before{content:""}.note-icon-menu-check:before{content:""}.note-icon-minus:before{content:""}.note-icon-orderedlist:before{content:""}.note-icon-pencil:before{content:""}.note-icon-picture:before{content:""}.note-icon-question:before{content:""}.note-icon-redo:before{content:""}.note-icon-row-above:before{content:""}.note-icon-row-below:before{content:""}.note-icon-row-remove:before{content:""}.note-icon-special-character:before{content:""}.note-icon-square:before{content:""}.note-icon-strikethrough:before{content:""}.note-icon-subscript:before{content:""}.note-icon-summernote:before{content:""}.note-icon-superscript:before{content:""}.note-icon-table:before{content:""}.note-icon-text-height:before{content:""}.note-icon-trash:before{content:""}.note-icon-underline:before{content:""}.note-icon-undo:before{content:""}.note-icon-unorderedlist:before{content:""}.note-icon-video:before{content:""}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:0.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo, Monaco, monospace, sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100% !important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent;padding-top:0}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;margin-top:5px}.note-popover.popover .arrow{left:20px !important}.note-toolbar{position:relative;z-index:500}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute !important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative !important;z-index:1;width:5em;height:5em;opacity:0.75;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute !important;z-index:2;width:1em;height:1em;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.panel-heading.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.panel-heading.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.panel-heading.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.panel-heading.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.panel-heading.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.panel-heading.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.panel-heading.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.panel-heading.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.panel-heading.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #63676a}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu:not(.dropdown-style),.panel-heading.note-toolbar .dropdown-menu:not(.dropdown-style){color:#adadad;background-color:#3c3f41}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto !important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto !important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #63676a;cursor:pointer}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #3c3f41}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed #d3d3d3}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block !important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}html{margin:0;padding:0;height:100%;position:relative}body{margin:0;padding:0;min-height:100%;direction:ltr}body.mobile-view-activated.hidden-menu{overflow-x:hidden}body.modal-open{overflow:hidden !important}a:hover,a:active,a:focus,button,button:active,button:focus,object,embed,input::-moz-focus-inner{outline:0}h1,h3,h4{margin:0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.page-title{margin:12px 0 28px}.page-title span{font-size:15px;color:#313335;display:inline-block;vertical-align:1px}label,.editable-input .editable-checklist>div>label>span{font-weight:normal}*:not(td):focus{outline:0 !important}a,input,button{-ms-touch-action:none !important}textarea:focus,select:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{outline:0;outline:thin dotted \9;box-shadow:inset -1px 1px 5px 0 rgba(0,0,0,0.8) !important}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-xs,.form-control{border-radius:0px !important;-webkit-border-radius:0px !important;-moz-border-radius:0px !important}.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.btn-xs,.btn-group-xs>.btn{padding:0px 2px;font-size:10px;line-height:1.3}.btn-sm,.btn-group-sm>.btn{padding:5px 8px 4px}.btn-lg,.btn-group-lg>.btn{padding:10px 16px}.no-space{margin:0}.no-space>[class*="col-"]{margin:0 !important;padding-right:0;padding-left:0}h1{letter-spacing:-1px;font-size:22px;margin:10px 0}h1 small{font-size:12px;font-weight:300;letter-spacing:-1px}h2{font-size:20px;margin:20px 0;line-height:normal}h3{display:block;font-size:17px;font-weight:400;margin:20px 0;line-height:normal}h4{line-height:normal;margin:20px 0 10px 0}h5{font-size:14px;font-weight:300;margin-top:0;margin-bottom:10px;line-height:normal}h6{font-size:13px;margin:10px 0;font-weight:bold;line-height:normal}.row-seperator-header{margin:15px 14px 20px;border-bottom:none;display:block;color:#303133;font-size:20px;font-weight:400}.center-canvas,.center-child-canvas>canvas{display:block !important;margin:0 auto !important}.form-control{box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.form hr{margin-left:-13px;margin-right:-13px;border-color:rgba(0,0,0,0.1);margin-top:20px;margin-bottom:20px}.form fieldset{display:block;border:none;background:rgba(255,255,255,0.9);position:relative}fieldset{position:relative}.popover-content .form-actions{margin:0 -14px -9px;border-radius:0 0 3px 3px;padding:9px 14px}.no-padding .form .form-actions{margin:0;display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(248,248,248,0.9);text-align:right;margin-top:25px}.form header,legend{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,0.2);background:#fff;font-size:16px;font-weight:300;color:#2b2b2b;margin:25px 0px 20px}.no-padding .form header{margin:25px 14px 0}.form header:first-child{margin-top:10px}legend{font-weight:400;margin-top:0px;background:none}.input-group-addon{padding:6px 10px;will-change:background-color, border-color;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-webkit-transition:all ease-out 0.15s;transition:all ease-out 0.15s}.input-group-addon .fa{font-size:14px}.input-group-addon .fa-lg,.input-group-addon .fa-2x{font-size:2em}.input-group-addon .fa-3x,.input-group-addon .fa-4x,.input-group-addon .fa-5x{font-size:30px}input[type="text"]:focus+.input-group-addon,input[type="password"]:focus+.input-group-addon,input[type="email"]:focus+.input-group-addon{border-color:#568a89;color:#568a89}.has-warning input[type="text"],.has-warning input[type="text"]+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]+.input-group-addon{background-color:#fbe3c0;color:#2b2b2b}.has-warning input[type="text"]:focus,.has-warning input[type="text"]:focus+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]:focus+.input-group-addon{background-color:#e28a0d;color:#fff}.has-error .input-group-addon{border-color:#d9534f !important;background:#d9534f !important;color:#2b2b2b !important}.has-success .input-group-addon{border-color:#4f9e4f !important;background-color:#2b2b2b !important;color:#4f9e4f !important}.form fieldset .form-group:last-child,.form fieldset .form-group:last-child .note,.form .form-group:last-child,.form .form-group:last-child .note{margin-bottom:0}.note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#7c8184}.input-icon-right{position:relative}.input-icon-right>i,.input-icon-left>i{position:absolute;right:10px;top:10px;font-size:12px;color:#63676a}.input-icon-left>i{right:auto;left:24px}.input-icon-right .form-control{padding-right:27px}.input-icon-left .form-control{padding-left:29px}input[type="text"].ui-autocomplete-loading,input[type="password"].ui-autocomplete-loading,input[type="datetime"].ui-autocomplete-loading,input[type="datetime-local"].ui-autocomplete-loading,input[type="date"].ui-autocomplete-loading,input[type="month"].ui-autocomplete-loading,input[type="time"].ui-autocomplete-loading,input[type="week"].ui-autocomplete-loading,input[type="number"].ui-autocomplete-loading,input[type="email"].ui-autocomplete-loading,input[type="url"].ui-autocomplete-loading,input[type="search"].ui-autocomplete-loading,input[type="tel"].ui-autocomplete-loading,input[type="color"].ui-autocomplete-loading{background-image:url("../../img/select2-spinner.gif") !important;background-repeat:no-repeat;background-position:99% 50%;padding-right:27px}.input-group-addon .checkbox,.input-group-addon .editable-input .editable-checklist>div>label,.editable-input .input-group-addon .editable-checklist>div>label,.input-group-addon .radio{min-height:0px;margin-right:0px !important;padding-top:0}.input-group-addon label input[type="checkbox"].checkbox+span,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="checkbox"].checkbox+span,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="checkbox"].checkbox+span,.input-group-addon label input[type="radio"].radiobox+span,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="radio"].radiobox+span,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="radio"].radiobox+span,.input-group-addon label input[type="radio"].radiobox+span:before,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="radio"].radiobox+span:before,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="radio"].radiobox+span:before,.input-group-addon label input[type="checkbox"].checkbox+span:before,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="checkbox"].checkbox+span:before,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="checkbox"].checkbox+span:before{margin-right:0px}.alert{margin-bottom:10px;margin-top:0px;padding:5px 15px 5px 34px;color:#675100;border-width:0px;border-left-width:3px;padding:10px}.alert .ui-pnotify-title{line-height:12px}.alert .ui-pnotify-text{font-size:10px}.alert .close{top:0px;right:-5px;line-height:18px}.alert-heading{font-weight:600}.alert-danger{border-color:#a52521;color:#2b2b2b;background:#f6d1d0;text-shadow:none}.alert-danger .ui-pnotify-icon{color:#a52521}.alert-warning{border-color:#e28a0d;color:#2b2b2b;background:#fdedd8}.alert-warning .ui-pnotify-icon{color:#e28a0d}.alert-success{border-color:#4f9e4f;color:#2b2b2b;background:#d1e8d1}.alert-success .ui-pnotify-icon{color:#4f9e4f}.alert-info{border-color:#316490;color:#2b2b2b;background:#abc9e2}.alert-info .ui-pnotify-icon{color:#316490}.progress-micro{height:2px !important;line-height:2px !important}.progress-xs{height:7px !important;line-height:7px !important}.progress-sm{height:14px !important;line-height:14px !important}.progress-lg{height:30px !important;line-height:30px !important}.progress .progress-bar{position:absolute;overflow:hidden;line-height:18px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .progress-bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{width:25px;height:100%;min-height:150px;margin-right:20px;display:inline-block;margin-bottom:0px}.progress.wide-bar{width:40px}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .progress-bar{width:100%;height:0;-webkit-transition:height 0.6s ease;transition:height 0.6s ease}.progress.vertical.bottom .progress-bar{position:absolute;bottom:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{position:relative;margin-bottom:20px;overflow:hidden;height:18px;background:#63676a;-webkit-box-shadow:0 1px 0 transparent,0 0 0 1px #63676a inset;box-shadow:0 1px 0 transparent,0 0 0 1px #63676a inset;-moz-border-radius:0px;-webkit-border-radius:0px;border-radius:0px}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#428bca;font-weight:bold;-webkit-transition:width 1s ease-in-out,background-color 1s ease-in-out;transition:width 1s ease-in-out,background-color 1s ease-in-out}.progress-striped .progress-bar{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-info .bar,.progress .bar-info{background:#316490}.vertical-bars{padding:0;margin:0}.vertical-bars:after{content:"";display:block;height:0;clear:both}.vertical-bars li{padding:14px 0;width:25%;display:block;float:left;text-align:center}.vertical-bars li:first-child{border-left:none}.vertical-bars>li>.progress.vertical:first-child{margin-left:auto}.vertical-bars>li>.progress.vertical{margin:0 auto;float:none}.nav-tabs{border-bottom:none}.nav-tabs>li>a .badge{font-size:11px;padding:3px 5px 3px 5px;opacity:.5;margin-left:5px;min-width:17px;font-weight:normal}.tabs-left .nav-tabs>li>a .badge{margin-right:5px;margin-left:0px}.nav-tabs>li>a .label{display:inline-block;font-size:11px;margin-left:5px;opacity:.5}.nav-tabs>li>a{color:#63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.nav-tabs>li>a:hover{color:#adadad;border-color:transparent transparent #63676a transparent;margin-top:1px;border-top-width:0}.nav-tabs>li.active>a{background-color:#adadad;color:#1d1d1d;border-top-width:0px !important;margin-top:1px !important;font-weight:bold}.tabs-left .nav-tabs>li.active>a{-webkit-box-shadow:-2px 0 0 #428bca;-moz-box-shadow:-2px 0 0 #428bca;box-shadow:-2px 0 0 #428bca;border-top-width:1px !important;border-left:none !important;margin-left:1px !important}.tabs-left .nav-pills>li.active>a{border:none !important;box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.tabs-right .nav-tabs>li.active>a{-webkit-box-shadow:2px 0 0 #428bca;-moz-box-shadow:2px 0 0 #428bca;box-shadow:2px 0 0 #428bca;border-top-width:1px !important;border-right:none !important;margin-right:1px !important}.tabs-below .nav-tabs>li.active>a{-webkit-box-shadow:0 2px 0 #428bca;-moz-box-shadow:0 2px 0 #428bca;box-shadow:0 2px 0 #428bca;border-bottom-width:0px !important;border-top:none !important;margin-top:0px !important}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li,.tabs-left>.nav-pills>li,.tabs-right>.nav-pills>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a,.tabs-left>.nav-pills>li>a,.tabs-right>.nav-pills>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs,.tabs-left>.nav-pills{float:left;margin-right:19px;border-right:1px solid #9b9b9b}.tabs-left>.nav-pills{border-right:none}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#adadad #949494 #adadad #adadad}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#949494 transparent #949494 #9b9b9b;*border-right-color:#fff}.tabs-left>.tab-content{margin-left:109px}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #9b9b9b}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#adadad #adadad #adadad #9b9b9b}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#9b9b9b #9b9b9b #9b9b9b transparent;*border-left-color:#fff}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#9b9b9b;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #9b9b9b #9b9b9b #9b9b9b}.nav-tabs.bordered{background:#fff;border:1px solid #9b9b9b}.nav-tabs.bordered>:first-child a{border-left-width:0px !important}.nav-tabs.bordered+.tab-content{border:1px solid #9b9b9b;border-top:none}.tabs-pull-right.nav-tabs>li,.tabs-pull-right.nav-pills>li{float:right}.tabs-pull-right.nav-tabs>li:first-child>a,.tabs-pull-right.nav-pills>li:first-child>a{margin-right:1px}.tabs-pull-right.bordered.nav-tabs>li:first-child>a,.tabs-pull-right.bordered.nav-pills>li:first-child>a{border-left-width:1px !important;margin-right:0px;border-right-width:0px}.dropdown-menu-xs{min-width:37px}.dropdown-menu-xs>li>a{padding:3px 10px}.dropdown-menu-xs>li>a:hover i{color:#fff !important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu:hover>a{background-color:#63676a;color:#1d1d1d}.dropdown-submenu:hover a:after{border-left-color:#5cb85c}.dropdown-submenu>a:after{content:" ";display:block;position:absolute;right:5px;top:7px;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#2b2b2b}.dropdown-submenu>a:hover:after{border-left-color:#adadad}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.pagination>li>a,.pagination>li>span{box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.btn-default.disabled{color:#adadad}.btn{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;will-change:background-color, border-color;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:color 0.18s ease-in-out,background-color 0.18s ease-in-out,border-color 0.18s ease-in-out,box-shadow 0.18s ease-in-out;transition:color 0.18s ease-in-out,background-color 0.18s ease-in-out,border-color 0.18s ease-in-out,box-shadow 0.18s ease-in-out}.btn.btn-ribbon{background-color:#707070;background-image:-moz-linear-gradient(top, #777, #666);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#777), to(#666));background-image:-webkit-linear-gradient(top, #777, #666);background-image:-o-linear-gradient(top, #777, #666);background-image:linear-gradient(to bottom, #777777,#666666);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff777777', endColorstr='#ff666666', GradientType=0);color:white;padding:0 5px;line-height:20px;vertical-align:middle;height:20px;display:block;border:none;float:left;margin:0 8px 0 0;cursor:pointer}.btn.btn-ribbon>i{font-size:111%}.ribbon-button-alignment{padding-top:10px;display:inline-block}.ribbon-button-alignment.pull-right>.btn.btn-ribbon{margin:0 0 0 8px}.panel-purple{border-color:#6e587a}.panel-purple>.panel-heading{color:#fff;background-color:#6e587a;border-color:#6e587a}.panel-greenLight{border-color:#71843f}.panel-greenLight>.panel-heading{color:#fff;background-color:#71843f;border-color:#71843f}.panel-greenDark{border-color:#496949}.panel-greenDark>.panel-heading{color:#fff;background-color:#496949;border-color:#496949}.panel-darken{border-color:#313335}.panel-darken>.panel-heading{color:#fff;background-color:#404040;border-color:#404040}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{color:#fff;background-color:#d9534f;border-color:#d9534f}.panel-teal{border-color:#568a89}.panel-teal>.panel-heading{color:#fff;background-color:#568a89;border-color:#568a89}.panel-orange{border-color:#e28a0d}.panel-orange>.panel-heading{color:#fff;background-color:#e28a0d;border-color:#e28a0d}.panel-blueDark{border-color:#4c4f53}.panel-blueDark>.panel-heading{color:#fff;background-color:#4c4f53;border-color:#4c4f53}.panel-magenta{border-color:#6e3671}.panel-magenta>.panel-heading{color:#fff;background-color:#6e3671;border-color:#6e3671}.panel-blue{border-color:#428bca}.panel-blue>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-footer>.btn-block{border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;border-bottom:none;border-left:none;border-right:none}.btn-circle{width:30px;height:30px;text-align:center;padding:6px 0;font-size:12px;line-height:18px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;-webkit-box-shadow:0 1px 6px 0 rgba(0,0,0,0.12),0 1px 6px 0 rgba(0,0,0,0.12);box-shadow:0 1px 6px 0 rgba(0,0,0,0.12),0 1px 6px 0 rgba(0,0,0,0.12)}.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn{width:22px;height:22px;padding:4px 0;font-size:12px;line-height:14px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn{width:50px;height:50px;padding:10px 15px;font-size:18px;line-height:30px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-xl{width:70px;height:70px;padding:10px 15px;font-size:24px;line-height:50px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-label{position:relative;left:-8px;display:inline-block;padding:5px 8px;background:rgba(0,0,0,0.15);border-radius:2px 0 0 2px}.btn-labeled{padding-top:0;padding-bottom:0;padding-left:8px}.btn-link{box-shadow:none;-webkit-box-shadow:none;font-size:13px}.morris-hover.morris-default-style{border-radius:5px;padding:5px;color:#666;background:rgba(29,29,29,0.85);font-family:'Oxygen Bold';font-size:10px;text-align:left;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap}.morris-hover{position:absolute;z-index:903}.fixed-page-footer .morris-hover{z-index:900}.txt-color.txt-color-blue,.txt-color-blue.pf-help-light,.pf-help-light:hover,.txt-color-blue.pf-help,.pf-help:hover,.txt-color.pf-help-default:hover,.dataTable td.pf-help-default.pf-table-link-cell:hover,.dataTable td.pf-table-link-cell.pf-help-light:hover,.dataTable td.pf-table-link-cell.pf-help:hover,.dataTable td.pf-table-action-cell>.pf-help-default.pf-table-action-icon-cell:hover,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help-light:hover,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help:hover,.pf-landing .pf-landing-list li>i.pf-help-default:hover,.pf-landing .pf-landing-list li>i.pf-help-light:hover,.pf-landing .pf-landing-list li>i.pf-help:hover,.dataTable td.txt-color-blue.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blue.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blue{color:#428bca !important}.txt-color.txt-color-blueLight,.txt-color-blueLight.pf-help-light,.txt-color-blueLight.pf-help,.dataTable td.txt-color-blueLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blueLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blueLight{color:#92a2a8 !important}.txt-color.txt-color-blueDark,.txt-color-blueDark.pf-help-light,.txt-color-blueDark.pf-help,.dataTable td.txt-color-blueDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blueDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blueDark{color:#4c4f53 !important}.txt-color.txt-color-grayLightest,.txt-color-grayLightest.pf-help-light,.txt-color-grayLightest.pf-help,.dataTable td.txt-color-grayLightest.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayLightest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayLightest{color:#eaeaea !important}.txt-color.txt-color-grayLighter,.txt-color-grayLighter.pf-help-light,.txt-color-grayLighter.pf-help,.dataTable td.txt-color-grayLighter.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayLighter.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayLighter{color:#adadad !important}.txt-color.txt-color-grayLight,.pf-help-light,.txt-color-grayLight.pf-help,.dataTable td.txt-color-grayLight.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-help-light,.dataTable td.pf-table-action-cell>.txt-color-grayLight.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help-light,.pf-landing .pf-landing-list li>i.txt-color-grayLight,.pf-landing .pf-landing-list li>i.pf-help-light{color:#63676a !important}.txt-color.txt-color-gray,.txt-color-gray.pf-help-light,.pf-help,.dataTable td.txt-color-gray.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-help,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-gray,.pf-landing .pf-landing-list li>i.pf-help{color:#3c3f41 !important}.txt-color.txt-color-grayDark,.txt-color-grayDark.pf-help-light,.txt-color-grayDark.pf-help,.dataTable td.txt-color-grayDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayDark{color:#313335 !important}.txt-color.txt-color-greenLight,.txt-color-greenLight.pf-help-light,.txt-color-greenLight.pf-help,.dataTable td.txt-color-greenLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-greenLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-greenLight{color:#66c84f !important}.txt-color.txt-color-green,.txt-color-green.pf-help-light,.pf-help-light.pf-log-info,.txt-color-green.pf-help,.pf-help.pf-log-info,.dataTable td.txt-color-green.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-info,.dataTable td.pf-table-action-cell>.txt-color-green.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-info,.txt-color.pf-log-info,.pf-landing .pf-landing-list li>i.pf-log-info,.pf-landing .pf-landing-list li>i.txt-color-green{color:#5cb85c !important}.txt-color.txt-color-greenDark,.txt-color-greenDark.pf-help-light,.txt-color-greenDark.pf-help,.dataTable td.txt-color-greenDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-greenDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-greenDark{color:#4f9e4f !important}.txt-color.txt-color-redLight,.txt-color-redLight.pf-help-light,.txt-color-redLight.pf-help,.dataTable td.txt-color-redLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-redLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-redLight{color:#a65858 !important}.txt-color.txt-color-red,.txt-color-red.pf-help-light,.pf-help-light.pf-log-error,.txt-color-red.pf-help,.pf-help.pf-log-error,.dataTable td.txt-color-red.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-error,.dataTable td.pf-table-action-cell>.txt-color-red.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-error,.txt-color.pf-log-error,.pf-landing .pf-landing-list li>i.pf-log-error,.pf-landing .pf-landing-list li>i.txt-color-red{color:#d9534f !important}.txt-color.txt-color-redDarker,.txt-color-redDarker.pf-help-light,.txt-color-redDarker.pf-help,.dataTable td.txt-color-redDarker.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-redDarker.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-redDarker{color:#a52521 !important}.txt-color.txt-color-yellow,.txt-color-yellow.pf-help-light,.txt-color-yellow.pf-help,.dataTable td.txt-color-yellow.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-yellow.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-yellow{color:#e2ce48 !important}.txt-color.txt-color-yellowDark,.txt-color-yellowDark.pf-help-light,.txt-color-yellowDark.pf-help,.dataTable td.txt-color-yellowDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-yellowDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-yellowDark{color:#c8b847 !important}.txt-color.txt-color-orangeLight,.txt-color-orangeLight.pf-help-light,.txt-color-orangeLight.pf-help,.dataTable td.txt-color-orangeLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orangeLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orangeLight{color:#f0ad4e !important}.txt-color.txt-color-orange,.txt-color-orange.pf-help-light,.txt-color-orange.pf-help,.dataTable td.txt-color-orange.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orange.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell:hover>.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orange{color:#e28a0d !important}.txt-color.txt-color-orangeDark,.txt-color-orangeDark.pf-help-light,.txt-color-orangeDark.pf-help,.dataTable td.txt-color-orangeDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orangeDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orangeDark{color:#c2760c !important}.txt-color.txt-color-pink,.txt-color-pink.pf-help-light,.txt-color-pink.pf-help,.dataTable td.txt-color-pink.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-pink.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-pink{color:#e06fdf !important}.txt-color.txt-color-pinkDark,.txt-color-pinkDark.pf-help-light,.txt-color-pinkDark.pf-help,.dataTable td.txt-color-pinkDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-pinkDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-pinkDark{color:#a8829f !important}.txt-color.txt-color-purple,.txt-color-purple.pf-help-light,.txt-color-purple.pf-help,.dataTable td.txt-color-purple.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-purple.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-purple{color:#6e587a !important}.txt-color.txt-color-darken,.txt-color-darken.pf-help-light,.txt-color-darken.pf-help,.dataTable td.txt-color-darken.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-darken.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-darken{color:#404040 !important}.txt-color.txt-color-lighten,.txt-color-lighten.pf-help-light,.txt-color-lighten.pf-help,.dataTable td.txt-color-lighten.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-lighten.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-lighten{color:#d5e7ec !important}.txt-color.txt-color-white,.txt-color-white.pf-help-light,.txt-color-white.pf-help,.dataTable td.txt-color-white.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-white.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-white{color:#fff !important}.txt-color.txt-color-magenta,.txt-color-magenta.pf-help-light,.txt-color-magenta.pf-help,.dataTable td.txt-color-magenta.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-magenta.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-magenta{color:#6e3671 !important}.txt-color.txt-color-tealLightest,.txt-color-tealLightest.pf-help-light,.txt-color-tealLightest.pf-help,.dataTable td.txt-color-tealLightest.pf-table-link-cell,.dataTable td.pf-table-link-cell:hover,.dataTable td.pf-table-action-cell>.txt-color-tealLightest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-tealLightest{color:#6caead !important}.txt-color.txt-color-tealLighter,.txt-color-tealLighter.pf-help-light,.txt-color-tealLighter.pf-help,.dataTable td.txt-color-tealLighter.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-tealLighter.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i{color:#568a89 !important}.txt-color.txt-color-teal,.txt-color-teal.pf-help-light,.txt-color-teal.pf-help,.dataTable td.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-teal.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>td.pf-table-action-icon-cell.pf-table-link-cell,.pf-landing .pf-landing-list li>i.txt-color-teal{color:#477372 !important}.txt-color.txt-color-indigoDark,.txt-color-indigoDark.pf-help-light,.txt-color-indigoDark.pf-help,.dataTable td.txt-color-indigoDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-indigoDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-indigoDark{color:#5c6bc0 !important}.txt-color.txt-color-indigoDarkest,.txt-color-indigoDarkest.pf-help-light,.txt-color-indigoDarkest.pf-help,.dataTable td.txt-color-indigoDarkest.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-indigoDarkest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-indigoDarkest{color:#313966 !important}.txt-color.txt-color-gold,.txt-color-gold.pf-help-light,.txt-color-gold.pf-help,.dataTable td.txt-color-gold.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-gold.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-gold{color:#cfb53b !important}.txt-color.txt-color-silver,.txt-color-silver.pf-help-light,.txt-color-silver.pf-help,.dataTable td.txt-color-silver.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-silver.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-silver{color:silver !important}.txt-color.txt-color-bronze,.txt-color-bronze.pf-help-light,.txt-color-bronze.pf-help,.dataTable td.txt-color-bronze.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-bronze.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-bronze{color:#8c7853 !important}.txt-color.txt-color-primary,.txt-color-primary.pf-help-light,.txt-color-primary.pf-help,.dataTable td.txt-color-primary.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-primary.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-primary{color:#375959 !important}.txt-color.txt-color-success,.txt-color-success.pf-help-light,.txt-color-success.pf-help,.dataTable td.txt-color-success.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-success.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-success{color:#4f9e4f !important}.txt-color.txt-color-information,.txt-color-information.pf-help-light,.txt-color-information.pf-help,.dataTable td.txt-color-information.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-information.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-information{color:#316490 !important}.txt-color.txt-color-info,.txt-color-info.pf-help-light,.txt-color-info.pf-help,.dataTable td.txt-color-info.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-info.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-info{color:#316490 !important}.txt-color.txt-color-warning,.txt-color-warning.pf-help-light,.pf-help-light.pf-log-warning,.txt-color-warning.pf-help,.pf-help.pf-log-warning,.dataTable td.txt-color-warning.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-warning,.dataTable td.pf-table-action-cell>.txt-color-warning.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-warning,.txt-color.pf-log-warning,.pf-landing .pf-landing-list li>i.pf-log-warning,.pf-landing .pf-landing-list li>i.txt-color-warning{color:#e28a0d !important}.txt-color.txt-color-danger,.txt-color-danger.pf-help-light,.txt-color-danger.pf-help,.dataTable td.txt-color-danger.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-danger.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-danger{color:#a52521 !important}.bg-color.bg-color-blue{background-color:#428bca !important}.bg-color.bg-color-blueLight{background-color:#92a2a8 !important}.bg-color.bg-color-blueDark{background-color:#4c4f53 !important}.bg-color.bg-color-green{background-color:#5cb85c !important}.bg-color.bg-color-greenLight{background-color:#71843f !important}.bg-color.bg-color-greenDark{background-color:#496949 !important}.bg-color.bg-color-red{background-color:#d9534f !important}.bg-color.bg-color-yellow{background-color:#e2ce48 !important}.bg-color.bg-color-orange{background-color:#e28a0d !important}.bg-color.bg-color-orangeDark{background-color:#c2760c !important}.bg-color.bg-color-pink{background-color:#e06fdf !important}.bg-color.bg-color-pinkDark{background-color:#a8829f !important}.bg-color.bg-color-purple{background-color:#6e587a !important}.bg-color.bg-color-darken{background-color:#404040 !important}.bg-color.bg-color-lighten{background-color:#d5e7ec !important}.bg-color.bg-color-white{background-color:#fff !important}.bg-color.bg-color-gray{background-color:#3c3f41 !important}.bg-color.bg-color-grayDark{background-color:#525252 !important}.bg-color.bg-color-grayDarker{background-color:#2b2b2b !important}.bg-color.bg-color-magenta{background-color:#6e3671 !important}.bg-color.bg-color-tealLighter{background-color:#568a89 !important}.bg-color.bg-color-tealDarker{background-color:#212C30 !important}.bg-color.bg-color-tealDarkest{background-color:#1b2326 !important}.bg-color.bg-color-redLight{background-color:#a65858 !important}.pf-animation-slide-in{-moz-animation-duration:1.2s;-webkit-animation-duration:1.2s;-moz-animation-name:pfSlideIn;-webkit-animation-name:pfSlideIn;position:relative}@-webkit-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-moz-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-ms-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-webkit-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@-moz-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@-ms-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}.pf-animation-pulse-success{-webkit-animation:pulseBackgroundSuccess 1s 1;animation:pulseBackgroundSuccess 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-success .sorting_1{-webkit-animation:pulseBackgroundSuccessActive 1s 1;animation:pulseBackgroundSuccessActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-warning{-webkit-animation:pulseBackgroundWarning 1s 1;animation:pulseBackgroundWarning 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-warning .sorting_1{-webkit-animation:pulseBackgroundWarningActive 1s 1;animation:pulseBackgroundWarningActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-danger{-webkit-animation:pulseBackgroundDanger 1s 1;animation:pulseBackgroundDanger 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-danger .sorting_1{-webkit-animation:pulseBackgroundDangerActive 1s 1;animation:pulseBackgroundDangerActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}@-webkit-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-moz-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-ms-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-webkit-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-moz-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-ms-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-webkit-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-moz-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-ms-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-moz-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-ms-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-moz-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-ms-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@-moz-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@-ms-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}.pf-animate-rotate,.modal-content h2[data-toggle="collapse"]:after,.modal-content h4[data-toggle="collapse"]:after,.panel-body h2[data-toggle="collapse"]:after,.panel-body h4[data-toggle="collapse"]:after{-webkit-transition:all 0.08s linear;transition:all 0.08s linear}.pf-animate-rotate.right,.modal-content h2.right[data-toggle="collapse"]:after,.modal-content h4.right[data-toggle="collapse"]:after,.panel-body h2.right[data-toggle="collapse"]:after,.panel-body h4.right[data-toggle="collapse"]:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.pf-animate-rotate.left,.modal-content h2.left[data-toggle="collapse"]:after,.modal-content h4.left[data-toggle="collapse"]:after,.panel-body h2.left[data-toggle="collapse"]:after,.panel-body h4.left[data-toggle="collapse"]:after{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}@keyframes rotateRainbow{0%{background-position-x:0}100%{background-position-x:100vw}}@font-face{font-family:'Triglavian';font-style:normal;font-weight:900;src:url("../../fonts/triglavian-regular.eot");src:url("../../fonts/triglavian-regular.eot?#iefix") format("embedded-opentype"),url("../../fonts/triglavian-regular.woff2") format("woff2"),url("../../fonts/triglavian-regular.woff") format("woff"),url("../../fonts/triglavian-regular.ttf") format("truetype");font-display:swap}.pf-triglivian{font-family:'Triglavian';font-weight:900}body{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.pf-body{overflow:hidden}a,.pf-link{color:#477372;will-change:color;text-decoration:none;cursor:pointer;-webkit-transition:color 0.08s ease-out,background-color 0.08s ease-out;transition:color 0.08s ease-out,background-color 0.08s ease-out}a:hover,.pf-link:hover{color:#6caead;text-decoration:none}a:focus,.pf-link:focus{color:#477372}em{font-style:italic}em.pf-brand{text-transform:uppercase}.pf-font-capitalize{text-transform:capitalize}.pf-font-line-through{text-decoration:line-through}.no-scroll{overflow:hidden}.no-padding{padding:0 !important}::-webkit-scrollbar{display:none;width:16px;height:16px}::-webkit-scrollbar-track{background-color:#2b2b2b;border-left:1px solid #313335;border-radius:2px;-webkit-transition:background-color 0.5s;transition:background-color 0.5s}::-webkit-scrollbar-thumb{height:6px;border:5px solid transparent;background-clip:padding-box;-webkit-border-radius:8px;background-color:#868c90}::-webkit-scrollbar-thumb:hover{background-color:#a1a5a8}::-webkit-scrollbar-button{width:0;height:0;display:none}::-webkit-scrollbar-corner{background-color:transparent}::selection{background:#adadad;color:#1d1d1d}::-moz-selection{background:#adadad;color:#1d1d1d}.pf-help-default,.pf-help-light,.pf-help{cursor:help;-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.pf-dialog-icon-button,.pf-system-signature-module .pf-sig-table .fa-plus,.pf-system-route-module .pf-system-route-table td .fa-sync,.pf-system-route-module .pf-system-route-table td .fa-search,.pf-connection-info-module .pf-connection-info-table td .fa-plus{cursor:pointer;margin-top:2px;-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out}.pf-dialog-icon-button:not(.collapsed),.pf-system-signature-module .pf-sig-table .fa-plus:not(.collapsed),.pf-system-route-module .pf-system-route-table td .fa-sync:not(.collapsed),.pf-system-route-module .pf-system-route-table td .fa-search:not(.collapsed),.pf-connection-info-module .pf-connection-info-table td .fa-plus:not(.collapsed),.pf-dialog-icon-button:hover,.pf-system-signature-module .pf-sig-table .fa-plus:hover,.pf-system-route-module .pf-system-route-table td .fa-sync:hover,.pf-system-route-module .pf-system-route-table td .fa-search:hover,.pf-connection-info-module .pf-connection-info-table td .fa-plus:hover{color:#e28a0d}.pf-module-icon-button{cursor:pointer;color:#63676a;-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out}.pf-module-icon-button:hover,.pf-module-icon-button.active{color:#e28a0d !important}.pf-module-icon-button.editable{border-bottom:none !important}.pf-module-icon-button-copy{cursor:copy;-moz-user-select:text;user-select:text}a.disabled{color:#777;pointer-events:none;cursor:default}.alert{will-change:opacity, transform}.editable-input .pf-editable-name{text-transform:uppercase}.editable-input optgroup[label]{background-color:#3c3f41;color:#63676a}.editable-input optgroup[label] option{background-color:#313335;color:#adadad;font-family:Consolas,monospace,Menlo,Monaco,"Courier New"}.editable-input .editable-checklist>div>label{display:block !important;padding-left:20px !important;color:#adadad}.editable-input .editable-checklist>div>label>span:after{top:-2px}.editable-input .editable-checklist .pf-editable-unknown[value='0']+span{color:#d9534f}select:active,select:hover{outline:none}select:active,select:hover{outline-color:red}.select2-results .select2-results__options--nested .select2-results__option{padding-left:15px}.select2-results [class*="col-"]{padding-left:3px;padding-right:3px}.select2-results .clearfix.pf-result-image [class*="col-"]{line-height:22px}.select2 ::-webkit-search-cancel-button{-webkit-appearance:none !important}.select2 .select2-selection__choice__remove{float:left}.select2 .select2-selection--multiple input{box-shadow:none !important}.dataTables_wrapper .dataTables_length select{margin:0 3px;padding:1px}.dataTables_wrapper .dt-buttons .dt-button{line-height:22px;padding:0 5px}.dataTables_wrapper .dt-buttons .dt-button:not(:last-child){margin-right:10px}.dataTables_wrapper .dt-buttons .dt-button .fa{margin-right:5px}.pf-dataTable-condensed-toolbar{padding-top:3px}.pf-dataTable-condensed-toolbar .dataTables_info{padding-top:0;text-align:left}.pf-dataTable-condensed-toolbar>div{padding-left:5px;padding-right:5px}.pf-dataTable-condensed-toolbar .dataTables_paginate{padding-top:0;margin-top:0}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button{padding:0;height:13px;border:0 !important}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:before,.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:after{top:0}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:hover{background:transparent !important;color:#e28a0d !important}.pf-dataTable-condensed-toolbar .dt-buttons{text-align:right;margin-bottom:0}.pf-dataTable-condensed-toolbar .dt-buttons .dt-button{line-height:18px}.pf-dataTable-condensed-toolbar .dt-buttons .dt-button .fa{margin-right:0}.dataTable th.pf-table-image-cell,.dataTable th.pf-table-image-small-cell,.dataTable th.pf-table-image-smaller-cell{padding-left:0 !important;padding-right:0 !important;image-rendering:-webkit-optimize-contrast}.dataTable th.sorting,.dataTable th.sorting_asc,.dataTable th.sorting_desc{padding-right:18px !important}.dataTable tr.group{background-color:rgba(43,43,43,0.4)}.dataTable td.editable-disabled:focus{outline:none;background-color:transparent}.dataTable td.editable-click:not(.editable-disabled){cursor:pointer}.dataTable td:focus,.dataTable td.editable-open{outline:1px solid #c2760c;outline-offset:-1px;background-color:rgba(194,118,12,0.08)}.dataTable td>.fa-circle{font-size:9px !important}.dataTable td.pf-table-link-cell{cursor:pointer;-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.dataTable td.pf-table-action-cell{cursor:pointer}.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell{-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.dataTable td.pf-table-image-cell{padding:0 !important;image-rendering:-webkit-optimize-contrast}.dataTable td.pf-table-image-cell img{width:26px;box-sizing:content-box;border-left:1px solid #3c3f41;border-right:1px solid #3c3f41}.dataTable td.pf-table-image-small-cell img{width:24px;border-left:1px solid transparent;border-right:1px solid transparent}.dataTable td.pf-table-image-smaller-cell{padding:0 !important}.dataTable td.pf-table-image-smaller-cell img{width:25px;border-left:1px solid transparent;border-right:1px solid transparent}.dataTable td.pf-table-button-sm-cell{padding:0 5px}.dataTable td.pf-table-counter-cell{color:#63676a}.dataTable td.pf-table-counter-cell .pf-digit-counter-small{width:20px;display:inline-block;font-size:10px}.dataTable td.pf-table-counter-cell .pf-digit-counter-large{width:26px;display:inline-block;font-size:10px}.dataTable td .pf-table-unknown-cell{color:#d9534f;font-style:italic}.dataTable td .pf-table-cell-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dataTable td .pf-table-cell-80{width:90px}.dataTable td .pf-table-cell-90{width:100px}.dataTable td .pf-table-cell-100{width:110px}.dataTable td.separator-right,.dataTable th.separator-right{border-right:1px solid #3c3f41}.dataTable td svg.peity,.dataTable th svg.peity{display:block}.dataTable thead th.colHighlight{border-bottom:1px solid #c2760c}.dataTable tbody td.colHighlight{border-left:1px solid #c2760c;border-right:1px solid #c2760c;background-color:rgba(194,118,12,0.08)}.dataTable tbody tr:first-child td.colHighlight{border-top:1px solid #c2760c}.dataTable tbody tr:last-child td.colHighlight{border-bottom:1px solid #c2760c}table.pf-table-fixed{width:100%;table-layout:fixed}table tr.collapsing{-webkit-transition:height 0.01s ease;transition:height 0.01s ease}table tr.collapse.in{display:table-row !important}table td.pf-table-cell-10,table th.pf-table-cell-10{width:10px}table td.pf-table-cell-20,table th.pf-table-cell-20{width:20px}table td.pf-table-cell-ellipses-auto,table th.pf-table-cell-ellipses-auto{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-table-tools{height:45px}.pf-table-tools>.btn-labeled:not(:last-child){margin-right:10px}.pf-table-tools-action{will-change:height, opacity;opacity:0;display:none;height:0;overflow:hidden}.pf-loading-overlay{position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;background:#2b2b2b;z-index:1060;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-loading-overlay .pf-loading-overlay-wrapper{width:25px;height:25px;margin:auto;text-align:center;position:absolute;top:0;left:0;bottom:0;right:0}.pf-loading-overlay .pf-loading-overlay-wrapper i{padding:3px}.navbar-header-block{width:100%}.navbar-header-block .navbar-nav{width:100%}.navbar-nav li:not(.disabled):not(.hide-before):hover:before,.navbar-nav li:not(.disabled):not(.hide-before).active:before{top:-4px;opacity:1}.navbar-nav li:not(.disabled):not(.hide-before):before{content:'';position:absolute;background-color:#5cb85c;opacity:0;will-change:opacity,top;-webkit-transition:top 0.15s ease-out,opacity 0.15s ease-out;transition:top 0.15s ease-out,opacity 0.15s ease-out;width:100%;height:2px;top:0}.pf-navbar-version-info{cursor:pointer}.pf-site{will-change:transform}.sb-slidebar{will-change:transform}.sb-left .list-group-item{cursor:pointer;-webkit-box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4)}.sb-right .list-group-item{cursor:pointer;-webkit-box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4)}.list-group-item.disabled:after{content:'\f023';font-family:'Font Awesome 5 Free';font-weight:bold;color:#2b2b2b;position:absolute;right:8px}.mCSB_container,.mCSB_dragger{will-change:top, left}.pf-timestamp-counter{visibility:hidden}.pf-map-type-private{color:#7986cb}.pf-map-type-corporation{color:#5cb85c}.pf-map-type-alliance{color:#428bca}.pf-map-type-global{color:#568a89}#pf-map-module{margin:20px 10px 0 10px}#pf-map-module #pf-map-tabs a[role="tab"]:hover .pf-map-tab-handler:before{color:#e28a0d}#pf-map-module #pf-map-tabs .pf-map-tab-handler:before{content:'\22EE\22EE\00A0';display:inline-block;cursor:-moz-grab !important;cursor:-webkit-grab !important;cursor:grab !important;color:#63676a;width:12px;transition:color 0.15s ease-out, background-color 0.15s ease-out;pointer-events:all}#pf-map-module #pf-map-tabs .pf-map-type-tab-default{border-top:2px solid transparent}#pf-map-module #pf-map-tabs .pf-map-type-tab-private{border-top:2px solid #7986cb}#pf-map-module #pf-map-tabs .pf-map-type-tab-corporation{border-top:2px solid #5cb85c}#pf-map-module #pf-map-tabs .pf-map-type-tab-alliance{border-top:2px solid #428bca}#pf-map-module #pf-map-tabs .pf-map-type-tab-global{border-top:2px solid #568a89}#pf-map-module #pf-map-tabs .pf-map-tab-icon{margin-right:3px}#pf-map-module #pf-map-tabs .pf-map-tab-shared-icon{margin-left:3px}.pf-map-content-row{margin-top:10px;padding-bottom:40px}.pf-map-content-row .pf-module{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background:rgba(60,63,65,0.27);padding:10px;width:100%;margin-bottom:10px;will-change:height, transform, opacity;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-map-content-row .pf-module:before{content:'';position:absolute;top:0;left:0;border-style:solid;border-width:0 0 9px 9px;border-color:transparent transparent transparent #3c3f41;cursor:ns-resize}.pf-map-content-row .pf-module .label{margin-bottom:10px}.pf-map-content-row .pf-module .pf-dynamic-area{background:rgba(43,43,43,0.4)}.pf-map-content-row .pf-module .pf-module-head{margin-bottom:10px}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag{display:inline-block;cursor:-moz-grab !important;cursor:-webkit-grab !important;cursor:grab !important;transition:color 0.15s ease-out}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag:before{content:'\22EE\22EE\00A0'}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag:hover{color:#f0ad4e}.pf-map-content-row .pf-module .pf-module-head h5{display:inline-block;line-height:16px;margin-bottom:0}.pf-map-content-row .pf-module .pf-module-head h5 .pf-module-icon-button{margin-left:5px}.pf-map-content-row .pf-module .pf-module-table{font-size:11px;white-space:nowrap}.pf-map-content-row .pf-module-spacer{margin-bottom:10px}.pf-map-content-row .pf-module-control-area{display:flex;justify-content:center;align-items:center;margin-bottom:10px;min-height:inherit}.pf-map-content-row .pf-module-control-area:hover .fa-sync{-moz-transform:rotateZ(720deg);-ms-transform:rotateZ(720deg);-webkit-transform:rotateZ(720deg);transform:rotateZ(720deg)}.pf-map-content-row .pf-module-control-area .fa-sync{-webkit-transition:transform 1.6s ease-out;transition:transform 1.6s ease-out}.pf-user-status{color:#a52521}.pf-user-status-corp{color:#5cb85c}.pf-user-status-ally{color:#428bca}.pf-user-status-own{color:#7986cb}.pf-system-effect{display:none;color:#adadad;cursor:help}.pf-system-effect-magnetar{color:#e06fdf;display:inline-block}.pf-system-effect-redgiant{color:#d9534f;display:inline-block}.pf-system-effect-pulsar{color:#428bca;display:inline-block}.pf-system-effect-wolfrayet{color:#e28a0d;display:inline-block}.pf-system-effect-cataclysmic{color:#ffb;display:inline-block}.pf-system-effect-blackhole{color:#000;display:inline-block}.pf-rally,.pf-system-info-rally .pf-system-head{text-shadow:1px 1px 2px #1d1d1d;background-color:#782d77;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMzZTI2NGUiLz48c3RvcCBvZmZzZXQ9IjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzNlMjY0ZSIvPjxzdG9wIG9mZnNldD0iNzUlIiBzdG9wLWNvbG9yPSIjM2UyNjRlIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-moz-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:-webkit-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:linear-gradient(-45deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:25px 25px;-webkit-animation:move 2.5s linear infinite;-moz-animation:move 2.5s linear infinite;-ms-animation:move 2.5s linear infinite;animation:move 2.5s linear infinite}.pf-system-security-0-0{color:#be0000}.pf-system-security-0-1{color:#ab2600}.pf-system-security-0-2{color:#be3900}.pf-system-security-0-3{color:#c24e02}.pf-system-security-0-4{color:#ab5f00}.pf-system-security-0-5{color:#bebe00}.pf-system-security-0-6{color:#73bf26}.pf-system-security-0-7{color:#00bf00}.pf-system-security-0-8{color:#00bf39}.pf-system-security-0-9{color:#39bf99}.pf-system-security-1-0{color:#28c0bf}.pf-system-sec{margin-right:5px;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab}.pf-system-sec-highSec{color:#5cb85c}.pf-system-sec-lowSec{color:#e28a0d}.pf-system-sec-nullSec{color:#d9534f}.pf-system-sec-high{color:#d9534f}.pf-system-sec-mid{color:#e28a0d}.pf-system-sec-low{color:#428bca}.pf-system-sec-unknown{color:#7986cb}.pf-system-sec-abyssal{color:#e06fdf}.pf-system-sec-special{color:#c8b847}.pf-system-status-friendly{border-color:#428bca !important;color:#428bca}.pf-system-status-occupied{border-color:#e28a0d !important;color:#e28a0d}.pf-system-status-hostile{border-color:#d9534f !important;color:#d9534f}.pf-system-status-empty{border-color:#5cb85c !important;color:#5cb85c}.pf-system-status-unscanned{border-color:#568a89 !important;color:#568a89}.pf-system-info-status-label{background-color:#63676a;color:#000;will-change:background-color;-webkit-transition:background-color 0.3s ease-out;transition:background-color 0.3s ease-out}.pf-system-info-status-label.pf-system-status-friendly{background-color:#428bca}.pf-system-info-status-label.pf-system-status-occupied{background-color:#e28a0d}.pf-system-info-status-label.pf-system-status-hostile{background-color:#d9534f}.pf-system-info-status-label.pf-system-status-empty{background-color:#5cb85c}.pf-system-info-status-label.pf-system-status-unscanned{background-color:#568a89}.pf-system-hidden{opacity:0.15 !important;pointer-events:none}.pf-system-effect-dialog .clearfix+.col-md-6{margin-top:10px}.pf-system-effect-dialog .clearfix+.col-md-6+.col-md-6{margin-top:10px}.pf-planet-barren{color:#755e48}.pf-planet-gas{color:#a4b2b2}.pf-planet-ice{color:#aacada}.pf-planet-lava{color:#891c08}.pf-planet-oceanic{color:#4d7999}.pf-planet-plasma{color:#28576e}.pf-planet-shattered{color:#7986cb}.pf-planet-storm{color:#38556a}.pf-planet-temperate{color:#4c593c}.pf-fake-connection{box-sizing:content-box;display:inline-block;width:70px;height:4px;border-top:2px solid #63676a;border-bottom:2px solid #63676a;background-color:#3c3f41;position:relative;font-size:10px;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-fake-connection.pf-map-connection-stargate{background-color:#313966;border-color:#63676a}.pf-fake-connection.pf-map-connection-jumpbridge{background-color:#6caead;border-color:#3c3f41;background:repeating-linear-gradient(to right, #6caead, #6caead 10px, #3c3f41 10px, #3c3f41 20px)}.pf-fake-connection.pf-map-connection-abyssal{background-color:#5a225a;border-color:#3c3f41;background:repeating-linear-gradient(to right, #5a225a, #5a225a 5px, #3c3f41 5px, #3c3f41 10px)}.pf-fake-connection.pf-map-connection-wh-eol{border-color:#d747d6}.pf-fake-connection.pf-map-connection-wh-reduced{background-color:#e28a0d}.pf-fake-connection.pf-map-connection-wh-critical{background-color:#a52521}.pf-fake-connection.pf-map-connection-frig{border-style:dashed;border-left:none;border-right:none}.pf-fake-connection.pf-map-connection-frig:after{content:'frig';background-color:#e28a0d;color:#1d1d1d;padding:0px 3px;position:absolute;left:25px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection.pf-map-connection-preserve-mass:after{content:'save mass';background-color:#a52521;color:#eaeaea;padding:0px 3px;position:absolute;left:8px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection-text{padding:0 2px;border-style:solid;border-color:#575a5d;border-width:2px;border-left:none;border-right:none}.pf-fake-connection-text.pf-wh-eol{border-color:#d747d6}.pf-fake-connection-text.pf-wh-reduced{background-color:#e28a0d;color:#000}.pf-fake-connection-text.pf-wh-critical{background-color:#a52521;color:#000}.pf-fake-connection-text.pf-wh-frig{border-top-style:dashed;border-bottom-style:dashed}.pf-structure-status-unknown{color:#568a89}.pf-structure-status-online{color:#5cb85c}.pf-structure-status-offline{color:#a52521}.tooltip-inner{color:#adadad;background-color:#3c3f41;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;padding:5px 5px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.modal .tooltip{z-index:1060}.modal .tooltip .tooltip-inner{color:#313335;background-color:#adadad}.tooltip.top .tooltip-arrow{border-top-color:#63676a}.tooltip.right .tooltip-arrow{border-right-color:#63676a}.tooltip.bottom .tooltip-arrow{border-bottom-color:#63676a}.tooltip.left .tooltip-arrow{border-left-color:#63676a}td.pf-popover-trigger:hover{color:#477372}.pf-notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.pf-dynamic-area{padding:10px;min-height:100px;position:relative;background-color:#313335;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-dynamic-area .dl-horizontal{margin-bottom:0}.pf-dynamic-area .dl-horizontal dd{min-width:100px}.pf-dynamic-area .dl-horizontal dd.txt-color,.pf-dynamic-area .dl-horizontal dd.pf-help-light,.pf-dynamic-area .dl-horizontal dd.pf-help,.pf-dynamic-area .dl-horizontal .dataTable td.pf-table-action-cell>dd.pf-table-action-icon-cell,.dataTable .pf-dynamic-area .dl-horizontal td.pf-table-action-cell>dd.pf-table-action-icon-cell{font-weight:bold}.pf-dynamic-area>[class~='alert']:last-of-type{margin-bottom:0}.pf-code-ObjectBrace{color:#782d77;font-weight:bold}.pf-code-ArrayBrace{color:#3e264e;font-weight:bold}.pf-code-PropertyName{color:#1d1d1d;font-weight:bold}.pf-code-String{color:#e28a0d}.pf-code-Number{color:#4f9e4f}.pf-code-Boolean{color:#313966;font-weight:bold}.pf-code-Function{color:#782d77}.pf-code-Null{color:#2b2b2b;font-weight:bold}.pf-code-Comma{color:#1d1d1d;font-weight:bold}code .fas,code .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list code li>i,code .far,code .fab{color:#3c3f41;cursor:pointer}#pf-logo-wrapper{display:block}#pf-head{margin-bottom:0px}#pf-head a{-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out;will-change:color}#pf-head a:focus{color:#477372}#pf-head a:focus img{border-color:#3c3f41}#pf-head a:hover{text-decoration:none}#pf-head a:hover .badge{color:#6caead}#pf-head a:hover img{border-color:#568a89}#pf-head i{margin-right:2px}#pf-head .pf-brand-desc{margin:6px 10px 0 90px;width:180px}#pf-head .pf-head-menu{padding:3px 10px;line-height:24px}#pf-head .pf-head-menu .pf-head-menu-logo{width:24px;height:24px;display:inline-block;float:left}#pf-head .pf-head-user-character,#pf-head .pf-head-user-ship{opacity:0;visibility:hidden}#pf-head .pf-head-active-user{cursor:pointer}#pf-head .pf-head-active-user,#pf-head #pf-head-current-location{display:none}#pf-head .pf-head-active-user .badge,#pf-head #pf-head-current-location .badge{-webkit-transition:color 0.3s ease-out;transition:color 0.3s ease-out}#pf-head .pf-head-user-character-image,#pf-head .pf-head-user-ship-image{display:inline-block;margin-top:-6px;margin-bottom:-6px;width:27px;border:1px solid #3c3f41;margin-right:3px;image-rendering:-webkit-optimize-contrast;-webkit-transition:border-color 0.15s ease-out;transition:border-color 0.15s ease-out;will-change:border-color}#pf-head .pf-head-program-status{cursor:pointer}#pf-head .navbar-text{min-width:60px}#pf-head .tooltip .tooltip-inner{color:#adadad}.pf-head{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-head .badge{background-color:#3c3f41;color:#adadad}.pf-head .badge:empty{display:none}.pf-head small{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}#pf-footer{display:flex;position:absolute;bottom:0;left:0;width:100%;margin:0;background:rgba(60,63,65,0.3);padding:1px 0}#pf-footer a{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;color:#375959}#pf-footer a:hover{color:#477372;text-decoration:none}#pf-footer .pf-footer-left{display:flex;flex:none;justify-content:flex-start}#pf-footer .pf-footer-center{display:flex;flex:1;padding:0 20px}#pf-footer .pf-footer-right{display:flex;flex:none;justify-content:flex-end}.navbar-fixed-bottom{padding:2px 0}.navbar-fixed-bottom .container-fluid{padding-left:0;padding-right:0}.pf-menu-clock{position:absolute;bottom:0;width:100%;padding:6px 8px;text-align:center}#pf-global-info{width:100%;margin-bottom:0;border:none;padding:9px 10px}#pf-global-info .ui-pnotify-title{margin-bottom:0}.panel-reverse-order{display:table;width:100%}.panel-reverse-order .reverse-order-header{display:table-header-group}.panel-reverse-order .reverse-order-footer{display:table-footer-group}.pf-sortable-ghost{will-change:opacity;transition:opacity 0.2s ease-out;opacity:0.7 !important}.pf-sortable-ghost .pf-module-handler-drag{color:#f0ad4e;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}@-webkit-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-moz-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-ms-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}.pf-animate{visibility:hidden;opacity:0}.pf-color-line{position:fixed;top:0;left:0;width:100%;height:3px;background:repeating-linear-gradient(-45deg, #66c84f 0%, #568a89 12.5%, #6caead 25%, #5cb85c 37.5%, #66c84f 50%);background-size:100vw 100vw;-webkit-animation:rotateRainbow 3s infinite linear forwards;animation:rotateRainbow 3s infinite linear forwards}.pf-color-line.warning{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UyOGEwZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UyOGEwZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e28a0d),color-stop(100%, #e28a0d));background-image:-moz-linear-gradient(left, #e28a0d,#e28a0d 100%);background-image:-webkit-linear-gradient(left, #e28a0d,#e28a0d 100%);background-image:linear-gradient(to right, #e28a0d,#e28a0d 100%)}.pf-color-line.danger{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E1MjUyMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2E1MjUyMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #a52521),color-stop(100%, #a52521));background-image:-moz-linear-gradient(left, #a52521,#a52521 100%);background-image:-webkit-linear-gradient(left, #a52521,#a52521 100%);background-image:linear-gradient(to right, #a52521,#a52521 100%)}.pf-splash{position:absolute;z-index:2000;background-color:#1d1d1d;color:#63676a;top:0;bottom:0;left:0;right:0;will-change:opacity}.pf-splash:not(.pf-splash-warning):not(.pf-splash-error){cursor:wait}.pf-splash .pf-splash-title{position:fixed;left:50%;top:30%;text-align:center;max-width:500px;padding:20px;-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.pf-splash .pf-splash-debug{position:absolute;bottom:0;width:100%}.pf-splash .pf-splash-debug .pf-splash-debug-headline{padding:0 10px}.pf-splash .pf-splash-debug .pf-splash-pre{margin-bottom:0}@media (max-width: 1200px){.pf-landing #pf-logo-container{margin:5px auto}.pf-landing .pf-brand-desc{display:none}.pf-landing .navbar .navbar-brand{margin-left:10px}}.pf-landing section:not(:last-of-type){border-bottom:1px solid #2b2b2b}.pf-landing section{min-height:200px;padding:20px 0 40px 0}.pf-landing section h4:not(.pf-dynamic-area){font-size:18px;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;margin:5px 0 10px 0;border-bottom:1px solid #2b2b2b;line-height:34px}.pf-landing .container>.row{margin-bottom:30px}.pf-landing .alert{box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing a[data-gallery]{position:relative;display:inline-block;overflow:hidden;margin:5px 0 15px 0;box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing a[data-gallery]:before{content:'\f06e';font-family:'Font Awesome 5 Free';font-size:20px;color:#e28a0d;position:absolute;height:100%;width:100%;z-index:10;-webkit-transition:transform 0.1s ease-out,opacity 0.1s ease-out;transition:transform 0.1s ease-out,opacity 0.1s ease-out;will-change:transform, opacity;transform:scale(1.3, 1.3);opacity:0;display:flex;flex-direction:column;justify-content:center;align-items:center}.pf-landing a[data-gallery]:hover img{border-color:#6caead;-webkit-filter:brightness(50%);filter:brightness(50%)}.pf-landing a[data-gallery]:hover:before{-webkit-transition-delay:.05s;transition-delay:.05s;transform:scale(1, 1);opacity:1}.pf-landing a[data-gallery] .pf-landing-image-preview{border-width:1px;border-style:solid;border-color:#1d1d1d;display:inline-block;will-change:all;-webkit-filter:brightness(100%);filter:brightness(100%);-webkit-transition:all 0.2s ease-out;transition:all 0.2s ease-out}.pf-landing a[data-gallery] .pf-landing-image-preview.pf-landing-image-preview-small{height:160px}.pf-landing a[data-gallery] .pf-landing-image-preview.pf-landing-image-preview-medium{height:256px}#pf-landing-top{height:355px;border-bottom:1px solid #313335;position:relative}#pf-landing-top:before{content:'';width:100%;height:100%;position:absolute;background:url("../../img/pf-bg.jpg") #05050a;background-repeat:no-repeat;background-position:0 0;-webkit-filter:brightness(.9);filter:brightness(.9)}#pf-landing-top #pf-logo-container{-moz-transform:scale3d(0.8, 0.8, 1);-ms-transform:scale3d(0.8, 0.8, 1);-webkit-transform:scale3d(0.8, 0.8, 1);transform:scale3d(0.8, 0.8, 1)}#pf-landing-top #pf-header-container{position:absolute;width:100%;background-position:center center}#pf-landing-top #pf-header-container #pf-header-canvas{position:absolute;visibility:hidden;top:0;left:0}#pf-landing-top #pf-header-container #pf-logo-container{z-index:110}#pf-landing-top #pf-header-container #pf-header-preview-container{position:absolute;left:400px;width:590px;height:350px;top:37px}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element{position:relative;margin-left:12px;margin-top:12px;height:155px;width:180px;padding:7px;opacity:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-color:rgba(43,43,43,0.5)}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element:nth-child(n+4){box-shadow:0 4px 10px rgba(0,0,0,0.4)}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element:after{content:'';position:absolute;width:calc(100% - 14px);height:calc(100% - 14px);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-repeat:no-repeat;background-position:50% 50%;background-color:rgba(29,29,29,0.75)}#pf-landing-top .container{position:relative;margin-top:10px}#pf-header-preview-intel:after{background-image:url("../../img/landing/intel.png")}#pf-header-preview-map:after{background-image:url("../../img/landing/map.png")}#pf-header-preview-scope:after{background-image:url("../../img/landing/scope.png")}#pf-header-preview-signature:after{background-image:url("../../img/landing/signature.png")}#pf-header-preview-data:after{background-image:url("../../img/landing/data.png")}#pf-header-preview-gameplay:after{background-image:url("../../img/landing/gameplay.png")}#pf-landing-login{padding-top:40px;padding-bottom:30px}@media (max-width: 1199px){#pf-landing-login{padding-top:10px}}#pf-landing-login .row{margin-bottom:0}#pf-landing-login .pf-character-selection>div:not(.pf-character-row-animate){-webkit-transition:width 0.2s ease,margin 0.2s ease;transition:width 0.2s ease,margin 0.2s ease}#pf-landing-login .pf-dynamic-area{display:inline-block;margin:10px 5px 20px 5px;padding:10px 10px 5px 10px;min-width:155px;min-height:184px;overflow:visible;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}#pf-landing-login .pf-dynamic-area .ribbon-wrapper{z-index:5}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper{opacity:0;width:128px;border:2px solid #63676a;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;-webkit-transition:border-color 0.2s ease-out,box-shadow 0.2s ease-out;transition:border-color 0.2s ease-out,box-shadow 0.2s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);will-change:border-color, transition;overflow:hidden;cursor:pointer;display:inline-block;background-color:#2b2b2b;box-sizing:content-box}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover{border-color:#4f9e4f}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover .pf-character-name{color:#4f9e4f}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover .pf-character-image{-webkit-filter:grayscale(50%);filter:grayscale(50%)}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper.pf-character-active:after{font-family:"Font Awesome 5 Free";content:"\f111";font-weight:bold;position:absolute;top:5px;left:5px;height:14px;width:14px;color:#5cb85c;font-size:10px}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image{overflow:hidden;width:128px;height:128px;position:relative}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image .pf-character-info{position:absolute;top:0;left:0;width:0;height:100%;color:#adadad;background:rgba(60,63,65,0.8);overflow:hidden;will-change:width, transition;padding:10px 0}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image .pf-character-info .pf-character-info-text{line-height:25px}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-name{font-size:13px;line-height:30px;border-top:1px solid #313335;color:#adadad;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-image{-webkit-transition:all 0.3s ease-out;transition:all 0.3s ease-out;-webkit-filter:grayscale(0%);filter:grayscale(0%)}#pf-landing-login .pf-sso-login-button{position:relative;display:inline-block;width:270px;height:45px;border:none;margin-bottom:10px;background-color:transparent;background-image:url("../../img/landing/eve_sso_login_buttons_large_black_hover.png");cursor:pointer;box-shadow:0 2px 5px rgba(0,0,0,0.2)}#pf-landing-login .pf-sso-login-button:before{content:' ';position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 4px 5px rgba(0,0,0,0.2);opacity:0;-webkit-transition:opacity 0.12s ease-in-out;transition:opacity 0.12s ease-in-out;will-change:opacity}#pf-landing-login .pf-sso-login-button:after{content:' ';position:absolute;width:270px;height:45px;left:0;top:0;background-image:url("../../img/landing/eve_sso_login_buttons_large_black.png");-webkit-transition:opacity 0.12s ease-in-out;transition:opacity 0.12s ease-in-out;will-change:opacity}#pf-landing-login .pf-sso-login-button:hover:before{opacity:1}#pf-landing-login .pf-sso-login-button:hover:after{opacity:0}#pf-landing-login .pf-sso-login-button.disabled{pointer-events:auto}#pf-landing-login #pf-notification-panel{display:none}#pf-header-map{position:relative;margin:0 auto;height:380px;width:600px;pointer-events:none}#pf-header-map .pf-header-svg-layer{position:absolute;top:0;left:0;right:0;bottom:0}#pf-header-map #pf-header-systems{z-index:100}#pf-header-map #pf-header-connectors{z-index:90}#pf-header-map #pf-header-connections{z-index:80}#pf-header-map #pf-header-background{z-index:70}#pf-header-map #pf-header-background .pf-header-system{display:none}#pf-header-map-bg{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}#pf-header-map-bg img{pointer-events:none}#pf-header-map-bg #pf-map-bg-image{opacity:0;position:absolute;bottom:0;right:0;width:100%;height:100%}#pf-header-map-bg #pf-map-neocom{opacity:0;height:665px;width:21px}#pf-header-map-bg #pf-map-browser{opacity:0;position:absolute;top:110px;left:21px;height:560px;width:515px}#pf-landing-gallery-carousel{background-image:url("../../img/pf-header-bg.jpg")}#pf-landing-gallery-carousel .slide-content{border-radius:5px;pointer-events:none}#pf-landing-gallery-carousel h3{width:100%;text-align:left}.pf-landing-pricing-panel{margin-top:20px}.pricing-big{position:relative;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pricing-big .panel-heading{border-color:#3c3f41}.pricing-big .the-price{padding:1px 0;background:#2d3031;text-align:center}.pricing-big .the-price .subscript{font-size:12px;color:#63676a}.pricing-big .price-features{background:#3c3f41;color:#adadad;padding:20px 15px;line-height:22px}.pricing-big .price-features:not(.price-features-fluid){min-height:205px}.pricing-big .price-features .list-unstyled.text-left li,.pricing-big .price-features .text-left.list-inline li{text-indent:-1em;padding-left:1.5em}.pricing-big .price-features .list-unstyled.text-left li .fa,.pricing-big .price-features .text-left.list-inline li .fa{text-indent:0}.pricing-big table tr td{line-height:1}.pricing-big table tr td .btn-group .btn{padding-top:4px;padding-bottom:4px}#pf-landing-admin .pf-landing-admin-login{margin-bottom:0}#pf-landing-about .pf-landing-about-me{width:256px;height:256px;border:none;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing-footer{padding:30px 0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background-color:#171717}.pf-landing-footer .row{margin-bottom:0 !important}.pf-landing-footer .pf-social-networks>li{display:inline-block;line-height:1}.pf-landing-footer .pf-social-networks>li a{display:inline-block;background:rgba(99,103,106,0.5);line-height:24px;text-align:center;font-size:14px;margin-right:3px;padding:6px 6px 2px 6px;width:36px}.pf-body[data-script='admin'] .navbar-brand:hover{color:#777}.pf-body[data-script='admin'] .panel{text-align:initial}.pf-body[data-script='admin'] .panel h3 img{position:absolute;right:0;top:0;margin:4px 14px 0 0;border-radius:30%}.pf-body[data-script='admin'] .form-horizontal .panel{color:#adadad}.pf-body[data-script='setup'] .navbar-brand:hover{color:#777}.pf-body[data-script='setup'] section{padding-bottom:0;border-bottom:0}.pf-body[data-script='setup'] section:first-of-type{padding-top:60px}.pf-body[data-script='setup'] section:last-of-type{padding-bottom:60px}.pf-body[data-script='setup'] section .container>.row{margin-bottom:0}#pf-static-logo-svg{opacity:0;position:absolute;z-index:105;overflow:visible}#pf-static-logo-svg path{will-change:fill, opacity, transform, translateZ, translateX, translateY;pointer-events:all;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.logo-ploygon-top-right{fill:#477372;fill-rule:evenodd;stroke:#477372;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-bottom-left{fill:#5cb85c;fill-rule:evenodd;stroke:#5cb85c;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-bottom-right{fill:#375959;fill-rule:evenodd;stroke:#375959;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-top-left{fill:#63676a;fill-opacity:1;fill-rule:evenodd;stroke:#63676a;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1}@-webkit-keyframes bounce{0%, 20%, 50%, 80%, 100%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(-8px)}60%{-webkit-transform:translateY(-4px)}}@keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}#pf-map-tab-element{max-width:2535px;margin:0 auto}.pf-map-tab-content .pf-map-wrapper{position:relative;resize:vertical;width:100%;height:555px;max-width:2535px;max-height:1000px;min-height:250px;overflow:auto;padding:5px;background:rgba(43,43,43,0.93);box-shadow:inset -3px 3px 10px 0 rgba(0,0,0,0.3);will-change:width, height;border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-width:1px;border-style:solid;border-color:#313335}.pf-map-tab-content .pf-map-wrapper:before{content:'';position:absolute;bottom:0;right:0;border-style:solid;border-width:14px 14px 0 0;border-color:transparent #313335 transparent transparent;cursor:nwse-resize}.pf-map-tab-content .pf-map-wrapper:focus,.pf-map-tab-content .pf-map-wrapper:hover{border:1px solid #3c3f41}.pf-map-tab-content .pf-map-wrapper:focus:before,.pf-map-tab-content .pf-map-wrapper:hover:before{border-color:transparent #3c3f41 transparent transparent}.pf-map-overlay{position:absolute;display:none;z-index:10000;right:25px;background:rgba(0,0,0,0.25);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-map-overlay.pf-map-overlay-timer{bottom:23px;width:36px;height:36px}.pf-map-overlay.pf-map-overlay-info{top:8px;height:36px;min-height:36px;min-width:36px;padding:3px 3px 3px 8px;line-height:26px}.pf-map-overlay.pf-map-overlay-info i{margin:0;margin-top:5px;width:0;height:26px;opacity:0;color:#63676a;transform:scale(0);transform-origin:50% 50% 0px;-webkit-transition:color 0.18s ease-in-out;transition:color 0.18s ease-in-out;cursor:help;will-change:all}.pf-map-overlay.pf-map-overlay-info i.fas,.pf-map-overlay.pf-map-overlay-info .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .pf-map-overlay.pf-map-overlay-info li>i,.pf-map-overlay.pf-map-overlay-info i.far{font-size:20px}.pf-map-overlay.pf-map-overlay-info i.glyphicon{margin-top:1px;font-size:22px;padding-left:3px}.pf-map-overlay.pf-map-overlay-info i.active,.pf-map-overlay.pf-map-overlay-info i:hover{color:#c2760c}.pf-map-overlay.pf-map-overlay-local{top:54px;min-height:80px;width:32px;display:block;will-change:width}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content{margin-right:36px;padding:5px 0 5px 5px;overflow:hidden}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline{font-size:12px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline .badge{margin-left:5px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline .pf-system-sec{cursor:default}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-local-table{font-size:10px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-local-table td{white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .dataTables_paginate,.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .dataTables_empty{white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-toolbar .pf-map-overlay-toolbar-icon{vertical-align:0;margin-top:14px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-toolbar .pf-map-overlay-toolbar-checkbox{display:inline-block;margin-bottom:0}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main{position:absolute;top:0;right:0;height:100%;padding:3px;width:32px;cursor:pointer;text-align:center;border-left:1px solid #2b2b2b}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger{margin-bottom:10px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger:hover,.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger.right{color:#c2760c}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main i{font-size:12px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-jumps{position:absolute;bottom:5px;width:calc(100% - 6px)}.pf-map-overlay.pf-map-overlay-local .badge{font-family:Arial, sans-serif;background-color:#2b2b2b}.pf-grid-small:before{content:' ';display:block;position:absolute;left:0;top:0;width:100%;height:100%;opacity:0.6;background:url('data:image/png;base64,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') !important}.pf-map{width:2500px;height:1500px;position:relative;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-map .jsplumb-overlay{opacity:1;pointer-events:none;will-change:opacity;-webkit-transition:opacity 0.18s ease-out;transition:opacity 0.18s ease-out}.pf-map .jsplumb-hover.jsplumb-overlay{opacity:0 !important}.pf-map .jsplumb-hover:not(.jsplumb-overlay){-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:.5s;animation-delay:.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce}.pf-map .jsplumb-target-hover,.pf-map .jsplumb-source-hover{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:.5s;animation-delay:.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.pf-map .pf-system{position:absolute;min-width:60px;height:auto;overflow:hidden;background-color:#313335;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:100;will-change:top, left, opacity;border-width:2px;border-style:solid;border-color:#63676a;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-transition:border-color 0.2s ease-out,box-shadow 0.12s ease-out,opacity 0.12s ease-out;transition:border-color 0.2s ease-out,box-shadow 0.12s ease-out,opacity 0.12s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.pf-map .pf-system:hover{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-transform:translate3d(0, -1px, 0) !important;-ms-transform:translate3d(0, -1px, 0) !important;-webkit-transform:translate3d(0, -1px, 0) !important;transform:translate3d(0, -1px, 0) !important}.pf-map .pf-system:hover:not(.jsPlumb_dragged){z-index:1040 !important}.pf-map .pf-system .pf-system-head{padding:0 3px 0 3px;cursor:pointer;font-family:Arial, sans-serif;font-weight:bold;white-space:nowrap}.pf-map .pf-system .pf-system-head .pf-system-head-name{border:none;display:inline-block;min-width:50px;color:#adadad;margin-right:2px}.pf-map .pf-system .pf-system-head .pf-system-head-counter{display:inline-block;text-align:right;min-width:8px;margin-right:1px;color:#5cb85c;cursor:help}.pf-map .pf-system .pf-system-head .pf-system-head-counter:empty{display:none}.pf-map .pf-system .pf-system-head .pf-system-effect{font-size:11px}.pf-map .pf-system .pf-system-head .fa-lock{font-size:11px;display:none}.pf-map .pf-system .pf-system-head .pf-system-head-expand{margin-left:2px;color:#63676a;width:10px;display:none}.pf-map .pf-system .pf-system-head .editable-empty{font-style:normal}.pf-map .pf-system .pf-system-head-info{display:flex;color:#7c8184;font-size:10px;line-height:10px;padding-right:1px;margin-bottom:2px}.pf-map .pf-system .pf-system-head-info [class^="pf-system-sec-"]{cursor:help}.pf-map .pf-system .pf-system-head-info-left{flex:1}.pf-map .pf-system .pf-system-head-info-right{flex:1;text-align:right}.pf-map .pf-system .pf-system-body{height:0px;width:100%;overflow:hidden;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab;padding:0 4px;white-space:nowrap;display:none;will-change:width;border-top-width:1px;border-top-style:dashed;border-top-color:#63676a}.pf-map .pf-system .pf-system-body .pf-system-body-item{position:relative;color:#7c8184;font-size:10px;line-height:16px;height:16px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-right{float:right;color:#f0ad4e;width:50px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:none}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status{font-size:6px;width:10px;vertical-align:middle}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-item-name{position:absolute;display:inline-block;width:calc(100% - 10px);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pf-map .pf-system .tooltip.in{opacity:1}.pf-map .pf-system .tooltip .tooltip-inner{color:#313335;background-color:#adadad;padding:3px 3px}.pf-map .pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#ffb 0px 0px 8px 0px;box-shadow:#ffb 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target),.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#58100d 0px 0px 8px 0px;box-shadow:#58100d 0px 0px 8px 0px;background-color:#58100d}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body,.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body{background-color:#58100d}.pf-map .pf-system-locked .pf-system-sec{cursor:default !important}.pf-map .pf-system-locked .pf-system-body{cursor:default !important}.pf-map .pf-system-locked .fa-lock{color:#63676a !important;display:inline-block !important}.pf-map .pf-system-debug{position:absolute;color:#fff;font-size:10px;line-height:22px;text-align:center;pointer-events:none;z-index:500}.pf-map .pf-map-endpoint-source,.pf-map .pf-map-endpoint-target{z-index:90}.pf-map .pf-map-endpoint-source svg,.pf-map .pf-map-endpoint-target svg{overflow:visible}.pf-map .pf-map-endpoint-source svg circle,.pf-map .pf-map-endpoint-target svg circle{-webkit-transition:stroke 0.18s ease-out,fill 0.18s ease-out;transition:stroke 0.18s ease-out,fill 0.18s ease-out}.pf-map .pf-map-endpoint-source svg *,.pf-map .pf-map-endpoint-target svg *{stroke:#63676a;stroke-width:2;fill:#3c3f41;cursor:pointer}.pf-map .pf-map-endpoint-source:hover circle,.pf-map .pf-map-endpoint-target:hover circle{stroke:#e28a0d !important}.pf-map .pf-map-endpoint-source.jsplumb-hover,.pf-map .pf-map-endpoint-target.jsplumb-hover{z-index:95}.pf-map .pf-map-endpoint-source.jsplumb-dragging circle,.pf-map .pf-map-endpoint-target.jsplumb-dragging circle{stroke:#e28a0d}.pf-map .jsplumb-endpoint-drop-allowed circle{stroke:#5cb85c !important;fill:#5cb85c !important}.pf-map .jsplumb-endpoint-drop-forbidden circle{stroke:#a52521 !important;fill:#a52521 !important}.pf-map svg.jsplumb-connector{cursor:pointer;stroke-linecap:round;-webkit-transition:stroke 0.18s ease-out;transition:stroke 0.18s ease-out;will-change:all}.pf-map svg.jsplumb-connector path{-webkit-transition:stroke 0.18s ease-out;transition:stroke 0.18s ease-out}.pf-map svg.jsplumb-connector path:nth-child(2){stroke:#3c3f41}.pf-map svg.jsplumb-connector path:first-child{stroke:#63676a}.pf-map svg.jsplumb-connector.jsplumb-hover{z-index:80;filter:drop-shadow(-3px 3px 4px rgba(0,0,0,0.3))}.pf-map svg.jsplumb-connector.jsplumb-hover:not(.pf-map-connection-jumpbridge):not(.pf-map-connection-abyssal) path:first-child{stroke:#eaeaea}.pf-map svg.jsplumb-connector.jsplumb-hover.pf-map-connection-jumpbridge path:nth-child(2),.pf-map svg.jsplumb-connector.jsplumb-hover.pf-map-connection-abyssal path:nth-child(2){stroke:#eaeaea}.pf-map svg.jsplumb-connector.jsplumb-dragging{-webkit-transition:opacity 0.18s ease-out;transition:opacity 0.18s ease-out;opacity:0.4;z-index:80}.pf-map svg.pf-map-connection-abyssal{z-index:40}.pf-map svg.pf-map-connection-abyssal path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-abyssal path:nth-child(2){stroke:#5a225a}.pf-map svg.pf-map-connection-abyssal:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-abyssal:hover path:nth-child(2){stroke:#eaeaea}.pf-map svg.pf-map-connection-jumpbridge{z-index:50}.pf-map svg.pf-map-connection-jumpbridge path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge path:nth-child(2){stroke:#568a89}.pf-map svg.pf-map-connection-jumpbridge:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge:hover path:nth-child(2){stroke:#eaeaea}.pf-map svg.pf-map-connection-stargate{z-index:60}.pf-map svg.pf-map-connection-stargate path:first-child{stroke:#63676a}.pf-map svg.pf-map-connection-stargate path:nth-child(2){stroke:#313966}.pf-map svg.pf-map-connection-stargate:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-fresh,.pf-map svg.pf-map-connection-wh-reduced,.pf-map svg.pf-map-connection-wh-critical,.pf-map svg.pf-map-connection-wh-eol{z-index:70}.pf-map svg.pf-map-connection-wh-eol path:first-child{stroke:#d747d6}.pf-map svg.pf-map-connection-wh-eol:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-reduced path:nth-child(2){stroke:#e28a0d}.pf-map svg.pf-map-connection-wh-critical path:nth-child(2){stroke:#a52521}.pf-map svg.pf-map-connection-active{filter:drop-shadow(0px 0px 3px #ffb)}.pf-map .pf-map-connection-overlay{padding:1px 4px;font-size:10px;z-index:1020;background-color:#3c3f41;color:#adadad;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-map .frig{background-color:#f0ad4e;color:#1d1d1d}.pf-map .mass{background-color:#a52521;color:#eaeaea}.pf-map .eol{background-color:#3c3f41;color:#d747d6}.pf-map .pf-map-connection-arrow-overlay{stroke:#313335;fill:#5cb85c}.pf-map .pf-map-connection-diamond-overlay{stroke:#313335;fill:#d9534f;animation-name:pfPulseDanger;animation-duration:4s;animation-iteration-count:infinite}.pf-map .pf-map-connection-small-overlay{filter:blur(0px);-webkit-font-smoothing:antialiased;font-family:Arial, sans-serif;padding:2px;font-size:9.5px;line-height:100%;z-index:1020;background-color:#3c3f41;color:#adadad;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.3);box-shadow:0 3px 6px rgba(0,0,0,0.3)}.ui-dialog-content label,.ui-dialog-content .editable-input .editable-checklist>div>label>span,.editable-input .ui-dialog-content .editable-checklist>div>label>span{min-width:60px}.dropdown-menu{min-width:150px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:1050;will-change:opacity, top, left, transform}.dropdown-menu a{cursor:pointer}.dropdown-menu i{width:20px;pointer-events:none}.dropdown-menu .dropdown-menu{border-top-left-radius:0;border-bottom-left-radius:0;clip-path:inset(-12px -12px -12px 0px)}.dropdown-menu[role]>li:not(.disabled){position:relative}.dropdown-menu[role]>li:not(.disabled):before{content:'';position:absolute;background-color:#5cb85c;opacity:0;will-change:opacity,left;-webkit-transition:left 0.15s ease-out,opacity 0.15s ease-out;transition:left 0.15s ease-out,opacity 0.15s ease-out;width:2px;height:100%;left:0}.dropdown-menu[role]>li:not(.disabled):hover:before{left:-4px;opacity:1}.dropdown-menu>li.disabled{cursor:not-allowed;pointer-events:none}.dropdown-menu>li>a{padding:3px 8px}.pf-system-tooltip-inner{color:#adadad;padding:2px 4px;min-width:25px;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.pf-system-info-module h5{text-transform:capitalize}.pf-system-info-module .pf-system-info-name-cell{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.pf-system-info-module .pf-system-info-description-area{min-height:124px;padding:0}.pf-system-info-module .pf-system-info-description-area .pf-system-info-description-button{position:absolute;right:10px;top:13px}.pf-system-info-module .pf-system-info-description-area .pf-system-info-description{padding:10px;user-select:text}.pf-system-info-module .pf-system-info-description-area .note-toolbar kbd{padding:3px 4px}.pf-system-info-module .pf-system-info-description-area .note-toolbar .note-customBtn{float:right}.pf-system-info-module .pf-system-info-description-area .note-toolbar:before,.pf-system-info-module .pf-system-info-description-area .note-toolbar:after{content:" ";display:table}.pf-system-info-module .pf-system-info-description-area .note-toolbar:after{clear:both}.pf-system-info-module .pf-system-info-description>h2:first-child,.pf-system-info-module .pf-system-info-description>h3:first-child,.pf-system-info-module .note-editable>h2:first-child,.pf-system-info-module .note-editable>h3:first-child{margin-top:0 !important}.pf-system-info-module .pf-system-info-description h2:before,.pf-system-info-module .pf-system-info-description h3:before,.pf-system-info-module .note-editable h2:before,.pf-system-info-module .note-editable h3:before{font-family:"Font Awesome 5 Free";content:"\f105";font-weight:bold;display:inline-block;margin-right:3px}.pf-system-info-module .pf-system-info-description h2,.pf-system-info-module .note-editable h2{font-size:16px;margin:15px 0}.pf-system-info-module .pf-system-info-description h3,.pf-system-info-module .note-editable h3{font-size:14px;margin:10px 0}.pf-system-info-module .pf-system-info-description a:after,.pf-system-info-module .note-editable a:after{font-family:"Font Awesome 5 Free";content:"\f35d";font-size:70%;vertical-align:top;font-weight:bold;display:inline-block;margin-left:2px}.pf-system-info-module .pf-system-info-description hr,.pf-system-info-module .note-editable hr{border-top:1px solid #313335}.pf-system-info-module .pf-system-info-description blockquote,.pf-system-info-module .note-editable blockquote{padding:5px 10px;margin:0 0 10px;font-size:13px;border-left:3px solid #477372}.pf-system-info-module .pf-system-info-description ol,.pf-system-info-module .pf-system-info-description ul,.pf-system-info-module .note-editable ol,.pf-system-info-module .note-editable ul{padding-left:20px}.pf-system-info-module .pf-system-info-description ul,.pf-system-info-module .note-editable ul{list-style:disc}.pf-system-info-module .pf-system-info-description ol,.pf-system-info-module .note-editable ol{list-style:decimal}.modal.link-dialog .checkbox,.modal.link-dialog .editable-input .editable-checklist>div>label,.editable-input .modal.link-dialog .editable-checklist>div>label{display:none}.pf-system-signature-module .progress-label-right{margin-right:20px;vertical-align:middle;font-size:11px}.pf-system-signature-module .pf-system-progress-scanned{display:inline-block;margin-left:20px;width:calc(100% - 225px)}.pf-system-signature-module .pf-system-progress-scanned .progress{margin-bottom:3px}.pf-system-signature-module .pf-sig-table-clear-button{will-change:opacity, transform;display:none;color:#a52521}.pf-system-signature-module .pf-sig-table{font-size:10px}.pf-system-signature-module .pf-sig-table .pf-sig-table-edit-name-input{text-transform:uppercase}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline{display:inline}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline .control-group{display:inline}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline .control-group .editable-input{display:inline}.pf-system-signature-module .pf-sig-table .pf-editable-description{width:100%;background-color:#2b2b2b;max-height:50px;font-size:11px;line-height:14px;padding:3px 6px}.pf-system-signature-module .pf-sig-table-secondary th{pointer-events:none}.pf-system-signature-module .pf-sig-table-secondary th:after{display:none !important}.pf-system-signature-module .pf-sig-table-secondary th.pf-table-counter-cell{color:transparent}.pf-system-graph-module .pf-system-graph{position:relative;width:100%;height:100px;display:flex;justify-content:center;align-items:center;-webkit-transition:height 0.18s ease-out;transition:height 0.18s ease-out}.pf-system-route-module .pf-system-route-table{width:100%;font-size:10px}.pf-system-route-module .pf-system-route-table td{text-transform:capitalize}.pf-system-route-module .pf-system-route-table td .pf-fake-connection{display:none;width:12px;height:3px;cursor:pointer}.pf-system-route-module .pf-system-route-table td .pf-fake-connection[data-disabled]{cursor:initial}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-frig{width:32px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-frig:after{left:4px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-preserve-mass{width:26px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-preserve-mass:after{content:"\f071";font-family:"Font Awesome 5 Free";font-style:normal;font-weight:bold;left:4px}.pf-system-route-module .pf-system-route-table td.pf-table-jump-cell .pf-fake-connection{display:inline-block}.pf-system-intel-module .pf-system-structure-table{font-size:10px}.pf-system-killboard-module .pf-system-killboard-label-recent{display:none}.pf-system-killboard-module .pf-system-killboard-list{padding-bottom:5px}.pf-system-killboard-module .pf-system-killboard-list>li{padding-left:0;overflow:visible;min-height:50px;will-change:transform, opacity, margin-left;-webkit-transition:padding-left 0.12s cubic-bezier(0.3, 0.8, 0.8, 1.7);transition:padding-left 0.12s cubic-bezier(0.3, 0.8, 0.8, 1.7)}.pf-system-killboard-module .pf-system-killboard-list>li h5{white-space:nowrap}.pf-system-killboard-module .pf-system-killboard-list>li h3{width:120px;display:inline-block}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-char{display:inline;width:32px;margin-top:9px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-char:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-corp,.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ally{display:inline;width:20px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-corp:hover,.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ally:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ship{width:50px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ship:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li:before{content:"\f054";font-family:"Font Awesome 5 Free";font-weight:bold;position:absolute;z-index:10;left:-18px;top:16px;color:#477372;opacity:0;will-change:opacity, left;-webkit-transition:all 0.12s ease-out;transition:all 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li:hover{padding-left:10px}.pf-system-killboard-module .pf-system-killboard-list>li:hover:before{opacity:1;left:-3px}.pf-system-killboard-module .pf-module-control-area{margin-bottom:0}.pf-connection-info-module>.row{display:flex;align-items:stretch;flex-wrap:wrap}.pf-connection-info-module .pf-connection-info-table{width:100%;font-size:10px}input,select{background-color:#313335;color:#adadad;border:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}input:focus,select:focus{border-color:#568a89}input:-webkit-autofill,select:-webkit-autofill{background-color:#313335 !important;-webkit-box-shadow:0 0 0 50px #313335 inset !important;box-shadow:0 0 0 50px #313335 inset !important;-webkit-text-fill-color:#adadad}input:-webkit-autofill:focus,select:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 50px #313335 inset !important;box-shadow:0 0 0 50px #313335 inset !important;-webkit-text-fill-color:#adadad}input[disabled]::-moz-placeholder,select[disabled]::-moz-placeholder{color:transparent;opacity:1}input[disabled]:-ms-input-placeholder,select[disabled]:-ms-input-placeholder{color:transparent}input[disabled]::-webkit-input-placeholder,select[disabled]::-webkit-input-placeholder{color:transparent}input.pf-select2,select.pf-select2{height:32px;padding:6px 12px}input[type='number']::-webkit-inner-spin-button,input[type='number']::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;display:none}input[type='file']::-webkit-file-upload-button{background-color:transparent;border:none;color:#63676a;outline:none}textarea{min-height:32px;max-height:400px;resize:vertical}fieldset[disabled] .form-control{color:#63676a}fieldset[disabled] .form-control::-moz-placeholder{color:transparent;opacity:1}fieldset[disabled] .form-control:-ms-input-placeholder{color:transparent}fieldset[disabled] .form-control::-webkit-input-placeholder{color:transparent}fieldset[disabled] .input-icon-left .fa-stack i:last-child,fieldset[disabled] .input-icon-right .fa-stack i:last-child{color:#3c3f41}#select2-pf-map-dialog-edit-icon-select-container,#select2-pf-map-dialog-new-icon-select-container,#select2-pf-map-dialog-new-icon-select-results,#select2-pf-map-dialog-edit-icon-select-results,.pf-form-icon-field{font-family:"Font Awesome 5 Free";font-weight:bold}#select2-pf-map-dialog-edit-icon-select-container option,#select2-pf-map-dialog-new-icon-select-container option,#select2-pf-map-dialog-new-icon-select-results option,#select2-pf-map-dialog-edit-icon-select-results option,.pf-form-icon-field option{font-family:inherit;font-weight:inherit}.input-icon-left:not(.input-icon-right) .fa-stack:first-child{left:14px}.input-icon-right:not(.input-icon-left) .fa-stack:first-child{right:14px}.input-icon-left.input-icon-right .fa-stack:first-child{left:14px}.input-icon-left.input-icon-right .fa-stack:nth-child(2){right:14px}.input-icon-left .fa-stack,.input-icon-right .fa-stack{position:absolute;top:4px}.input-icon-left .fa-stack i:first-child,.input-icon-right .fa-stack i:first-child{color:#63676a}.input-icon-left .fa-stack i:last-child,.input-icon-right .fa-stack i:last-child{color:#313335}.btn.btn-fake{border:none;text-align:left;cursor:default;opacity:1 !important;color:#63676a !important;background-color:transparent !important}.btn .btn-progress{position:absolute;display:block;height:100%;background-color:rgba(92,184,92,0.2);max-width:100%;width:0;top:0;left:0;overflow:hidden;line-height:30px;color:#f0ad4e;font-size:10px;text-align:left;-webkit-transition:width 0.1s linear;transition:width 0.1s linear}.pf-form-dropzone{border:2px dashed #2b2b2b;height:100px;background-color:#353739;text-align:center;font-size:20px;line-height:100px;margin:15px 0;color:#2b2b2b;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:color 0.18s ease-out,border-color 0.18s ease-out;transition:color 0.18s ease-out,border-color 0.18s ease-out}.pf-form-dropzone:hover{color:#568a89;border-color:#568a89;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}.toggle.btn:active{box-shadow:none}.pf-form-field-char-count{display:block;margin-top:10px}.pf-icon{display:inline-block}.pf-icon.disabled{opacity:0.5;color:#63676a}.pf-icon-dotlan,.pf-icon-anoik{position:relative;display:inline-block;width:17px;height:17px;opacity:0.8;margin:-5px 0px 0 10px}.pf-icon-dotlan:after{content:'';position:absolute;left:0;right:0;height:17px;width:17px;margin-top:4px;background:url('data:image/png;base64,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') no-repeat}.pf-icon-anoik:after{content:'';position:absolute;left:0;right:0;height:17px;width:17px;margin-top:4px;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURRoQEB4PERwRCx0SDRoTDSQQDiERDhgUExwTEx4UDyQUEiAWEiYVDSoUDigUFC4TEB0YEiIXEyAaFScYFiQZFSkYEi0XEzEWEzQXECAcGyYbGCoaGC4ZGSIdGDQZFyIeHSUeFS0cFiwcGjEbFiEgGiUfGioeFikeGjEeEzQdGTEfGTodFjkdGiwhHS4hGTUfHyojGTEhHiUlHjcgGykkHjMiGy8jIEIfGzkiHT8hGj4hHzsjGjkjIzEmIjMmHjUlIycpJTclHi8oHjwkIC4oI0MlHUIlIj4nIj0nJkglIjspIkEoHzIsJjYrJzsqJzkrI0wnHSwvLDAvKEcpIUYpJjYuJEAsIT8sJUMrJjouKjYwKkwtJUstKj8xKUcvKkYvLz4yLkIxLkQxKjo0LkYyJlMuKEsxKD01Ki85NFExKVAyL0I2MlgxJk00MEU3Ljo6Mkk2Lz85M0k3NFgzMlU2Lk45LVY3ND8+OEo8M007OU87NFQ6NUk9OVM6OkU/OUc/NERBNWI6L01BPUREPVpBQVxCPVNFPElJQVNGQldFQllFPk9IQlJJP0dNRHdDNE9ORlVOSF9MSVdPRGZLRVxPTWNOR1RTRlNTS09VTGBRR2RTRG1STGBYUWZXVFZcUmdYTmxXT15cUXBYXHRYUnBbTmhfVm1iUnpeWF9mXHVgWHFhX3JiWWdmXWxnVXhmV35pYXZtY31saYZqZHJwZINtVGxyZ2Z0aYBuX3tyYIRvZ2x8cYV1cX94bYh2Z4t1bYF5Z3Z8c5J2cop8ZY99bZZ7epN+dYiCdZ97d4WEfJOAfHmLf5CHdYaLgJqHeJaKc4KPfZeLeaCIgJ+KdaGJh5KPhZuVgo2ZiZKYjp2YjaqVja6XiKiag46jkrWYlbOdh6+elbWdlqiij8Gcl7ulj7mllaSslb2noLOsmayxo8ippLqyl6e3qMewq8K8p8i9sbnEttK/uszHtcXTx9vQsN/Nx+zQwd/ZxN/ez/Db1e7hvtjn4fPx5ub17P7w6vv++////59V2N4AAAE/SURBVHjaADIBzf4AElERERpMi3GLi2BZNQ0ODgUAGQkRNEQ9Wlp+T2CwVyEWFg0ABBE0CSBai5yCWXyfiFczDQ0AEjICNmOPs8rYknjDiu5fIyMAJREURFWPlqj+18beqtOKSCkABBAnLUSeb5r71ZnZxa97WCMAAiUlGkSHh8Kl6smv6aebeywAAhE0RD02cSqtYpP0vmJ7WEYAAhEaNi00EyIFa6l6WDVDajkAAgkRLRoUCgw1KpFXWDNHXDoAAggJCREGFE4cLE5XYjNYW0YABAACAgoJBgY2TiFXQ0czWFMAAggAAhEJFBQnKk5iR0NFXHQAAAAAAhEUCicxKjM1VyMsN1QAAgkGChsnKkFBSmJXS0VFUGwAAgIBBgoTGyIxISEjQx4YXEYAAgIAAgkbGxshIzUzDxgrQywDAKFaTfFe+Wg9AAAAAElFTkSuQmCC') no-repeat}.modal-content h2,.panel-body h2{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;letter-spacing:0;font-size:14px;margin:20px 0;line-height:normal}.modal-content h2.pf-dynamic-area,.modal-content h4.pf-dynamic-area,.panel-body h2.pf-dynamic-area,.panel-body h4.pf-dynamic-area{min-height:0;margin:0 0 10px 0}.modal-content h2.pf-dynamic-area>img,.modal-content h4.pf-dynamic-area>img,.panel-body h2.pf-dynamic-area>img,.panel-body h4.pf-dynamic-area>img{margin:-10px 5px -10px -10px;width:35px}.modal-content h2[data-toggle="collapse"],.modal-content h4[data-toggle="collapse"],.panel-body h2[data-toggle="collapse"],.panel-body h4[data-toggle="collapse"]{cursor:pointer}.modal-content h2[data-toggle="collapse"]:hover:after,.modal-content h4[data-toggle="collapse"]:hover:after,.panel-body h2[data-toggle="collapse"]:hover:after,.panel-body h4[data-toggle="collapse"]:hover:after{color:#e28a0d !important}.modal-content h2[data-toggle="collapse"]:after,.modal-content h4[data-toggle="collapse"]:after,.panel-body h2[data-toggle="collapse"]:after,.panel-body h4[data-toggle="collapse"]:after{content:"\f078";font-family:"Font Awesome 5 Free";font-style:normal;font-weight:bold;font-size:13px;padding-right:10px;position:absolute;color:#e28a0d;top:10px;right:6px;will-change:transform, color}.modal-content h2[data-toggle="collapse"].collapsed:after,.modal-content h4[data-toggle="collapse"].collapsed:after,.panel-body h2[data-toggle="collapse"].collapsed:after,.panel-body h4[data-toggle="collapse"].collapsed:after{top:13px;right:5px;color:#63676a;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.modal-content .dataTables_wrapper+.alert{margin-top:10px}.modal-content .dataTable,.modal-content .table{font-size:10px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.modal-content hr{margin:5px 0 15px 0;border-color:#63676a}.modal-content .well{margin-bottom:0}.modal-content .well .list-inline{margin-bottom:0}.modal-content .pf-wizard-navigation{margin:0}.modal-content .pf-wizard-navigation li:not(:last-child):before{border-top:1px solid #63676a;content:"";display:block;font-size:0;overflow:hidden;position:relative;top:12px;left:71px;right:1px;width:100%}.modal-content .pf-wizard-navigation li.finished:before{-moz-border-image:-moz-linear-gradient(left, #375959,#375959) 1 1%;-moz-border-image:linear-gradient(to right, #375959,#375959) 1 1%;-o-border-image:linear-gradient(to right, #375959,#375959) 1 1%;-webkit-border-image:-webkit-linear-gradient(left, #375959,#375959) 1 1%;-webkit-border-image:linear-gradient(to right, #375959,#375959) 1 1%;border-image:-moz-linear-gradient(left, #375959,#375959) 1 1%;border-image:-webkit-linear-gradient(left, #375959,#375959) 1 1%;border-image:linear-gradient(to right, #375959,#375959) 1 1%;border-bottom:0}.modal-content .pf-wizard-navigation li.active:before{-moz-border-image:-moz-linear-gradient(left, #4f9e4f,#63676a) 1 1%;-moz-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;-o-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;-webkit-border-image:-webkit-linear-gradient(left, #4f9e4f,#63676a) 1 1%;-webkit-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;border-image:-moz-linear-gradient(left, #4f9e4f,#63676a) 1 1%;border-image:-webkit-linear-gradient(left, #4f9e4f,#63676a) 1 1%;border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;border-bottom:0}.modal-content .pf-wizard-navigation li>h6{color:#63676a;font-size:11px;margin:5px}.modal-content .pf-wizard-navigation li a:hover+h6{color:#adadad}.modal-content .pf-wizard-navigation li.active a:not(.btn-danger)+h6{color:#adadad}#pf-settings-dialog .form-group .btn-sm,#pf-settings-dialog .form-group .btn-group-sm>.btn{padding:4px 7px 3px}#pf-settings-dialog #pf-dialog-captcha-wrapper{margin:0;padding:3px 0}#pf-map-dialog #pf-map-dialog-character-select,#pf-map-dialog #pf-map-dialog-corporation-select,#pf-map-dialog #pf-map-dialog-alliance-select{width:535px}#pf-route-dialog #pf-route-dialog-map-select{width:300px !important}#pf-shortcuts-dialog td kbd+i{width:16px}#pf-shortcuts-dialog td kbd:last-of-type+i{display:none}#pf-manual-scrollspy{position:relative;height:700px;overflow:auto}.pf-system-dialog-select{width:300px !important}#pf-task-dialog .pf-task-dialog-status{min-height:inherit}#pf-map-info-logs{margin-bottom:10px}#pf-stats-dialog .pf-dynamic-area{margin-bottom:10px}#pf-structure-dialog #pf-structure-dialog-corporation-select,#pf-structure-dialog #pf-structure-dialog-type-select{width:267px !important}#pf-connection-info-dialog #pf-connection-info-dialog-type-select,#pf-connection-info-dialog #pf-connection-info-dialog-character-select{width:310px !important}.pf-jump-info-dialog blockquote{margin-top:15px;margin-bottom:5px}.pf-changelog-dialog .pf-dynamic-message-container{margin-bottom:20px}.pf-system-effect-dialog .dataTable{border-collapse:collapse}.pf-credits-dialog .pf-credits-logo-background{overflow:visible;background:url("../../img/logo_bg.png");background-size:cover;padding:20px;margin-bottom:20px}.pf-credits-dialog #pf-logo-container{width:355px;height:366px;margin:0 auto}.pf-credits-dialog .pf-dynamic-area{min-height:50px}.pf-credits-dialog .dl-horizontal{display:inline-block;width:48%}.pf-credits-dialog .btn{padding:0}.pf-credits-dialog blockquote{font-size:14px}.pf-log-graph{height:100px;width:100%}.timeline{list-style:none;position:relative}.timeline:before{top:0;bottom:0;position:absolute;content:" ";width:1px;left:50%;margin-top:20px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRmOWU0ZiIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNjM2NzZhIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4f9e4f),color-stop(25%, #63676a));background-image:-moz-linear-gradient(top, #4f9e4f,#63676a 25%);background-image:-webkit-linear-gradient(top, #4f9e4f,#63676a 25%);background-image:linear-gradient(to bottom, #4f9e4f,#63676a 25%)}.timeline>li{margin-bottom:20px;position:relative}.timeline>li.timeline-first .timeline-title{color:#4f9e4f}.timeline>li.timeline-first .timeline-badge{background-color:#4f9e4f}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-panel{width:47%;float:left;border:1px solid #313335;padding:8px;position:relative;background-color:#313335;font-size:11px;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.timeline>li>.timeline-panel:before{content:" ";position:absolute;top:10px;right:-8px;display:inline-block;border-top:7px solid transparent;border-left:7px solid #63676a;border-right:0 solid #63676a;border-bottom:7px solid transparent}.timeline>li>.timeline-panel:after{content:" ";position:absolute;top:10px;right:-8px;display:inline-block;border-top:7px solid transparent;border-left:7px solid #63676a;border-right:0 solid #63676a;border-bottom:7px solid transparent}.timeline>li>.timeline-badge{color:#2b2b2b;width:23px;height:23px;line-height:23px;text-align:center;position:absolute;top:6px;left:50%;margin-left:-11px;background-color:#63676a;z-index:100;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%}.timeline>li>.timeline-badge>i{vertical-align:middle}.timeline>li.timeline-inverted>.timeline-panel{float:right}.timeline>li.timeline-inverted>.timeline-panel:before{border-left-width:0;border-right-width:7px;left:-8px;right:auto}.timeline>li.timeline-inverted>.timeline-panel:after{border-left-width:0;border-right-width:8px;left:-9px;right:auto}.timeline-title{margin-top:0;color:inherit}.timeline-body>hr{display:none}.timeline-body>hr ~ *{display:none}.timeline-body>p,.timeline-body>ul{margin-bottom:0;list-style-type:disc;margin-left:15px}.timeline-body>p+p{margin-top:5px}.timeline-footer>.timeline-title{margin-top:10px;margin-bottom:0}@media (max-width: 1200px){ul.timeline:before{left:40px}ul.timeline>li>.timeline-panel{width:calc(100% - 62px)}ul.timeline>li>.timeline-badge{left:29px;margin-left:0;top:6px}ul.timeline>li>.timeline-panel{float:right}ul.timeline>li>.timeline-panel:before{border-left-width:0;border-right-width:7px;left:-8px;right:auto}ul.timeline>li>.timeline-panel:after{border-left-width:0;border-right-width:7px;left:-8px;right:auto}}.popover{z-index:1060;max-width:600px}.popover .arrow{pointer-events:none}.popover .popover-title{text-transform:capitalize;font-family:"Arial","Oxygen Bold","Helvetica Neue",Helvetica,sans-serif;font-weight:bold}.popover .popover-content{font-family:"Arial","Oxygen Bold","Helvetica Neue",Helvetica,sans-serif}.popover img{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.popover h4{color:#adadad}.popover table{color:#adadad;line-height:16px;font-size:11px}.popover table td{padding:0 4px;vertical-align:middle !important}.popover .select2-container{margin-top:-1px;margin-left:-1px}.pf-popover-small .popover-title{padding:3px 6px}.pf-popover-small .popover-content{padding:6px 1px 3px}.pf-popover{display:initial}.pf-popover .popover-content{padding:0}.pf-popover h6{white-space:nowrap;margin-right:50px}.pf-popover h6:before,.pf-popover h6:after{content:" ";display:table}.pf-popover h6:after{clear:both}.pf-popover .well{margin-top:7px;margin-bottom:10px}.pf-popover .list-group{margin:0}.pf-popover .list-group .list-group-item{color:#313335}.pf-popover .list-group .list-group-item:hover{color:#1d1d1d}.pf-popover .list-group .list-group-item.disabled{background-color:#3c3f41;color:#63676a;cursor:not-allowed}.pf-popover .list-group .list-group-item img{width:30px;margin:-8px 10px -6px -8px;border-radius:0}.pf-popover .list-group .list-group-item i{margin-right:20px}.pf-popover-character .table>tbody>tr>td{border:none;white-space:nowrap}.pf-popover-character .table>tbody>tr>td:first-child+td{padding:0 5px}.pf-popover-character .well{margin-bottom:0}.ribbon-wrapper{width:72px;height:88px;overflow:hidden;position:absolute;top:-3px;right:-3px;pointer-events:none}.ribbon{font:bold 12px "Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;color:#2b2b2b;text-align:center;text-shadow:rgba(255,255,255,0.2) 0px 1px 0px;position:relative;padding:3px 0;left:-4px;top:16px;width:99px;-webkit-box-shadow:2px 3px 3px rgba(0,0,0,0.2);box-shadow:2px 3px 3px rgba(0,0,0,0.2);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ribbon:before,.ribbon:after{content:"";border-left:3px solid transparent;border-right:3px solid transparent;position:absolute;bottom:-3px}.ribbon.ribbon-default{color:#adadad;background-color:#353739;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJkMzAzMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzJhMmIyZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2d3031),color-stop(100%, #2a2b2d));background-image:-moz-linear-gradient(top, #2d3031,#2a2b2d);background-image:-webkit-linear-gradient(top, #2d3031,#2a2b2d);background-image:linear-gradient(to bottom, #2d3031,#2a2b2d)}.ribbon.ribbon-default:before,.ribbon.ribbon-default:after{border-top:3px solid #000}.ribbon.ribbon-green{background-color:#5cb85c;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzUxYjM1MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRhOTQ0YSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #51b351),color-stop(100%, #4a944a));background-image:-moz-linear-gradient(top, #51b351,#4a944a);background-image:-webkit-linear-gradient(top, #51b351,#4a944a);background-image:linear-gradient(to bottom, #51b351,#4a944a)}.ribbon.ribbon-green:before,.ribbon.ribbon-green:after{border-top:3px solid #285028}.ribbon.ribbon-orange{background-color:#e28a0d;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ODEwYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2I0NmQwYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4810c),color-stop(100%, #b46d0b));background-image:-moz-linear-gradient(top, #d4810c,#b46d0b);background-image:-webkit-linear-gradient(top, #d4810c,#b46d0b);background-image:linear-gradient(to bottom, #d4810c,#b46d0b)}.ribbon.ribbon-orange:before,.ribbon.ribbon-orange:after{border-top:3px solid #6c4107}.ribbon.ribbon-red{background-color:#d9534f;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2M5MzAyYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2E4MjgyNCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c9302c),color-stop(100%, #a82824));background-image:-moz-linear-gradient(top, #c9302c,#a82824);background-image:-webkit-linear-gradient(top, #c9302c,#a82824);background-image:linear-gradient(to bottom, #c9302c,#a82824)}.ribbon.ribbon-red:before,.ribbon.ribbon-red:after{border-top:3px solid #541412}.ribbon.ribbon-blue{background-color:#428bca;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzM3ODRjNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzJkNWM4NSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3784c5),color-stop(100%, #2d5c85));background-image:-moz-linear-gradient(top, #3784c5,#2d5c85);background-image:-webkit-linear-gradient(top, #3784c5,#2d5c85);background-image:linear-gradient(to bottom, #3784c5,#2d5c85)}.ribbon.ribbon-blue:before,.ribbon.ribbon-blue:after{border-top:3px solid #1a344c}.ribbon:before{left:0}.ribbon:after{right:0}.pf-loading-bars-container{position:relative;z-index:4;margin:0 auto;left:5px;right:19px;width:70px;height:50px;list-style:none}.pf-loading-bars-container .pf-loading-bars-loader{position:absolute;z-index:3;margin:0 auto;left:0;right:0;top:50%;margin-top:-19px;width:56px;height:37px;list-style:none}.pf-loading-bars-container .pf-loading-bars-loader li{background-color:#5cb85c;width:6px;height:6px;float:right;margin-right:3px !important;-webkit-box-shadow:0px 12px 6px rgba(0,0,0,0.2);box-shadow:0px 12px 6px rgba(0,0,0,0.2)}.pf-loading-bars-container .pf-loading-bars-loader li:first-child{-webkit-animation:cssload-loadbars 1.75s cubic-bezier(0.645, 0.045, 0.355, 1) infinite 0s;animation:cssload-loadbars 1.75s cubic-bezier(0.645, 0.045, 0.355, 1) infinite 0s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(2){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -0.35s;animation:cssload-loadbars 1.75s ease-in-out infinite -0.35s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(3){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -0.7s;animation:cssload-loadbars 1.75s ease-in-out infinite -0.7s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(4){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.05s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.05s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(5){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.4s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.4s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(6){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.75s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.75s}@-webkit-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@-moz-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@-ms-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}.pf-landing-sticky-panel{position:fixed;min-width:100px;border-radius:5px;padding:7px;box-shadow:0 4px 10px rgba(0,0,0,0.4);z-index:100;background-color:rgba(43,43,43,0.7)}.pf-landing-sticky-panel h4{margin:5px 0 10px 0}.pf-landing-sticky-panel ul{margin-bottom:0}.pf-landing-sticky-panel ul+h4{margin-top:10px}#pf-landing-server-panel{top:50px;left:10px}#pf-landing-admin-panel{bottom:10px;right:10px}.panel-heading.note-toolbar{background-color:#313335}.panel-heading.note-toolbar .dropdown-toggle>i+span{margin-left:3px}.panel-heading.note-toolbar .dropdown-menu>.note-btn-group:first-child{margin-bottom:3px}.note-editor.note-frame{border:none;background-color:transparent;margin-bottom:0}.note-editor.note-frame .note-editing-area .note-editable{color:#63676a;background-color:transparent;will-change:height;border:1px solid transparent}.note-editor.note-frame .note-editing-area .note-editable.has-error{border-color:#d9534f}.note-editor.note-frame .note-statusbar{background-color:#313335;padding:1px 0;border-top:0}.note-editor.note-frame .note-statusbar .note-resizebar:hover .note-icon-bar{border-top:1px solid #e28a0d}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{border-top:1px solid #63676a;-webkit-transition:border-top 0.15s ease-out;transition:border-top 0.15s ease-out}.youtube{background-position:center;background-repeat:no-repeat;position:relative;display:inline-block;overflow:hidden;transition:all 200ms ease-out;cursor:pointer}.youtube .play{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAERklEQVR4nOWbTWhcVRTHb1IJVoxGtNCNdal2JYJReC6GWuO83PM/59yUS3FRFARdFlwYP1CfiojQWt36sRCUurRIdVFXIn41lAoVdRGrG1M01YpKrWjiYmaSl8ybZJL3cd+YA//NLObd3++eO8x79z5jSq5Gw+8kov0AP8vMR5l1BtBZQM4B8ks75wCdZdYZZj5qLZ4hov2Nht9Z9vhKKSIaB/gI4M4w62KeAO6Mte4lYOq20FxrlqqOibhHmeWbvNC9ZfDX1mLae391aN6limO/gwgvAPJbWeAZuSDingdwXTBw7/0IsyaA/Fkh+KqOkD+YNfHej1QKD+y7iVlOhgLvFqFfNJvNGyuBJ+KDAF8MDd0tgS8y64OlgSdJMsysL4cG7SOHkyQZLhTee7+d2R2rAVy/S+Jd7/32ouBHAP4gNNRGQyTHc/84NhqNywZp5rvjjnnvt21aABFeCQ+RLwAf2hQ8s7sv9OCLk6AHNgQvIrvbfzKCD76g/O6cu7lf/iER/aQGgy448pExZmhdegAPhR9sObFWH1gT3lp7DaA/5bkIgJhZPgsNmz02novj+KqeApj1ubwXWe4kdyeznAgNvTpE/HQmvKqOMeuFogTUVQSRno+iaLRLAJF7uIgL9O4ubgL8aWgB7S44mNX+35YpICUiAvS9sBLkq1WzT+NFffl6AuoiApi6NT37h6sWkBIRZGkQ8YtLgyji6e1mBYTqCEBPG2Naz+0BWQgtoGoRgCzEsd9hAN1X5BfnFZASUfrSAFQNsyZ1FJASUVpHiLinDJG8U2cBZYogkrcNs5waBAGdstbeU9zdqpw0gPwwSAI6VUxHyFlDpOcHUUBBIuYNs14aZAE5RVwyzPr3/0EAEY0TyfGNjBWQvwZ +CTSbehfAH29mrID8bET0+0EUkAd8WYDOmqJ3ecsG30yr9wqRfm6Y+a1BEFDEjHfHvWmY9ck6CygHvBVr8Xhtb4ZE5HZA3y8DvBNA1TjnrmXWf+sioMwZX5V/VHXMGGMMoKdDCxCRvRWBdzKzdHEO+EisilbPyopHYqp6S9UCAsz4iojI7hUDAtyXVQgIDd6KnOoaWNkbI6FaPSuZGyMArsi7MZoloB4zviI/Nhr3X95jltwTRQmoIfgisy5ai+me67OI7fE4nrqjrqfK1t0eby0FPRB6oGVlchL3rgnfrq19RKbVBdhV9IOSwJmfmJi4vi/4ThERitwyCxVAFqydshuCX5awhQ9KtmuIWd8IDZED/nXT77rvVVv6sHRKwjYi91poqP7Dr+Y6JJ1VSZIMA3wkPNy6bX+o8Bcm0sXMdwM8Fxo0A3xORPaWBp6uPXsmbxCRD0NDL0dOANhVCXy6iAjMcjbcrMt3RITKwdMVRdFo+y5yvkL4eWZ+zHt/ZVD4dEVRNGotpst+dZZZH8k86lqn2pIvT/eqrNfn2xuyqYPZ8mv7s8pfn/8Pybm4TIjanscAAAAASUVORK5CYII=") no-repeat center center;background-size:64px 64px;position:absolute;height:100%;width:100%;opacity:.8;filter:alpha(opacity=80);transition:all 0.2s ease-out}.youtube .play:hover{opacity:1;filter:alpha(opacity=100)} + * ======================================================================== */.checkbox label .toggle,.editable-input .editable-checklist>div>label label .toggle,.editable-input .editable-checklist>div>label>span .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}.toggle{position:relative;overflow:hidden}.toggle input[type="checkbox"]{display:none}.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left 0.18s ease-in-out;-webkit-transition:left 0.18s ease-in-out;-moz-user-select:none;-webkit-user-select:none}.toggle.off .toggle-group{left:-100%}.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0}.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px;background:#54585a}.toggle.btn{min-width:59px;min-height:34px}.toggle-on.btn{padding-right:24px}.toggle-off.btn{padding-left:24px}.toggle.btn-lg,.btn-group-lg>.toggle.btn{min-width:79px;min-height:45px}.toggle-on.btn-lg,.btn-group-lg>.toggle-on.btn{padding-right:31px}.toggle-off.btn-lg,.btn-group-lg>.toggle-off.btn{padding-left:31px}.toggle-handle.btn-lg,.btn-group-lg>.toggle-handle.btn{width:40px}.toggle.btn-sm,.btn-group-sm>.toggle.btn{min-width:50px;min-height:28px}.toggle-on.btn-sm,.btn-group-sm>.toggle-on.btn{padding-right:10px;padding-left:0}.toggle-off.btn-sm,.btn-group-sm>.toggle-off.btn{padding-left:10px;padding-right:0}.toggle.btn-xs,.btn-group-xs>.toggle.btn{min-width:35px;min-height:22px}.toggle-on.btn-xs,.btn-group-xs>.toggle-on.btn{padding-right:5px}.toggle-off.btn-xs,.btn-group-xs>.toggle-off.btn{padding-left:5px}.checkbox,.editable-input .editable-checklist>div>label{padding-left:20px}.checkbox label,.editable-input .editable-checklist>div>label label,.editable-input .editable-checklist>div>label>span{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.checkbox label::before,.editable-input .editable-checklist>div>label label::before,.editable-input .editable-checklist>div>label>span::before{content:"";display:inline-block;position:absolute;width:17px;height:17px;left:0;margin-left:-20px;border:1px solid #63676a;border-radius:3px;background-color:#313335;-webkit-transition:border 0.18s ease,color 0.18s ease,background-color 0.18s ease;transition:border 0.18s ease,color 0.18s ease,background-color 0.18s ease}.checkbox label::after,.editable-input .editable-checklist>div>label label::after,.editable-input .editable-checklist>div>label>span::after{font-family:"Font Awesome 5 Free";content:"\f00c";font-weight:bold;display:inline-block;position:absolute;width:16px;height:16px;left:0;top:0;opacity:0;transform:scale(2) rotateZ(-20deg);transition:all .18s ease-out;will-change:transform, opacity;margin-left:-20px;padding-left:3px;padding-top:1px;font-size:calc(100% - 1px);color:#adadad}.checkbox input[type="checkbox"],.editable-input .editable-checklist>div>label input[type="checkbox"],.checkbox input[type="radio"],.editable-input .editable-checklist>div>label input[type="radio"]{opacity:0;z-index:1;cursor:pointer}.checkbox input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after{font-family:"Font Awesome 5 Free";content:"\f00c"}.checkbox input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:checked+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after{transform:scale(1) rotateZ(0deg);opacity:1}.checkbox input[type="checkbox"]:indeterminate+label::after,.editable-input .editable-checklist>div>label input[type="checkbox"]:indeterminate+label::after,.editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox input[type="radio"]:indeterminate+label::after,.editable-input .editable-checklist>div>label input[type="radio"]:indeterminate+label::after,.editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{display:block;content:"";width:10px;height:3px;background-color:#555555;border-radius:2px;margin-left:-16.5px;margin-top:7px}.checkbox input[type="checkbox"]:disabled+label,.editable-input .editable-checklist>div>label input[type="checkbox"]:disabled+label,.editable-input .editable-checklist>div>label>input[type="checkbox"]:disabled+span,.checkbox input[type="radio"]:disabled+label,.editable-input .editable-checklist>div>label input[type="radio"]:disabled+label,.editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span{opacity:0.65}.checkbox input[type="checkbox"]:disabled+label::before,.editable-input .editable-checklist>div>label input[type="checkbox"]:disabled+label::before,.editable-input .editable-checklist>div>label>input[type="checkbox"]:disabled+span::before,.checkbox input[type="radio"]:disabled+label::before,.editable-input .editable-checklist>div>label input[type="radio"]:disabled+label::before,.editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span::before{background-color:#3c3f41;cursor:not-allowed}.checkbox.checkbox-circle label::before,.editable-input .editable-checklist>div>label.checkbox-circle label::before,.checkbox.checkbox-circle .editable-input .editable-checklist>div>label>span::before,.editable-input .checkbox.checkbox-circle .editable-checklist>div>label>span::before,.editable-input .editable-checklist>div>label.checkbox-circle .editable-checklist>div>label>span::before{border-radius:50%}.checkbox.checkbox-inline,.editable-input .editable-checklist>div>label.checkbox-inline{margin-top:0}.checkbox-primary input[type="checkbox"]:checked+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-primary input[type="radio"]:checked+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#375959;border-color:#375959}.checkbox-primary input[type="checkbox"]:checked+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-primary input[type="radio"]:checked+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-danger input[type="checkbox"]:checked+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-danger input[type="radio"]:checked+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#a52521;border-color:#a52521}.checkbox-danger input[type="checkbox"]:checked+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-danger input[type="radio"]:checked+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-info input[type="checkbox"]:checked+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-info input[type="radio"]:checked+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#316490;border-color:#316490}.checkbox-info input[type="checkbox"]:checked+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-info input[type="radio"]:checked+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-warning input[type="checkbox"]:checked+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-warning input[type="radio"]:checked+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#e28a0d;border-color:#e28a0d}.checkbox-warning input[type="checkbox"]:checked+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-warning input[type="radio"]:checked+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-success input[type="checkbox"]:checked+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:checked+span::before,.checkbox-success input[type="radio"]:checked+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:checked+span::before{background-color:#4f9e4f;border-color:#4f9e4f}.checkbox-success input[type="checkbox"]:checked+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:checked+span::after,.checkbox-success input[type="radio"]:checked+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:checked+span::after{color:#fff}.checkbox-primary input[type="checkbox"]:indeterminate+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-primary input[type="radio"]:indeterminate+label::before,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#375959;border-color:#375959}.checkbox-primary input[type="checkbox"]:indeterminate+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-primary input[type="radio"]:indeterminate+label::after,.checkbox-primary .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-primary .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-danger input[type="checkbox"]:indeterminate+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-danger input[type="radio"]:indeterminate+label::before,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#a52521;border-color:#a52521}.checkbox-danger input[type="checkbox"]:indeterminate+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-danger input[type="radio"]:indeterminate+label::after,.checkbox-danger .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-danger .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-info input[type="checkbox"]:indeterminate+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-info input[type="radio"]:indeterminate+label::before,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#316490;border-color:#316490}.checkbox-info input[type="checkbox"]:indeterminate+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-info input[type="radio"]:indeterminate+label::after,.checkbox-info .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-info .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-warning input[type="checkbox"]:indeterminate+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-warning input[type="radio"]:indeterminate+label::before,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#e28a0d;border-color:#e28a0d}.checkbox-warning input[type="checkbox"]:indeterminate+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-warning input[type="radio"]:indeterminate+label::after,.checkbox-warning .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-warning .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.checkbox-success input[type="checkbox"]:indeterminate+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::before,.checkbox-success input[type="radio"]:indeterminate+label::before,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:indeterminate+span::before{background-color:#4f9e4f;border-color:#4f9e4f}.checkbox-success input[type="checkbox"]:indeterminate+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="checkbox"]:indeterminate+span::after,.checkbox-success input[type="radio"]:indeterminate+label::after,.checkbox-success .editable-input .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after,.editable-input .checkbox-success .editable-checklist>div>label>input[type="radio"]:indeterminate+span::after{background-color:#fff}.radio{padding-left:20px}.radio label,.radio .editable-input .editable-checklist>div>label>span,.editable-input .radio .editable-checklist>div>label>span{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.radio label::before,.radio .editable-input .editable-checklist>div>label>span::before,.editable-input .radio .editable-checklist>div>label>span::before{content:"";display:inline-block;position:absolute;width:17px;height:17px;left:0;margin-left:-20px;border:1px solid #63676a;border-radius:50%;background-color:#313335;-webkit-transition:border 0.18s ease,color 0.18s ease;transition:border 0.18s ease,color 0.18s ease}.radio label::after,.radio .editable-input .editable-checklist>div>label>span::after,.editable-input .radio .editable-checklist>div>label>span::after{display:inline-block;position:absolute;content:" ";width:11px;height:11px;left:3px;top:3px;opacity:0;transform:scale(2) rotateZ(-20deg);transition:all .18s ease;will-change:transform, opacity;margin-left:-20px;border-radius:50%;background-color:#adadad;-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition:-webkit-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);-moz-transition:-moz-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);-o-transition:-o-transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33);transition:transform 0.18s cubic-bezier(0.8, -0.33, 0.2, 1.33)}.radio input[type="radio"]{opacity:0;z-index:1;cursor:pointer}.radio input[type="radio"]:checked+label::after,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:checked+span::after{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);opacity:1}.radio input[type="radio"]:disabled+label,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:disabled+span{opacity:0.65}.radio input[type="radio"]:disabled+label::before,.radio .editable-input .editable-checklist>div>label>input[type="radio"]:disabled+span::before,.editable-input .radio .editable-checklist>div>label>input[type="radio"]:disabled+span::before{cursor:not-allowed}.radio.radio-inline{margin-top:0}.radio-primary input[type="radio"]+label::after,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#375959}.radio-primary input[type="radio"]:checked+label::before,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#375959}.radio-primary input[type="radio"]:checked+label::after,.radio-primary .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-primary .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#375959}.radio-danger input[type="radio"]+label::after,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#a52521}.radio-danger input[type="radio"]:checked+label::before,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#a52521}.radio-danger input[type="radio"]:checked+label::after,.radio-danger .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-danger .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#a52521}.radio-info input[type="radio"]+label::after,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#316490}.radio-info input[type="radio"]:checked+label::before,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#316490}.radio-info input[type="radio"]:checked+label::after,.radio-info .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-info .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#316490}.radio-warning input[type="radio"]+label::after,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#e28a0d}.radio-warning input[type="radio"]:checked+label::before,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#e28a0d}.radio-warning input[type="radio"]:checked+label::after,.radio-warning .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-warning .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#e28a0d}.radio-success input[type="radio"]+label::after,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]+span::after,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]+span::after{background-color:#4f9e4f}.radio-success input[type="radio"]:checked+label::before,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::before,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]:checked+span::before{border-color:#4f9e4f}.radio-success input[type="radio"]:checked+label::after,.radio-success .editable-input .editable-checklist>div>label>input[type="radio"]:checked+span::after,.editable-input .radio-success .editable-checklist>div>label>input[type="radio"]:checked+span::after{background-color:#4f9e4f}input[type="checkbox"].styled:checked+label:after,.editable-input .editable-checklist>div>label>input[type="checkbox"].styled:checked+span:after,input[type="radio"].styled:checked+label:after,.editable-input .editable-checklist>div>label>input[type="radio"].styled:checked+span:after{font-family:"Font Awesome 5 Free";content:"\f00c"}input[type="checkbox"] .styled:checked+label::before,input[type="checkbox"] .editable-input .editable-checklist>div>label>.styled:checked+span::before,.editable-input input[type="checkbox"] .editable-checklist>div>label>.styled:checked+span::before,input[type="radio"] .styled:checked+label::before,input[type="radio"] .editable-input .editable-checklist>div>label>.styled:checked+span::before,.editable-input input[type="radio"] .editable-checklist>div>label>.styled:checked+span::before{color:#fff}input[type="checkbox"] .styled:checked+label::after,input[type="checkbox"] .editable-input .editable-checklist>div>label>.styled:checked+span::after,.editable-input input[type="checkbox"] .editable-checklist>div>label>.styled:checked+span::after,input[type="radio"] .styled:checked+label::after,input[type="radio"] .editable-input .editable-checklist>div>label>.styled:checked+span::after,.editable-input input[type="radio"] .editable-checklist>div>label>.styled:checked+span::after{color:#fff}@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("../../fonts/summernote.eot?dbafe969167589eda84514394d126413");src:url("../../fonts/summernote.eot?#iefix") format("embedded-opentype"),url("../../fonts/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("../../fonts/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:""}.note-icon-align-indent:before{content:""}.note-icon-align-justify:before{content:""}.note-icon-align-left:before{content:""}.note-icon-align-outdent:before{content:""}.note-icon-align-right:before{content:""}.note-icon-align:before{content:""}.note-icon-arrow-circle-down:before{content:""}.note-icon-arrow-circle-left:before{content:""}.note-icon-arrow-circle-right:before{content:""}.note-icon-arrow-circle-up:before{content:""}.note-icon-arrows-alt:before{content:""}.note-icon-arrows-h:before{content:""}.note-icon-arrows-v:before{content:""}.note-icon-bold:before{content:""}.note-icon-caret:before{content:""}.note-icon-chain-broken:before{content:""}.note-icon-circle:before{content:""}.note-icon-close:before{content:""}.note-icon-code:before{content:""}.note-icon-col-after:before{content:""}.note-icon-col-before:before{content:""}.note-icon-col-remove:before{content:""}.note-icon-eraser:before{content:""}.note-icon-font:before{content:""}.note-icon-frame:before{content:""}.note-icon-italic:before{content:""}.note-icon-link:before{content:""}.note-icon-magic:before{content:""}.note-icon-menu-check:before{content:""}.note-icon-minus:before{content:""}.note-icon-orderedlist:before{content:""}.note-icon-pencil:before{content:""}.note-icon-picture:before{content:""}.note-icon-question:before{content:""}.note-icon-redo:before{content:""}.note-icon-row-above:before{content:""}.note-icon-row-below:before{content:""}.note-icon-row-remove:before{content:""}.note-icon-special-character:before{content:""}.note-icon-square:before{content:""}.note-icon-strikethrough:before{content:""}.note-icon-subscript:before{content:""}.note-icon-summernote:before{content:""}.note-icon-superscript:before{content:""}.note-icon-table:before{content:""}.note-icon-text-height:before{content:""}.note-icon-trash:before{content:""}.note-icon-underline:before{content:""}.note-icon-undo:before{content:""}.note-icon-unorderedlist:before{content:""}.note-icon-video:before{content:""}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:0.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo, Monaco, monospace, sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100% !important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent;padding-top:0}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;margin-top:5px}.note-popover.popover .arrow{left:20px !important}.note-toolbar{position:relative;z-index:500}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute !important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative !important;z-index:1;width:5em;height:5em;opacity:0.75;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute !important;z-index:2;width:1em;height:1em;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.panel-heading.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.panel-heading.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.panel-heading.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.panel-heading.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.panel-heading.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.panel-heading.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.panel-heading.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.panel-heading.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.panel-heading.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #63676a}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu:not(.dropdown-style),.panel-heading.note-toolbar .dropdown-menu:not(.dropdown-style){color:#adadad;background-color:#3c3f41}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto !important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto !important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #63676a;cursor:pointer}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #3c3f41}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed #d3d3d3}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block !important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}html{margin:0;padding:0;height:100%;position:relative}body{margin:0;padding:0;min-height:100%;direction:ltr}body.mobile-view-activated.hidden-menu{overflow-x:hidden}body.modal-open{overflow:hidden !important}a:hover,a:active,a:focus,button,button:active,button:focus,object,embed,input::-moz-focus-inner{outline:0}h1,h3,h4{margin:0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.page-title{margin:12px 0 28px}.page-title span{font-size:15px;color:#313335;display:inline-block;vertical-align:1px}label,.editable-input .editable-checklist>div>label>span{font-weight:normal}*:not(td):focus{outline:0 !important}a,input,button{-ms-touch-action:none !important}textarea:focus,select:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{outline:0;outline:thin dotted \9;box-shadow:inset -1px 1px 5px 0 rgba(0,0,0,0.8) !important}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-xs,.form-control{border-radius:0px !important;-webkit-border-radius:0px !important;-moz-border-radius:0px !important}.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.btn-xs,.btn-group-xs>.btn{padding:0px 2px;font-size:10px;line-height:1.3}.btn-sm,.btn-group-sm>.btn{padding:5px 8px 4px}.btn-lg,.btn-group-lg>.btn{padding:10px 16px}.no-space{margin:0}.no-space>[class*="col-"]{margin:0 !important;padding-right:0;padding-left:0}h1{letter-spacing:-1px;font-size:22px;margin:10px 0}h1 small{font-size:12px;font-weight:300;letter-spacing:-1px}h2{font-size:20px;margin:20px 0;line-height:normal}h3{display:block;font-size:17px;font-weight:400;margin:20px 0;line-height:normal}h4{line-height:normal;margin:20px 0 10px 0}h5{font-size:14px;font-weight:300;margin-top:0;margin-bottom:10px;line-height:normal}h6{font-size:13px;margin:10px 0;font-weight:bold;line-height:normal}.row-seperator-header{margin:15px 14px 20px;border-bottom:none;display:block;color:#303133;font-size:20px;font-weight:400}.center-canvas,.center-child-canvas>canvas{display:block !important;margin:0 auto !important}.form-control{box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.form hr{margin-left:-13px;margin-right:-13px;border-color:rgba(0,0,0,0.1);margin-top:20px;margin-bottom:20px}.form fieldset{display:block;border:none;background:rgba(255,255,255,0.9);position:relative}fieldset{position:relative}.popover-content .form-actions{margin:0 -14px -9px;border-radius:0 0 3px 3px;padding:9px 14px}.no-padding .form .form-actions{margin:0;display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(248,248,248,0.9);text-align:right;margin-top:25px}.form header,legend{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,0.2);background:#fff;font-size:16px;font-weight:300;color:#2b2b2b;margin:25px 0px 20px}.no-padding .form header{margin:25px 14px 0}.form header:first-child{margin-top:10px}legend{font-weight:400;margin-top:0px;background:none}.input-group-addon{padding:6px 10px;will-change:background-color, border-color;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-webkit-transition:all ease-out 0.15s;transition:all ease-out 0.15s}.input-group-addon .fa{font-size:14px}.input-group-addon .fa-lg,.input-group-addon .fa-2x{font-size:2em}.input-group-addon .fa-3x,.input-group-addon .fa-4x,.input-group-addon .fa-5x{font-size:30px}input[type="text"]:focus+.input-group-addon,input[type="password"]:focus+.input-group-addon,input[type="email"]:focus+.input-group-addon{border-color:#568a89;color:#568a89}.has-warning input[type="text"],.has-warning input[type="text"]+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]+.input-group-addon{background-color:#fbe3c0;color:#2b2b2b}.has-warning input[type="text"]:focus,.has-warning input[type="text"]:focus+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]:focus+.input-group-addon{background-color:#e28a0d;color:#fff}.has-error .input-group-addon{border-color:#d9534f !important;background:#d9534f !important;color:#2b2b2b !important}.has-success .input-group-addon{border-color:#4f9e4f !important;background-color:#2b2b2b !important;color:#4f9e4f !important}.form fieldset .form-group:last-child,.form fieldset .form-group:last-child .note,.form .form-group:last-child,.form .form-group:last-child .note{margin-bottom:0}.note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#7c8184}.input-icon-right{position:relative}.input-icon-right>i,.input-icon-left>i{position:absolute;right:10px;top:10px;font-size:12px;color:#63676a}.input-icon-left>i{right:auto;left:24px}.input-icon-right .form-control{padding-right:27px}.input-icon-left .form-control{padding-left:29px}input[type="text"].ui-autocomplete-loading,input[type="password"].ui-autocomplete-loading,input[type="datetime"].ui-autocomplete-loading,input[type="datetime-local"].ui-autocomplete-loading,input[type="date"].ui-autocomplete-loading,input[type="month"].ui-autocomplete-loading,input[type="time"].ui-autocomplete-loading,input[type="week"].ui-autocomplete-loading,input[type="number"].ui-autocomplete-loading,input[type="email"].ui-autocomplete-loading,input[type="url"].ui-autocomplete-loading,input[type="search"].ui-autocomplete-loading,input[type="tel"].ui-autocomplete-loading,input[type="color"].ui-autocomplete-loading{background-image:url("../../img/select2-spinner.gif") !important;background-repeat:no-repeat;background-position:99% 50%;padding-right:27px}.input-group-addon .checkbox,.input-group-addon .editable-input .editable-checklist>div>label,.editable-input .input-group-addon .editable-checklist>div>label,.input-group-addon .radio{min-height:0px;margin-right:0px !important;padding-top:0}.input-group-addon label input[type="checkbox"].checkbox+span,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="checkbox"].checkbox+span,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="checkbox"].checkbox+span,.input-group-addon label input[type="radio"].radiobox+span,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="radio"].radiobox+span,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="radio"].radiobox+span,.input-group-addon label input[type="radio"].radiobox+span:before,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="radio"].radiobox+span:before,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="radio"].radiobox+span:before,.input-group-addon label input[type="checkbox"].checkbox+span:before,.input-group-addon .editable-input .editable-checklist>div>label>span input[type="checkbox"].checkbox+span:before,.editable-input .input-group-addon .editable-checklist>div>label>span input[type="checkbox"].checkbox+span:before{margin-right:0px}.alert{margin-bottom:10px;margin-top:0px;padding:5px 15px 5px 34px;color:#675100;border-width:0px;border-left-width:3px;padding:10px}.alert .ui-pnotify-title{line-height:12px}.alert .ui-pnotify-text{font-size:10px}.alert .close{top:0px;right:-5px;line-height:18px}.alert-heading{font-weight:600}.alert-danger{border-color:#a52521;color:#2b2b2b;background:#f6d1d0;text-shadow:none}.alert-danger .ui-pnotify-icon{color:#a52521}.alert-warning{border-color:#e28a0d;color:#2b2b2b;background:#fdedd8}.alert-warning .ui-pnotify-icon{color:#e28a0d}.alert-success{border-color:#4f9e4f;color:#2b2b2b;background:#d1e8d1}.alert-success .ui-pnotify-icon{color:#4f9e4f}.alert-info{border-color:#316490;color:#2b2b2b;background:#abc9e2}.alert-info .ui-pnotify-icon{color:#316490}.progress-micro{height:2px !important;line-height:2px !important}.progress-xs{height:7px !important;line-height:7px !important}.progress-sm{height:14px !important;line-height:14px !important}.progress-lg{height:30px !important;line-height:30px !important}.progress .progress-bar{position:absolute;overflow:hidden;line-height:18px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .progress-bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{width:25px;height:100%;min-height:150px;margin-right:20px;display:inline-block;margin-bottom:0px}.progress.wide-bar{width:40px}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .progress-bar{width:100%;height:0;-webkit-transition:height 0.6s ease;transition:height 0.6s ease}.progress.vertical.bottom .progress-bar{position:absolute;bottom:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{position:relative;margin-bottom:20px;overflow:hidden;height:18px;background:#63676a;-webkit-box-shadow:0 1px 0 transparent,0 0 0 1px #63676a inset;box-shadow:0 1px 0 transparent,0 0 0 1px #63676a inset;-moz-border-radius:0px;-webkit-border-radius:0px;border-radius:0px}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#428bca;font-weight:bold;-webkit-transition:width 1s ease-in-out,background-color 1s ease-in-out;transition:width 1s ease-in-out,background-color 1s ease-in-out}.progress-striped .progress-bar{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255,255,255,0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255,255,255,0.15)), color-stop(0.75, rgba(255,255,255,0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-info .bar,.progress .bar-info{background:#316490}.vertical-bars{padding:0;margin:0}.vertical-bars:after{content:"";display:block;height:0;clear:both}.vertical-bars li{padding:14px 0;width:25%;display:block;float:left;text-align:center}.vertical-bars li:first-child{border-left:none}.vertical-bars>li>.progress.vertical:first-child{margin-left:auto}.vertical-bars>li>.progress.vertical{margin:0 auto;float:none}.nav-tabs{border-bottom:none}.nav-tabs>li>a .badge{font-size:11px;padding:3px 5px 3px 5px;opacity:.5;margin-left:5px;min-width:17px;font-weight:normal}.tabs-left .nav-tabs>li>a .badge{margin-right:5px;margin-left:0px}.nav-tabs>li>a .label{display:inline-block;font-size:11px;margin-left:5px;opacity:.5}.nav-tabs>li>a{color:#63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.nav-tabs>li>a:hover{color:#adadad;border-color:transparent transparent #63676a transparent;margin-top:1px;border-top-width:0}.nav-tabs>li.active>a{background-color:#adadad;color:#1d1d1d;border-top-width:0px !important;margin-top:1px !important;font-weight:bold}.tabs-left .nav-tabs>li.active>a{-webkit-box-shadow:-2px 0 0 #428bca;-moz-box-shadow:-2px 0 0 #428bca;box-shadow:-2px 0 0 #428bca;border-top-width:1px !important;border-left:none !important;margin-left:1px !important}.tabs-left .nav-pills>li.active>a{border:none !important;box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.tabs-right .nav-tabs>li.active>a{-webkit-box-shadow:2px 0 0 #428bca;-moz-box-shadow:2px 0 0 #428bca;box-shadow:2px 0 0 #428bca;border-top-width:1px !important;border-right:none !important;margin-right:1px !important}.tabs-below .nav-tabs>li.active>a{-webkit-box-shadow:0 2px 0 #428bca;-moz-box-shadow:0 2px 0 #428bca;box-shadow:0 2px 0 #428bca;border-bottom-width:0px !important;border-top:none !important;margin-top:0px !important}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li,.tabs-left>.nav-pills>li,.tabs-right>.nav-pills>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a,.tabs-left>.nav-pills>li>a,.tabs-right>.nav-pills>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs,.tabs-left>.nav-pills{float:left;margin-right:19px;border-right:1px solid #9b9b9b}.tabs-left>.nav-pills{border-right:none}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#adadad #949494 #adadad #adadad}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#949494 transparent #949494 #9b9b9b;*border-right-color:#fff}.tabs-left>.tab-content{margin-left:109px}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #9b9b9b}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#adadad #adadad #adadad #9b9b9b}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#9b9b9b #9b9b9b #9b9b9b transparent;*border-left-color:#fff}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#9b9b9b;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #9b9b9b #9b9b9b #9b9b9b}.nav-tabs.bordered{background:#fff;border:1px solid #9b9b9b}.nav-tabs.bordered>:first-child a{border-left-width:0px !important}.nav-tabs.bordered+.tab-content{border:1px solid #9b9b9b;border-top:none}.tabs-pull-right.nav-tabs>li,.tabs-pull-right.nav-pills>li{float:right}.tabs-pull-right.nav-tabs>li:first-child>a,.tabs-pull-right.nav-pills>li:first-child>a{margin-right:1px}.tabs-pull-right.bordered.nav-tabs>li:first-child>a,.tabs-pull-right.bordered.nav-pills>li:first-child>a{border-left-width:1px !important;margin-right:0px;border-right-width:0px}.dropdown-menu-xs{min-width:37px}.dropdown-menu-xs>li>a{padding:3px 10px}.dropdown-menu-xs>li>a:hover i{color:#fff !important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu:hover>a{background-color:#63676a;color:#1d1d1d}.dropdown-submenu:hover a:after{border-left-color:#5cb85c}.dropdown-submenu>a:after{content:" ";display:block;position:absolute;right:5px;top:7px;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#2b2b2b}.dropdown-submenu>a:hover:after{border-left-color:#adadad}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.pagination>li>a,.pagination>li>span{box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.btn-default.disabled{color:#adadad}.btn{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;will-change:background-color, border-color;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:color 0.18s ease-in-out,background-color 0.18s ease-in-out,border-color 0.18s ease-in-out,box-shadow 0.18s ease-in-out;transition:color 0.18s ease-in-out,background-color 0.18s ease-in-out,border-color 0.18s ease-in-out,box-shadow 0.18s ease-in-out}.btn.btn-ribbon{background-color:#707070;background-image:-moz-linear-gradient(top, #777, #666);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#777), to(#666));background-image:-webkit-linear-gradient(top, #777, #666);background-image:-o-linear-gradient(top, #777, #666);background-image:linear-gradient(to bottom, #777777,#666666);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff777777', endColorstr='#ff666666', GradientType=0);color:white;padding:0 5px;line-height:20px;vertical-align:middle;height:20px;display:block;border:none;float:left;margin:0 8px 0 0;cursor:pointer}.btn.btn-ribbon>i{font-size:111%}.ribbon-button-alignment{padding-top:10px;display:inline-block}.ribbon-button-alignment.pull-right>.btn.btn-ribbon{margin:0 0 0 8px}.panel-purple{border-color:#6e587a}.panel-purple>.panel-heading{color:#fff;background-color:#6e587a;border-color:#6e587a}.panel-greenLight{border-color:#71843f}.panel-greenLight>.panel-heading{color:#fff;background-color:#71843f;border-color:#71843f}.panel-greenDark{border-color:#496949}.panel-greenDark>.panel-heading{color:#fff;background-color:#496949;border-color:#496949}.panel-darken{border-color:#313335}.panel-darken>.panel-heading{color:#fff;background-color:#404040;border-color:#404040}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{color:#fff;background-color:#d9534f;border-color:#d9534f}.panel-teal{border-color:#568a89}.panel-teal>.panel-heading{color:#fff;background-color:#568a89;border-color:#568a89}.panel-orange{border-color:#e28a0d}.panel-orange>.panel-heading{color:#fff;background-color:#e28a0d;border-color:#e28a0d}.panel-blueDark{border-color:#4c4f53}.panel-blueDark>.panel-heading{color:#fff;background-color:#4c4f53;border-color:#4c4f53}.panel-magenta{border-color:#6e3671}.panel-magenta>.panel-heading{color:#fff;background-color:#6e3671;border-color:#6e3671}.panel-blue{border-color:#428bca}.panel-blue>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-footer>.btn-block{border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;border-bottom:none;border-left:none;border-right:none}.btn-circle{width:30px;height:30px;text-align:center;padding:6px 0;font-size:12px;line-height:18px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;-webkit-box-shadow:0 1px 6px 0 rgba(0,0,0,0.12),0 1px 6px 0 rgba(0,0,0,0.12);box-shadow:0 1px 6px 0 rgba(0,0,0,0.12),0 1px 6px 0 rgba(0,0,0,0.12)}.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn{width:22px;height:22px;padding:4px 0;font-size:12px;line-height:14px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn{width:50px;height:50px;padding:10px 15px;font-size:18px;line-height:30px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-xl{width:70px;height:70px;padding:10px 15px;font-size:24px;line-height:50px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-label{position:relative;left:-8px;display:inline-block;padding:5px 8px;background:rgba(0,0,0,0.15);border-radius:2px 0 0 2px}.btn-labeled{padding-top:0;padding-bottom:0;padding-left:8px}.btn-link{box-shadow:none;-webkit-box-shadow:none;font-size:13px}.morris-hover.morris-default-style{border-radius:5px;padding:5px;color:#666;background:rgba(29,29,29,0.85);font-family:'Oxygen Bold';font-size:10px;text-align:left;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap}.morris-hover{position:absolute;z-index:903}.fixed-page-footer .morris-hover{z-index:900}.txt-color.txt-color-blue,.txt-color-blue.pf-help-light,.pf-help-light:hover,.txt-color-blue.pf-help,.pf-help:hover,.txt-color.pf-help-default:hover,.dataTable td.pf-help-default.pf-table-link-cell:hover,.dataTable td.pf-table-link-cell.pf-help-light:hover,.dataTable td.pf-table-link-cell.pf-help:hover,.dataTable td.pf-table-action-cell>.pf-help-default.pf-table-action-icon-cell:hover,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help-light:hover,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help:hover,.pf-landing .pf-landing-list li>i.pf-help-default:hover,.pf-landing .pf-landing-list li>i.pf-help-light:hover,.pf-landing .pf-landing-list li>i.pf-help:hover,.dataTable td.txt-color-blue.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blue.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blue{color:#428bca !important}.txt-color.txt-color-blueLight,.txt-color-blueLight.pf-help-light,.txt-color-blueLight.pf-help,.dataTable td.txt-color-blueLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blueLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blueLight{color:#92a2a8 !important}.txt-color.txt-color-blueDark,.txt-color-blueDark.pf-help-light,.txt-color-blueDark.pf-help,.dataTable td.txt-color-blueDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-blueDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-blueDark{color:#4c4f53 !important}.txt-color.txt-color-grayLightest,.txt-color-grayLightest.pf-help-light,.txt-color-grayLightest.pf-help,.dataTable td.txt-color-grayLightest.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayLightest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayLightest{color:#eaeaea !important}.txt-color.txt-color-grayLighter,.txt-color-grayLighter.pf-help-light,.txt-color-grayLighter.pf-help,.dataTable td.txt-color-grayLighter.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayLighter.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayLighter{color:#adadad !important}.txt-color.txt-color-grayLight,.pf-help-light,.txt-color-grayLight.pf-help,.dataTable td.txt-color-grayLight.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-help-light,.dataTable td.pf-table-action-cell>.txt-color-grayLight.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-help-light,.pf-landing .pf-landing-list li>i.txt-color-grayLight,.pf-landing .pf-landing-list li>i.pf-help-light{color:#63676a !important}.txt-color.txt-color-gray,.txt-color-gray.pf-help-light,.pf-help,.dataTable td.txt-color-gray.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-help,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-gray,.pf-landing .pf-landing-list li>i.pf-help{color:#3c3f41 !important}.txt-color.txt-color-grayDark,.txt-color-grayDark.pf-help-light,.txt-color-grayDark.pf-help,.dataTable td.txt-color-grayDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-grayDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-grayDark{color:#313335 !important}.txt-color.txt-color-greenLight,.txt-color-greenLight.pf-help-light,.txt-color-greenLight.pf-help,.dataTable td.txt-color-greenLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-greenLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-greenLight{color:#66c84f !important}.txt-color.txt-color-green,.txt-color-green.pf-help-light,.pf-help-light.pf-log-info,.txt-color-green.pf-help,.pf-help.pf-log-info,.dataTable td.txt-color-green.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-info,.dataTable td.pf-table-action-cell>.txt-color-green.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-info,.txt-color.pf-log-info,.pf-landing .pf-landing-list li>i.pf-log-info,.pf-landing .pf-landing-list li>i.txt-color-green{color:#5cb85c !important}.txt-color.txt-color-greenDark,.txt-color-greenDark.pf-help-light,.txt-color-greenDark.pf-help,.dataTable td.txt-color-greenDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-greenDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-greenDark{color:#4f9e4f !important}.txt-color.txt-color-redLight,.txt-color-redLight.pf-help-light,.txt-color-redLight.pf-help,.dataTable td.txt-color-redLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-redLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-redLight{color:#a65858 !important}.txt-color.txt-color-red,.txt-color-red.pf-help-light,.pf-help-light.pf-log-error,.txt-color-red.pf-help,.pf-help.pf-log-error,.dataTable td.txt-color-red.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-error,.dataTable td.pf-table-action-cell>.txt-color-red.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-error,.txt-color.pf-log-error,.pf-landing .pf-landing-list li>i.pf-log-error,.pf-landing .pf-landing-list li>i.txt-color-red{color:#d9534f !important}.txt-color.txt-color-redDarker,.txt-color-redDarker.pf-help-light,.txt-color-redDarker.pf-help,.dataTable td.txt-color-redDarker.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-redDarker.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-redDarker{color:#a52521 !important}.txt-color.txt-color-yellow,.txt-color-yellow.pf-help-light,.txt-color-yellow.pf-help,.dataTable td.txt-color-yellow.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-yellow.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-yellow{color:#e2ce48 !important}.txt-color.txt-color-yellowDark,.txt-color-yellowDark.pf-help-light,.txt-color-yellowDark.pf-help,.dataTable td.txt-color-yellowDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-yellowDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-yellowDark{color:#c8b847 !important}.txt-color.txt-color-orangeLight,.txt-color-orangeLight.pf-help-light,.txt-color-orangeLight.pf-help,.dataTable td.txt-color-orangeLight.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orangeLight.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orangeLight{color:#f0ad4e !important}.txt-color.txt-color-orange,.txt-color-orange.pf-help-light,.txt-color-orange.pf-help,.dataTable td.txt-color-orange.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orange.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell:hover>.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orange{color:#e28a0d !important}.txt-color.txt-color-orangeDark,.txt-color-orangeDark.pf-help-light,.txt-color-orangeDark.pf-help,.dataTable td.txt-color-orangeDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-orangeDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-orangeDark{color:#c2760c !important}.txt-color.txt-color-pink,.txt-color-pink.pf-help-light,.txt-color-pink.pf-help,.dataTable td.txt-color-pink.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-pink.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-pink{color:#e06fdf !important}.txt-color.txt-color-pinkDark,.txt-color-pinkDark.pf-help-light,.txt-color-pinkDark.pf-help,.dataTable td.txt-color-pinkDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-pinkDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-pinkDark{color:#a8829f !important}.txt-color.txt-color-purple,.txt-color-purple.pf-help-light,.txt-color-purple.pf-help,.dataTable td.txt-color-purple.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-purple.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-purple{color:#6e587a !important}.txt-color.txt-color-darken,.txt-color-darken.pf-help-light,.txt-color-darken.pf-help,.dataTable td.txt-color-darken.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-darken.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-darken{color:#404040 !important}.txt-color.txt-color-lighten,.txt-color-lighten.pf-help-light,.txt-color-lighten.pf-help,.dataTable td.txt-color-lighten.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-lighten.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-lighten{color:#d5e7ec !important}.txt-color.txt-color-white,.txt-color-white.pf-help-light,.txt-color-white.pf-help,.dataTable td.txt-color-white.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-white.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-white{color:#fff !important}.txt-color.txt-color-magenta,.txt-color-magenta.pf-help-light,.txt-color-magenta.pf-help,.dataTable td.txt-color-magenta.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-magenta.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-magenta{color:#6e3671 !important}.txt-color.txt-color-tealLightest,.txt-color-tealLightest.pf-help-light,.txt-color-tealLightest.pf-help,.dataTable td.txt-color-tealLightest.pf-table-link-cell,.dataTable td.pf-table-link-cell:hover,.dataTable td.pf-table-action-cell>.txt-color-tealLightest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-tealLightest{color:#6caead !important}.txt-color.txt-color-tealLighter,.txt-color-tealLighter.pf-help-light,.txt-color-tealLighter.pf-help,.dataTable td.txt-color-tealLighter.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-tealLighter.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i{color:#568a89 !important}.txt-color.txt-color-teal,.txt-color-teal.pf-help-light,.txt-color-teal.pf-help,.dataTable td.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-teal.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>td.pf-table-action-icon-cell.pf-table-link-cell,.pf-landing .pf-landing-list li>i.txt-color-teal{color:#477372 !important}.txt-color.txt-color-indigoDark,.txt-color-indigoDark.pf-help-light,.txt-color-indigoDark.pf-help,.dataTable td.txt-color-indigoDark.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-indigoDark.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-indigoDark{color:#5c6bc0 !important}.txt-color.txt-color-indigoDarkest,.txt-color-indigoDarkest.pf-help-light,.txt-color-indigoDarkest.pf-help,.dataTable td.txt-color-indigoDarkest.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-indigoDarkest.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-indigoDarkest{color:#313966 !important}.txt-color.txt-color-gold,.txt-color-gold.pf-help-light,.txt-color-gold.pf-help,.dataTable td.txt-color-gold.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-gold.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-gold{color:#cfb53b !important}.txt-color.txt-color-silver,.txt-color-silver.pf-help-light,.txt-color-silver.pf-help,.dataTable td.txt-color-silver.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-silver.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-silver{color:silver !important}.txt-color.txt-color-bronze,.txt-color-bronze.pf-help-light,.txt-color-bronze.pf-help,.dataTable td.txt-color-bronze.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-bronze.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-bronze{color:#8c7853 !important}.txt-color.txt-color-primary,.txt-color-primary.pf-help-light,.txt-color-primary.pf-help,.dataTable td.txt-color-primary.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-primary.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-primary{color:#375959 !important}.txt-color.txt-color-success,.txt-color-success.pf-help-light,.txt-color-success.pf-help,.dataTable td.txt-color-success.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-success.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-success{color:#4f9e4f !important}.txt-color.txt-color-information,.txt-color-information.pf-help-light,.txt-color-information.pf-help,.dataTable td.txt-color-information.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-information.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-information{color:#316490 !important}.txt-color.txt-color-info,.txt-color-info.pf-help-light,.txt-color-info.pf-help,.dataTable td.txt-color-info.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-info.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-info{color:#316490 !important}.txt-color.txt-color-warning,.txt-color-warning.pf-help-light,.pf-help-light.pf-log-warning,.txt-color-warning.pf-help,.pf-help.pf-log-warning,.dataTable td.txt-color-warning.pf-table-link-cell,.dataTable td.pf-table-link-cell.pf-log-warning,.dataTable td.pf-table-action-cell>.txt-color-warning.pf-table-action-icon-cell,.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell.pf-log-warning,.txt-color.pf-log-warning,.pf-landing .pf-landing-list li>i.pf-log-warning,.pf-landing .pf-landing-list li>i.txt-color-warning{color:#e28a0d !important}.txt-color.txt-color-danger,.txt-color-danger.pf-help-light,.txt-color-danger.pf-help,.dataTable td.txt-color-danger.pf-table-link-cell,.dataTable td.pf-table-action-cell>.txt-color-danger.pf-table-action-icon-cell,.pf-landing .pf-landing-list li>i.txt-color-danger{color:#a52521 !important}.bg-color.bg-color-blue{background-color:#428bca !important}.bg-color.bg-color-blueLight{background-color:#92a2a8 !important}.bg-color.bg-color-blueDark{background-color:#4c4f53 !important}.bg-color.bg-color-green{background-color:#5cb85c !important}.bg-color.bg-color-greenLight{background-color:#71843f !important}.bg-color.bg-color-greenDark{background-color:#496949 !important}.bg-color.bg-color-red{background-color:#d9534f !important}.bg-color.bg-color-yellow{background-color:#e2ce48 !important}.bg-color.bg-color-orange{background-color:#e28a0d !important}.bg-color.bg-color-orangeDark{background-color:#c2760c !important}.bg-color.bg-color-pink{background-color:#e06fdf !important}.bg-color.bg-color-pinkDark{background-color:#a8829f !important}.bg-color.bg-color-purple{background-color:#6e587a !important}.bg-color.bg-color-darken{background-color:#404040 !important}.bg-color.bg-color-lighten{background-color:#d5e7ec !important}.bg-color.bg-color-white{background-color:#fff !important}.bg-color.bg-color-gray{background-color:#3c3f41 !important}.bg-color.bg-color-grayDark{background-color:#525252 !important}.bg-color.bg-color-grayDarker{background-color:#2b2b2b !important}.bg-color.bg-color-magenta{background-color:#6e3671 !important}.bg-color.bg-color-tealLighter{background-color:#568a89 !important}.bg-color.bg-color-tealDarker{background-color:#212C30 !important}.bg-color.bg-color-tealDarkest{background-color:#1b2326 !important}.bg-color.bg-color-redLight{background-color:#a65858 !important}.pf-animation-slide-in{-moz-animation-duration:1.2s;-webkit-animation-duration:1.2s;-moz-animation-name:pfSlideIn;-webkit-animation-name:pfSlideIn;position:relative}@-webkit-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-moz-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-ms-keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@keyframes pfSlideIn{from{opacity:0;top:-20px}to{opacity:1;top:0px}}@-webkit-keyframes pfBubbleWobble{from{transform:scale(1, 1)}6.5%{transform:scale(1, 1.4)}13%{transform:scale(1.4, 1)}20%{transform:scale(1, 1)}to{transform:scale(1, 1)}}@-moz-keyframes pfBubbleWobble{from{transform:scale(1, 1)}6.5%{transform:scale(1, 1.4)}13%{transform:scale(1.4, 1)}20%{transform:scale(1, 1)}to{transform:scale(1, 1)}}@-ms-keyframes pfBubbleWobble{from{transform:scale(1, 1)}6.5%{transform:scale(1, 1.4)}13%{transform:scale(1.4, 1)}20%{transform:scale(1, 1)}to{transform:scale(1, 1)}}@keyframes pfBubbleWobble{from{transform:scale(1, 1)}6.5%{transform:scale(1, 1.4)}13%{transform:scale(1.4, 1)}20%{transform:scale(1, 1)}to{transform:scale(1, 1)}}@-webkit-keyframes pfBubblePop{from{opacity:1;transform:translateZ(0) scale(1, 1)}to{opacity:0;transform:translateZ(0) scale(1.75, 1.75)}}@-moz-keyframes pfBubblePop{from{opacity:1;transform:translateZ(0) scale(1, 1)}to{opacity:0;transform:translateZ(0) scale(1.75, 1.75)}}@-ms-keyframes pfBubblePop{from{opacity:1;transform:translateZ(0) scale(1, 1)}to{opacity:0;transform:translateZ(0) scale(1.75, 1.75)}}@keyframes pfBubblePop{from{opacity:1;transform:translateZ(0) scale(1, 1)}to{opacity:0;transform:translateZ(0) scale(1.75, 1.75)}}@-webkit-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@-moz-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@-ms-keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}@keyframes pfPulseDanger{0%{fill:#d9534f}50%{fill:#58100d}100%{fill:#d9534f}}.pf-animation-pulse-success{-webkit-animation:pulseBackgroundSuccess 1s 1;animation:pulseBackgroundSuccess 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-success .sorting_1{-webkit-animation:pulseBackgroundSuccessActive 1s 1;animation:pulseBackgroundSuccessActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-warning{-webkit-animation:pulseBackgroundWarning 1s 1;animation:pulseBackgroundWarning 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-warning .sorting_1{-webkit-animation:pulseBackgroundWarningActive 1s 1;animation:pulseBackgroundWarningActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-danger{-webkit-animation:pulseBackgroundDanger 1s 1;animation:pulseBackgroundDanger 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}.pf-animation-pulse-danger .sorting_1{-webkit-animation:pulseBackgroundDangerActive 1s 1;animation:pulseBackgroundDangerActive 1s 1;-webkit-animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38);animation-timing-function:cubic-bezier(0.53, -0.03, 0.68, 0.38)}@-webkit-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-moz-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-ms-keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@keyframes pulseBackgroundSuccess{10%{background-color:#4f9e4f;color:#313335}}@-webkit-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-moz-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-ms-keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@keyframes pulseBackgroundSuccessActive{10%{background-color:#478d47;color:#313335}}@-webkit-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-moz-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-ms-keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@keyframes pulseBackgroundWarning{10%{background-color:#e28a0d;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-moz-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-ms-keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@keyframes pulseBackgroundWarningActive{10%{background-color:#ca7b0c;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-moz-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-ms-keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@keyframes pulseBackgroundDanger{10%{background-color:#d9534f;color:#2b2b2b}}@-webkit-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@-moz-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@-ms-keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}@keyframes pulseBackgroundDangerActive{10%{background-color:#d43f3a;color:#2b2b2b}}.pf-animate-rotate,.modal-content h2[data-toggle="collapse"]:after,.modal-content h4[data-toggle="collapse"]:after,.panel-body h2[data-toggle="collapse"]:after,.panel-body h4[data-toggle="collapse"]:after{-webkit-transition:all 0.08s linear;transition:all 0.08s linear}.pf-animate-rotate.right,.modal-content h2.right[data-toggle="collapse"]:after,.modal-content h4.right[data-toggle="collapse"]:after,.panel-body h2.right[data-toggle="collapse"]:after,.panel-body h4.right[data-toggle="collapse"]:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.pf-animate-rotate.left,.modal-content h2.left[data-toggle="collapse"]:after,.modal-content h4.left[data-toggle="collapse"]:after,.panel-body h2.left[data-toggle="collapse"]:after,.panel-body h4.left[data-toggle="collapse"]:after{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}@keyframes rotateRainbow{0%{background-position-x:0}100%{background-position-x:100vw}}@font-face{font-family:'Triglavian';font-style:normal;font-weight:900;src:url("../../fonts/triglavian-regular.eot");src:url("../../fonts/triglavian-regular.eot?#iefix") format("embedded-opentype"),url("../../fonts/triglavian-regular.woff2") format("woff2"),url("../../fonts/triglavian-regular.woff") format("woff"),url("../../fonts/triglavian-regular.ttf") format("truetype");font-display:swap}.pf-triglivian{font-family:'Triglavian';font-weight:900}body{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.pf-body{overflow:hidden}a,.pf-link{color:#477372;will-change:color;text-decoration:none;cursor:pointer;-webkit-transition:color 0.08s ease-out,background-color 0.08s ease-out;transition:color 0.08s ease-out,background-color 0.08s ease-out}a:hover,.pf-link:hover{color:#6caead;text-decoration:none}a:focus,.pf-link:focus{color:#477372}em{font-style:italic}em.pf-brand{text-transform:uppercase}.pf-font-capitalize{text-transform:capitalize}.pf-font-line-through{text-decoration:line-through}.no-scroll{overflow:hidden}.no-padding{padding:0 !important}::-webkit-scrollbar{display:none;width:16px;height:16px}::-webkit-scrollbar-track{background-color:#2b2b2b;border-left:1px solid #313335;border-radius:2px;-webkit-transition:background-color 0.5s;transition:background-color 0.5s}::-webkit-scrollbar-thumb{height:6px;border:5px solid transparent;background-clip:padding-box;-webkit-border-radius:8px;background-color:#868c90}::-webkit-scrollbar-thumb:hover{background-color:#a1a5a8}::-webkit-scrollbar-button{width:0;height:0;display:none}::-webkit-scrollbar-corner{background-color:transparent}::selection{background:#adadad;color:#1d1d1d}::-moz-selection{background:#adadad;color:#1d1d1d}.pf-help-default,.pf-help-light,.pf-help{cursor:help;-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.pf-dialog-icon-button,.pf-system-signature-module .pf-sig-table .fa-plus,.pf-system-route-module .pf-system-route-table td .fa-sync,.pf-system-route-module .pf-system-route-table td .fa-search,.pf-connection-info-module .pf-connection-info-table td .fa-plus{cursor:pointer;margin-top:2px;-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out}.pf-dialog-icon-button:not(.collapsed),.pf-system-signature-module .pf-sig-table .fa-plus:not(.collapsed),.pf-system-route-module .pf-system-route-table td .fa-sync:not(.collapsed),.pf-system-route-module .pf-system-route-table td .fa-search:not(.collapsed),.pf-connection-info-module .pf-connection-info-table td .fa-plus:not(.collapsed),.pf-dialog-icon-button:hover,.pf-system-signature-module .pf-sig-table .fa-plus:hover,.pf-system-route-module .pf-system-route-table td .fa-sync:hover,.pf-system-route-module .pf-system-route-table td .fa-search:hover,.pf-connection-info-module .pf-connection-info-table td .fa-plus:hover{color:#e28a0d}.pf-module-icon-button{cursor:pointer;color:#63676a;-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out}.pf-module-icon-button:hover,.pf-module-icon-button.active{color:#e28a0d !important}.pf-module-icon-button.editable{border-bottom:none !important}.pf-module-icon-button-copy{cursor:copy;-moz-user-select:text;user-select:text}a.disabled{color:#777;pointer-events:none;cursor:default}.alert{will-change:opacity, transform}.editable-input .pf-editable-name{text-transform:uppercase}.editable-input optgroup[label]{background-color:#3c3f41;color:#63676a}.editable-input optgroup[label] option{background-color:#313335;color:#adadad;font-family:Consolas,monospace,Menlo,Monaco,"Courier New"}.editable-input .editable-checklist>div>label{display:block !important;padding-left:20px !important;color:#adadad}.editable-input .editable-checklist>div>label>span:after{top:-2px}.editable-input .editable-checklist .pf-editable-unknown[value='0']+span{color:#d9534f}select:active,select:hover{outline:none}select:active,select:hover{outline-color:red}.select2-results .select2-results__options--nested .select2-results__option{padding-left:15px}.select2-results [class*="col-"]{padding-left:3px;padding-right:3px}.select2-results .clearfix.pf-result-image [class*="col-"]{line-height:22px}.select2 ::-webkit-search-cancel-button{-webkit-appearance:none !important}.select2 .select2-selection__choice__remove{float:left}.select2 .select2-selection--multiple input{box-shadow:none !important}.dataTables_wrapper .dataTables_length select{margin:0 3px;padding:1px}.dataTables_wrapper .dt-buttons,.dataTables_wrapper .dt-stats{display:inline-block;line-height:22px;margin-bottom:5px}.dataTables_wrapper .dt-buttons .dt-button,.dataTables_wrapper .dt-stats .dt-button{padding:0 5px}.dataTables_wrapper .dt-buttons .dt-button:not(:last-child),.dataTables_wrapper .dt-stats .dt-button:not(:last-child){margin-right:5px}.dataTables_wrapper .dt-buttons .dt-button .fas,.dataTables_wrapper .dt-buttons .dt-button .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .dataTables_wrapper .dt-buttons .dt-button li>i,.dataTables_wrapper .dt-buttons .dt-stat .fas,.dataTables_wrapper .dt-buttons .dt-stat .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .dataTables_wrapper .dt-buttons .dt-stat li>i,.dataTables_wrapper .dt-stats .dt-button .fas,.dataTables_wrapper .dt-stats .dt-button .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .dataTables_wrapper .dt-stats .dt-button li>i,.dataTables_wrapper .dt-stats .dt-stat .fas,.dataTables_wrapper .dt-stats .dt-stat .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .dataTables_wrapper .dt-stats .dt-stat li>i{margin-right:5px}.dataTables_wrapper .dt-buttons .dt-button.disabled,.dataTables_wrapper .dt-buttons .dt-stat.disabled,.dataTables_wrapper .dt-stats .dt-button.disabled,.dataTables_wrapper .dt-stats .dt-stat.disabled{color:#4f5355}.pf-dataTable-condensed-toolbar{padding-top:3px}.pf-dataTable-condensed-toolbar .dataTables_info{padding-top:0;text-align:left}.pf-dataTable-condensed-toolbar>div{padding-left:5px;padding-right:5px}.pf-dataTable-condensed-toolbar .dataTables_paginate{padding-top:0;margin-top:0}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button{padding:0;height:13px;border:0 !important}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:before,.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:after{top:0}.pf-dataTable-condensed-toolbar .dataTables_paginate .paginate_button:hover{background:transparent !important;color:#e28a0d !important}.pf-dataTable-condensed-toolbar .dt-buttons{text-align:right;margin-bottom:0}.pf-dataTable-condensed-toolbar .dt-buttons .dt-button{line-height:18px}.pf-dataTable-condensed-toolbar .dt-buttons .dt-button .fa{margin-right:0}.dataTable th.pf-table-image-cell,.dataTable th.pf-table-image-small-cell,.dataTable th.pf-table-image-smaller-cell{padding-left:0 !important;padding-right:0 !important;image-rendering:-webkit-optimize-contrast}.dataTable th.sorting,.dataTable th.sorting_asc,.dataTable th.sorting_desc{padding-right:18px !important}.dataTable tr.group{background-color:rgba(43,43,43,0.4)}.dataTable td.editable-disabled:focus{outline:none;background-color:transparent}.dataTable td.editable-click:not(.editable-disabled){cursor:pointer}.dataTable td:focus,.dataTable td.editable-open{outline:1px solid #c2760c;outline-offset:-1px;background-color:rgba(194,118,12,0.08)}.dataTable td>.fa-circle{font-size:9px !important}.dataTable td.pf-table-link-cell{cursor:pointer;-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.dataTable td.pf-table-action-cell{cursor:pointer}.dataTable td.pf-table-action-cell>.pf-table-action-icon-cell{-webkit-transition:color 0.08s ease-out;transition:color 0.08s ease-out}.dataTable td.pf-table-image-cell{padding:0 !important;image-rendering:-webkit-optimize-contrast}.dataTable td.pf-table-image-cell img{width:26px;box-sizing:content-box;border-left:1px solid #3c3f41;border-right:1px solid #3c3f41}.dataTable td.pf-table-image-small-cell img{width:24px;border-left:1px solid transparent;border-right:1px solid transparent}.dataTable td.pf-table-image-smaller-cell{padding:0 !important}.dataTable td.pf-table-image-smaller-cell img{width:25px;border-left:1px solid transparent;border-right:1px solid transparent}.dataTable td.pf-table-button-sm-cell{padding:0 5px}.dataTable td.pf-table-counter-cell{color:#63676a}.dataTable td.pf-table-counter-cell .pf-digit-counter-small{width:20px;display:inline-block;font-size:10px}.dataTable td.pf-table-counter-cell .pf-digit-counter-large{width:26px;display:inline-block;font-size:10px}.dataTable td .pf-table-unknown-cell{color:#d9534f;font-style:italic}.dataTable td .pf-table-cell-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dataTable td .pf-table-cell-80{width:90px}.dataTable td .pf-table-cell-90{width:100px}.dataTable td .pf-table-cell-100{width:110px}.dataTable td .pf-endpoint-bubble{width:15px;height:15px}.dataTable td .pf-endpoint-bubble:after{width:15px;height:15px}.dataTable td.separator-right,.dataTable th.separator-right{border-right:1px solid #3c3f41}.dataTable td svg.peity,.dataTable th svg.peity{display:block}.dataTable thead th.colHighlight{border-bottom:1px solid #c2760c}.dataTable tbody td.colHighlight{border-left:1px solid #c2760c;border-right:1px solid #c2760c;background-color:rgba(194,118,12,0.08)}.dataTable tbody tr:first-child td.colHighlight{border-top:1px solid #c2760c}.dataTable tbody tr:last-child td.colHighlight{border-bottom:1px solid #c2760c}table.pf-table-fixed{width:100%;table-layout:fixed}table tr.collapsing{-webkit-transition:height 0.01s ease;transition:height 0.01s ease}table tr.collapse.in{display:table-row !important}table td.pf-table-cell-10,table th.pf-table-cell-10{width:10px}table td.pf-table-cell-20,table th.pf-table-cell-20{width:20px}table td.pf-table-cell-ellipses-auto,table th.pf-table-cell-ellipses-auto{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-table-tools{height:45px}.pf-table-tools>.btn-labeled:not(:last-child){margin-right:10px}.pf-table-tools-action{will-change:height, opacity;opacity:0;display:none;height:0;overflow:hidden}.pf-loading-overlay{position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;background:#2b2b2b;z-index:1060;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-loading-overlay .pf-loading-overlay-wrapper{width:25px;height:25px;margin:auto;text-align:center;position:absolute;top:0;left:0;bottom:0;right:0}.pf-loading-overlay .pf-loading-overlay-wrapper i{padding:3px}.navbar-header-block{width:100%}.navbar-header-block .navbar-nav{width:100%}.navbar-nav li:not(.disabled):not(.hide-before):hover:before,.navbar-nav li:not(.disabled):not(.hide-before).active:before{top:-4px;opacity:1}.navbar-nav li:not(.disabled):not(.hide-before):before{content:'';position:absolute;background-color:#5cb85c;opacity:0;will-change:opacity,top;-webkit-transition:top 0.15s ease-out,opacity 0.15s ease-out;transition:top 0.15s ease-out,opacity 0.15s ease-out;width:100%;height:2px;top:0}.pf-navbar-version-info{cursor:pointer}.pf-site{will-change:transform}.sb-slidebar{will-change:transform}.sb-left .list-group-item{cursor:pointer;-webkit-box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4)}.sb-right .list-group-item{cursor:pointer;-webkit-box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4)}.list-group-item.disabled:after{content:'\f023';font-family:'Font Awesome 5 Free';font-weight:bold;color:#2b2b2b;position:absolute;right:8px}.mCSB_container,.mCSB_dragger{will-change:top, left}.pf-timestamp-counter{visibility:hidden}.pf-map-type-private{color:#7986cb}.pf-map-type-corporation{color:#5cb85c}.pf-map-type-alliance{color:#428bca}.pf-map-type-global{color:#568a89}#pf-map-module{margin:15px 10px 0 10px}#pf-map-module #pf-map-tabs a[role="tab"]:hover .pf-map-tab-handler:before{color:#e28a0d}#pf-map-module #pf-map-tabs .pf-map-tab-handler:before{content:'\22EE\22EE\00A0';display:inline-block;cursor:-moz-grab !important;cursor:-webkit-grab !important;cursor:grab !important;color:#63676a;width:12px;transition:color 0.15s ease-out, background-color 0.15s ease-out;pointer-events:all}#pf-map-module #pf-map-tabs .pf-map-type-tab-default{border-top:2px solid transparent}#pf-map-module #pf-map-tabs .pf-map-type-tab-private{border-top:2px solid #7986cb}#pf-map-module #pf-map-tabs .pf-map-type-tab-corporation{border-top:2px solid #5cb85c}#pf-map-module #pf-map-tabs .pf-map-type-tab-alliance{border-top:2px solid #428bca}#pf-map-module #pf-map-tabs .pf-map-type-tab-global{border-top:2px solid #568a89}#pf-map-module #pf-map-tabs .pf-map-tab-icon{margin-right:3px}#pf-map-module #pf-map-tabs .pf-map-tab-shared-icon{margin-left:3px}.pf-map-content-row{margin-top:10px;padding-bottom:40px}.pf-map-content-row>.pf-map-content-col:first-child{padding-right:0}.pf-map-content-row .pf-module{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background:rgba(60,63,65,0.27);padding:10px;width:100%;margin-bottom:10px;will-change:height, transform, opacity;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-map-content-row .pf-module:before{content:'';position:absolute;top:0;left:0;border-style:solid;border-width:0 0 9px 9px;border-color:transparent transparent transparent #3c3f41;cursor:ns-resize}.pf-map-content-row .pf-module .label{margin-bottom:10px}.pf-map-content-row .pf-module .pf-dynamic-area{background:rgba(43,43,43,0.4)}.pf-map-content-row .pf-module .pf-module-head{margin-bottom:10px}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag{display:inline-block;cursor:-moz-grab !important;cursor:-webkit-grab !important;cursor:grab !important;transition:color 0.15s ease-out}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag:before{content:'\22EE\22EE\00A0'}.pf-map-content-row .pf-module .pf-module-head .pf-module-handler-drag:hover{color:#f0ad4e}.pf-map-content-row .pf-module .pf-module-head h5{display:inline-block;line-height:16px;margin-bottom:0}.pf-map-content-row .pf-module .pf-module-head h5 .pf-module-icon-button{margin-left:5px}.pf-map-content-row .pf-module .pf-module-table{font-size:11px;white-space:nowrap}.pf-map-content-row .pf-module-spacer{margin-bottom:10px}.pf-map-content-row .pf-module-control-area{display:flex;justify-content:center;align-items:center;margin-bottom:10px;min-height:inherit}.pf-map-content-row .pf-module-control-area:hover .fa-sync{-moz-transform:rotateZ(720deg);-ms-transform:rotateZ(720deg);-webkit-transform:rotateZ(720deg);transform:rotateZ(720deg)}.pf-map-content-row .pf-module-control-area .fa-sync{-webkit-transition:transform 1.6s ease-out;transition:transform 1.6s ease-out}.pf-user-status{color:#a52521}.pf-user-status-corp{color:#5cb85c}.pf-user-status-ally{color:#428bca}.pf-user-status-own{color:#7986cb}.pf-endpoint-bubble{display:inline-block;position:relative;width:18px;height:18px}.pf-endpoint-bubble:after{content:url("../../img/bubble.svg");display:inline-block;pointer-events:none;width:18px;height:18px;vertical-align:top}.pf-system-effect{display:none;color:#adadad;cursor:help}.pf-system-effect-magnetar{color:#e06fdf;display:inline-block}.pf-system-effect-redgiant{color:#d9534f;display:inline-block}.pf-system-effect-pulsar{color:#428bca;display:inline-block}.pf-system-effect-wolfrayet{color:#e28a0d;display:inline-block}.pf-system-effect-cataclysmic{color:#ffb;display:inline-block}.pf-system-effect-blackhole{color:#000;display:inline-block}.pf-rally,.pf-system-info-rally .pf-system-head{text-shadow:1px 1px 2px #1d1d1d;background-color:#782d77;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMzZTI2NGUiLz48c3RvcCBvZmZzZXQ9IjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzNlMjY0ZSIvPjxzdG9wIG9mZnNldD0iNzUlIiBzdG9wLWNvbG9yPSIjM2UyNjRlIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-moz-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:-webkit-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:linear-gradient(-45deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:25px 25px;-webkit-animation:move 2.5s linear infinite;-moz-animation:move 2.5s linear infinite;-ms-animation:move 2.5s linear infinite;animation:move 2.5s linear infinite}.pf-system-security-0-0{color:#be0000}.pf-system-security-0-1{color:#ab2600}.pf-system-security-0-2{color:#be3900}.pf-system-security-0-3{color:#c24e02}.pf-system-security-0-4{color:#ab5f00}.pf-system-security-0-5{color:#bebe00}.pf-system-security-0-6{color:#73bf26}.pf-system-security-0-7{color:#00bf00}.pf-system-security-0-8{color:#00bf39}.pf-system-security-0-9{color:#39bf99}.pf-system-security-1-0{color:#28c0bf}.pf-system-sec{margin-right:5px;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab}.pf-system-sec-highSec{color:#5cb85c}.pf-system-sec-lowSec{color:#e28a0d}.pf-system-sec-nullSec{color:#d9534f}.pf-system-sec-high{color:#d9534f}.pf-system-sec-mid{color:#e28a0d}.pf-system-sec-low{color:#428bca}.pf-system-sec-unknown{color:#7986cb}.pf-system-sec-abyssal{color:#e06fdf}.pf-system-sec-special{color:#c8b847}.pf-system-status-friendly{border-color:#428bca !important;color:#428bca}.pf-system-status-occupied{border-color:#e28a0d !important;color:#e28a0d}.pf-system-status-hostile{border-color:#d9534f !important;color:#d9534f}.pf-system-status-empty{border-color:#5cb85c !important;color:#5cb85c}.pf-system-status-unscanned{border-color:#568a89 !important;color:#568a89}.pf-system-info-status-label{background-color:#63676a;color:#000;will-change:background-color;-webkit-transition:background-color 0.3s ease-out;transition:background-color 0.3s ease-out}.pf-system-info-status-label.pf-system-status-friendly{background-color:#428bca}.pf-system-info-status-label.pf-system-status-occupied{background-color:#e28a0d}.pf-system-info-status-label.pf-system-status-hostile{background-color:#d9534f}.pf-system-info-status-label.pf-system-status-empty{background-color:#5cb85c}.pf-system-info-status-label.pf-system-status-unscanned{background-color:#568a89}.pf-system-hidden{opacity:0.15 !important;pointer-events:none}.pf-system-effect-dialog .clearfix+.col-md-6{margin-top:10px}.pf-system-effect-dialog .clearfix+.col-md-6+.col-md-6{margin-top:10px}.pf-planet-barren{color:#755e48}.pf-planet-gas{color:#a4b2b2}.pf-planet-ice{color:#aacada}.pf-planet-lava{color:#891c08}.pf-planet-oceanic{color:#4d7999}.pf-planet-plasma{color:#28576e}.pf-planet-shattered{color:#7986cb}.pf-planet-storm{color:#38556a}.pf-planet-temperate{color:#4c593c}.pf-fake-connection{box-sizing:content-box;display:inline-block;width:70px;height:4px;border-top:2px solid #63676a;border-bottom:2px solid #63676a;background-color:#3c3f41;position:relative;font-size:10px;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-fake-connection.pf-map-connection-stargate{background-color:#313966;border-color:#63676a}.pf-fake-connection.pf-map-connection-jumpbridge{background-color:#6caead;border-color:#3c3f41;background:repeating-linear-gradient(to right, #6caead, #6caead 10px, #3c3f41 10px, #3c3f41 20px)}.pf-fake-connection.pf-map-connection-abyssal{background-color:#5a225a;border-color:#3c3f41;background:repeating-linear-gradient(to right, #5a225a, #5a225a 5px, #3c3f41 5px, #3c3f41 10px)}.pf-fake-connection.pf-map-connection-wh-eol{border-color:#d747d6}.pf-fake-connection.pf-map-connection-wh-reduced{background-color:#e28a0d}.pf-fake-connection.pf-map-connection-wh-critical{background-color:#a52521}.pf-fake-connection.pf-map-connection-frig{border-style:dashed;border-left:none;border-right:none}.pf-fake-connection.pf-map-connection-frig:after{content:'frig';background-color:#e28a0d;color:#1d1d1d;padding:0px 3px;position:absolute;left:25px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection.pf-map-connection-preserve-mass:after{content:'save mass';background-color:#a52521;color:#eaeaea;padding:0px 3px;position:absolute;left:8px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection-text{padding:0 2px;border-style:solid;border-color:#575a5d;border-width:2px;border-left:none;border-right:none}.pf-fake-connection-text.pf-wh-eol{border-color:#d747d6}.pf-fake-connection-text.pf-wh-reduced{background-color:#e28a0d;color:#000}.pf-fake-connection-text.pf-wh-critical{background-color:#a52521;color:#000}.pf-fake-connection-text.pf-wh-frig{border-top-style:dashed;border-bottom-style:dashed}.pf-structure-status-unknown{color:#568a89}.pf-structure-status-online{color:#5cb85c}.pf-structure-status-offline{color:#a52521}.tooltip-inner{color:#adadad;background-color:#3c3f41;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;padding:5px 5px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.modal .tooltip{z-index:1060}.modal .tooltip .tooltip-inner{color:#313335;background-color:#adadad}.tooltip.top .tooltip-arrow{border-top-color:#63676a}.tooltip.right .tooltip-arrow{border-right-color:#63676a}.tooltip.bottom .tooltip-arrow{border-bottom-color:#63676a}.tooltip.left .tooltip-arrow{border-left-color:#63676a}td.pf-popover-trigger:hover{color:#477372}.pf-notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.pf-dynamic-area{padding:10px;min-height:100px;position:relative;background-color:#313335;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-dynamic-area .dl-horizontal{margin-bottom:0}.pf-dynamic-area .dl-horizontal dd{min-width:100px}.pf-dynamic-area .dl-horizontal dd.txt-color,.pf-dynamic-area .dl-horizontal dd.pf-help-light,.pf-dynamic-area .dl-horizontal dd.pf-help,.pf-dynamic-area .dl-horizontal .dataTable td.pf-table-action-cell>dd.pf-table-action-icon-cell,.dataTable .pf-dynamic-area .dl-horizontal td.pf-table-action-cell>dd.pf-table-action-icon-cell{font-weight:bold}.pf-dynamic-area>[class~='alert']:last-of-type{margin-bottom:0}.pf-code-ObjectBrace{color:#782d77;font-weight:bold}.pf-code-ArrayBrace{color:#3e264e;font-weight:bold}.pf-code-PropertyName{color:#1d1d1d;font-weight:bold}.pf-code-String{color:#e28a0d}.pf-code-Number{color:#4f9e4f}.pf-code-Boolean{color:#313966;font-weight:bold}.pf-code-Function{color:#782d77}.pf-code-Null{color:#2b2b2b;font-weight:bold}.pf-code-Comma{color:#1d1d1d;font-weight:bold}code .fas,code .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list code li>i,code .far,code .fab{color:#3c3f41;cursor:pointer}#pf-logo-wrapper{display:block}#pf-head{margin-bottom:0px}#pf-head a{-webkit-transition:color 0.15s ease-out;transition:color 0.15s ease-out;will-change:color}#pf-head a:focus{color:#477372}#pf-head a:focus img{border-color:#3c3f41}#pf-head a:hover{text-decoration:none}#pf-head a:hover .badge{color:#6caead}#pf-head a:hover img{border-color:#568a89}#pf-head i{margin-right:2px}#pf-head .pf-brand-desc{margin:6px 10px 0 90px;width:180px}#pf-head .pf-head-menu{padding:3px 10px;line-height:24px}#pf-head .pf-head-menu .pf-head-menu-logo{width:24px;height:24px;display:inline-block;float:left}#pf-head .pf-head-user-character,#pf-head .pf-head-user-ship{opacity:0;visibility:hidden}#pf-head .pf-head-active-user{cursor:pointer}#pf-head .pf-head-active-user,#pf-head #pf-head-current-location{display:none}#pf-head .pf-head-active-user .badge,#pf-head #pf-head-current-location .badge{-webkit-transition:color 0.3s ease-out;transition:color 0.3s ease-out}#pf-head .pf-head-user-character-image,#pf-head .pf-head-user-ship-image{display:inline-block;margin-top:-6px;margin-bottom:-6px;width:27px;border:1px solid #3c3f41;margin-right:3px;image-rendering:-webkit-optimize-contrast;-webkit-transition:border-color 0.15s ease-out;transition:border-color 0.15s ease-out;will-change:border-color}#pf-head .pf-head-program-status{cursor:pointer}#pf-head .pf-head-map-tracking{margin-bottom:4px;margin-top:4px}#pf-head .navbar-text{min-width:60px}#pf-head .tooltip .tooltip-inner{color:#adadad}.pf-head{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-head .badge{background-color:#3c3f41;color:#adadad}.pf-head .badge:empty{display:none}.pf-head small{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}#pf-footer{display:flex;position:absolute;bottom:0;left:0;width:100%;margin:0;background:rgba(60,63,65,0.3);padding:1px 0}#pf-footer a{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;color:#375959}#pf-footer a:hover{color:#477372;text-decoration:none}#pf-footer .pf-footer-left{display:flex;flex:none;justify-content:flex-start}#pf-footer .pf-footer-center{display:flex;flex:1;padding:0 20px}#pf-footer .pf-footer-right{display:flex;flex:none;justify-content:flex-end}.navbar-fixed-bottom{padding:2px 0}.navbar-fixed-bottom .container-fluid{padding-left:0;padding-right:0}.pf-menu-clock{position:absolute;bottom:0;width:100%;padding:6px 8px;text-align:center}#pf-global-info{width:100%;margin-bottom:0;border:none;padding:9px 10px}#pf-global-info .ui-pnotify-title{margin-bottom:0}.panel-reverse-order{display:table;width:100%}.panel-reverse-order .reverse-order-header{display:table-header-group}.panel-reverse-order .reverse-order-footer{display:table-footer-group}.pf-sortable-ghost{will-change:opacity;transition:opacity 0.2s ease-out;opacity:0.7 !important}.pf-sortable-ghost .pf-module-handler-drag{color:#f0ad4e;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}@-webkit-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-moz-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-ms-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}.pf-animate{visibility:hidden;opacity:0}.pf-color-line{position:fixed;top:0;left:0;width:100%;height:3px;background:repeating-linear-gradient(-45deg, #66c84f 0%, #568a89 12.5%, #6caead 25%, #5cb85c 37.5%, #66c84f 50%);background-size:100vw 100vw;-webkit-animation:rotateRainbow 3s infinite linear forwards;animation:rotateRainbow 3s infinite linear forwards}.pf-color-line.warning{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UyOGEwZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UyOGEwZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e28a0d),color-stop(100%, #e28a0d));background-image:-moz-linear-gradient(left, #e28a0d,#e28a0d 100%);background-image:-webkit-linear-gradient(left, #e28a0d,#e28a0d 100%);background-image:linear-gradient(to right, #e28a0d,#e28a0d 100%)}.pf-color-line.danger{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E1MjUyMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2E1MjUyMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #a52521),color-stop(100%, #a52521));background-image:-moz-linear-gradient(left, #a52521,#a52521 100%);background-image:-webkit-linear-gradient(left, #a52521,#a52521 100%);background-image:linear-gradient(to right, #a52521,#a52521 100%)}.pf-splash{position:absolute;z-index:2000;background-color:#1d1d1d;color:#63676a;top:0;bottom:0;left:0;right:0;will-change:opacity}.pf-splash:not(.pf-splash-warning):not(.pf-splash-error){cursor:wait}.pf-splash .pf-splash-title{position:fixed;left:50%;top:30%;text-align:center;max-width:500px;padding:20px;-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.pf-splash .pf-splash-debug{position:absolute;bottom:0;width:100%}.pf-splash .pf-splash-debug .pf-splash-debug-headline{padding:0 10px}.pf-splash .pf-splash-debug .pf-splash-pre{margin-bottom:0}@media (max-width: 1200px){.pf-landing #pf-logo-container{margin:5px auto}.pf-landing .pf-brand-desc{display:none}.pf-landing .navbar .navbar-brand{margin-left:10px}}.pf-landing section:not(:last-of-type){border-bottom:1px solid #2b2b2b}.pf-landing section{min-height:200px;padding:20px 0 40px 0}.pf-landing section h4:not(.pf-dynamic-area){font-size:18px;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;margin:5px 0 10px 0;border-bottom:1px solid #2b2b2b;line-height:34px}.pf-landing .container>.row{margin-bottom:30px}.pf-landing .alert{box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing a[data-gallery]{position:relative;display:inline-block;overflow:hidden;margin:5px 0 15px 0;box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing a[data-gallery]:before{content:'\f06e';font-family:'Font Awesome 5 Free';font-size:20px;color:#e28a0d;position:absolute;height:100%;width:100%;z-index:10;-webkit-transition:transform 0.1s ease-out,opacity 0.1s ease-out;transition:transform 0.1s ease-out,opacity 0.1s ease-out;will-change:transform, opacity;transform:scale(1.3, 1.3);opacity:0;display:flex;flex-direction:column;justify-content:center;align-items:center}.pf-landing a[data-gallery]:hover img{border-color:#6caead;-webkit-filter:brightness(50%);filter:brightness(50%)}.pf-landing a[data-gallery]:hover:before{-webkit-transition-delay:.05s;transition-delay:.05s;transform:scale(1, 1);opacity:1}.pf-landing a[data-gallery] .pf-landing-image-preview{border-width:1px;border-style:solid;border-color:#1d1d1d;display:inline-block;will-change:all;-webkit-filter:brightness(100%);filter:brightness(100%);-webkit-transition:all 0.2s ease-out;transition:all 0.2s ease-out}.pf-landing a[data-gallery] .pf-landing-image-preview.pf-landing-image-preview-small{height:160px}.pf-landing a[data-gallery] .pf-landing-image-preview.pf-landing-image-preview-medium{height:256px}#pf-landing-top{height:355px;border-bottom:1px solid #313335;position:relative}#pf-landing-top:before{content:'';width:100%;height:100%;position:absolute;background:url("../../img/pf-bg.jpg") #05050a;background-repeat:no-repeat;background-position:0 0;-webkit-filter:brightness(.9);filter:brightness(.9)}#pf-landing-top #pf-logo-container{-moz-transform:scale3d(0.8, 0.8, 1);-ms-transform:scale3d(0.8, 0.8, 1);-webkit-transform:scale3d(0.8, 0.8, 1);transform:scale3d(0.8, 0.8, 1)}#pf-landing-top #pf-header-container{position:absolute;width:100%;background-position:center center}#pf-landing-top #pf-header-container #pf-header-canvas{position:absolute;visibility:hidden;top:0;left:0}#pf-landing-top #pf-header-container #pf-logo-container{z-index:110}#pf-landing-top #pf-header-container #pf-header-preview-container{position:absolute;left:400px;width:590px;height:350px;top:37px}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element{position:relative;margin-left:12px;margin-top:12px;height:155px;width:180px;padding:7px;opacity:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-color:rgba(43,43,43,0.5)}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element:nth-child(n+4){box-shadow:0 4px 10px rgba(0,0,0,0.4)}#pf-landing-top #pf-header-container #pf-header-preview-container .pf-header-preview-element:after{content:'';position:absolute;width:calc(100% - 14px);height:calc(100% - 14px);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-repeat:no-repeat;background-position:50% 50%;background-color:rgba(29,29,29,0.75)}#pf-landing-top .container{position:relative;margin-top:10px}#pf-header-preview-intel:after{background-image:url("../../img/landing/intel.png")}#pf-header-preview-map:after{background-image:url("../../img/landing/map.png")}#pf-header-preview-scope:after{background-image:url("../../img/landing/scope.png")}#pf-header-preview-signature:after{background-image:url("../../img/landing/signature.png")}#pf-header-preview-data:after{background-image:url("../../img/landing/data.png")}#pf-header-preview-gameplay:after{background-image:url("../../img/landing/gameplay.png")}#pf-landing-login{padding-top:40px;padding-bottom:30px}@media (max-width: 1199px){#pf-landing-login{padding-top:10px}}#pf-landing-login .row{margin-bottom:0}#pf-landing-login .pf-character-selection>div:not(.pf-character-row-animate){-webkit-transition:width 0.2s ease,margin 0.2s ease;transition:width 0.2s ease,margin 0.2s ease}#pf-landing-login .pf-dynamic-area{display:inline-block;margin:10px 5px 20px 5px;padding:10px 10px 5px 10px;min-width:155px;min-height:184px;overflow:visible;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}#pf-landing-login .pf-dynamic-area .ribbon-wrapper{z-index:5}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper{opacity:0;width:128px;border:2px solid #63676a;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;-webkit-transition:border-color 0.2s ease-out,box-shadow 0.2s ease-out;transition:border-color 0.2s ease-out,box-shadow 0.2s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);will-change:border-color, transition;overflow:hidden;cursor:pointer;display:inline-block;background-color:#2b2b2b;box-sizing:content-box}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover{border-color:#4f9e4f}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover .pf-character-name{color:#4f9e4f}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper:hover .pf-character-image{-webkit-filter:grayscale(50%);filter:grayscale(50%)}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper.pf-character-active:after{font-family:"Font Awesome 5 Free";content:"\f111";font-weight:bold;position:absolute;top:5px;left:5px;height:14px;width:14px;color:#5cb85c;font-size:10px}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image{overflow:hidden;width:128px;height:128px;position:relative}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image .pf-character-info{position:absolute;top:0;left:0;width:0;height:100%;color:#adadad;background:rgba(60,63,65,0.8);overflow:hidden;will-change:width, transition;padding:10px 0}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-select-image .pf-character-info .pf-character-info-text{line-height:25px}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-name{font-size:13px;line-height:30px;border-top:1px solid #313335;color:#adadad;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}#pf-landing-login .pf-dynamic-area .pf-character-image-wrapper .pf-character-image{-webkit-transition:all 0.3s ease-out;transition:all 0.3s ease-out;-webkit-filter:grayscale(0%);filter:grayscale(0%)}#pf-landing-login .pf-sso-login-button{position:relative;display:inline-block;width:270px;height:45px;border:none;margin-bottom:10px;background-color:transparent;background-image:url("../../img/landing/eve_sso_login_buttons_large_black_hover.png");cursor:pointer;box-shadow:0 2px 5px rgba(0,0,0,0.2)}#pf-landing-login .pf-sso-login-button:before{content:' ';position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 4px 5px rgba(0,0,0,0.2);opacity:0;-webkit-transition:opacity 0.12s ease-in-out;transition:opacity 0.12s ease-in-out;will-change:opacity}#pf-landing-login .pf-sso-login-button:after{content:' ';position:absolute;width:270px;height:45px;left:0;top:0;background-image:url("../../img/landing/eve_sso_login_buttons_large_black.png");-webkit-transition:opacity 0.12s ease-in-out;transition:opacity 0.12s ease-in-out;will-change:opacity}#pf-landing-login .pf-sso-login-button:hover:before{opacity:1}#pf-landing-login .pf-sso-login-button:hover:after{opacity:0}#pf-landing-login .pf-sso-login-button.disabled{pointer-events:auto}#pf-landing-login #pf-notification-panel{display:none}#pf-header-map{position:relative;margin:0 auto;height:380px;width:600px;pointer-events:none}#pf-header-map .pf-header-svg-layer{position:absolute;top:0;left:0;right:0;bottom:0}#pf-header-map #pf-header-systems{z-index:100}#pf-header-map #pf-header-connectors{z-index:90}#pf-header-map #pf-header-connections{z-index:80}#pf-header-map #pf-header-background{z-index:70}#pf-header-map #pf-header-background .pf-header-system{display:none}#pf-header-map-bg{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}#pf-header-map-bg img{pointer-events:none}#pf-header-map-bg #pf-map-bg-image{opacity:0;position:absolute;bottom:0;right:0;width:100%;height:100%}#pf-header-map-bg #pf-map-neocom{opacity:0;height:665px;width:21px}#pf-header-map-bg #pf-map-browser{opacity:0;position:absolute;top:110px;left:21px;height:560px;width:515px}#pf-landing-gallery-carousel{background-image:url("../../img/pf-header-bg.jpg")}#pf-landing-gallery-carousel .slide-content{border-radius:5px;pointer-events:none}#pf-landing-gallery-carousel h3{width:100%;text-align:left}.pf-landing-pricing-panel{margin-top:20px}.pricing-big{position:relative;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pricing-big .panel-heading{border-color:#3c3f41}.pricing-big .the-price{padding:1px 0;background:#2d3031;text-align:center}.pricing-big .the-price .subscript{font-size:12px;color:#63676a}.pricing-big .price-features{background:#3c3f41;color:#adadad;padding:20px 15px;line-height:22px}.pricing-big .price-features:not(.price-features-fluid){min-height:205px}.pricing-big .price-features .list-unstyled.text-left li,.pricing-big .price-features .text-left.list-inline li{text-indent:-1em;padding-left:1.5em}.pricing-big .price-features .list-unstyled.text-left li .fa,.pricing-big .price-features .text-left.list-inline li .fa{text-indent:0}.pricing-big table tr td{line-height:1}.pricing-big table tr td .btn-group .btn{padding-top:4px;padding-bottom:4px}#pf-landing-admin .pf-landing-admin-login{margin-bottom:0}#pf-landing-about .pf-landing-about-me{width:256px;height:256px;border:none;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4)}.pf-landing-footer{padding:30px 0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background-color:#171717}.pf-landing-footer .row{margin-bottom:0 !important}.pf-landing-footer .pf-social-networks>li{display:inline-block;line-height:1}.pf-landing-footer .pf-social-networks>li a{display:inline-block;background:rgba(99,103,106,0.5);line-height:24px;text-align:center;font-size:14px;margin-right:3px;padding:6px 6px 2px 6px;width:36px}.pf-body[data-script='admin'] .navbar-brand:hover{color:#777}.pf-body[data-script='admin'] .panel{text-align:initial}.pf-body[data-script='admin'] .panel h3 img{position:absolute;right:0;top:0;margin:4px 14px 0 0;border-radius:30%}.pf-body[data-script='admin'] .form-horizontal .panel{color:#adadad}.pf-body[data-script='setup'] body{user-select:text}.pf-body[data-script='setup'] .navbar-brand:hover{color:#777}.pf-body[data-script='setup'] section{padding-bottom:0;border-bottom:0}.pf-body[data-script='setup'] section:first-of-type{padding-top:60px}.pf-body[data-script='setup'] section:last-of-type{padding-bottom:60px}.pf-body[data-script='setup'] section .container>.row{margin-bottom:0}#pf-static-logo-svg{opacity:0;position:absolute;z-index:105;overflow:visible}#pf-static-logo-svg path{will-change:fill, opacity, transform, translateZ, translateX, translateY;pointer-events:all;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.logo-ploygon-top-right{fill:#477372;fill-rule:evenodd;stroke:#477372;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-bottom-left{fill:#5cb85c;fill-rule:evenodd;stroke:#5cb85c;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-bottom-right{fill:#375959;fill-rule:evenodd;stroke:#375959;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1}.logo-ploygon-top-left{fill:#63676a;fill-opacity:1;fill-rule:evenodd;stroke:#63676a;stroke-width:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1}@-webkit-keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}@-moz-keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}@-ms-keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}@keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}#pf-map-tab-element{max-width:2535px;margin:0 auto}.pf-map-tab-content .pf-map-wrapper{position:relative;resize:vertical;width:100%;height:555px;max-width:2535px;max-height:1000px;min-height:250px;overflow:auto;padding:5px;background:rgba(43,43,43,0.93);box-shadow:inset -3px 3px 10px 0 rgba(0,0,0,0.3);will-change:width, height;border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-width:1px;border-style:solid;border-color:#313335}.pf-map-tab-content .pf-map-wrapper:before{content:'';position:absolute;bottom:0;right:0;border-style:solid;border-width:14px 14px 0 0;border-color:transparent #313335 transparent transparent;cursor:nwse-resize}.pf-map-tab-content .pf-map-wrapper:focus,.pf-map-tab-content .pf-map-wrapper:hover{border:1px solid #3c3f41}.pf-map-tab-content .pf-map-wrapper:focus:before,.pf-map-tab-content .pf-map-wrapper:hover:before{border-color:transparent #3c3f41 transparent transparent}.pf-map-overlay{position:absolute;display:none;z-index:10000;right:25px;background:rgba(0,0,0,0.25);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-map-overlay.pf-map-overlay-timer{bottom:23px;width:36px;height:36px}.pf-map-overlay.pf-map-overlay-info{top:8px;height:36px;min-height:36px;min-width:36px;padding:3px 3px 3px 8px;line-height:26px}.pf-map-overlay.pf-map-overlay-info i{margin:0;margin-top:5px;width:0;height:26px;opacity:0;color:#63676a;transform:scale(0);transform-origin:50% 50% 0px;-webkit-transition:color 0.18s ease-in-out;transition:color 0.18s ease-in-out;cursor:help;will-change:all}.pf-map-overlay.pf-map-overlay-info i.fas,.pf-map-overlay.pf-map-overlay-info .pf-landing .pf-landing-list li>i,.pf-landing .pf-landing-list .pf-map-overlay.pf-map-overlay-info li>i,.pf-map-overlay.pf-map-overlay-info i.far{font-size:20px}.pf-map-overlay.pf-map-overlay-info i.glyphicon{margin-top:1px;font-size:22px;padding-left:3px}.pf-map-overlay.pf-map-overlay-info i.active,.pf-map-overlay.pf-map-overlay-info i:hover{color:#c2760c}.pf-map-overlay.pf-map-overlay-local{top:54px;min-height:80px;width:32px;display:block;will-change:width}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content{margin-right:36px;padding:5px 0 5px 5px;overflow:hidden}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline{font-size:12px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline .badge{margin-left:5px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-headline .pf-system-sec{cursor:default}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-local-table{font-size:10px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-local-table td{white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .dataTables_paginate,.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .dataTables_empty{white-space:nowrap}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-toolbar .pf-map-overlay-toolbar-icon{vertical-align:0;margin-top:14px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-content .pf-map-overlay-toolbar .pf-map-overlay-toolbar-checkbox{display:inline-block;margin-bottom:0}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main{position:absolute;top:0;right:0;height:100%;padding:3px;width:32px;cursor:pointer;text-align:center;border-left:1px solid #2b2b2b}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger{margin-bottom:10px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger:hover,.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main .pf-map-overlay-local-trigger.right{color:#c2760c}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-main i{font-size:12px}.pf-map-overlay.pf-map-overlay-local .pf-map-overlay-local-jumps{position:absolute;bottom:5px;width:calc(100% - 6px)}.pf-map-overlay.pf-map-overlay-local .badge{font-family:Arial, sans-serif;background-color:#2b2b2b}.pf-grid-small:before{content:' ';display:block;position:absolute;left:0;top:0;width:100%;height:100%;opacity:0.6;background:url('data:image/png;base64,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') !important}.pf-map{width:2500px;height:1500px;position:relative;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-map .jsplumb-overlay{opacity:1;pointer-events:none;will-change:opacity;-webkit-transition:opacity 0.18s ease-out;transition:opacity 0.18s ease-out}.pf-map .jsplumb-hover.jsplumb-overlay{opacity:0 !important}.pf-map .jsplumb-hover:not(.jsplumb-overlay){animation-duration:1s;animation-delay:0.5s;animation-fill-mode:both;animation-timing-function:linear;animation-iteration-count:infinite;animation-name:bounce}.pf-map .jsplumb-target-hover,.pf-map .jsplumb-source-hover{animation-duration:1s;animation-delay:0.5s;animation-fill-mode:both;animation-timing-function:linear;animation-iteration-count:infinite;animation-name:bounce;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.pf-map .pf-system{position:absolute;min-width:60px;height:auto;overflow:hidden;background-color:#313335;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:100;will-change:top, left, opacity;border-width:2px;border-style:solid;border-color:#63676a;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-transition:border-color 0.2s ease-out,box-shadow 0.12s ease-out,opacity 0.12s ease-out;transition:border-color 0.2s ease-out,box-shadow 0.12s ease-out,opacity 0.12s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.pf-map .pf-system:hover{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-transform:translate3d(0, -1px, 0) !important;-ms-transform:translate3d(0, -1px, 0) !important;-webkit-transform:translate3d(0, -1px, 0) !important;transform:translate3d(0, -1px, 0) !important}.pf-map .pf-system:hover:not(.jsPlumb_dragged){z-index:1040 !important}.pf-map .pf-system .pf-system-head{padding:0 3px 0 3px;cursor:pointer;font-family:Arial, sans-serif;font-weight:bold;white-space:nowrap}.pf-map .pf-system .pf-system-head .pf-system-head-name{border:none;display:inline-block;min-width:50px;color:#adadad;margin-right:2px}.pf-map .pf-system .pf-system-head .pf-system-head-counter{display:inline-block;text-align:right;min-width:8px;margin-right:1px;color:#5cb85c;cursor:help}.pf-map .pf-system .pf-system-head .pf-system-head-counter:empty{display:none}.pf-map .pf-system .pf-system-head .pf-system-effect{font-size:11px}.pf-map .pf-system .pf-system-head .fa-lock{font-size:11px;display:none}.pf-map .pf-system .pf-system-head .pf-system-head-expand{margin-left:2px;color:#63676a;width:10px;display:none}.pf-map .pf-system .pf-system-head .editable-empty{font-style:normal}.pf-map .pf-system .pf-system-head-info{display:flex;color:#7c8184;font-size:10px;line-height:10px;padding-right:1px;margin-bottom:2px}.pf-map .pf-system .pf-system-head-info [class^="pf-system-sec-"]{cursor:help}.pf-map .pf-system .pf-system-head-info-left{flex:1}.pf-map .pf-system .pf-system-head-info-right{flex:1;text-align:right}.pf-map .pf-system .pf-system-body{height:0px;width:100%;overflow:hidden;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab;padding:0 4px;white-space:nowrap;display:none;will-change:width;border-top-width:1px;border-top-style:dashed;border-top-color:#63676a}.pf-map .pf-system .pf-system-body .pf-system-body-item{position:relative;color:#7c8184;font-size:10px;line-height:16px;height:16px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-right{float:right;color:#f0ad4e;width:50px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:none}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status{font-size:6px;width:10px;vertical-align:middle}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-item-name{position:absolute;display:inline-block;width:calc(100% - 10px);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pf-map .pf-system .tooltip.in{opacity:1}.pf-map .pf-system .tooltip .tooltip-inner{color:#313335;background-color:#adadad;padding:3px 3px}.pf-map .pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#ffb 0px 0px 8px 0px;box-shadow:#ffb 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target),.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#58100d 0px 0px 8px 0px;box-shadow:#58100d 0px 0px 8px 0px;background-color:#58100d}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body,.pf-map .jsPlumb_dragged:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body{background-color:#58100d}.pf-map .pf-system-locked .pf-system-sec{cursor:default !important}.pf-map .pf-system-locked .pf-system-body{cursor:default !important}.pf-map .pf-system-locked .fa-lock{color:#63676a !important;display:inline-block !important}.pf-map .pf-system-debug{position:absolute;color:#fff;font-size:10px;line-height:22px;text-align:center;pointer-events:none;z-index:500}.pf-map .pf-map-endpoint-source,.pf-map .pf-map-endpoint-target{z-index:90}.pf-map .pf-map-endpoint-source svg,.pf-map .pf-map-endpoint-target svg{overflow:visible}.pf-map .pf-map-endpoint-source svg circle,.pf-map .pf-map-endpoint-target svg circle{-webkit-transition:stroke 0.18s ease-out,fill 0.18s ease-out;transition:stroke 0.18s ease-out,fill 0.18s ease-out}.pf-map .pf-map-endpoint-source svg *,.pf-map .pf-map-endpoint-target svg *{stroke:#63676a;stroke-width:2;fill:#3c3f41;cursor:pointer}.pf-map .pf-map-endpoint-source:hover circle,.pf-map .pf-map-endpoint-target:hover circle{stroke:#e28a0d !important}.pf-map .pf-map-endpoint-source.jsplumb-hover,.pf-map .pf-map-endpoint-target.jsplumb-hover{z-index:95}.pf-map .pf-map-endpoint-source.jsplumb-hover.pf-map-endpoint-bubble:after,.pf-map .pf-map-endpoint-target.jsplumb-hover.pf-map-endpoint-bubble:after{filter:drop-shadow(-3px 3px 4px rgba(0,0,0,0.3));animation-iteration-count:infinite;animation-delay:0.5s}.pf-map .pf-map-endpoint-source.jsplumb-dragging circle,.pf-map .pf-map-endpoint-target.jsplumb-dragging circle{stroke:#e28a0d}.pf-map .jsplumb-endpoint-drop-allowed circle{stroke:#5cb85c !important;fill:#5cb85c !important}.pf-map .jsplumb-endpoint-drop-forbidden circle{stroke:#a52521 !important;fill:#a52521 !important}.pf-map .jsplumb-endpoint:after{content:url("../../img/bubble.svg");position:absolute;display:block;pointer-events:none;top:-10px;left:-10px;width:30px;height:30px;z-index:-1;will-change:opacity, transform;animation-name:pfBubblePop;animation-duration:0.09s;animation-timing-function:cubic-bezier(0.16, 0.87, 0.48, 0.99);animation-fill-mode:forwards;animation-iteration-count:1}.pf-map .pf-map-endpoint-bubble:after{display:block;animation-name:pfBubbleWobble;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:1;animation-fill-mode:both}.pf-map svg.jsplumb-connector{cursor:pointer;opacity:1;stroke-linecap:round;-webkit-transition:stroke 0.18s ease-out,opacity 0.18s ease-out;transition:stroke 0.18s ease-out,opacity 0.18s ease-out;will-change:all}.pf-map svg.jsplumb-connector path{-webkit-transition:stroke 0.18s ease-out;transition:stroke 0.18s ease-out}.pf-map svg.jsplumb-connector path:nth-child(2){stroke:#3c3f41}.pf-map svg.jsplumb-connector path:first-child{stroke:#63676a}.pf-map svg.jsplumb-connector.jsplumb-hover{z-index:80;filter:drop-shadow(-3px 3px 4px rgba(0,0,0,0.3))}.pf-map svg.jsplumb-connector.jsplumb-hover:not(.pf-map-connection-jumpbridge):not(.pf-map-connection-abyssal) path:first-child{stroke:#eaeaea}.pf-map svg.jsplumb-connector.jsplumb-hover.pf-map-connection-jumpbridge path:nth-child(2),.pf-map svg.jsplumb-connector.jsplumb-hover.pf-map-connection-abyssal path:nth-child(2){stroke:#eaeaea}.pf-map svg.jsplumb-connector.jsplumb-dragging{-webkit-transition:opacity 0.18s ease-out;transition:opacity 0.18s ease-out;opacity:0.4;z-index:80}.pf-map svg.pf-map-connection-abyssal{z-index:40}.pf-map svg.pf-map-connection-abyssal path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-abyssal path:nth-child(2){stroke:#5a225a}.pf-map svg.pf-map-connection-abyssal:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-abyssal:hover path:nth-child(2){stroke:#eaeaea}.pf-map svg.pf-map-connection-jumpbridge{z-index:50}.pf-map svg.pf-map-connection-jumpbridge path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge path:nth-child(2){stroke:#568a89}.pf-map svg.pf-map-connection-jumpbridge:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge:hover path:nth-child(2){stroke:#eaeaea}.pf-map svg.pf-map-connection-stargate{z-index:60}.pf-map svg.pf-map-connection-stargate path:first-child{stroke:#63676a}.pf-map svg.pf-map-connection-stargate path:nth-child(2){stroke:#313966}.pf-map svg.pf-map-connection-stargate:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-fresh,.pf-map svg.pf-map-connection-wh-reduced,.pf-map svg.pf-map-connection-wh-critical,.pf-map svg.pf-map-connection-wh-eol{z-index:70}.pf-map svg.pf-map-connection-wh-eol path:first-child{stroke:#d747d6}.pf-map svg.pf-map-connection-wh-eol:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-reduced path:nth-child(2){stroke:#e28a0d}.pf-map svg.pf-map-connection-wh-critical path:nth-child(2){stroke:#a52521}.pf-map svg.pf-map-connection-active{filter:drop-shadow(0px 0px 3px #ffb)}.pf-map svg.pf-map-connection-process{opacity:0.4 !important}.pf-map svg.pf-map-connection-process path{pointer-events:none}.pf-map .pf-map-component-overlay,.pf-map .pf-map-connection-state-overlay{font-size:10px;z-index:1020;background-color:#3c3f41;color:#adadad}.pf-map .pf-map-component-overlay{padding:1px 4px;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-map .pf-map-component-overlay.small{-webkit-font-smoothing:antialiased;font-family:Arial, sans-serif;padding:2px;line-height:12px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.3);box-shadow:0 3px 6px rgba(0,0,0,0.3)}.pf-map .pf-map-component-overlay.icon{line-height:10px;padding:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.3);box-shadow:0 3px 6px rgba(0,0,0,0.3)}.pf-map .pf-map-connection-state-overlay{background-color:transparent;font-size:12px;margin-left:-7px;margin-top:-7px;width:15px;height:15px;opacity:0.4 !important;z-index:1030}.pf-map .frig{background-color:#f0ad4e;color:#1d1d1d}.pf-map .mass{background-color:#a52521;color:#eaeaea}.pf-map .eol{background-color:#3c3f41;color:#d747d6}.pf-map .pf-map-connection-arrow-overlay{stroke:#313335;fill:#5cb85c}.pf-map .pf-map-connection-diamond-overlay{stroke:#313335;fill:#d9534f;animation-name:pfPulseDanger;animation-duration:4s;animation-iteration-count:infinite}.ui-dialog-content label,.ui-dialog-content .editable-input .editable-checklist>div>label>span,.editable-input .ui-dialog-content .editable-checklist>div>label>span{min-width:60px}.dropdown-menu{min-width:150px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:1050;will-change:opacity, top, left, transform}.dropdown-menu a{cursor:pointer}.dropdown-menu i{width:20px;pointer-events:none}.dropdown-menu .dropdown-menu{border-top-left-radius:0;border-bottom-left-radius:0;clip-path:inset(-12px -12px -12px 0px)}.dropdown-menu[role]>li:not(.disabled){position:relative}.dropdown-menu[role]>li:not(.disabled):before{content:'';position:absolute;background-color:#5cb85c;opacity:0;will-change:opacity,left;-webkit-transition:left 0.15s ease-out,opacity 0.15s ease-out;transition:left 0.15s ease-out,opacity 0.15s ease-out;width:2px;height:100%;left:0}.dropdown-menu[role]>li:not(.disabled):hover:before{left:-4px;opacity:1}.dropdown-menu>li.disabled{cursor:not-allowed;pointer-events:none}.dropdown-menu>li>a{padding:3px 8px}.pf-system-tooltip-inner{color:#adadad;padding:2px 4px;min-width:25px;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.pf-system-info-module h5{text-transform:capitalize}.pf-system-info-module .pf-system-info-name-cell{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all}.pf-system-info-module .pf-system-info-description-area{min-height:124px;padding:0}.pf-system-info-module .pf-system-info-description-area .pf-system-info-description-button{position:absolute;right:10px;top:13px}.pf-system-info-module .pf-system-info-description-area .pf-system-info-description{padding:10px;user-select:text}.pf-system-info-module .pf-system-info-description-area .note-toolbar kbd{padding:3px 4px}.pf-system-info-module .pf-system-info-description-area .note-toolbar .note-customBtn{float:right}.pf-system-info-module .pf-system-info-description-area .note-toolbar:before,.pf-system-info-module .pf-system-info-description-area .note-toolbar:after{content:" ";display:table}.pf-system-info-module .pf-system-info-description-area .note-toolbar:after{clear:both}.pf-system-info-module .pf-system-info-description>h2:first-child,.pf-system-info-module .pf-system-info-description>h3:first-child,.pf-system-info-module .note-editable>h2:first-child,.pf-system-info-module .note-editable>h3:first-child{margin-top:0 !important}.pf-system-info-module .pf-system-info-description h2:before,.pf-system-info-module .pf-system-info-description h3:before,.pf-system-info-module .note-editable h2:before,.pf-system-info-module .note-editable h3:before{font-family:"Font Awesome 5 Free";content:"\f105";font-weight:bold;display:inline-block;margin-right:3px}.pf-system-info-module .pf-system-info-description h2,.pf-system-info-module .note-editable h2{font-size:16px;margin:15px 0}.pf-system-info-module .pf-system-info-description h3,.pf-system-info-module .note-editable h3{font-size:14px;margin:10px 0}.pf-system-info-module .pf-system-info-description a:after,.pf-system-info-module .note-editable a:after{font-family:"Font Awesome 5 Free";content:"\f35d";font-size:70%;vertical-align:top;font-weight:bold;display:inline-block;margin-left:2px}.pf-system-info-module .pf-system-info-description hr,.pf-system-info-module .note-editable hr{border-top:1px solid #313335}.pf-system-info-module .pf-system-info-description blockquote,.pf-system-info-module .note-editable blockquote{padding:5px 10px;margin:0 0 10px;font-size:13px;border-left:3px solid #477372}.pf-system-info-module .pf-system-info-description ol,.pf-system-info-module .pf-system-info-description ul,.pf-system-info-module .note-editable ol,.pf-system-info-module .note-editable ul{padding-left:20px}.pf-system-info-module .pf-system-info-description ul,.pf-system-info-module .note-editable ul{list-style:disc}.pf-system-info-module .pf-system-info-description ol,.pf-system-info-module .note-editable ol{list-style:decimal}.modal.link-dialog .checkbox,.modal.link-dialog .editable-input .editable-checklist>div>label,.editable-input .modal.link-dialog .editable-checklist>div>label{display:none}.pf-system-signature-module .progress-label-right{margin-right:20px;vertical-align:middle;font-size:11px}.pf-system-signature-module .pf-system-progress-scanned{display:inline-block;margin-left:20px;width:calc(100% - 225px)}.pf-system-signature-module .pf-system-progress-scanned .progress{margin-bottom:3px}.pf-system-signature-module .pf-sig-table-clear-button{will-change:opacity, transform;display:none;color:#a52521}.pf-system-signature-module .pf-sig-table{font-size:10px}.pf-system-signature-module .pf-sig-table .pf-sig-table-edit-name-input{text-transform:uppercase}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline{display:inline}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline .control-group{display:inline}.pf-system-signature-module .pf-sig-table .editable-container.editable-inline .control-group .editable-input{display:inline}.pf-system-signature-module .pf-sig-table .pf-editable-description{width:100%;background-color:#2b2b2b;max-height:50px;font-size:11px;line-height:14px;padding:3px 6px}.pf-system-signature-module .pf-sig-table-secondary th{pointer-events:none}.pf-system-signature-module .pf-sig-table-secondary th:after{display:none !important}.pf-system-signature-module .pf-sig-table-secondary th.pf-table-counter-cell{color:transparent}.pf-system-graph-module .pf-system-graph{position:relative;width:100%;height:100px;display:flex;justify-content:center;align-items:center;-webkit-transition:height 0.18s ease-out;transition:height 0.18s ease-out}.pf-system-route-module .pf-system-route-table{width:100%;font-size:10px}.pf-system-route-module .pf-system-route-table td{text-transform:capitalize}.pf-system-route-module .pf-system-route-table td .pf-fake-connection{display:none;width:12px;height:3px;cursor:pointer}.pf-system-route-module .pf-system-route-table td .pf-fake-connection[data-disabled]{cursor:initial}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-frig{width:32px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-frig:after{left:4px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-preserve-mass{width:26px}.pf-system-route-module .pf-system-route-table td .pf-fake-connection.pf-map-connection-preserve-mass:after{content:"\f071";font-family:"Font Awesome 5 Free";font-style:normal;font-weight:bold;left:4px}.pf-system-route-module .pf-system-route-table td.pf-table-jump-cell .pf-fake-connection{display:inline-block}.pf-system-intel-module .pf-system-structure-table{font-size:10px}.pf-system-killboard-module .pf-system-killboard-label-recent{display:none}.pf-system-killboard-module .pf-system-killboard-list{padding-bottom:5px}.pf-system-killboard-module .pf-system-killboard-list>li{padding-left:0;overflow:visible;min-height:50px;will-change:transform, opacity, margin-left;-webkit-transition:padding-left 0.12s cubic-bezier(0.3, 0.8, 0.8, 1.7);transition:padding-left 0.12s cubic-bezier(0.3, 0.8, 0.8, 1.7)}.pf-system-killboard-module .pf-system-killboard-list>li h5{white-space:nowrap}.pf-system-killboard-module .pf-system-killboard-list>li h3{width:120px;display:inline-block}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-char{display:inline;width:32px;margin-top:9px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-char:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-corp,.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ally{display:inline;width:20px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-corp:hover,.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ally:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ship{width:50px;margin-right:10px;border:1px solid #2b2b2b;will-change:border-color;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:border-color 0.12s ease-out;transition:border-color 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li .pf-system-killboard-img-ship:hover{border-color:#568a89}.pf-system-killboard-module .pf-system-killboard-list>li:before{content:"\f054";font-family:"Font Awesome 5 Free";font-weight:bold;position:absolute;z-index:10;left:-18px;top:16px;color:#477372;opacity:0;will-change:opacity, left;-webkit-transition:all 0.12s ease-out;transition:all 0.12s ease-out}.pf-system-killboard-module .pf-system-killboard-list>li:hover{padding-left:10px}.pf-system-killboard-module .pf-system-killboard-list>li:hover:before{opacity:1;left:-3px}.pf-system-killboard-module .pf-module-control-area{margin-bottom:0}.pf-connection-info-module>.row{display:flex;align-items:stretch;flex-wrap:wrap}.pf-connection-info-module .pf-connection-info-table{width:100%;font-size:10px}input,select{background-color:#313335;color:#adadad;border:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}input:focus,select:focus{border-color:#568a89}input:-webkit-autofill,select:-webkit-autofill{background-color:#313335 !important;-webkit-box-shadow:0 0 0 50px #313335 inset !important;box-shadow:0 0 0 50px #313335 inset !important;-webkit-text-fill-color:#adadad}input:-webkit-autofill:focus,select:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 50px #313335 inset !important;box-shadow:0 0 0 50px #313335 inset !important;-webkit-text-fill-color:#adadad}input[disabled]::-moz-placeholder,select[disabled]::-moz-placeholder{color:transparent;opacity:1}input[disabled]:-ms-input-placeholder,select[disabled]:-ms-input-placeholder{color:transparent}input[disabled]::-webkit-input-placeholder,select[disabled]::-webkit-input-placeholder{color:transparent}input.pf-select2,select.pf-select2{height:32px;padding:6px 12px}input[type='number']::-webkit-inner-spin-button,input[type='number']::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;display:none}input[type='file']::-webkit-file-upload-button{background-color:transparent;border:none;color:#63676a;outline:none}textarea{min-height:32px;max-height:400px;resize:vertical}fieldset[disabled] .form-control{color:#63676a}fieldset[disabled] .form-control::-moz-placeholder{color:transparent;opacity:1}fieldset[disabled] .form-control:-ms-input-placeholder{color:transparent}fieldset[disabled] .form-control::-webkit-input-placeholder{color:transparent}fieldset[disabled] .input-icon-left .fa-stack i:last-child,fieldset[disabled] .input-icon-right .fa-stack i:last-child{color:#3c3f41}#select2-pf-map-dialog-edit-icon-select-container,#select2-pf-map-dialog-new-icon-select-container,#select2-pf-map-dialog-new-icon-select-results,#select2-pf-map-dialog-edit-icon-select-results,.pf-form-icon-field{font-family:"Font Awesome 5 Free";font-weight:bold}#select2-pf-map-dialog-edit-icon-select-container option,#select2-pf-map-dialog-new-icon-select-container option,#select2-pf-map-dialog-new-icon-select-results option,#select2-pf-map-dialog-edit-icon-select-results option,.pf-form-icon-field option{font-family:inherit;font-weight:inherit}.input-icon-left:not(.input-icon-right) .fa-stack:first-child{left:14px}.input-icon-right:not(.input-icon-left) .fa-stack:first-child{right:14px}.input-icon-left.input-icon-right .fa-stack:first-child{left:14px}.input-icon-left.input-icon-right .fa-stack:nth-child(2){right:14px}.input-icon-left .fa-stack,.input-icon-right .fa-stack{position:absolute;top:4px}.input-icon-left .fa-stack i:first-child,.input-icon-right .fa-stack i:first-child{color:#63676a}.input-icon-left .fa-stack i:last-child,.input-icon-right .fa-stack i:last-child{color:#313335}.btn.btn-fake{border:none;text-align:left;cursor:default;opacity:1 !important;color:#63676a !important;background-color:transparent !important}.btn .btn-progress{position:absolute;display:block;height:100%;background-color:rgba(92,184,92,0.2);max-width:100%;width:0;top:0;left:0;overflow:hidden;line-height:30px;color:#f0ad4e;font-size:10px;text-align:left;-webkit-transition:width 0.1s linear;transition:width 0.1s linear}.pf-form-dropzone{border:2px dashed #2b2b2b;height:100px;background-color:#353739;text-align:center;font-size:20px;line-height:100px;margin:15px 0;color:#2b2b2b;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:color 0.18s ease-out,border-color 0.18s ease-out;transition:color 0.18s ease-out,border-color 0.18s ease-out}.pf-form-dropzone:hover{color:#568a89;border-color:#568a89;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}.toggle.btn:active{box-shadow:none}.pf-form-field-char-count{display:block;margin-top:10px}.pf-icon{display:inline-block}.pf-icon.disabled{opacity:0.5;color:#63676a}.pf-icon-dotlan,.pf-icon-anoik{position:relative;display:inline-block;width:17px;height:17px;opacity:0.8;margin:-5px 0px 0 10px}.pf-icon-dotlan:after{content:'';position:absolute;left:0;right:0;height:17px;width:17px;margin-top:4px;background:url('data:image/png;base64,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') no-repeat}.pf-icon-anoik:after{content:'';position:absolute;left:0;right:0;height:17px;width:17px;margin-top:4px;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURRoQEB4PERwRCx0SDRoTDSQQDiERDhgUExwTEx4UDyQUEiAWEiYVDSoUDigUFC4TEB0YEiIXEyAaFScYFiQZFSkYEi0XEzEWEzQXECAcGyYbGCoaGC4ZGSIdGDQZFyIeHSUeFS0cFiwcGjEbFiEgGiUfGioeFikeGjEeEzQdGTEfGTodFjkdGiwhHS4hGTUfHyojGTEhHiUlHjcgGykkHjMiGy8jIEIfGzkiHT8hGj4hHzsjGjkjIzEmIjMmHjUlIycpJTclHi8oHjwkIC4oI0MlHUIlIj4nIj0nJkglIjspIkEoHzIsJjYrJzsqJzkrI0wnHSwvLDAvKEcpIUYpJjYuJEAsIT8sJUMrJjouKjYwKkwtJUstKj8xKUcvKkYvLz4yLkIxLkQxKjo0LkYyJlMuKEsxKD01Ki85NFExKVAyL0I2MlgxJk00MEU3Ljo6Mkk2Lz85M0k3NFgzMlU2Lk45LVY3ND8+OEo8M007OU87NFQ6NUk9OVM6OkU/OUc/NERBNWI6L01BPUREPVpBQVxCPVNFPElJQVNGQldFQllFPk9IQlJJP0dNRHdDNE9ORlVOSF9MSVdPRGZLRVxPTWNOR1RTRlNTS09VTGBRR2RTRG1STGBYUWZXVFZcUmdYTmxXT15cUXBYXHRYUnBbTmhfVm1iUnpeWF9mXHVgWHFhX3JiWWdmXWxnVXhmV35pYXZtY31saYZqZHJwZINtVGxyZ2Z0aYBuX3tyYIRvZ2x8cYV1cX94bYh2Z4t1bYF5Z3Z8c5J2cop8ZY99bZZ7epN+dYiCdZ97d4WEfJOAfHmLf5CHdYaLgJqHeJaKc4KPfZeLeaCIgJ+KdaGJh5KPhZuVgo2ZiZKYjp2YjaqVja6XiKiag46jkrWYlbOdh6+elbWdlqiij8Gcl7ulj7mllaSslb2noLOsmayxo8ippLqyl6e3qMewq8K8p8i9sbnEttK/uszHtcXTx9vQsN/Nx+zQwd/ZxN/ez/Db1e7hvtjn4fPx5ub17P7w6vv++////59V2N4AAAE/SURBVHjaADIBzf4AElERERpMi3GLi2BZNQ0ODgUAGQkRNEQ9Wlp+T2CwVyEWFg0ABBE0CSBai5yCWXyfiFczDQ0AEjICNmOPs8rYknjDiu5fIyMAJREURFWPlqj+18beqtOKSCkABBAnLUSeb5r71ZnZxa97WCMAAiUlGkSHh8Kl6smv6aebeywAAhE0RD02cSqtYpP0vmJ7WEYAAhEaNi00EyIFa6l6WDVDajkAAgkRLRoUCgw1KpFXWDNHXDoAAggJCREGFE4cLE5XYjNYW0YABAACAgoJBgY2TiFXQ0czWFMAAggAAhEJFBQnKk5iR0NFXHQAAAAAAhEUCicxKjM1VyMsN1QAAgkGChsnKkFBSmJXS0VFUGwAAgIBBgoTGyIxISEjQx4YXEYAAgIAAgkbGxshIzUzDxgrQywDAKFaTfFe+Wg9AAAAAElFTkSuQmCC') no-repeat}.modal-content h2,.panel-body h2{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;letter-spacing:0;font-size:14px;margin:20px 0 10px 0;line-height:normal}.modal-content h2.pf-dynamic-area,.modal-content h4.pf-dynamic-area,.panel-body h2.pf-dynamic-area,.panel-body h4.pf-dynamic-area{min-height:0;margin:0 0 10px 0}.modal-content h2.pf-dynamic-area>img,.modal-content h4.pf-dynamic-area>img,.panel-body h2.pf-dynamic-area>img,.panel-body h4.pf-dynamic-area>img{margin:-10px 5px -10px -10px;width:35px}.modal-content h2[data-toggle="collapse"],.modal-content h4[data-toggle="collapse"],.panel-body h2[data-toggle="collapse"],.panel-body h4[data-toggle="collapse"]{cursor:pointer}.modal-content h2[data-toggle="collapse"]:hover:after,.modal-content h4[data-toggle="collapse"]:hover:after,.panel-body h2[data-toggle="collapse"]:hover:after,.panel-body h4[data-toggle="collapse"]:hover:after{color:#e28a0d !important}.modal-content h2[data-toggle="collapse"]:after,.modal-content h4[data-toggle="collapse"]:after,.panel-body h2[data-toggle="collapse"]:after,.panel-body h4[data-toggle="collapse"]:after{content:"\f078";font-family:"Font Awesome 5 Free";font-style:normal;font-weight:bold;font-size:13px;padding-right:10px;position:absolute;color:#e28a0d;top:10px;right:6px;will-change:transform, color}.modal-content h2[data-toggle="collapse"].collapsed:after,.modal-content h4[data-toggle="collapse"].collapsed:after,.panel-body h2[data-toggle="collapse"].collapsed:after,.panel-body h4[data-toggle="collapse"].collapsed:after{top:13px;right:5px;color:#63676a;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.modal-content .dataTables_wrapper+.alert{margin-top:10px}.modal-content .dataTable,.modal-content .table{font-size:10px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.modal-content hr{margin:5px 0 15px 0;border-color:#63676a}.modal-content .well{margin-bottom:0}.modal-content .well .list-inline{margin-bottom:0}.modal-content .pf-wizard-navigation{margin:0}.modal-content .pf-wizard-navigation li:not(:last-child):before{border-top:1px solid #63676a;content:"";display:block;font-size:0;overflow:hidden;position:relative;top:12px;left:71px;right:1px;width:100%}.modal-content .pf-wizard-navigation li.finished:before{-moz-border-image:-moz-linear-gradient(left, #375959,#375959) 1 1%;-moz-border-image:linear-gradient(to right, #375959,#375959) 1 1%;-o-border-image:linear-gradient(to right, #375959,#375959) 1 1%;-webkit-border-image:-webkit-linear-gradient(left, #375959,#375959) 1 1%;-webkit-border-image:linear-gradient(to right, #375959,#375959) 1 1%;border-image:-moz-linear-gradient(left, #375959,#375959) 1 1%;border-image:-webkit-linear-gradient(left, #375959,#375959) 1 1%;border-image:linear-gradient(to right, #375959,#375959) 1 1%;border-bottom:0}.modal-content .pf-wizard-navigation li.active:before{-moz-border-image:-moz-linear-gradient(left, #4f9e4f,#63676a) 1 1%;-moz-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;-o-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;-webkit-border-image:-webkit-linear-gradient(left, #4f9e4f,#63676a) 1 1%;-webkit-border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;border-image:-moz-linear-gradient(left, #4f9e4f,#63676a) 1 1%;border-image:-webkit-linear-gradient(left, #4f9e4f,#63676a) 1 1%;border-image:linear-gradient(to right, #4f9e4f,#63676a) 1 1%;border-bottom:0}.modal-content .pf-wizard-navigation li>h6{color:#63676a;font-size:11px;margin:5px}.modal-content .pf-wizard-navigation li a:hover+h6{color:#adadad}.modal-content .pf-wizard-navigation li.active a:not(.btn-danger)+h6{color:#adadad}#pf-settings-dialog .form-group .btn-sm,#pf-settings-dialog .form-group .btn-group-sm>.btn{padding:4px 7px 3px}#pf-settings-dialog #pf-dialog-captcha-wrapper{margin:0;padding:3px 0}#pf-map-dialog #pf-map-dialog-character-select,#pf-map-dialog #pf-map-dialog-corporation-select,#pf-map-dialog #pf-map-dialog-alliance-select{width:535px}#pf-route-dialog #pf-route-dialog-map-select{width:300px !important}#pf-shortcuts-dialog td kbd+i{width:16px}#pf-shortcuts-dialog td kbd:last-of-type+i{display:none}#pf-manual-scrollspy{position:relative;height:700px;overflow:auto}#pf-manual-scrollspy .list-unstyled.well,#pf-manual-scrollspy .well.list-inline{display:inline-block}.pf-system-dialog-select{width:300px !important}#pf-task-dialog .pf-task-dialog-status{min-height:inherit}#pf-map-info-logs{margin-bottom:10px}#pf-stats-dialog .pf-dynamic-area{margin-bottom:10px}#pf-structure-dialog #pf-structure-dialog-corporation-select,#pf-structure-dialog #pf-structure-dialog-type-select{width:267px !important}#pf-connection-info-dialog #pf-connection-info-dialog-type-select,#pf-connection-info-dialog #pf-connection-info-dialog-character-select{width:310px !important}.pf-jump-info-dialog blockquote{margin-top:15px;margin-bottom:5px}.pf-changelog-dialog .pf-dynamic-message-container{margin-bottom:20px}.pf-system-effect-dialog .dataTable{border-collapse:collapse}.pf-credits-dialog .pf-credits-logo-background{overflow:visible;background:url("../../img/logo_bg.png");background-size:cover;padding:20px;margin-bottom:20px}.pf-credits-dialog #pf-logo-container{width:355px;height:366px;margin:0 auto}.pf-credits-dialog .pf-dynamic-area{min-height:50px}.pf-credits-dialog .dl-horizontal{display:inline-block;width:48%}.pf-credits-dialog .btn{padding:0}.pf-credits-dialog blockquote{font-size:14px}.pf-log-graph{height:100px;width:100%}.timeline{list-style:none;position:relative}.timeline:before{top:0;bottom:0;position:absolute;content:" ";width:1px;left:50%;margin-top:20px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRmOWU0ZiIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNjM2NzZhIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4f9e4f),color-stop(25%, #63676a));background-image:-moz-linear-gradient(top, #4f9e4f,#63676a 25%);background-image:-webkit-linear-gradient(top, #4f9e4f,#63676a 25%);background-image:linear-gradient(to bottom, #4f9e4f,#63676a 25%)}.timeline>li{margin-bottom:20px;position:relative}.timeline>li.timeline-first .timeline-title{color:#4f9e4f}.timeline>li.timeline-first .timeline-badge{background-color:#4f9e4f}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-panel{width:47%;float:left;border:1px solid #313335;padding:8px;position:relative;background-color:#313335;font-size:11px;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.4);box-shadow:0 4px 10px rgba(0,0,0,0.4);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.timeline>li>.timeline-panel:before{content:" ";position:absolute;top:10px;right:-8px;display:inline-block;border-top:7px solid transparent;border-left:7px solid #63676a;border-right:0 solid #63676a;border-bottom:7px solid transparent}.timeline>li>.timeline-panel:after{content:" ";position:absolute;top:10px;right:-8px;display:inline-block;border-top:7px solid transparent;border-left:7px solid #63676a;border-right:0 solid #63676a;border-bottom:7px solid transparent}.timeline>li>.timeline-badge{color:#2b2b2b;width:23px;height:23px;line-height:23px;text-align:center;position:absolute;top:6px;left:50%;margin-left:-11px;background-color:#63676a;z-index:100;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%}.timeline>li>.timeline-badge>i{vertical-align:middle}.timeline>li.timeline-inverted>.timeline-panel{float:right}.timeline>li.timeline-inverted>.timeline-panel:before{border-left-width:0;border-right-width:7px;left:-8px;right:auto}.timeline>li.timeline-inverted>.timeline-panel:after{border-left-width:0;border-right-width:8px;left:-9px;right:auto}.timeline-title{margin-top:0;color:inherit}.timeline-body>hr{display:none}.timeline-body>hr ~ *{display:none}.timeline-body>p,.timeline-body>ul{margin-bottom:0;list-style-type:disc;margin-left:15px}.timeline-body>p+p{margin-top:5px}.timeline-footer>.timeline-title{margin-top:10px;margin-bottom:0}@media (max-width: 1200px){ul.timeline:before{left:40px}ul.timeline>li>.timeline-panel{width:calc(100% - 62px)}ul.timeline>li>.timeline-badge{left:29px;margin-left:0;top:6px}ul.timeline>li>.timeline-panel{float:right}ul.timeline>li>.timeline-panel:before{border-left-width:0;border-right-width:7px;left:-8px;right:auto}ul.timeline>li>.timeline-panel:after{border-left-width:0;border-right-width:7px;left:-8px;right:auto}}.popover{z-index:1060;max-width:600px}.popover .arrow{pointer-events:none}.popover .popover-title{text-transform:capitalize;font-family:"Arial","Oxygen Bold","Helvetica Neue",Helvetica,sans-serif;font-weight:bold}.popover .popover-content{font-family:"Arial","Oxygen Bold","Helvetica Neue",Helvetica,sans-serif}.popover img{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.popover h4{color:#adadad}.popover table{color:#adadad;line-height:16px;font-size:11px}.popover table td{padding:0 4px;vertical-align:middle !important}.popover .select2-container{margin-top:-1px;margin-left:-1px}.pf-popover-small .popover-title{padding:3px 6px}.pf-popover-small .popover-content{padding:6px 1px 3px}.pf-popover{display:initial}.pf-popover .popover-content{padding:0}.pf-popover h6{white-space:nowrap;margin-right:50px}.pf-popover h6:before,.pf-popover h6:after{content:" ";display:table}.pf-popover h6:after{clear:both}.pf-popover .well{margin-top:7px;margin-bottom:10px}.pf-popover .list-group{margin:0}.pf-popover .list-group .list-group-item{color:#313335}.pf-popover .list-group .list-group-item:hover{color:#1d1d1d}.pf-popover .list-group .list-group-item.disabled{background-color:#3c3f41;color:#63676a;cursor:not-allowed}.pf-popover .list-group .list-group-item img{width:30px;margin:-8px 10px -6px -8px;border-radius:0}.pf-popover .list-group .list-group-item i{margin-right:20px}.pf-popover-character .table>tbody>tr>td{border:none;white-space:nowrap}.pf-popover-character .table>tbody>tr>td:first-child+td{padding:0 5px}.pf-popover-character .well{margin-bottom:0}.ribbon-wrapper{width:72px;height:88px;overflow:hidden;position:absolute;top:-3px;right:-3px;pointer-events:none}.ribbon{font:bold 12px "Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;color:#2b2b2b;text-align:center;text-shadow:rgba(255,255,255,0.2) 0px 1px 0px;position:relative;padding:3px 0;left:-4px;top:16px;width:99px;-webkit-box-shadow:2px 3px 3px rgba(0,0,0,0.2);box-shadow:2px 3px 3px rgba(0,0,0,0.2);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ribbon:before,.ribbon:after{content:"";border-left:3px solid transparent;border-right:3px solid transparent;position:absolute;bottom:-3px}.ribbon.ribbon-default{color:#adadad;background-color:#353739;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJkMzAzMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzJhMmIyZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2d3031),color-stop(100%, #2a2b2d));background-image:-moz-linear-gradient(top, #2d3031,#2a2b2d);background-image:-webkit-linear-gradient(top, #2d3031,#2a2b2d);background-image:linear-gradient(to bottom, #2d3031,#2a2b2d)}.ribbon.ribbon-default:before,.ribbon.ribbon-default:after{border-top:3px solid #000}.ribbon.ribbon-green{background-color:#5cb85c;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzUxYjM1MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRhOTQ0YSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #51b351),color-stop(100%, #4a944a));background-image:-moz-linear-gradient(top, #51b351,#4a944a);background-image:-webkit-linear-gradient(top, #51b351,#4a944a);background-image:linear-gradient(to bottom, #51b351,#4a944a)}.ribbon.ribbon-green:before,.ribbon.ribbon-green:after{border-top:3px solid #285028}.ribbon.ribbon-orange{background-color:#e28a0d;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ODEwYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2I0NmQwYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4810c),color-stop(100%, #b46d0b));background-image:-moz-linear-gradient(top, #d4810c,#b46d0b);background-image:-webkit-linear-gradient(top, #d4810c,#b46d0b);background-image:linear-gradient(to bottom, #d4810c,#b46d0b)}.ribbon.ribbon-orange:before,.ribbon.ribbon-orange:after{border-top:3px solid #6c4107}.ribbon.ribbon-red{background-color:#d9534f;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2M5MzAyYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2E4MjgyNCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c9302c),color-stop(100%, #a82824));background-image:-moz-linear-gradient(top, #c9302c,#a82824);background-image:-webkit-linear-gradient(top, #c9302c,#a82824);background-image:linear-gradient(to bottom, #c9302c,#a82824)}.ribbon.ribbon-red:before,.ribbon.ribbon-red:after{border-top:3px solid #541412}.ribbon.ribbon-blue{background-color:#428bca;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzM3ODRjNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzJkNWM4NSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3784c5),color-stop(100%, #2d5c85));background-image:-moz-linear-gradient(top, #3784c5,#2d5c85);background-image:-webkit-linear-gradient(top, #3784c5,#2d5c85);background-image:linear-gradient(to bottom, #3784c5,#2d5c85)}.ribbon.ribbon-blue:before,.ribbon.ribbon-blue:after{border-top:3px solid #1a344c}.ribbon:before{left:0}.ribbon:after{right:0}.pf-loading-bars-container{position:relative;z-index:4;margin:0 auto;left:5px;right:19px;width:70px;height:50px;list-style:none}.pf-loading-bars-container .pf-loading-bars-loader{position:absolute;z-index:3;margin:0 auto;left:0;right:0;top:50%;margin-top:-19px;width:56px;height:37px;list-style:none}.pf-loading-bars-container .pf-loading-bars-loader li{background-color:#5cb85c;width:6px;height:6px;float:right;margin-right:3px !important;-webkit-box-shadow:0px 12px 6px rgba(0,0,0,0.2);box-shadow:0px 12px 6px rgba(0,0,0,0.2)}.pf-loading-bars-container .pf-loading-bars-loader li:first-child{-webkit-animation:cssload-loadbars 1.75s cubic-bezier(0.645, 0.045, 0.355, 1) infinite 0s;animation:cssload-loadbars 1.75s cubic-bezier(0.645, 0.045, 0.355, 1) infinite 0s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(2){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -0.35s;animation:cssload-loadbars 1.75s ease-in-out infinite -0.35s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(3){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -0.7s;animation:cssload-loadbars 1.75s ease-in-out infinite -0.7s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(4){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.05s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.05s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(5){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.4s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.4s}.pf-loading-bars-container .pf-loading-bars-loader li:nth-child(6){-webkit-animation:cssload-loadbars 1.75s ease-in-out infinite -1.75s;animation:cssload-loadbars 1.75s ease-in-out infinite -1.75s}@-webkit-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@-moz-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@-ms-keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}@keyframes cssload-loadbars{0%{height:6px;margin-top:16px}33%{height:6px;margin-top:16px}66%{height:31px;margin-top:0px}100%{height:6px;margin-top:16px}}.pf-landing-sticky-panel{position:fixed;min-width:100px;border-radius:5px;padding:7px;box-shadow:0 4px 10px rgba(0,0,0,0.4);z-index:100;background-color:rgba(43,43,43,0.7)}.pf-landing-sticky-panel h4{margin:5px 0 10px 0}.pf-landing-sticky-panel ul{margin-bottom:0}.pf-landing-sticky-panel ul+h4{margin-top:10px}#pf-landing-server-panel{top:50px;left:10px}#pf-landing-admin-panel{bottom:10px;right:10px}.panel-heading.note-toolbar{background-color:#313335}.panel-heading.note-toolbar .dropdown-toggle>i+span{margin-left:3px}.panel-heading.note-toolbar .dropdown-menu>.note-btn-group:first-child{margin-bottom:3px}.note-editor.note-frame{border:none;background-color:transparent;margin-bottom:0}.note-editor.note-frame .note-editing-area .note-editable{color:#63676a;background-color:transparent;will-change:height;border:1px solid transparent}.note-editor.note-frame .note-editing-area .note-editable.has-error{border-color:#d9534f}.note-editor.note-frame .note-statusbar{background-color:#313335;padding:1px 0;border-top:0}.note-editor.note-frame .note-statusbar .note-resizebar:hover .note-icon-bar{border-top:1px solid #e28a0d}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{border-top:1px solid #63676a;-webkit-transition:border-top 0.15s ease-out;transition:border-top 0.15s ease-out}.youtube{background-position:center;background-repeat:no-repeat;position:relative;display:inline-block;overflow:hidden;transition:all 200ms ease-out;cursor:pointer}.youtube .play{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAERklEQVR4nOWbTWhcVRTHb1IJVoxGtNCNdal2JYJReC6GWuO83PM/59yUS3FRFARdFlwYP1CfiojQWt36sRCUurRIdVFXIn41lAoVdRGrG1M01YpKrWjiYmaSl8ybZJL3cd+YA//NLObd3++eO8x79z5jSq5Gw+8kov0AP8vMR5l1BtBZQM4B8ks75wCdZdYZZj5qLZ4hov2Nht9Z9vhKKSIaB/gI4M4w62KeAO6Mte4lYOq20FxrlqqOibhHmeWbvNC9ZfDX1mLae391aN6limO/gwgvAPJbWeAZuSDingdwXTBw7/0IsyaA/Fkh+KqOkD+YNfHej1QKD+y7iVlOhgLvFqFfNJvNGyuBJ+KDAF8MDd0tgS8y64OlgSdJMsysL4cG7SOHkyQZLhTee7+d2R2rAVy/S+Jd7/32ouBHAP4gNNRGQyTHc/84NhqNywZp5rvjjnnvt21aABFeCQ+RLwAf2hQ8s7sv9OCLk6AHNgQvIrvbfzKCD76g/O6cu7lf/iER/aQGgy448pExZmhdegAPhR9sObFWH1gT3lp7DaA/5bkIgJhZPgsNmz02novj+KqeApj1ubwXWe4kdyeznAgNvTpE/HQmvKqOMeuFogTUVQSRno+iaLRLAJF7uIgL9O4ubgL8aWgB7S44mNX+35YpICUiAvS9sBLkq1WzT+NFffl6AuoiApi6NT37h6sWkBIRZGkQ8YtLgyji6e1mBYTqCEBPG2Naz+0BWQgtoGoRgCzEsd9hAN1X5BfnFZASUfrSAFQNsyZ1FJASUVpHiLinDJG8U2cBZYogkrcNs5waBAGdstbeU9zdqpw0gPwwSAI6VUxHyFlDpOcHUUBBIuYNs14aZAE5RVwyzPr3/0EAEY0TyfGNjBWQvwZ +CTSbehfAH29mrID8bET0+0EUkAd8WYDOmqJ3ecsG30yr9wqRfm6Y+a1BEFDEjHfHvWmY9ck6CygHvBVr8Xhtb4ZE5HZA3y8DvBNA1TjnrmXWf+sioMwZX5V/VHXMGGMMoKdDCxCRvRWBdzKzdHEO+EisilbPyopHYqp6S9UCAsz4iojI7hUDAtyXVQgIDd6KnOoaWNkbI6FaPSuZGyMArsi7MZoloB4zviI/Nhr3X95jltwTRQmoIfgisy5ai+me67OI7fE4nrqjrqfK1t0eby0FPRB6oGVlchL3rgnfrq19RKbVBdhV9IOSwJmfmJi4vi/4ThERitwyCxVAFqydshuCX5awhQ9KtmuIWd8IDZED/nXT77rvVVv6sHRKwjYi91poqP7Dr+Y6JJ1VSZIMA3wkPNy6bX+o8Bcm0sXMdwM8Fxo0A3xORPaWBp6uPXsmbxCRD0NDL0dOANhVCXy6iAjMcjbcrMt3RITKwdMVRdFo+y5yvkL4eWZ+zHt/ZVD4dEVRNGotpst+dZZZH8k86lqn2pIvT/eqrNfn2xuyqYPZ8mv7s8pfn/8Pybm4TIjanscAAAAASUVORK5CYII=") no-repeat center center;background-size:64px 64px;position:absolute;height:100%;width:100%;opacity:.8;filter:alpha(opacity=80);transition:all 0.2s ease-out}.youtube .play:hover{opacity:1;filter:alpha(opacity=100)} /*# sourceMappingURL=pathfinder.css.map */ diff --git a/public/css/v1.5.1/pathfinder.css.br b/public/css/v1.5.1/pathfinder.css.br new file mode 100644 index 000000000..0ba29acfe Binary files /dev/null and b/public/css/v1.5.1/pathfinder.css.br differ diff --git a/public/css/v1.5.0/pathfinder.css.map b/public/css/v1.5.1/pathfinder.css.map similarity index 55% rename from public/css/v1.5.0/pathfinder.css.map rename to public/css/v1.5.1/pathfinder.css.map index d31fa1763..b0a901eae 100644 --- a/public/css/v1.5.0/pathfinder.css.map +++ b/public/css/v1.5.1/pathfinder.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../../../sass/pathfinder.scss","file:///C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss","../../../sass/_variables.scss","../../../sass/_bootstrap.scss","../../../sass/bootstrap/_scaffolding.scss","../../../sass/bootstrap/_mixins.scss","../../../sass/bootstrap/_type.scss","../../../sass/bootstrap/_code.scss","../../../sass/bootstrap/_grid.scss","../../../sass/bootstrap/_tables.scss","../../../sass/bootstrap/_forms.scss","../../../sass/_colors.scss","../../../sass/bootstrap/_buttons.scss","../../../sass/bootstrap/_component-animations.scss","../../../sass/bootstrap/_dropdowns.scss","file:///C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/_support.scss","file:///C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_border-radius.scss","../../../sass/bootstrap/_button-groups.scss","../../../sass/bootstrap/_input-groups.scss","../../../sass/bootstrap/_navs.scss","../../../sass/bootstrap/_navbar.scss","../../../sass/bootstrap/_breadcrumbs.scss","../../../sass/bootstrap/_pagination.scss","../../../sass/bootstrap/_pager.scss","../../../sass/bootstrap/_labels.scss","../../../sass/bootstrap/_badges.scss","../../../sass/bootstrap/_thumbnails.scss","../../../sass/bootstrap/_alerts.scss","../../../sass/bootstrap/_progress-bars.scss","../../../sass/bootstrap/_media.scss","../../../sass/bootstrap/_list-group.scss","../../../sass/bootstrap/_panels.scss","../../../sass/bootstrap/_wells.scss","../../../sass/bootstrap/_close.scss","../../../sass/bootstrap/_modals.scss","../../../sass/bootstrap/_tooltip.scss","../../../sass/bootstrap/_popovers.scss","../../../sass/bootstrap/_utilities.scss","../../../sass/bootstrap/_responsive-utilities.scss","../../../sass/library/fontawesome/_fontawesome.scss","../../../sass/library/fontawesome/_core.scss","../../../sass/library/fontawesome/_larger.scss","../../../sass/library/fontawesome/_fixed-width.scss","../../../sass/library/fontawesome/_list.scss","../../../sass/library/fontawesome/_variables.scss","../../../sass/library/fontawesome/_bordered-pulled.scss","../../../sass/library/fontawesome/_animated.scss","../../../sass/library/fontawesome/_rotated-flipped.scss","../../../sass/library/fontawesome/_mixins.scss","../../../sass/library/fontawesome/_stacked.scss","../../../sass/library/fontawesome/_icons.scss","../../../sass/library/fontawesome/_screen-reader.scss","../../../sass/library/fontawesome/_regular.scss","../../../sass/library/fontawesome/_solid.scss","../../../sass/library/fontawesome/_brands.scss","../../../sass/library/custom-scrollbar/_mCustomScrollbar.scss","../../../sass/library/data-tables/_dataTables.scss","../../../sass/library/data-tables/_dataTables-buttons.scss","../../../sass/library/data-tables/_dataTables-fontAwesome.scss","../../../sass/library/data-tables/_dataTables-responsive.scss","../../../sass/library/data-tables/_dataTables-select.scss","../../../sass/library/x-editable/_bootstrap-editable.scss","../../../sass/library/pnotify/_pnotify.scss","../../../sass/library/pnotify/_pnotify.nonblock.scss","../../../sass/library/pnotify/_pnotify.custom.scss","../../../sass/library/slidebars/_slidebars.scss","../../../sass/library/easy-pie-chart/_easyPieChart.scss","../../../sass/library/drag-to-select/_dragToSelect.scss","../../../sass/library/select2/_core.scss","../../../sass/library/select2/_single.scss","../../../sass/library/select2/_multiple.scss","../../../sass/library/select2/_dropdown.scss","../../../sass/library/select2/theme/pathfinder/_single.scss","../../../sass/library/select2/theme/pathfinder/_defaults.scss","../../../sass/library/select2/theme/pathfinder/_multiple.scss","../../../sass/library/select2/theme/pathfinder/_layout.scss","file:///C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_appearance.scss","../../../sass/library/blue-imp-gallery/_blueimp-gallery.scss","../../../sass/library/blue-imp-gallery/_bootstrap-image-gallery.scss","../../../sass/library/bootstrap-toggle/_bootstrap-toggle.scss","../../../sass/library/bootstrap-checkbox/_awesome-bootstrap-checkbox.scss","../../../sass/library/summernote/_summernote.scss","../../../sass/_main.scss","../../../sass/_main-colorpallet.scss","../../../sass/layout/_animation.scss","../../../sass/layout/_fonts.scss","../../../sass/layout/_main.scss","file:///C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_images.scss","../../../sass/layout/_landing.scss","../../../sass/layout/_logo.scss","../../../sass/layout/_map.scss","../../../sass/layout/_system-info.scss","../../../sass/layout/_forms.scss","../../../sass/layout/_images.scss","../../../sass/layout/_dialogs.scss","../../../sass/layout/_log.scss","../../../sass/layout/_timeline.scss","../../../sass/layout/_popover.scss","../../../sass/layout/_ribbon.scss","../../../sass/layout/_loading-bar.scss","../../../sass/layout/_sticky-panel.scss","../../../sass/layout/_summernote.scss","../../../sass/layout/_youtube.scss"], "names": [], "file": "pathfinder.css" diff --git a/public/img/bubble.svg b/public/img/bubble.svg new file mode 100644 index 000000000..0ae2e8b67 --- /dev/null +++ b/public/img/bubble.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/js/v1.5.0/app/admin.js b/public/js/v1.5.0/app/admin.js deleted file mode 100644 index 4a319d6f6..000000000 --- a/public/js/v1.5.0/app/admin.js +++ /dev/null @@ -1,2 +0,0 @@ -if(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(e,t){"use strict";var n=[],r=e.document,o=Object.getPrototypeOf,a=n.slice,i=n.concat,s=n.push,l=n.indexOf,c={},u=c.toString,d=c.hasOwnProperty,f=d.toString,p=f.call(Object),h={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},g=function(e){return null!=e&&e===e.window},v={type:!0,src:!0,noModule:!0};function y(e,t,n){var o,a=(t=t||r).createElement("script");if(a.text=e,n)for(o in v)n[o]&&(a[o]=n[o]);t.head.appendChild(a).parentNode.removeChild(a)}function b(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[u.call(e)]||"object":typeof e}var w=function(e,t){return new w.fn.init(e,t)},x=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function C(e){var t=!!e&&"length"in e&&e.length,n=b(e);return!m(e)&&!g(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return a.call(this)},get:function(e){return null==e?a.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+N+")"+N+"*"),W=new RegExp("="+N+"*([^\\]'\"]*?)"+N+"*\\]","g"),z=new RegExp(B),V=new RegExp("^"+$+"$"),X={ID:new RegExp("^#("+$+")"),CLASS:new RegExp("^\\.("+$+")"),TAG:new RegExp("^("+$+"|[*])"),ATTR:new RegExp("^"+j),PSEUDO:new RegExp("^"+B),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+N+"*(even|odd|(([+-]|)(\\d*)n|)"+N+"*(?:([+-]|)"+N+"*(\\d+)|))"+N+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+N+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+N+"*((?:-\\d)?\\d*)"+N+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/[+~]/,J=new RegExp("\\\\([\\da-f]{1,6}"+N+"?|("+N+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){f()},oe=ye(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{P.apply(k=F.call(x.childNodes),x.childNodes),k[x.childNodes.length].nodeType}catch(e){P={apply:k.length?function(e,t){E.apply(e,F.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function ae(e,t,r,o){var a,s,c,u,d,h,v,y=t&&t.ownerDocument,C=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==C&&9!==C&&11!==C)return r;if(!o&&((t?t.ownerDocument||t:x)!==p&&f(t),t=t||p,m)){if(11!==C&&(d=Q.exec(e)))if(a=d[1]){if(9===C){if(!(c=t.getElementById(a)))return r;if(c.id===a)return r.push(c),r}else if(y&&(c=y.getElementById(a))&&b(t,c)&&c.id===a)return r.push(c),r}else{if(d[2])return P.apply(r,t.getElementsByTagName(e)),r;if((a=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return P.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&!D[e+" "]&&(!g||!g.test(e))){if(1!==C)y=t,v=e;else if("object"!==t.nodeName.toLowerCase()){for((u=t.getAttribute("id"))?u=u.replace(te,ne):t.setAttribute("id",u=w),s=(h=i(e)).length;s--;)h[s]="#"+u+" "+ve(h[s]);v=h.join(","),y=Z.test(e)&&me(t.parentNode)||t}if(v)try{return P.apply(r,y.querySelectorAll(v)),r}catch(e){}finally{u===w&&t.removeAttribute("id")}}}return l(e.replace(H,"$1"),t,r,o)}function ie(){var e=[];return function t(n,o){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=o}}function se(e){return e[w]=!0,e}function le(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ce(e,t){for(var n=e.split("|"),o=n.length;o--;)r.attrHandle[n[o]]=t}function ue(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function fe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pe(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){for(var o,a=e([],n.length,t),i=a.length;i--;)n[o=a[i]]&&(n[o]=!(r[o]=n[o]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},a=ae.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},f=ae.setDocument=function(e){var t,o,i=e?e.ownerDocument||e:x;return i!==p&&9===i.nodeType&&i.documentElement?(h=(p=i).documentElement,m=!a(p),x!==p&&(o=p.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",re,!1):o.attachEvent&&o.attachEvent("onunload",re)),n.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=le(function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=K.test(p.getElementsByClassName),n.getById=le(function(e){return h.appendChild(e).id=w,!p.getElementsByName||!p.getElementsByName(w).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(J,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(J,ee);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,o,a=t.getElementById(e);if(a){if((n=a.getAttributeNode("id"))&&n.value===e)return[a];for(o=t.getElementsByName(e),r=0;a=o[r++];)if((n=a.getAttributeNode("id"))&&n.value===e)return[a]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[o++];)1===n.nodeType&&r.push(n);return r}return a},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=K.test(p.querySelectorAll))&&(le(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+N+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+N+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+w+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+w+"+*").length||g.push(".#.+[+~]")}),le(function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+N+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(n.matchesSelector=K.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&le(function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",B)}),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=K.test(h.compareDocumentPosition),b=t||K.test(h.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)for(;t=t.parentNode;)if(t===e)return!0;return!1},I=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===p||e.ownerDocument===x&&b(x,e)?-1:t===p||t.ownerDocument===x&&b(x,t)?1:u?R(u,e)-R(u,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,o=e.parentNode,a=t.parentNode,i=[e],s=[t];if(!o||!a)return e===p?-1:t===p?1:o?-1:a?1:u?R(u,e)-R(u,t):0;if(o===a)return ue(e,t);for(n=e;n=n.parentNode;)i.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;i[r]===s[r];)r++;return r?ue(i[r],s[r]):i[r]===x?-1:s[r]===x?1:0},p):p},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&f(e),t=t.replace(W,"='$1']"),n.matchesSelector&&m&&!D[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return ae(t,p,null,[e]).length>0},ae.contains=function(e,t){return(e.ownerDocument||e)!==p&&f(e),b(e,t)},ae.attr=function(e,t){(e.ownerDocument||e)!==p&&f(e);var o=r.attrHandle[t.toLowerCase()],a=o&&A.call(r.attrHandle,t.toLowerCase())?o(e,t,!m):void 0;return void 0!==a?a:n.attributes||!m?e.getAttribute(t):(a=e.getAttributeNode(t))&&a.specified?a.value:null},ae.escape=function(e){return(e+"").replace(te,ne)},ae.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ae.uniqueSort=function(e){var t,r=[],o=0,a=0;if(d=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(I),d){for(;t=e[a++];)t===e[a]&&(o=r.push(a));for(;o--;)e.splice(r[o],1)}return u=null,e},o=ae.getText=function(e){var t,n="",r=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},(r=ae.selectors={cacheLength:50,createPseudo:se,match:X,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(J,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(J,ee),"~="===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]||ae.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]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return X.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&z.test(n)&&(t=i(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(J,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+N+")"+e+"("+N+"|$)"))&&T(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var o=ae.attr(r,e);return null==o?"!="===t:!t||(o+="","="===t?o===n:"!="===t?o!==n:"^="===t?n&&0===o.indexOf(n):"*="===t?n&&o.indexOf(n)>-1:"$="===t?n&&o.slice(-n.length)===n:"~="===t?(" "+o.replace(M," ")+" ").indexOf(n)>-1:"|="===t&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,o){var a="nth"!==e.slice(0,3),i="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=a!==i?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(a){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[i?g.firstChild:g.lastChild],i&&y){for(b=(p=(c=(u=(d=(f=g)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===C&&c[1])&&c[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){u[e]=[C,p,b];break}}else if(y&&(b=p=(c=(u=(d=(f=t)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===C&&c[1]),!1===b)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&((u=(d=f[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[C,b]),f!==t)););return(b-=o)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ae.error("unsupported pseudo: "+e);return o[w]?o(t):o.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){for(var r,a=o(e,t),i=a.length;i--;)e[r=R(e,a[i])]=!(n[r]=a[i])}):function(e){return o(e,0,n)}):o}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(H,"$1"));return r[w]?se(function(e,t,n,o){for(var a,i=r(e,null,o,[]),s=e.length;s--;)(a=i[s])&&(e[s]=!(t[s]=a))}):function(e,o,a){return t[0]=e,r(t,null,a,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return ae(e,t).length>0}}),contains:se(function(e){return e=e.replace(J,ee),function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:se(function(e){return V.test(e||"")||ae.error("unsupported lang: "+e),e=e.replace(J,ee).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:pe(!1),disabled:pe(!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!r.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return Y.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:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function we(e,t,n,r,o){for(var a,i=[],s=0,l=e.length,c=null!=t;s-1&&(a[c]=!(i[c]=d))}}else v=we(v===i?v.splice(h,v.length):v),o?o(null,i,v,l):P.apply(i,v)})}function Ce(e){for(var t,n,o,a=e.length,i=r.relative[e[0].type],s=i||r.relative[" "],l=i?1:0,u=ye(function(e){return e===t},s,!0),d=ye(function(e){return R(t,e)>-1},s,!0),f=[function(e,n,r){var o=!i&&(r||n!==c)||((t=n).nodeType?u(e,n,r):d(e,n,r));return t=null,o}];l1&&be(f),l>1&&ve(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(H,"$1"),n,l0,o=e.length>0,a=function(a,i,s,l,u){var d,h,g,v=0,y="0",b=a&&[],w=[],x=c,S=a||o&&r.find.TAG("*",u),T=C+=null==x?1:Math.random()||.1,_=S.length;for(u&&(c=i===p||i||u);y!==_&&null!=(d=S[y]);y++){if(o&&d){for(h=0,i||d.ownerDocument===p||(f(d),s=!m);g=e[h++];)if(g(d,i||p,s)){l.push(d);break}u&&(C=T)}n&&((d=!g&&d)&&v--,a&&b.push(d))}if(v+=y,n&&y!==v){for(h=0;g=t[h++];)g(b,w,i,s);if(a){if(v>0)for(;y--;)b[y]||w[y]||(w[y]=O.call(l));w=we(w)}P.apply(l,w),u&&!a&&w.length>0&&v+t.length>1&&ae.uniqueSort(l)}return u&&(C=T,c=x),b};return n?se(a):a}return ge.prototype=r.filters=r.pseudos,r.setFilters=new ge,i=ae.tokenize=function(e,t){var n,o,a,i,s,l,c,u=_[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=r.preFilter;s;){for(i in n&&!(o=q.exec(s))||(o&&(s=s.slice(o[0].length)||s),l.push(a=[])),n=!1,(o=U.exec(s))&&(n=o.shift(),a.push({value:n,type:o[0].replace(H," ")}),s=s.slice(n.length)),r.filter)!(o=X[i].exec(s))||c[i]&&!(o=c[i](o))||(n=o.shift(),a.push({value:n,type:i,matches:o}),s=s.slice(n.length));if(!n)break}return t?s.length:s?ae.error(e):_(e,l).slice(0)},s=ae.compile=function(e,t){var n,r=[],o=[],a=D[e+" "];if(!a){for(t||(t=i(e)),n=t.length;n--;)(a=Ce(t[n]))[w]?r.push(a):o.push(a);(a=D(e,Se(o,r))).selector=e}return a},l=ae.select=function(e,t,n,o){var a,l,c,u,d,f="function"==typeof e&&e,p=!o&&i(e=f.selector||e);if(n=n||[],1===p.length){if((l=p[0]=p[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&9===t.nodeType&&m&&r.relative[l[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(J,ee),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(a=X.needsContext.test(e)?0:l.length;a--&&(c=l[a],!r.relative[u=c.type]);)if((d=r.find[u])&&(o=d(c.matches[0].replace(J,ee),Z.test(l[0].type)&&me(t.parentNode)||t))){if(l.splice(a,1),!(e=o.length&&ve(l)))return P.apply(n,o),n;break}}return(f||s(e,p))(o,t,!m,n,!t||Z.test(e)&&me(t.parentNode)||t),n},n.sortStable=w.split("").sort(I).join("")===w,n.detectDuplicates=!!d,f(),n.sortDetached=le(function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))}),le(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ce("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&le(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ce("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),le(function(e){return null==e.getAttribute("disabled")})||ce(L,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),ae}(e);w.find=S,w.expr=S.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=S.uniqueSort,w.text=S.getText,w.isXMLDoc=S.isXML,w.contains=S.contains,w.escapeSelector=S.escape;var T=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&w(e).is(n))break;r.push(e)}return r},_=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function k(e,t,n){return m(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return l.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(k(this,e||[],!1))},not:function(e){return this.pushStack(k(this,e||[],!0))},is:function(e){return!!k(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var O,E=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var o,a;if(!e)return this;if(n=n||O,"string"==typeof e){if(!(o="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:E.exec(e))||!o[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(o[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(o[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(o[1])&&w.isPlainObject(t))for(o in t)m(this[o])?this[o](t[o]):this.attr(o,t[o]);return this}return(a=r.getElementById(o[2]))&&(this[0]=a,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,O=w(r);var P=/^(?:parents|prev(?:Until|All))/,F={children:!0,contents:!0,next:!0,prev:!0};function R(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?w.uniqueSort(a):a)},index:function(e){return e?"string"==typeof e?l.call(w(e),this[0]):l.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return R(e,"nextSibling")},prev:function(e){return R(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return _((e.parentNode||{}).firstChild,e)},children:function(e){return _(e.firstChild)},contents:function(e){return I(e,"iframe")?e.contentDocument:(I(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var o=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=w.filter(r,o)),this.length>1&&(F[e]||w.uniqueSort(o),P.test(e)&&o.reverse()),this.pushStack(o)}});var L=/[^\x20\t\r\n\f]+/g;function N(e){return e}function $(e){throw e}function j(e,t,n,r){var o;try{e&&m(o=e.promise)?o.call(e).done(t).fail(n):e&&m(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return w.each(e.match(L)||[],function(e,n){t[n]=!0}),t}(e):w.extend({},e);var t,n,r,o,a=[],i=[],s=-1,l=function(){for(o=o||e.once,r=t=!0;i.length;s=-1)for(n=i.shift();++s-1;)a.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=i=[],a=n="",this},disabled:function(){return!a},lock:function(){return o=i=[],n||t||(a=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],i.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return a.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var o=m(e[r[4]])&&e[r[4]];a[r[1]](function(){var e=o&&o.apply(this,arguments);e&&m(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(t,r,o){var a=0;function i(t,n,r,o){return function(){var s=this,l=arguments,c=function(){var e,c;if(!(t=a&&(r!==$&&(s=void 0,l=[e]),n.rejectWith(s,l))}};t?u():(w.Deferred.getStackHook&&(u.stackTrace=w.Deferred.getStackHook()),e.setTimeout(u))}}return w.Deferred(function(e){n[0][3].add(i(0,e,m(o)?o:N,e.notifyWith)),n[1][3].add(i(0,e,m(t)?t:N)),n[2][3].add(i(0,e,m(r)?r:$))}).promise()},promise:function(e){return null!=e?w.extend(e,o):o}},a={};return w.each(n,function(e,t){var i=t[2],s=t[5];o[t[1]]=i.add,s&&i.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),i.add(t[3].fire),a[t[0]]=function(){return a[t[0]+"With"](this===a?void 0:this,arguments),this},a[t[0]+"With"]=i.fireWith}),o.promise(a),t&&t.call(a,a),a},when:function(e){var t=arguments.length,n=t,r=Array(n),o=a.call(arguments),i=w.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?a.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(j(e,i.done(s(n)).resolve,i.reject,!t),"pending"===i.state()||m(o[n]&&o[n].then)))return i.then();for(;n--;)j(o[n],s(n),i.reject);return i.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var M=w.Deferred();function H(){r.removeEventListener("DOMContentLoaded",H),e.removeEventListener("load",H),w.ready()}w.fn.ready=function(e){return M.then(e).catch(function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||M.resolveWith(r,[w]))}}),w.ready.then=M.then,"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",H),e.addEventListener("load",H));var q=function(e,t,n,r,o,a,i){var s=0,l=e.length,c=null==n;if("object"===b(n))for(s in o=!0,n)q(e,t,s,n[s],!0,a,i);else if(void 0!==r&&(o=!0,m(r)||(i=!0),c&&(i?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=G.get(e,t),n&&(!r||Array.isArray(n)?r=G.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,o=n.shift(),a=w._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete a.stop,o.call(e,function(){w.dequeue(e,t)},a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return G.get(e,n)||G.access(e,n,{empty:w.Callbacks("once memory").add(function(){G.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,de=/^$|^module$|\/(?:java|ecma)script/i,fe={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function pe(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&I(e,t)?w.merge([e],n):n}function he(e,t){for(var n=0,r=e.length;n-1)o&&o.push(a);else if(c=w.contains(a.ownerDocument,a),i=pe(d.appendChild(a),"script"),c&&he(i),n)for(u=0;a=i[u++];)de.test(a.type||"")&&n.push(a);return d}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var ve=r.documentElement,ye=/^key/,be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,we=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function Ce(){return!1}function Se(){try{return r.activeElement}catch(e){}}function Te(e,t,n,r,o,a){var i,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Te(e,s,n,r,t[s],a);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=Ce;else if(!o)return e;return 1===a&&(i=o,(o=function(e){return w().off(e),i.apply(this,arguments)}).guid=i.guid||(i.guid=w.guid++)),e.each(function(){w.event.add(this,t,o,r,n)})}w.event={global:{},add:function(e,t,n,r,o){var a,i,s,l,c,u,d,f,p,h,m,g=G.get(e);if(g)for(n.handler&&(n=(a=n).handler,o=a.selector),o&&w.find.matchesSelector(ve,o),n.guid||(n.guid=w.guid++),(l=g.events)||(l=g.events={}),(i=g.handle)||(i=g.handle=function(t){return void 0!==w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(L)||[""]).length;c--;)p=m=(s=we.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p&&(d=w.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=w.event.special[p]||{},u=w.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&w.expr.match.needsContext.test(o),namespace:h.join(".")},a),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,i)||e.addEventListener&&e.addEventListener(p,i)),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,u):f.push(u),w.event.global[p]=!0)},remove:function(e,t,n,r,o){var a,i,s,l,c,u,d,f,p,h,m,g=G.hasData(e)&&G.get(e);if(g&&(l=g.events)){for(c=(t=(t||"").match(L)||[""]).length;c--;)if(p=m=(s=we.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=w.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=a=f.length;a--;)u=f[a],!o&&m!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(f.splice(a,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));i&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,g.handle)||w.removeEvent(e,p,g.handle),delete l[p])}else for(p in l)w.event.remove(e,p+t[c],n,r,!0);w.isEmptyObject(l)&&G.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,a,i,s=w.event.fix(e),l=new Array(arguments.length),c=(G.get(this,"events")||{})[s.type]||[],u=w.event.special[s.type]||{};for(l[0]=s,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(a=[],i={},n=0;n-1:w.find(o,this,null,[c]).length),i[o]&&a.push(r);a.length&&s.push({elem:c,handlers:a})}return c=this,l\x20\t\r\n\f]*)[^>]*)\/>/gi,De=/\s*$/g;function ke(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Ee(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,o,a,i,s,l,c;if(1===t.nodeType){if(G.hasData(e)&&(a=G.access(e),i=G.set(t,a),c=a.events))for(o in delete i.handle,i.events={},c)for(n=0,r=c[o].length;n1&&"string"==typeof g&&!h.checkClone&&Ie.test(g))return e.each(function(o){var a=e.eq(o);v&&(t[0]=g.call(this,o,a.html())),Re(a,t,n,r)});if(f&&(a=(o=ge(t,e[0].ownerDocument,!1,e,r)).firstChild,1===o.childNodes.length&&(o=a),a||r)){for(l=(s=w.map(pe(o,"script"),Oe)).length;d")},clone:function(e,t,n){var r,o,a,i,s=e.cloneNode(!0),l=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(i=pe(s),r=0,o=(a=pe(e)).length;r0&&he(i,!l&&pe(e,"script")),s},cleanData:function(e){for(var t,n,r,o=w.event.special,a=0;void 0!==(n=e[a]);a++)if(X(n)){if(t=n[G.expando]){if(t.events)for(r in t.events)o[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[G.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Le(this,e,!0)},remove:function(e){return Le(this,e)},text:function(e){return q(this,function(e){return void 0===e?w.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 Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||ke(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ke(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(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&&(w.cleanData(pe(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return q(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&&!De.test(e)&&!fe[(ue.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-a-l-s-.5))),l}function Ke(e,t,n){var r=$e(e),o=Be(e,t,r),a="border-box"===w.css(e,"boxSizing",!1,r),i=a;if(Ne.test(o)){if(!n)return o;o="auto"}return i=i&&(h.boxSizingReliable()||o===e.style[t]),("auto"===o||!parseFloat(o)&&"inline"===w.css(e,"display",!1,r))&&(o=e["offset"+t[0].toUpperCase()+t.slice(1)],i=!0),(o=parseFloat(o)||0)+Ge(e,t,n||(a?"border":"content"),i,r,o)+"px"}function Qe(e,t,n,r,o){return new Qe.prototype.init(e,t,n,r,o)}w.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,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 o,a,i,s=V(t),l=qe.test(t),c=e.style;if(l||(t=Xe(s)),i=w.cssHooks[t]||w.cssHooks[s],void 0===n)return i&&"get"in i&&void 0!==(o=i.get(e,!1,r))?o:c[t];"string"==(a=typeof n)&&(o=te.exec(n))&&o[1]&&(n=ae(e,t,o),a="number"),null!=n&&n==n&&("number"===a&&(n+=o&&o[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),i&&"set"in i&&void 0===(n=i.set(e,n,r))||(l?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var o,a,i,s=V(t);return qe.test(t)||(t=Xe(s)),(i=w.cssHooks[t]||w.cssHooks[s])&&"get"in i&&(o=i.get(e,!0,n)),void 0===o&&(o=Be(e,t,r)),"normal"===o&&t in We&&(o=We[t]),""===n||n?(a=parseFloat(o),!0===n||isFinite(a)?a||0:o):o}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!He.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ke(e,t,r):oe(e,Ue,function(){return Ke(e,t,r)})},set:function(e,n,r){var o,a=$e(e),i="border-box"===w.css(e,"boxSizing",!1,a),s=r&&Ge(e,t,r,i,a);return i&&h.scrollboxSize()===a.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(a[t])-Ge(e,t,"border",!1,a)-.5)),s&&(o=te.exec(n))&&"px"!==(o[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ye(0,n,s)}}}),w.cssHooks.marginLeft=Me(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-oe(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,o={},a="string"==typeof n?n.split(" "):[n];r<4;r++)o[e+ne[r]+t]=a[r]||a[r-2]||a[0];return o}},"margin"!==e&&(w.cssHooks[e+t].set=Ye)}),w.fn.extend({css:function(e,t){return q(this,function(e,t,n){var r,o,a={},i=0;if(Array.isArray(t)){for(r=$e(e),o=t.length;i1)}}),w.Tween=Qe,Qe.prototype={constructor:Qe,init:function(e,t,n,r,o,a){this.elem=e,this.prop=n,this.easing=o||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(w.cssNumber[n]?"":"px")},cur:function(){var e=Qe.propHooks[this.prop];return e&&e.get?e.get(this):Qe.propHooks._default.get(this)},run:function(e){var t,n=Qe.propHooks[this.prop];return this.options.duration?this.pos=t=w.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):Qe.propHooks._default.set(this),this}},Qe.prototype.init.prototype=Qe.prototype,Qe.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=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},Qe.propHooks.scrollTop=Qe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=Qe.prototype.init,w.fx.step={};var Ze,Je,et=/^(?:toggle|show|hide)$/,tt=/queueHooks$/;function nt(){Je&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(nt):e.setTimeout(nt,w.fx.interval),w.fx.tick())}function rt(){return e.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function ot(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o["margin"+(n=ne[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function at(e,t,n){for(var r,o=(it.tweeners[t]||[]).concat(it.tweeners["*"]),a=0,i=o.length;a1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,o,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return void 0===e.getAttribute?w.prop(e,t,n):(1===a&&w.isXMLDoc(e)||(o=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?st:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&I(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(L);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),st={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=lt[t]||w.find.attr;lt[t]=function(e,t,r){var o,a,i=t.toLowerCase();return r||(a=lt[i],lt[i]=o,o=null!=n(e,t,r)?i:null,lt[i]=a),o}});var ct=/^(?:input|select|textarea|button)$/i,ut=/^(?:a|area)$/i;function dt(e){return(e.match(L)||[]).join(" ")}function ft(e){return e.getAttribute&&e.getAttribute("class")||""}function pt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(L)||[]}w.fn.extend({prop:function(e,t){return q(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,o,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&w.isXMLDoc(e)||(t=w.propFix[t]||t,o=w.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):ct.test(e.nodeName)||ut.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),h.optSelected||(w.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)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this}),w.fn.extend({addClass:function(e){var t,n,r,o,a,i,s,l=0;if(m(e))return this.each(function(t){w(this).addClass(e.call(this,t,ft(this)))});if((t=pt(e)).length)for(;n=this[l++];)if(o=ft(n),r=1===n.nodeType&&" "+dt(o)+" "){for(i=0;a=t[i++];)r.indexOf(" "+a+" ")<0&&(r+=a+" ");o!==(s=dt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,o,a,i,s,l=0;if(m(e))return this.each(function(t){w(this).removeClass(e.call(this,t,ft(this)))});if(!arguments.length)return this.attr("class","");if((t=pt(e)).length)for(;n=this[l++];)if(o=ft(n),r=1===n.nodeType&&" "+dt(o)+" "){for(i=0;a=t[i++];)for(;r.indexOf(" "+a+" ")>-1;)r=r.replace(" "+a+" "," ");o!==(s=dt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):m(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,ft(this),t),t)}):this.each(function(){var t,o,a,i;if(r)for(o=0,a=w(this),i=pt(e);t=i[o++];)a.hasClass(t)?a.removeClass(t):a.addClass(t);else void 0!==e&&"boolean"!==n||((t=ft(this))&&G.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":G.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+dt(ft(n))+" ").indexOf(t)>-1)return!0;return!1}});var ht=/\r/g;w.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=m(e),this.each(function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,w(this).val()):e)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=w.map(o,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))})):o?(t=w.valHooks[o.type]||w.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(ht,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:dt(w.text(e))}},select:{get:function(e){var t,n,r,o=e.options,a=e.selectedIndex,i="select-one"===e.type,s=i?null:[],l=i?a+1:o.length;for(r=a<0?l:i?a:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var mt=/^(?:focusinfocus|focusoutblur)$/,gt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,o,a){var i,s,l,c,u,f,p,h,v=[o||r],y=d.call(t,"type")?t.type:t,b=d.call(t,"namespace")?t.namespace.split("."):[];if(s=h=l=o=o||r,3!==o.nodeType&&8!==o.nodeType&&!mt.test(y+w.event.triggered)&&(y.indexOf(".")>-1&&(y=(b=y.split(".")).shift(),b.sort()),u=y.indexOf(":")<0&&"on"+y,(t=t[w.expando]?t:new w.Event(y,"object"==typeof t&&t)).isTrigger=a?2:3,t.namespace=b.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=o),n=null==n?[t]:w.makeArray(n,[t]),p=w.event.special[y]||{},a||!p.trigger||!1!==p.trigger.apply(o,n))){if(!a&&!p.noBubble&&!g(o)){for(c=p.delegateType||y,mt.test(c+y)||(s=s.parentNode);s;s=s.parentNode)v.push(s),l=s;l===(o.ownerDocument||r)&&v.push(l.defaultView||l.parentWindow||e)}for(i=0;(s=v[i++])&&!t.isPropagationStopped();)h=s,t.type=i>1?c:p.bindType||y,(f=(G.get(s,"events")||{})[t.type]&&G.get(s,"handle"))&&f.apply(s,n),(f=u&&s[u])&&f.apply&&X(s)&&(t.result=f.apply(s,n),!1===t.result&&t.preventDefault());return t.type=y,a||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(v.pop(),n)||!X(o)||u&&m(o[y])&&!g(o)&&((l=o[u])&&(o[u]=null),w.event.triggered=y,t.isPropagationStopped()&&h.addEventListener(y,gt),o[y](),t.isPropagationStopped()&&h.removeEventListener(y,gt),w.event.triggered=void 0,l&&(o[u]=l)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=G.access(r,t);o||r.addEventListener(e,n,!0),G.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=G.access(r,t)-1;o?G.access(r,t,o):(r.removeEventListener(e,n,!0),G.remove(r,t))}}});var vt=e.location,yt=Date.now(),bt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var wt=/\[\]$/,xt=/\r?\n/g,Ct=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function Tt(e,t,n,r){var o;if(Array.isArray(t))w.each(t,function(t,o){n||wt.test(e)?r(e,o):Tt(e+"["+("object"==typeof o&&null!=o?t:"")+"]",o,n,r)});else if(n||"object"!==b(t))r(e,t);else for(o in t)Tt(e+"["+o+"]",t[o],n,r)}w.param=function(e,t){var n,r=[],o=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){o(this.name,this.value)});else for(n in e)Tt(n,e[n],t,o);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&St.test(this.nodeName)&&!Ct.test(e)&&(this.checked||!ce.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(xt,"\r\n")}}):{name:t.name,value:n.replace(xt,"\r\n")}}).get()}});var _t=/%20/g,Dt=/#.*$/,It=/([?&])_=[^&]*/,At=/^(.*?):[ \t]*([^\r\n]*)$/gm,kt=/^(?:GET|HEAD)$/,Ot=/^\/\//,Et={},Pt={},Ft="*/".concat("*"),Rt=r.createElement("a");function Lt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,a=t.toLowerCase().match(L)||[];if(m(n))for(;r=a[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Nt(e,t,n,r){var o={},a=e===Pt;function i(s){var l;return o[s]=!0,w.each(e[s]||[],function(e,s){var c=s(t,n,r);return"string"!=typeof c||a||o[c]?a?!(l=c):void 0:(t.dataTypes.unshift(c),i(c),!1)}),l}return i(t.dataTypes[0])||!o["*"]&&i("*")}function $t(e,t){var n,r,o=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}Rt.href=vt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:vt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(vt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ft,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":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,w.ajaxSettings),t):$t(w.ajaxSettings,e)},ajaxPrefilter:Lt(Et),ajaxTransport:Lt(Pt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,a,i,s,l,c,u,d,f,p,h=w.ajaxSetup({},n),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?w(m):w.event,v=w.Deferred(),y=w.Callbacks("once memory"),b=h.statusCode||{},x={},C={},S="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(u){if(!s)for(s={};t=At.exec(i);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return u?i:null},setRequestHeader:function(e,t){return null==u&&(e=C[e.toLowerCase()]=C[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==u&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)T.always(e[T.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||S;return o&&o.abort(t),_(0,t),this}};if(v.promise(T),h.url=((t||h.url||vt.href)+"").replace(Ot,vt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(L)||[""],null==h.crossDomain){c=r.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Rt.protocol+"//"+Rt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),Nt(Et,h,n,T),u)return T;for(f in(d=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!kt.test(h.type),a=h.url.replace(Dt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(_t,"+")):(p=h.url.slice(a.length),h.data&&(h.processData||"string"==typeof h.data)&&(a+=(bt.test(a)?"&":"?")+h.data,delete h.data),!1===h.cache&&(a=a.replace(It,"$1"),p=(bt.test(a)?"&":"?")+"_="+yt+++p),h.url=a+p),h.ifModified&&(w.lastModified[a]&&T.setRequestHeader("If-Modified-Since",w.lastModified[a]),w.etag[a]&&T.setRequestHeader("If-None-Match",w.etag[a])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&T.setRequestHeader("Content-Type",h.contentType),T.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Ft+"; q=0.01":""):h.accepts["*"]),h.headers)T.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(m,T,h)||u))return T.abort();if(S="abort",y.add(h.complete),T.done(h.success),T.fail(h.error),o=Nt(Pt,h,n,T)){if(T.readyState=1,d&&g.trigger("ajaxSend",[T,h]),u)return T;h.async&&h.timeout>0&&(l=e.setTimeout(function(){T.abort("timeout")},h.timeout));try{u=!1,o.send(x,_)}catch(e){if(u)throw e;_(-1,e)}}else _(-1,"No Transport");function _(t,n,r,s){var c,f,p,x,C,S=n;u||(u=!0,l&&e.clearTimeout(l),o=void 0,i=s||"",T.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(x=function(e,t,n){for(var r,o,a,i,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)a=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}i||(i=o)}a=a||i}if(a)return a!==l[0]&&l.unshift(a),n[a]}(h,T,r)),x=function(e,t,n,r){var o,a,i,s,l,c={},u=e.dataTypes.slice();if(u[1])for(i in e.converters)c[i.toLowerCase()]=e.converters[i];for(a=u.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=a,a=u.shift())if("*"===a)a=l;else if("*"!==l&&l!==a){if(!(i=c[l+" "+a]||c["* "+a]))for(o in c)if((s=o.split(" "))[1]===a&&(i=c[l+" "+s[0]]||c["* "+s[0]])){!0===i?i=c[o]:!0!==c[o]&&(a=s[0],u.unshift(s[1]));break}if(!0!==i)if(i&&e.throws)t=i(t);else try{t=i(t)}catch(e){return{state:"parsererror",error:i?e:"No conversion from "+l+" to "+a}}}return{state:"success",data:t}}(h,x,T,c),c?(h.ifModified&&((C=T.getResponseHeader("Last-Modified"))&&(w.lastModified[a]=C),(C=T.getResponseHeader("etag"))&&(w.etag[a]=C)),204===t||"HEAD"===h.type?S="nocontent":304===t?S="notmodified":(S=x.state,f=x.data,c=!(p=x.error))):(p=S,!t&&S||(S="error",t<0&&(t=0))),T.status=t,T.statusText=(n||S)+"",c?v.resolveWith(m,[f,S,T]):v.rejectWith(m,[T,S,p]),T.statusCode(b),b=void 0,d&&g.trigger(c?"ajaxSuccess":"ajaxError",[T,h,c?f:p]),y.fireWith(m,[T,S]),d&&(g.trigger("ajaxComplete",[T,h]),--w.active||w.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,o){return m(n)&&(o=o||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:o,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return m(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=m(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var jt={0:200,1223:204},Bt=w.ajaxSettings.xhr();h.cors=!!Bt&&"withCredentials"in Bt,h.ajax=Bt=!!Bt,w.ajaxTransport(function(t){var n,r;if(h.cors||Bt&&!t.crossDomain)return{send:function(o,a){var i,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(i in t.xhrFields)s[i]=t.xhrFields[i];for(i in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)s.setRequestHeader(i,o[i]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?a(0,"error"):a(s.status,s.statusText):a(jt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.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 w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){var t,n;if(e.crossDomain)return{send:function(o,a){t=w("