New Full Text Search

This commit is contained in:
franzz committed 2019-12-08 10:50:09 +01:00
1 parent c4d77d38b3
commit 0dac58742d
8 files changed
+98 -265

No files matched your search

+14 -37
View File
@@ -41,7 +41,6 @@ class Databap extends PhpObject
const IMG_TABLE = 'images';
const DOC_TABLE = 'docs';
const FILE_TABLE = 'files';
const SEARCH_TABLE = 'searchs';
const TABL_TABLE = 'tables';
const TITLE_LEN = 200;
@@ -183,7 +182,6 @@ class Databap extends PhpObject
//Objects
private $oMySql;
private $oSearchEngine;
private $oClassManagement;
private $oAuth;
@@ -226,9 +224,6 @@ class Databap extends PhpObject
//Passing settings down to mySQL
$this->oMySql = new MySqlManager(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, self::getSqlOptions(), Settings::DB_ENC);
if($this->oMySql->sDbState == MySqlManager::DB_NO_DATA && Settings::DEBUG==true) $this->install();
//Init Search Engine
$this->oSearchEngine = new SearchEngine($this->oMySql);
}
public static function getSqlOptions()
@@ -251,7 +246,6 @@ class Databap extends PhpObject
self::IMG_TABLE => array(MySqlManager::getId(self::PROC_TABLE), MySqlManager::getId(self::STEP_TABLE), 'description', 'file_name'),
self::DOC_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'refer_id'),
self::FILE_TABLE => array('id_item', 'type', 'description', 'hash', 'extension'),
self::SEARCH_TABLE => array('id_item', 'refer_id', 'type', 'keywords'),
self::ART_TABLE => array('title', 'link', 'date', 'first_name', 'last_name', 'email'),
self::TABL_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'system', 'keywords', 'refer_id')
);
@@ -292,10 +286,16 @@ class Databap extends PhpObject
);
$asOptions['constraints'] = array
(
self::USER_TABLE => "UNIQUE KEY `user_first_and_last_name` (`first_name`, `last_name`)",
self::URL_TABLE => "UNIQUE KEY `uni_phrase` (`phrase`)",
self::MSG_TABLE => "INDEX(`date`)",
self::ART_TABLE => "INDEX(`title`)"
self::USER_TABLE => "UNIQUE KEY `user_first_and_last_name` (`first_name`, `last_name`)",
self::URL_TABLE => "UNIQUE KEY `uni_phrase` (`phrase`)",
self::MSG_TABLE => "INDEX(`date`)",
self::ART_TABLE => "INDEX(`title`), FULLTEXT(`title`)",
self::CODE_TABLE => "FULLTEXT(`".MySqlManager::getText(self::CODE_TABLE)."`, `description`)",
self::PROC_TABLE => "FULLTEXT(`title`, `description`)",
self::STEP_TABLE => "FULLTEXT(`description`)",
self::DOC_TABLE => "FULLTEXT(`title`, `description`)",
self::FILE_TABLE => "FULLTEXT(`description`)",
self::TABL_TABLE => "FULLTEXT(`title`, `description`, `keywords`)"
);
$asOptions['cascading_delete'] = array
(
@@ -629,7 +629,6 @@ class Databap extends PhpObject
{
$iArticleId = $this->oMySql->insertRow(self::ART_TABLE, $asArticle);
$this->addMessage($iArticleId, self::MESSAGE_ARTICLE, self::DEFAULT_CHAN_ID);
$this->oSearchEngine->buildIndex($iArticleId, self::ART_TYPE);
$sResult = 'ADDED';
}
else $sResult = 'OK';
@@ -888,16 +887,6 @@ class Databap extends PhpObject
return $bExt?$this->getJsonPostResult(true, ''):$iUserId;
}
public function buildCompleteIndex()
{
$this->oMySql->emptyTable(self::SEARCH_TABLE);
foreach($this->getTypeInfo('table') as $sSearchType=>$sSearchTable)
{
$asItemIds = $this->oMySql->selectRows(array('select'=>MySqlManager::getId($sSearchTable), 'from'=>$sSearchTable));
foreach($asItemIds as $iItemId) $this->oSearchEngine->buildIndex($iItemId, $sSearchType);
}
}
//insert new code / version
public function addCode($asData)
{
@@ -924,9 +913,6 @@ class Databap extends PhpObject
//Add message
$this->addMessage($iCodeId, self::MESSAGE_ADD_CODE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iCodeId, self::CODE_TYPE);
return $iCodeId;
}
@@ -944,9 +930,6 @@ class Databap extends PhpObject
//Add message
$this->addMessage($iCodeId, self::MESSAGE_EDIT_CODE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iCodeId, self::CODE_TYPE);
return $iCodeId;
}
@@ -984,9 +967,6 @@ class Databap extends PhpObject
{
$this->addMessage($iNewProcId, self::MESSAGE_EDIT_PROC, self::DEFAULT_CHAN_ID);
}
//Add record in Search Table
$this->oSearchEngine->buildIndex($iNewProcId, self::PROC_TYPE);
}
else
{
@@ -1065,9 +1045,6 @@ class Databap extends PhpObject
//Add Message in chat
$this->addMessage($iDbDocId, $bCreation?self::MESSAGE_ADD_DOC:self::MESSAGE_EDIT_DOC, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iDbDocId, self::DOC_TYPE);
//TODO add error handling
return $this->getJsonPostResult(true, '', array('doc_id'=>$iDbDocId));
}
@@ -1133,9 +1110,6 @@ class Databap extends PhpObject
//Add Message in chat
$this->addMessage($iDbTableId, $bCreation?self::MESSAGE_ADD_TABLE:self::MESSAGE_EDIT_TABLE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iDbTableId, self::TABLE_TYPE);
}
}
return $this->getJsonPostResult($iDbTableId>0, $sDesc, array('id'=>$iDbTableId, 'name'=>$sTitle));
@@ -2859,8 +2833,11 @@ class Databap extends PhpObject
return $sChanSafeName;
}
public function getResults($sSearchWords)
public function search($sSearchWords)
{
//Init Search Engine
$this->oSearchEngine = new SearchEngine($this->oMySql);
$this->oSearchEngine->setWords($sSearchWords);
$asResults = $this->oSearchEngine->getResults();
+9 -2
View File
@@ -150,7 +150,7 @@ class MySqlManager extends PhpObject
$asForeignKeyQueries = array();
foreach($asTableNames as $sTableName)
{
$asTableColumns = array_keys($this->getTablecolumns($sTableName));
$asTableColumns = $this->getTablecolumns($sTableName, false);
foreach($asTableColumns as $sColumnName)
{
if($this->isId($sColumnName) && $sColumnName!=self::getId($sTableName))
@@ -269,7 +269,7 @@ class MySqlManager extends PhpObject
}
}
public function getTablecolumns($sTableName)
public function getTablecolumns($sTableName, $bTypes=true)
{
if(!array_key_exists($sTableName, $this->asOptions['tables'])) return false;
@@ -277,9 +277,16 @@ class MySqlManager extends PhpObject
foreach($this->asOptions['tables'][$sTableName] as $sFieldName) $asTableColumns[] = $sFieldName;
$asTableColumns[] = 'led';
if(!$bTypes) return $asTableColumns;
$asTableName = array_fill(0, count($asTableColumns), $sTableName);
return array_combine($asTableColumns, array_map(array('self', 'getColumnType'), $asTableColumns, $asTableName));
}
public function isColumnInTable($sTableName, $sColName) {
$asCols = $this->getTablecolumns($sTableName, false);
return ($asCols && in_array($sColName, $asCols));
}
private function getColumnType($sColumnName, $sTableName)
{
+68 -216
View File
@@ -5,254 +5,106 @@
*
* Procedure to add a new type in the search
* - Add type in Databap->getItemTables()
* - Add type in the index builder : SearchEngine->buildIndex()
* - Add type in item info : SearchEngine->setItemInfo()
* - Add type in searched fields : SearchEngine->setResults()
* - Add type in Databap->getItemList() and create a Databap->get<type>info()
* - Add type text in Databap->getProfile()
* - Consider the message types : add + edit in Databap->getMessages() and in chat.html
*/
class SearchEngine extends PhpObject
{
//Objects
/**
* DB Handle
* @var MySqlManager
*/
private $oMySql;
//variables
private $asWords;
private $iLevelMax;
private $asItemRanks;
private $asItemInfos;
private $asUserInfos;
//Constants
const RESULT_A_PAGE = 20;
const KEYWORDS_SEPARATOR = ' ';
private $sWords;
private $asItems;
function __construct($oMySql)
{
parent::__construct(__CLASS__, Settings::DEBUG);
$this->oMySql = $oMySql;
$this->asWords = $this->setWords('');
$this->asItemRanks = array();
$this->asItemInfos = array();
$this->asUserInfos = array();
}
public function buildIndex($iItemId, $sType)
{
//Build keywords
switch($sType)
{
case Databap::CODE_TYPE:
$asItemData = $this->oMySql->selectRow(Databap::CODE_TABLE, $iItemId);
$asWords = array($asItemData[MySqlManager::getText(Databap::CODE_TABLE)], $asItemData['description']);
break;
case Databap::PROC_TYPE:
$sItemIdCol = MySqlManager::getId(Databap::PROC_TABLE);
$asItemData = $this->oMySql->selectRow(Databap::PROC_TABLE, $iItemId);
$asItemStepsData = $this->oMySql->selectRows(array('select'=>'description', 'from'=>Databap::STEP_TABLE, 'constraint'=>array($sItemIdCol=>$iItemId)));
$asWords = array('desc'=>$asItemData['description'], 'title'=>$asItemData['title']) + $asItemStepsData;
break;
case Databap::ART_TYPE:
$asItemData = $this->oMySql->selectRow(Databap::ART_TABLE, $iItemId);
$asWords = array($asItemData['first_name'], $asItemData['last_name'], $asItemData['title']);
break;
case Databap::DOC_TYPE:
$asItemData = $this->oMySql->selectRow(Databap::DOC_TABLE, $iItemId);
$asItemFilesData = $this->oMySql->selectRows(array('select'=>'description', 'from'=>Databap::FILE_TABLE, 'constraint'=>array('id_item'=>$iItemId, 'type'=>Databap::DOC_TYPE)));
$asWords = array('desc'=>$asItemData['description'], 'title'=>$asItemData['title']) + $asItemFilesData;
break;
case Databap::TABLE_TYPE:
$asItemData = $this->oMySql->selectRow(Databap::TABL_TABLE, $iItemId);
$asWords = array('desc'=>$asItemData['description'], 'title'=>$asItemData['title'], 'keywords'=>$asItemData['keywords'], 'system'=>$asItemData['system']);
break;
default:
$this->addError('function '.__FUNCTION__.'(): Incorrect type "'.$sType.'"');
break;
}
$sWords = implode(self::KEYWORDS_SEPARATOR, $asWords);
$sWords = mb_strtolower(str_replace("\n", self::KEYWORDS_SEPARATOR, $sWords));
$sWords = preg_replace('/(\W+)/u', self::KEYWORDS_SEPARATOR, $sWords); //remove all non-word characters
//Add / Modify search database
$asData = array('id_item'=>$iItemId, 'type'=>$sType, 'refer_id'=>(array_key_exists('refer_id', $asItemData)?$asItemData['refer_id']:$iItemId), 'keywords'=>$sWords);
$this->oMySql->insertUpdateRow(Databap::SEARCH_TABLE, $asData, array('id_item', 'type'));
$this->sWords = '';
$this->asItems = array();
}
public function setWords($sSearchWords)
{
$this->asWords = $this->getParsedWords($sSearchWords);
$this->iLevelMax = count($this->asWords);
$this->oMySql->cleanSql($sSearchWords);
$this->sWords = $sSearchWords;
$this->setResults();
}
/**
* TODO Customized item preview
$sCodeLines = implode("\n...\n", $this->getCodeInfo($iItemId, 'code'));
$oCode = new Reader($sCodeLines);
$sCodeLines = $oCode->getColoredCode();
*/
private function setItemInfo($iSearchId, $iItemType, $iItemId)
{
if(!array_key_exists($iSearchId, $this->asItemInfos))
{
/*switch($iItemType)
{
case Databap::CODE_TYPE:
$sItemTable = Databap::CODE_TABLE;
$asItemFields = array(MySqlManager::getId(Databap::USER_TABLE), 'description', 'led');
break;
case Databap::PROC_TYPE:
$sItemTable = Databap::PROC_TABLE;
$asItemFields = array(MySqlManager::getId(Databap::USER_TABLE), 'title AS description', 'led');
break;
case Databap::ART_TYPE:
$sItemTable = Databap::ART_TABLE;
$asItemFields = array('first_name', 'last_name', 'title AS description', 'led');
break;
case Databap::DOC_TYPE:
$sItemTable = Databap::DOC_TABLE;
$asItemFields = array(MySqlManager::getId(Databap::USER_TABLE), 'title AS description', 'led');
break;
case Databap::TABLE_TYPE:
$sItemTable = Databap::TABL_TABLE;
$asItemFields = array(MySqlManager::getId(Databap::USER_TABLE), 'title AS description', 'led');
break;
}
$this->asItemInfos[$iSearchId] = $this->oMySql->selectRow($sItemTable, $iItemId, $asItemFields);*/
$this->asItemInfos[$iSearchId]['type'] = $iItemType;
$this->asItemInfos[$iSearchId]['id_item'] = $iItemId;
}
}
private function getItemInfo($iSearchId, $sInfoName)
{
if(array_key_exists($iSearchId, $this->asItemInfos) && array_key_exists($sInfoName, $this->asItemInfos[$iSearchId]))
return $this->asItemInfos[$iSearchId][$sInfoName];
else return false;
}
/*
private function setUserInfo($iUserId)
{
if($iUserId > 0 && !array_key_exists($iUserId, $this->asUserInfos))
{
$sCompanyIdCol = MySqlManager::getId(Databap::COMP_TABLE);
$this->asUserInfos[$iUserId] = $this->oMySql->selectRow
(
Databap::USER_TABLE,
$iUserId,
array('first_name', 'last_name', $sCompanyIdCol)
);
$this->asUserInfos[$iUserId]['company'] = $this->oMySql->selectValue(Databap::COMP_TABLE, MySqlManager::getText(Databap::COMP_TABLE), $this->asUserInfos[$iUserId][$sCompanyIdCol]);
unset($this->asUserInfos[$iUserId][$sCompanyIdCol]);
}
}
private function getUserInfo($iUserId, $sInfoName)
{
if(array_key_exists($iUserId, $this->asUserInfos) && array_key_exists($sInfoName, $this->asUserInfos[$iUserId]))
return $this->asUserInfos[$iUserId][$sInfoName];
else return false;
}
*/
private function setResults()
{
if($this->iLevelMax > 0)
$this->asItems = array();
if($this->sWords != '')
{
//set Results and Ranking
$aiLevels = range(1, $this->iLevelMax);
arsort($aiLevels);
foreach($aiLevels as $iLevel)
{
//all possibilies at level $iLevel
$iIndex = 0;
while(($iIndex + $iLevel) <= $this->iLevelMax)
{
//building query
$asSequence = array_slice($this->asWords, $iIndex, $iLevel);
$this->oMySql->cleanSql($asSequence);
//$sRegExp = implode('(.{0,2})', $asSequence);
$sRegExp = implode(self::KEYWORDS_SEPARATOR.'?', $asSequence);
$sSequence = implode(self::KEYWORDS_SEPARATOR, $asSequence);
//TODO replace with selectRow()
$sQuery = "SELECT id_search, MAX(id_item) AS id_item, type, keywords FROM searchs WHERE keywords REGEXP '{$sRegExp}' GROUP BY type, refer_id";
//search sequence
$asItems = $this->oMySql->getArrayQuery($sQuery, true);
foreach($asItems as $asItem)
{
$iSearchId = $asItem['id_search'];
$iItemId = $asItem['id_item'];;
$iItemType = $asItem['type'];
$sWords = $asItem['keywords'];
//Calculate bonus points
$sWords = str_replace(self::KEYWORDS_SEPARATOR.$sSequence.self::KEYWORDS_SEPARATOR, self::KEYWORDS_SEPARATOR, self::KEYWORDS_SEPARATOR.$sWords.self::KEYWORDS_SEPARATOR, $iSeqCount);
$sWords = str_replace(self::KEYWORDS_SEPARATOR.$sSequence, self::KEYWORDS_SEPARATOR, self::KEYWORDS_SEPARATOR.$sWords.self::KEYWORDS_SEPARATOR, $iStaCount);
$sWords = str_replace($sSequence.self::KEYWORDS_SEPARATOR, self::KEYWORDS_SEPARATOR, self::KEYWORDS_SEPARATOR.$sWords.self::KEYWORDS_SEPARATOR, $iEndCount);
$iBonus = $iSeqCount*5 + $iStaCount*2 + $iEndCount;
$this->incItemRank($iSearchId, $iLevel*10+$iBonus);
$this->setItemInfo($iSearchId, $iItemType, $iItemId);
//$this->setUserInfo($this->getItemInfo($iSearchId, MySqlManager::getId(Databap::USER_TABLE)));
$asSearches = array(
Databap::CODE_TYPE => array(
Databap::CODE_TABLE => array(MySqlManager::getText(Databap::CODE_TABLE), 'description')
),
Databap::PROC_TYPE => array(
Databap::PROC_TABLE => array('title', 'description'),
Databap::STEP_TABLE => array('description')
),
Databap::ART_TYPE => array(
Databap::ART_TABLE => array('title')
),
Databap::DOC_TYPE => array(
Databap::DOC_TABLE => array('title', 'description'),
Databap::FILE_TABLE => array('description')
),
Databap::TABLE_TYPE=> array(
Databap::TABL_TABLE => array('title', 'description', 'keywords')
)
);
foreach($asSearches as $sType=>$asTables) {
$sMainTableName = $sJoin = '';
$asMatchAgainst = array();
foreach($asTables as $sTableName=>$asFields) {
if($sMainTableName=='') { //First table contains main object
$sMainTableName = $sTableName;
$sMainTableIdCol = MySqlManager::getId($sMainTableName);
$sMainTableIdColFull = MySqlManager::getId($sMainTableName, true);
}
$iIndex++;
else { //Other tables must be joined
$sJoin .= "LEFT JOIN {$sTableName} ";
if($this->oMySql->isColumnInTable($sTableName, $sMainTableIdCol)) $sJoin .= "USING({$sMainTableIdCol}) ";
else $sJoin .= "ON {$sTableName}.id_item = {$sMainTableIdColFull} ";
}
$asMatchFields = array();
foreach($asFields as $sField) $asMatchFields[] = MySqlManager::getFullColumnName($sTableName, $sField);
$asMatchAgainst[] = "MATCH (".implode(',', $asMatchFields).") AGAINST ('".$this->sWords."' IN BOOLEAN MODE)";
}
$sGroupByCol = $this->oMySql->isColumnInTable($sMainTableName, 'refer_id')?'refer_id':$sMainTableIdColFull;
$sQuery = "SELECT MAX({$sMainTableIdColFull}) AS id_item, '{$sType}' AS type, (".(implode(" + ", $asMatchAgainst)).") AS rank ".
"FROM {$sMainTableName} ".
$sJoin.
"WHERE ".implode(" OR ", $asMatchAgainst)." ".
"GROUP BY {$sGroupByCol}";
$asItems = $this->oMySql->getArrayQuery($sQuery, true);
foreach($asItems as $asItem) {
$asItem['rank'] = round($asItem['rank'] * 100);
$this->asItems[] = $asItem;
}
}
}
}
public function getResults()
{
$asResult = array();
//Mixing info
arsort($this->asItemRanks);
foreach($this->asItemRanks as $iSearchId=>$iRank)
{
/*$iUserId = $this->getItemInfo($iSearchId, MySqlManager::getId(Databap::USER_TABLE));
$sFirstName = $this->getUserInfo($iUserId, 'first_name')?$this->getUserInfo($iUserId, 'first_name'):$this->getItemInfo($iSearchId, 'first_name');
$sLastName = $this->getUserInfo($iUserId, 'last_name')?$this->getUserInfo($iUserId, 'last_name'):$this->getItemInfo($iSearchId, 'last_name');
$sCompany = $this->getUserInfo($iUserId, 'company')?$this->getUserInfo($iUserId, 'company'):'SAP';
$asResult[] = array('id_item'=>$this->getItemInfo($iSearchId, 'id_item'),
'type'=>$this->getItemInfo($iSearchId, 'type'),
'description'=>$this->getItemInfo($iSearchId, 'description'),
'rank'=>$iRank,
'name'=>Databap::getNameFormat($sFirstName, $sLastName),
'company'=>Databap::getCompanyFormat($sCompany),
'led'=>Databap::getDateFormat($this->getItemInfo($iSearchId, 'led')));
*/
$asResult[] = array('id_item'=>$this->getItemInfo($iSearchId, 'id_item'),
'type'=>$this->getItemInfo($iSearchId, 'type'),
'rank'=>$iRank);
}
return $asResult;
}
private function incItemRank($iSearchId, $iRank)
{
if(array_key_exists($iSearchId, $this->asItemRanks))
{
$this->asItemRanks[$iSearchId] += $iRank;
}
else
{
$this->asItemRanks[$iSearchId] = $iRank;
}
}
private function getParsedWords($sSearchWords)
{
return array_unique(array_filter(explode(' ', $sSearchWords), array($this, 'checkSearchedWords')));
}
private function checkSearchedWords($sWord)
{
return (mb_strlen($sWord) >= 2);
usort($this->asItems, function($a, $b) {return ($a['rank'] < $b['rank']);});
return $this->asItems;
}
}
+1 -5
View File
@@ -143,7 +143,7 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS)
$sResult = $oDatabap->getProfile($oItemId);
break;
case 'search':
$sResult = $oDatabap->getResults($sKeyWords);
$sResult = $oDatabap->search($sKeyWords);
break;
case 'code_block':
$sResult = $oDatabap->getCodeBlock();
@@ -211,10 +211,6 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS)
case 'assign_user':
$sResult = $oDatabap->assignUser($oUser, $sCompany);
break;
case 'build_index':
$oDatabap->buildCompleteIndex();
$sResult = 'Index ok';
break;
case 'install_queries':
$oMySqlInstall = new MySqlManager(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, Databap::getSqlOptions(), Settings::DB_ENC);
$sResult = $oMySqlInstall->getFullInstallQuery();
+3
View File
@@ -347,6 +347,9 @@ a[href^="table"].internal_link span.item {
padding:0;
display:block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.author_box i.fa-30 {
+1 -1
View File
@@ -1,4 +1,4 @@
@CHARSET "UTF-8";/*!
* Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:"FontAwesome";src:url("style/fontawesome-webfont.eot?v=4.2.0");src:url("style/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("style/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("style/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("style/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-inline{margin-right:5px}.fa-10{font-size:1.1111111111em;line-height:.9166666667em;vertical-align:-5%}.fa-20,#chat_messages p span.text a.img_box.hidden .banner .button .fa{font-size:1.2222222222em;line-height:.8333333333em;vertical-align:-10%}.fa-30{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-40{font-size:1.4444444444em;line-height:.6666666667em;vertical-align:-20%}.fa-60,a.button .fa{font-size:1.6666666667em;line-height:.5em;vertical-align:-30%}.fa-c-c:before,.fa-c-code:before{content:""}.fa-c-procedure:before,.fa-c-proc:before,.fa-c-p:before{content:""}.fa-c-table:before,.fa-c-t:before{content:""}.fa-c-documentation:before,.fa-c-doc:before,.fa-c-d:before{content:""}.fa-c-article:before,.fa-c-art:before,.fa-c-a:before{content:""}.fa-c-note:before{content:""}.fa-c-list:before{content:""}.fa-c-profile:before{content:""}.fa-c-chat:before{content:""}.fa-c-news:before{content:""}.fa-c-version:before{content:""}.fa-c-details:before{content:""}.fa-c-bug:before{content:""}.fa-c-date:before{content:""}.fa-c-git:before{content:""}.fa-c-afk:before{content:""}.fa-c-comment{color:#04357b}.fa-c-comment:before{content:""}.fa-c-options:before{content:""}.fa-c-param:before{content:""}.fa-c-wip:before{content:""}.fa-c-rss:before{content:""}.fa-c-logmeout:before,.fa-c-logout:before{content:""}.fa-c-fold{color:#04357b}.fa-c-fold:before{content:""}.fa-c-success:before,.fa-c-ok:before,.available .fa:before{content:""}.fa-c-warning{color:orange}.fa-c-warning:before{content:""}.fa-c-error{color:red}.fa-c-error:before{content:""}.fa-c-ko{color:red}.fa-c-ko:before,.unavailable .fa:before{content:""}.fa-c-search:before{content:""}.fa-c-welcome:before{content:""}.fa-c-loading:before{content:""}.fa-c-edit:before{content:""}.fa-Line truncated
*/@font-face{font-family:"FontAwesome";src:url("style/fontawesome-webfont.eot?v=4.2.0");src:url("style/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("style/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("style/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("style/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-inline{margin-right:5px}.fa-10{font-size:1.1111111111em;line-height:.9166666667em;vertical-align:-5%}.fa-20,#chat_messages p span.text a.img_box.hidden .banner .button .fa{font-size:1.2222222222em;line-height:.8333333333em;vertical-align:-10%}.fa-30{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-40{font-size:1.4444444444em;line-height:.6666666667em;vertical-align:-20%}.fa-60,a.button .fa{font-size:1.6666666667em;line-height:.5em;vertical-align:-30%}.fa-c-c:before,.fa-c-code:before{content:""}.fa-c-procedure:before,.fa-c-proc:before,.fa-c-p:before{content:""}.fa-c-table:before,.fa-c-t:before{content:""}.fa-c-documentation:before,.fa-c-doc:before,.fa-c-d:before{content:""}.fa-c-article:before,.fa-c-art:before,.fa-c-a:before{content:""}.fa-c-note:before{content:""}.fa-c-list:before{content:""}.fa-c-profile:before{content:""}.fa-c-chat:before{content:""}.fa-c-news:before{content:""}.fa-c-version:before{content:""}.fa-c-details:before{content:""}.fa-c-bug:before{content:""}.fa-c-date:before{content:""}.fa-c-git:before{content:""}.fa-c-afk:before{content:""}.fa-c-comment{color:#04357b}.fa-c-comment:before{content:""}.fa-c-options:before{content:""}.fa-c-param:before{content:""}.fa-c-wip:before{content:""}.fa-c-rss:before{content:""}.fa-c-logmeout:before,.fa-c-logout:before{content:""}.fa-c-fold{color:#04357b}.fa-c-fold:before{content:""}.fa-c-success:before,.fa-c-ok:before,.available .fa:before{content:""}.fa-c-warning{color:orange}.fa-c-warning:before{content:""}.fa-c-error{color:red}.fa-c-error:before{content:""}.fa-c-ko{color:red}.fa-c-ko:before,.unavailable .fa:before{content:""}.fa-c-search:before{content:""}.fa-c-welcome:before{content:""}.fa-c-loading:before{content:""}.fa-c-edit:before{content:""}.fa-Line truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["_variables.scss","_fa.scss","_fa-custom.scss","_lightbox.scss","_common.scss","databap.scss"],"names":[],"mappings":"CAAA;AAAA;AAAA;AAAA,GCMA,WACE,0BACA,iDACA,+RACA,mBACA,kBAEF,IACE,qBACA,wBACA,kBACA,mBACA,cACA,mCACA,kCAGF,OACE,uBACA,kBACA,oBAEF,OACE,cAEF,OACE,cAEF,OACE,cAEF,OACE,cAEF,OACE,mBACA,kBAEF,OACE,eACA,yBACA,qBAEF,UACE,kBAEF,OACE,kBACA,mBACA,mBACA,gBACA,kBAEF,aACE,mBAEF,WACE,yBACA,wBACA,mBAEF,YACE,YAEF,WACE,WAEF,cACE,kBAEF,eACE,iBAEF,SACE,0CACA,uCACA,qCACA,kCAEF,qBACE,GACE,4BAEF,KACE,+BAGJ,wBACE,GACE,+BAEF,KACE,kCAGJ,mBACE,GACE,0BAEF,KACE,6BAGJ,gBACE,GACE,+BACA,uBAEF,KACE,iCACA,0BAGJ,cACE,gEACA,gCACA,6BACA,4BACA,2BACA,wBAEF,eACE,gEACA,iCACA,8BACA,6BACA,4BACA,yBAEF,eACE,gEACA,iCACA,8BACA,6BACA,4BACA,yBAEF,oBACE,0EACA,+BACA,4BACA,2BACA,0BACA,uBAEF,kBACE,0EACA,+BACA,4BACA,2BACA,0BACA,uBAEF,UACE,kBACA,qBACA,UACA,WACA,gBACA,sBAEF,0BAEE,kBACA,OACA,WACA,kBAEF,aACE,oBAEF,aACE,cAEF,YACE,WCnLF,WACC,iBAUD,OACC,yBACA,0BACA,mBAED,uEACC,yBACA,0BACA,oBAED,OACC,yBACA,kBACA,oBAED,OACC,yBACA,0BACA,oBAED,oBACC,yBACA,iBACA,oBAGD,iCACE,YAGF,wDACC,YAGD,kCACC,YAGD,2DACC,YAGD,qDACC,YAGD,kBACC,YAGD,kBACC,YAGD,qBACE,YAGF,kBACC,YAGD,kBACC,YAGD,qBACC,YAGD,qBACC,YAGD,iBACC,YAGD,kBACC,YAGD,iBACC,YAGD,iBACC,YAGD,cACC,MFnGY,QEqGb,qBACC,YAGD,qBACC,YAGD,mBACC,YAGD,iBACC,YAGD,iBACE,YAGF,0CACE,YAGF,WACC,MF9HY,QEgIb,kBACC,YAGD,2DACC,YAGD,cACC,MF7Ha,OE+Hd,qBACC,YAGD,YACC,MFnIW,IEqIZ,mBACC,YAGD,SACC,MF1IW,IE4IZ,wCACC,YAGD,oBACE,YAGF,qBACE,YAGF,qBACC,YAGD,kBACC,YAGD,kBACC,YAGD,iBACC,YAGD,mBACC,YAGD,mBACC,YAGD,yCACC,YAGD,mCACC,YAGD,uCACC,YAGD,gBACC,YAGD,kBACC,YAGD,kBACC,YAGD,kBACC,YAGD,mBACC,YAGD,kBACC,YAGD,qBACC,YAGD,kBACC,YAGD,wBACC,YAGD,kBACC,YAED,oBACC,YAGD,oBACC,YAGD,kBACC,YAGD,sBACC,YAGD,uBACC,YAGD,qBACC,YAGD,uBACC,YAGD,iBACC,YAGD,+BACC,cAED,6CACC,YAGD,+BACC,cAED,6CACC,YAGD,+BACC,cAED,6CACC,YAGD,eACC,cAED,sBACC,YAGD,sBACC,YAGD,yFACC,YAGD,mBACC,YAGD,+BACC,YAED,gCACC,YAGD,iBACC,YCrUD,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBAGF,oBACE,cACA,YACA,kBACA,0BACA,uBACA,sBACA,qBACA,kBAGF,gBACE,YAGF,mBACE,kBACA,iBHjCW,QGkCX,QACA,YACA,aACA,cACA,0BACA,uBACA,sBACA,qBACA,kBAGF,yBACE,WACA,cACA,WAGF,cACE,YAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,eACA,MHtEuB,QGyEzB,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,gBACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,iBACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,0BACC,kBACA,QACA,eACA,mCACA,+BACA,2BACA,MH7IY,QG8IZ,eAGD,aACC,iCAGD,aACC,gCAGD,kBACE,cACA,gBACA,QACA,WACA,kCACA,sCACA,8BACA,mCACA,uCACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,MH9KW,QGiLb,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,oBACE,cACA,WACA,mBACA,eACA,MHnMW,QGsMb,mBACE,cACA,YACA,WACA,YACA,eACA,MH5MW,QG6MX,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UC7NF,WACE,sBACA,kBACA,gBACA,0EAEF,WACE,sBACA,kBACA,gBACA,mGAEF,WACE,sBACA,kBACA,gBACA,yGAEF,WACE,sBACA,kBACA,gBACA,gHAKF,UACC,WJRU,KISV,iCACA,MJ3BY,QI4BZ,WJ5BY,QI6BZ,UACA,SACA,iBAGD,MACC,YACA,gBACA,kBACA,SACA,UACA,iBAGD,SACC,UAGD,sBACC,iCACA,UJzBS,KI0BT,WJjCU,KIkCV,YAED,sCACC,YACA,YAGD,2HACC,iBJrDa,QIwDd,sFACC,iBJ9DwB,QIiEzB,8GACC,iBJlEwB,QIqEzB,6LACC,YAGD,8BACC,eAGD,OACC,WACA,YACA,SACA,gBACA,WJjFwB,QIkFxB,YAGD,OACC,WJvEU,KIwEV,YACA,MJ1FY,QI2FZ,SAGD,SACC,gBAGD,sCACC,MJnGY,QIsGb,EACC,SACA,UAGD,YACC,qBAGD,0CACC,aAGD,IACC,YAyBD,WARC,iCACA,oCACA,mCACA,4BAQD,cAXC,iCACA,oCACA,mCACA,4BAWD,aAdC,iCACA,oCACA,mCACA,4BAcD,YAjBC,iCACA,oCACA,mCACA,4BAiBD,mBApBC,8BACA,iCACA,gCACA,yBAoBD,OAvBC,uCACA,0CACA,yCACA,kCAuBD,YA1BC,mCACA,sCACA,qCACA,8BA0BD,gBA7BC,iCACA,oCACA,mCACA,4BA8BD,YACC,sBACA,2BACA,8BAGD,SACC,eACA,WACA,kBAGD,yBACC,cACA,iBACA,mBACA,YACA,uBACA,0BACA,yBACA,kBACA,WAGD,+BACC,0BAGD,gBACC,MJtLW,IIuLX,aJvLW,IIwLX,UJ5KU,KI6KV,iBAGD,oBACC,MJ9La,OI+Lb,aJ/La,OIgMb,UJnLU,KIoLV,kBAGD,oBACC,MJvMa,MIwMb,aJxMa,MIyMb,UJ1LU,KI6LX,cACC,yBAGD,SACC,YACA,iBACA,WJ3NwB,QI4NxB,UJrMU,KIsMV,eAEA,qBAED,eACC,iBJ9Na,QIgOd,gBACC,iBJvOY,QIwOZ,MJvNU,KI0NX,aAEC,iBAGD,qBACC,eAGD,oCACC,gBACA,MJrOU,KIsOV,kBACA,UAED,yBACC,MJrPa,QIwPd,uBACC,iBAGD,iBACC,iBJnQY,QIoQZ,MJnQwB,QIsQzB,uBACC,iBJlQa,QImQb,MJzQY,QI4Qb,eACC,iBACA,iBAGD,oBACC,iBACA,kBAGD,MACC,YAGD,YACC,iBJ1QU,KI6QX,WACC,WAGD,QACC,iBAGD,YACC,YAGD,OACC,gBAGD,cACC,mBAGD,gBACC,0BACA,kBACA,WJpTwB,QIqTxB,wBACA,SAED,gDACC,WAED,0BACC,0BAED,uCACC,yBAGD,YACC,iBACA,MJrUY,QIsUZ,kBACA,UJ/SS,KIiTV,2BACC,WJzTU,KI2TX,4BACC,WJ1UW,QI4UZ,oBACC,MJ1Ua,QI6Ud,cACC,gBACA,UACA,cACA,WAGD,oBACC,mBAGD,6BACC,iBACA,kBACA,UJxUU,KI2UX,sBACC,iBACA,iBAGD,wBACC,gBAGD,cACC,aAKD,UACC,eACA,kBACA,aACA,WJrXwB,QIsXxB,MJxXY,QI0Xb,0BACC,WJxXW,QI2XZ,mGACC,gBACA,WJ/WU,KIgXV,UJxWU,KIyWV,iBAED,gLACC,iBJpXU,KIsXX,6FACC,WAED,4CACC,iBACA,YACA,WJ5XU,KI8XX,+CACC,aJ/YwB,QIgZxB,iBAED,yBACC,iBJlZwB,QIoZzB,yCACC,iBJpZW,QIsZZ,sBACC,iBJzZwB,QI0ZxB,eAGD,iDACC,gCACA,UAKD,eACC,kBACA,WACA,gBAGD,iCACC,kBACA,OACA,MACA,WAGD,WACC,kBACA,YACA,WACA,gBAGD,yCACC,iBJ1bY,QI2bZ,WAED,kBACC,iBJ7bwB,QI8bxB,YACA,WACA,kBACALine truncated
{"version":3,"sourceRoot":"","sources":["_variables.scss","_fa.scss","_fa-custom.scss","_lightbox.scss","_common.scss","databap.scss"],"names":[],"mappings":"CAAA;AAAA;AAAA;AAAA,GCMA,WACE,0BACA,iDACA,+RACA,mBACA,kBAEF,IACE,qBACA,wBACA,kBACA,mBACA,cACA,mCACA,kCAGF,OACE,uBACA,kBACA,oBAEF,OACE,cAEF,OACE,cAEF,OACE,cAEF,OACE,cAEF,OACE,mBACA,kBAEF,OACE,eACA,yBACA,qBAEF,UACE,kBAEF,OACE,kBACA,mBACA,mBACA,gBACA,kBAEF,aACE,mBAEF,WACE,yBACA,wBACA,mBAEF,YACE,YAEF,WACE,WAEF,cACE,kBAEF,eACE,iBAEF,SACE,0CACA,uCACA,qCACA,kCAEF,qBACE,GACE,4BAEF,KACE,+BAGJ,wBACE,GACE,+BAEF,KACE,kCAGJ,mBACE,GACE,0BAEF,KACE,6BAGJ,gBACE,GACE,+BACA,uBAEF,KACE,iCACA,0BAGJ,cACE,gEACA,gCACA,6BACA,4BACA,2BACA,wBAEF,eACE,gEACA,iCACA,8BACA,6BACA,4BACA,yBAEF,eACE,gEACA,iCACA,8BACA,6BACA,4BACA,yBAEF,oBACE,0EACA,+BACA,4BACA,2BACA,0BACA,uBAEF,kBACE,0EACA,+BACA,4BACA,2BACA,0BACA,uBAEF,UACE,kBACA,qBACA,UACA,WACA,gBACA,sBAEF,0BAEE,kBACA,OACA,WACA,kBAEF,aACE,oBAEF,aACE,cAEF,YACE,WCnLF,WACC,iBAUD,OACC,yBACA,0BACA,mBAED,uEACC,yBACA,0BACA,oBAED,OACC,yBACA,kBACA,oBAED,OACC,yBACA,0BACA,oBAED,oBACC,yBACA,iBACA,oBAGD,iCACE,YAGF,wDACC,YAGD,kCACC,YAGD,2DACC,YAGD,qDACC,YAGD,kBACC,YAGD,kBACC,YAGD,qBACE,YAGF,kBACC,YAGD,kBACC,YAGD,qBACC,YAGD,qBACC,YAGD,iBACC,YAGD,kBACC,YAGD,iBACC,YAGD,iBACC,YAGD,cACC,MFnGY,QEqGb,qBACC,YAGD,qBACC,YAGD,mBACC,YAGD,iBACC,YAGD,iBACE,YAGF,0CACE,YAGF,WACC,MF9HY,QEgIb,kBACC,YAGD,2DACC,YAGD,cACC,MF7Ha,OE+Hd,qBACC,YAGD,YACC,MFnIW,IEqIZ,mBACC,YAGD,SACC,MF1IW,IE4IZ,wCACC,YAGD,oBACE,YAGF,qBACE,YAGF,qBACC,YAGD,kBACC,YAGD,kBACC,YAGD,iBACC,YAGD,mBACC,YAGD,mBACC,YAGD,yCACC,YAGD,mCACC,YAGD,uCACC,YAGD,gBACC,YAGD,kBACC,YAGD,kBACC,YAGD,kBACC,YAGD,mBACC,YAGD,kBACC,YAGD,qBACC,YAGD,kBACC,YAGD,wBACC,YAGD,kBACC,YAED,oBACC,YAGD,oBACC,YAGD,kBACC,YAGD,sBACC,YAGD,uBACC,YAGD,qBACC,YAGD,uBACC,YAGD,iBACC,YAGD,+BACC,cAED,6CACC,YAGD,+BACC,cAED,6CACC,YAGD,+BACC,cAED,6CACC,YAGD,eACC,cAED,sBACC,YAGD,sBACC,YAGD,yFACC,YAGD,mBACC,YAGD,+BACC,YAED,gCACC,YAGD,iBACC,YCrUD,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBAGF,oBACE,cACA,YACA,kBACA,0BACA,uBACA,sBACA,qBACA,kBAGF,gBACE,YAGF,mBACE,kBACA,iBHjCW,QGkCX,QACA,YACA,aACA,cACA,0BACA,uBACA,sBACA,qBACA,kBAGF,yBACE,WACA,cACA,WAGF,cACE,YAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,eACA,MHtEuB,QGyEzB,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,gBACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,iBACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,0BACC,kBACA,QACA,eACA,mCACA,+BACA,2BACA,MH7IY,QG8IZ,eAGD,aACC,iCAGD,aACC,gCAGD,kBACE,cACA,gBACA,QACA,WACA,kCACA,sCACA,8BACA,mCACA,uCACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,MH9KW,QGiLb,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,oBACE,cACA,WACA,mBACA,eACA,MHnMW,QGsMb,mBACE,cACA,YACA,WACA,YACA,eACA,MH5MW,QG6MX,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UC7NF,WACE,sBACA,kBACA,gBACA,0EAEF,WACE,sBACA,kBACA,gBACA,mGAEF,WACE,sBACA,kBACA,gBACA,yGAEF,WACE,sBACA,kBACA,gBACA,gHAKF,UACC,WJRU,KISV,iCACA,MJ3BY,QI4BZ,WJ5BY,QI6BZ,UACA,SACA,iBAGD,MACC,YACA,gBACA,kBACA,SACA,UACA,iBAGD,SACC,UAGD,sBACC,iCACA,UJzBS,KI0BT,WJjCU,KIkCV,YAED,sCACC,YACA,YAGD,2HACC,iBJrDa,QIwDd,sFACC,iBJ9DwB,QIiEzB,8GACC,iBJlEwB,QIqEzB,6LACC,YAGD,8BACC,eAGD,OACC,WACA,YACA,SACA,gBACA,WJjFwB,QIkFxB,YAGD,OACC,WJvEU,KIwEV,YACA,MJ1FY,QI2FZ,SAGD,SACC,gBAGD,sCACC,MJnGY,QIsGb,EACC,SACA,UAGD,YACC,qBAGD,0CACC,aAGD,IACC,YAyBD,WARC,iCACA,oCACA,mCACA,4BAQD,cAXC,iCACA,oCACA,mCACA,4BAWD,aAdC,iCACA,oCACA,mCACA,4BAcD,YAjBC,iCACA,oCACA,mCACA,4BAiBD,mBApBC,8BACA,iCACA,gCACA,yBAoBD,OAvBC,uCACA,0CACA,yCACA,kCAuBD,YA1BC,mCACA,sCACA,qCACA,8BA0BD,gBA7BC,iCACA,oCACA,mCACA,4BA8BD,YACC,sBACA,2BACA,8BAGD,SACC,eACA,WACA,kBAGD,yBACC,cACA,iBACA,mBACA,YACA,uBACA,0BACA,yBACA,kBACA,WAGD,+BACC,0BAGD,gBACC,MJtLW,IIuLX,aJvLW,IIwLX,UJ5KU,KI6KV,iBAGD,oBACC,MJ9La,OI+Lb,aJ/La,OIgMb,UJnLU,KIoLV,kBAGD,oBACC,MJvMa,MIwMb,aJxMa,MIyMb,UJ1LU,KI6LX,cACC,yBAGD,SACC,YACA,iBACA,WJ3NwB,QI4NxB,UJrMU,KIsMV,eAEA,qBAED,eACC,iBJ9Na,QIgOd,gBACC,iBJvOY,QIwOZ,MJvNU,KI0NX,aAEC,iBAGD,qBACC,eAGD,oCACC,gBACA,MJrOU,KIsOV,kBACA,UAED,yBACC,MJrPa,QIwPd,uBACC,iBAGD,iBACC,iBJnQY,QIoQZ,MJnQwB,QIsQzB,uBACC,iBJlQa,QImQb,MJzQY,QI4Qb,eACC,iBACA,iBAGD,oBACC,iBACA,kBAGD,MACC,YAGD,YACC,iBJ1QU,KI6QX,WACC,WAGD,QACC,iBAGD,YACC,YAGD,OACC,gBAGD,cACC,mBAGD,gBACC,0BACA,kBACA,WJpTwB,QIqTxB,wBACA,SAED,gDACC,WAED,0BACC,0BAED,uCACC,yBAGD,YACC,iBACA,MJrUY,QIsUZ,kBACA,UJ/SS,KIiTV,2BACC,WJzTU,KI2TX,4BACC,WJ1UW,QI4UZ,oBACC,MJ1Ua,QI6Ud,cACC,gBACA,UACA,cACA,WACA,gBACA,uBACA,mBAGD,oBACC,mBAGD,6BACC,iBACA,kBACA,UJ3UU,KI8UX,sBACC,iBACA,iBAGD,wBACC,gBAGD,cACC,aAKD,UACC,eACA,kBACA,aACA,WJxXwB,QIyXxB,MJ3XY,QI6Xb,0BACC,WJ3XW,QI8XZ,mGACC,gBACA,WJlXU,KImXV,UJ3WU,KI4WV,iBAED,gLACC,iBJvXU,KIyXX,6FACC,WAED,4CACC,iBACA,YACA,WJ/XU,KIiYX,+CACC,aJlZwB,QImZxB,iBAED,yBACC,iBJrZwB,QIuZzB,yCACC,iBJvZW,QIyZZ,sBACC,iBJ5ZwB,QI6ZxB,eAGD,iDACC,gCACA,UAKD,eACC,kBACA,WACA,gBAGD,iCACC,kBACA,OACA,MACA,WAGD,WACC,kBACA,YACA,WACA,gBAGD,yCACC,iBJ7bY,QI8bZ,WAED,kBACC,iBJhcwB,QIicLine truncated
+1 -3
View File
@@ -14,7 +14,6 @@ Internal:
Bug fix:
- Delete link to scss map
- add big company logo in db (new col). Use it in profile ?
- [1.1.1] Resize .gif + fix unresized ones
- Fix les "xxx se déconnecte" intempestives
- code reader : mettre la scrollbar à l'intérieur du code
@@ -30,7 +29,6 @@ New features:
- [1.3.0] Reward on post
- modification code : possibilité de modifier la description d'un code après enregistrement + entre les versions
- Add functionality to modify docs
- compatibilité ie8+
- accès externe à certains fichiers (partage temporaire)
- ajout code : ajouter un bouton "aperçu"
- code page : hover -> wait 1sec -> if(focus) -> expand {-5 lines, + 5 lines}
@@ -58,4 +56,4 @@ Testing
MEP 1.2
-------
-
-