Skip to content
Snippets Groups Projects
Commit 43085c8e authored by hahn's avatar hahn
Browse files

Merge branch 'master' of gitlab.iml.unibe.ch:admins/imldeployment

parents 846bf3a1 7f945e90
Branches
No related tags found
No related merge requests found
Showing
with 19318 additions and 95 deletions
......@@ -22,4 +22,8 @@ nbproject
/public_html/deployment/classes/html-adminltetest.tpl.php
/public_html/deployment/adminlte/
/config/inc_user2projects.php
/shellscripts/spooler/
\ No newline at end of file
/shellscripts/spooler/
/public_html/valuestore/data/versioncache.db
/public_html/vendor/medoo/
/config/_inc_projects_config.php
/config/inc_projects_config.php
\ No newline at end of file
<?php
require_once('classes/appmonitor-client.class.php');
require_once(__DIR__.'/../deployment/classes/project.class.php');
$oMonitor = new appmonitor();
@include 'general_include.php';
$oMonitor->addTag('deployment');
$oMonitor->addCheck(
array(
......@@ -20,132 +18,256 @@ $oMonitor->addCheck(
)
);
$sCfgfile='../../config/inc_projects_config.php';
require_once '../../config/inc_projects_config.php';
// ----------------------------------------------------------------------
// needed directories
// config file
// ----------------------------------------------------------------------
$oMonitor->addCheck(
array(
"name" => "tmp subdir",
"description" => "Check storage for temp directories, git checkouts for logmessages exists and is writable",
"name" => "read Cfg file",
"description" => "Check if config file is readable",
"check" => array(
"function" => "File",
"params" => array(
"filename" => $aConfig['tmpDir'],
"dir" => true,
"writable" => true,
"filename" => $sCfgfile,
"file" => true,
"readable" => true,
),
),
)
);
$oMonitor->addCheck(
array(
"name" => "workdir",
"description" => "Check if base workdir exists and is writable",
"check" => array(
"function" => "File",
"params" => array(
"filename" => $aConfig['workDir'],
"dir" => true,
"writable" => true,
),
),
)
);
foreach(array('dataDir', 'buildDir', 'packageDir', 'archiveDir') as $sDirKey){
require_once $sCfgfile;
// echo '<pre>' . print_r($aConfig, 1) . '</pre>';die();
// ----------------------------------------------------------------------
// directories
// ----------------------------------------------------------------------
foreach (array(
'tmpDir'=>array('dir'=>$aConfig['tmpDir'], 'descr'=>'Temp Dir mit git Daten'),
'configDir'=>array('dir'=>$aConfig['configDir'], 'descr'=>'Ablage der Programm-Config'),
'dataDir'=>array('dir'=>$aConfig['dataDir'], 'descr'=>'Basisverzeichnis fue DB, Projekt-Configs, SSH-Keys'),
'dataDir/database'=>array('dir'=>$aConfig['dataDir'].'/database', 'descr'=>'DB-Ablage (Sqlite)'),
'dataDir/projects'=>array('dir'=>$aConfig['dataDir'].'/projects', 'descr'=>'Projekt-Configdateien'),
'dataDir/sshkeys'=>array('dir'=>$aConfig['dataDir'].'/sshkeys', 'descr'=>'SSH Keys'),
'buildDir'=>array('dir'=>$aConfig['buildDir'], 'descr'=>'Basisverzeichnis fuer Builds'),
'packageDir'=>array('dir'=>$aConfig['buildDir'], 'descr'=>'Basisverzeichnis der Pakete und Versionen'),
'archiveDir'=>array('dir'=>$aConfig['buildDir'], 'descr'=>'Ablage der gebuildeten Archive'),
) as $sKey=>$aItem) {
$oMonitor->addCheck(
array(
"name" => "dir [$sDirKey]",
"description" => "Check if workdir $sDirKey exists and is writable",
"name" => "dir $sKey",
"description" => $aItem['descr'],
"check" => array(
"function" => "File",
"params" => array(
"filename" => $aConfig[$sDirKey],
"filename" => $aItem['dir'],
"dir" => true,
"writable" => true,
),
),
)
);
}
foreach(array('dataDir', 'buildDir', 'packageDir', 'archiveDir') as $sDirKey){
$oMonitor->addCheck(
array(
"name" => "Disk space in dir [$sDirKey]",
"description" => "Check if workdir $sDirKey has enough space",
"check" => array(
"function" => "Diskfree",
"params" => array(
"directory" => $aConfig[$sDirKey],
"warning" => "500MB",
"critical" => "100MB",
),
),
)
);
}
$oMonitor->addCheck(
array(
"name" => "Certificate check",
"description" => "Check if SSL cert is valid and does not expire soon",
"check" => array(
"function" => "Cert",
),
)
);
// ----------------------------------------------------------------------
// databases
// count of Projects
// ----------------------------------------------------------------------
$sSqlitefile=$aConfig['dataDir'].'/database/logs.db';
$oPrj=new project();
$iProjectCount=count($oPrj->getProjects());
$iInProgress=0;
$iInQueue=0;
foreach ($oPrj->getProjects() as $sPrj) {
$oPrj2=new project($sPrj);
$aProgress=$oPrj2->getProgress();
/*
* so ist irgendwas anders ... er initialisiert das Projekt nicht
*
$oPrj->setProjectById($sPrj);
$aProgress=$oPrj->getProgress();
*/
$iInProgress+=$aProgress['inprogress'] ? 1 : 0;
$iInQueue+=$aProgress['hasQueue'] ? 1 : 0;
}
$oMonitor->addCheck(
array(
"name" => "Sqlite DB for action logs",
"description" => "Connect sqlite db ". basename($sSqlitefile),
"name" => "ci projects",
"description" => "Count of Projects in CI Webgui",
"check" => array(
"function" => "SqliteConnect",
"function" => "Simple",
"params" => array(
"db"=>$sSqlitefile
"result" => $iProjectCount ? RESULT_OK : RESULT_ERROR,
"value" => "found projects: $iProjectCount",
"count" => $iProjectCount,
"visual" => "simple",
),
),
)
);
$sSqlitefile2=$_SERVER['DOCUMENT_ROOT'].'/valuestore/data/versioncache.db';
$oMonitor->addCheck(
array(
"name" => "Sqlite DB version cache",
"description" => "Connect sqlite db ". basename($sSqlitefile),
"name" => "ci inProgress",
"description" => "Projects in progress",
"check" => array(
"function" => "SqliteConnect",
"function" => "Simple",
"params" => array(
"result" => RESULT_OK,
"value" => "found projects: $iInProgress",
"count" => $iInProgress,
"visual" => "simple",
),
),
)
);
$oMonitor->addCheck(
array(
"name" => "ci hasqueue",
"description" => "Waiting for install",
"check" => array(
"function" => "Simple",
"params" => array(
"db"=>$sSqlitefile2
"result" => RESULT_OK,
"value" => "found projects: $iInQueue",
"count" => $iInQueue,
"visual" => "simple",
),
),
)
);
// ----------------------------------------------------------------------
// ssl cert
// foreman
// ----------------------------------------------------------------------
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']){
$oMonitor->addCheck(
array(
"name" => "Certificate check",
"description" => "Check if SSL cert is valid and does not expire soon",
"check" => array(
"function" => "Cert",
if(isset($aConfig['foreman']['api'])){
require_once(__DIR__.'/../deployment/classes/foremanapi.class.php');
$oForeman = new ForemanApi($aConfig['foreman']);
foreach (array('hostgroups', 'hosts') as $sForemanKey){
$aFData=$oForeman->read(array(
'request' => array(
array($sForemanKey),
),
'response' => array(
'id', 'title'
),
));
$oMonitor->addCheck(
array(
"name" => "Foreman $sForemanKey",
"description" => "Count of Foreman $sForemanKey",
"check" => array(
"function" => "Simple",
"params" => array(
"result" => count($aFData) ? RESULT_OK : RESULT_ERROR,
"value" => "Count of found Foreman $sForemanKey: " . count($aFData)."; response status: ".$oForeman->getResponseStatus() . "; Http-Code ".$oForeman->getResponseInfo('http_code'),
"count" => count($aFData),
"visual" => "simple",
),
),
)
);
}
}
// ----------------------------------------------------------------------
// ssh targets
// ----------------------------------------------------------------------
if(count($aConfig['mirrorPackages'])){
foreach($aConfig['mirrorPackages'] as $sHostKey=>$aData){
/*
[puppet.one] => Array
(
[type] => rsync
[runas] =>
[target] => copy-deployment@puppet:/var/shared/imldeployment
)
*/
$sTargetHost = preg_replace('/\:.*/', '', $aData['target']);
$sCmd='ssh '.$sTargetHost. ' ls -1';
exec($sCmd, $sOut, $iRc);
$oMonitor->addCheck(
array(
"name" => "mirror target $sHostKey",
"description" => "Sync target of generated packages",
"check" => array(
"function" => "Simple",
"params" => array(
"result" => $iRc ? RESULT_ERROR : RESULT_OK,
"value" => "Command [$sCmd] returns with exitcode $iRc; output: ".implode(" ", $sOut),
),
),
)
);
}
}
foreach(array(
array(
'host'=>'gitlab.iml.unibe.ch',
'port'=>22,
'descr'=>'SSH port to Gitlab on gitlab.iml.unibe.ch'
),
array(
'host'=>'git-repo.iml.unibe.ch',
'port'=>22,
'descr'=>'SSH port to Gitlab on git-repo.iml.unibe.ch'
),
array(
'host'=>'github.com',
'port'=>22,
'descr'=>'SSH port to Github'
),
) as $aDescr){
$oMonitor->addCheck(
array(
"name" => 'port check '.$aDescr['host'].':'.$aDescr['port'],
"description" => $aDescr['descr'],
"check" => array(
"function" => "PortTcp",
"params" => array(
"port"=>$aDescr['port'],
"host"=>$aDescr['host'],
),
),
)
);
}
// ----------------------------------------------------------------------
// database
// ----------------------------------------------------------------------
$sSqlitefile=$aConfig['dataDir'].'/database/logs.db';
$oMonitor->addCheck(
array(
"name" => "Sqlite DB for action logs",
"description" => "Connect sqlite db ". basename($sSqlitefile),
"check" => array(
"function" => "SqliteConnect",
"params" => array(
"db"=>$sSqlitefile
),
),
)
);
// Gesamt-Ergebnis - ohne Param=aut. max. Wert nehmen
$oMonitor->setResult();
......
iml:$apr1$AUcEY.ns$FqqznbqFI.tPNno07nyCI0
......@@ -23,7 +23,20 @@ class Actionlog {
`action` TEXT,
`message` TEXT
)';
/*
private $_sCreateFUTURE = '
CREATE TABLE "logs" (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ,
`time` DATETIME,
`time-start` DATETIME,
`loglevel` TEXT,
`ip` TEXT,
`user` TEXT,
`project` TEXT,
`action` TEXT,
`message` TEXT
)';
*/
/**
* constructor - sets internal environment variables and checks existence
* of the database
......@@ -72,6 +85,11 @@ class Actionlog {
// echo "<pre>$sSql</pre>";
$db = new PDO("sqlite:" . $this->_dbfile);
$result = $db->query($sSql);
/*
if(!$result){
echo "PDO ERROR " . print_r($db->errorInfo(), 1) ."<br>";
}
*/
$db = NULL;
return $result;
}
......@@ -81,8 +99,9 @@ class Actionlog {
* @param string $sMessage message
* @param string $sAction project action; i.e. build, deploy, ...
* @param string $sLoglevel loglevel
* @return type
*/
public function add($sMessage, $sAction = "", $sLoglevel = "info") {
public function add($sMessage, $sAction = "", $sLoglevel = "info", $sTimeStart = false) {
if (array_search($sLoglevel, $this->_aLoglevels) === false) {
die(__class__ . ": loglevel $sLoglevel is invalid");
}
......@@ -97,8 +116,24 @@ class Actionlog {
'" . $sMessage . "'
);
";
/*
$sqlFUTURE = "INSERT INTO `logs` (`time`, ".($sTimeStart ? "`time-start`, " : "" )." `loglevel`, `ip`, `user`, `project` ,`action`, `message`)
VALUES(
'" . date("Y-m-d H:i:s") . "',
".($sTimeStart ? "'" . $sTimeStart . "', " : "" ) ."
'" . $sLoglevel . "',
'" . $this->_sIP . "',
'" . $this->_sUser . "',
'" . $this->_sProject . "',
'" . $sAction . "',
'" . $sMessage . "'
);
";
*
*/
// echo $sql . "<br>";
$this->_makeQuery($sql);
$oResult=$this->_makeQuery($sql);
return $oResult;
}
/**
......@@ -200,7 +235,7 @@ class Actionlog {
);
// --- list of all projects in log
$sSql='SELECT DISTINCT(project) from `logs`';
$sSql='SELECT DISTINCT(project) from `logs` order by project asc';
$aForms["filter"]["form"]['selectproject'] = array(
'type' => 'select',
'name' => 'selectproject',
......@@ -281,9 +316,14 @@ class Actionlog {
$sReturn = '<div id="divActionlogs">'.$oForm->renderHtml("filter").'
<div style="clear: both; margin-bottom: 1em;"></div>
<div id="tableLogactions"></div>
<!--
<script src="/vendor/vis/4.21.0/vis.min.js"></script>
<link href="/vendor/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" />
<div id="divTimeline"></div>
-->
</div>
<script>
var sMsgNolog="'.t("class-actionlog-nolog").'";
var sMsgNolog="'.t("class-actionlog-nolog").'";
</script>';
if ($bIsFullsearch){
......@@ -325,5 +365,5 @@ class Actionlog {
}
return $sReturn;
}
}
......@@ -13,8 +13,7 @@
<link href="/deployment/bootstrap3/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" type="text/css" href="/vendor/twitter-bootstrap/4.1.1/css/bootstrap.min.css"/>
<script src="/vendor/twitter-bootstrap/4.1.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="/vendor/font-awesome-4.7.0/css/font-awesome.min.css">
-->
-->
<link rel="stylesheet" type="text/css" href="/vendor/bootstrap3/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="/vendor/font-awesome/5.8.2/css/all.css">
<script src="/vendor/jquery/3.4.1/jquery.min.js"></script>
......
......@@ -3,6 +3,7 @@
define("OPTION_DEFAULT", -999);
define("OPTION_NONE", -1);
require_once __DIR__.'/../inc_functions.php';
require_once 'base.class.php';
require_once 'htmlguielements.class.php';
require_once 'messenger.class.php';
......
......@@ -20,7 +20,6 @@ class projectlist extends base{
// ----------------------------------------------------------------------
// CONFIG
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// constructor
// ----------------------------------------------------------------------
......@@ -30,8 +29,6 @@ class projectlist extends base{
*/
public function __construct() {
$this->oUser=new user();
// define
}
// ----------------------------------------------------------------------
......@@ -70,6 +67,7 @@ class projectlist extends base{
$iInprogress=0;
$iHasqueue=0;
$sDivInprogress='<div class="progressinprogress" title="'.t("progress-inprogress").'">'.$oHtml->getIcon('refresh').t("progress-inprogress").'</div>';
$sDivHasqueue='<div class="progresshasqueue" title="'.t("progress-hasqueue").'">'.$oHtml->getIcon('waiting').t("progress-hasqueue").'</div>';
......@@ -102,6 +100,7 @@ class projectlist extends base{
if($aProgress['inprogress']){
$iInprogress++;
$sProgress.=$sDivInprogress;
}
if($aProgress['hasQueue']){
......@@ -464,6 +463,7 @@ class projectlist extends base{
</form>
<div style="clear: both; margin-bottom: 1em"></div>
</div>
<br>
<div class="view viewsimple">
......
......@@ -17,6 +17,11 @@
###################################################################### */
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once("./classes/page.class.php");
require_once("../../config/inc_projects_config.php");
require_once("./classes/logger.class.php");
......
......@@ -66,6 +66,8 @@ if ($aParams["prj"] == "all") {
$sOut.= '<pre>'.print_r($aTmp, 1).'</pre>';
// print_r($aConfig);
// ----- from HERE: generate form (experimental)
$i = 0;
require_once ("./classes/formgen.class.php");
......@@ -154,7 +156,7 @@ if ($aParams["prj"] == "all") {
$sOut.=$oHtml->getBox("error", '<ul>'.$sError.'</ul>');
} else {
$oForm = new formgen($aForms);
// TODO: unhide after checkin
// TODO to enable form uncomment the next line
// $sOut.=$oForm->renderHtml("setup");
}
......@@ -271,7 +273,6 @@ if ($aParams["prj"] == "all") {
// ------------------------------------------------------------
// logoanalyzer
// ------------------------------------------------------------
// TODO
if ($aParams["par3"]=="actionlog") {
// $oPrj = new project();
require_once("./classes/actionlog.class.php");
......@@ -280,6 +281,20 @@ if ($aParams["prj"] == "all") {
$sOut.=$oLog->renderLogs(array(), true);
}
// ------------------------------------------------------------
// stats
// ------------------------------------------------------------
//
if ($aParams["par3"]=="stats") {
// $oPrj = new project();
require_once("./classes/actionlog.class.php");
$oLog=new Actionlog('');
$sOut.='TODO'
//. $oLog->renderStats(array(), true)
;
}
}
......
......@@ -138,7 +138,7 @@ if(is_array($aData) && count($aData)){
$sOut.=''
. '<form method="POST" action="index.php">'
. '<input type="hidden" name="action" value="cleanup">'
. '<button>Cleanup (> 1d)</button>'
. '<button>Cleanup (older 1d)</button>'
. '</form><hr>'
. '<table id="tbldata"><thead>'
......
{"_cdn":{"name":"jquery","filename":"jquery.min.js","version":"3.4.1","description":"JavaScript library for DOM operations","homepage":"http:\/\/jquery.com\/","keywords":["jquery","library","ajax","framework","toolkit","popular"],"namespace":"jQuery","repository":{"type":"git","url":"https:\/\/github.com\/jquery\/jquery.git"},"license":"MIT","author":{"name":"jQuery Foundation and other contributors","url":"https:\/\/github.com\/jquery\/jquery\/blob\/master\/AUTHORS.txt"},"autoupdate":{"type":"npm","target":"jquery"},"assets":[{"version":"3.4.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.4.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.3.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.3.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.2.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.2.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.1.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.1.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-rc1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-beta1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-alpha1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"3.0.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.2.3","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.2","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-rc2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-beta1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-beta3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-beta2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.12.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.12.3","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.2","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-rc2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-beta1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0-beta3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.10.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.10.1","files":["jquery.js","jquery.min.js","jquery.min.map","themes\/base\/images\/animated-overlay.gif","themes\/base\/images\/ui-bg_flat_0_aaaaaa_40x100.png","themes\/base\/images\/ui-bg_flat_75_ffffff_40x100.png","themes\/base\/images\/ui-bg_glass_55_fbf9ee_1x400.png","themes\/base\/images\/ui-bg_glass_65_ffffff_1x400.png","themes\/base\/images\/ui-bg_glass_75_dadada_1x400.png","themes\/base\/images\/ui-bg_glass_75_e6e6e6_1x400.png","themes\/base\/images\/ui-bg_glass_95_fef1ec_1x400.png","themes\/base\/images\/ui-bg_highlight-soft_75_cccccc_1x100.png","themes\/base\/images\/ui-icons_222222_256x240.png","themes\/base\/images\/ui-icons_2e83ff_256x240.png","themes\/base\/images\/ui-icons_454545_256x240.png","themes\/base\/images\/ui-icons_888888_256x240.png","themes\/base\/images\/ui-icons_cd0a0a_256x240.png","themes\/base\/jquery.ui.accordion.css","themes\/base\/jquery.ui.accordion.min.css","themes\/base\/jquery.ui.all.css","themes\/base\/jquery.ui.all.min.css","themes\/base\/jquery.ui.autocomplete.css","themes\/base\/jquery.ui.autocomplete.min.css","themes\/base\/jquery.ui.base.css","themes\/base\/jquery.ui.base.min.css","themes\/base\/jquery.ui.button.css","themes\/base\/jquery.ui.button.min.css","themes\/base\/jquery.ui.core.css","themes\/base\/jquery.ui.core.min.css","themes\/base\/jquery.ui.datepicker.css","themes\/base\/jquery.ui.datepicker.min.css","themes\/base\/jquery.ui.dialog.css","themes\/base\/jquery.ui.dialog.min.css","themes\/base\/jquery.ui.menu.css","themes\/base\/jquery.ui.menu.min.css","themes\/base\/jquery.ui.progressbar.css","themes\/base\/jquery.ui.progressbar.min.css","themes\/base\/jquery.ui.resizable.css","themes\/base\/jquery.ui.resizable.min.css","themes\/base\/jquery.ui.selectable.css","themes\/base\/jquery.ui.selectable.min.css","themes\/base\/jquery.ui.slider.css","themes\/base\/jquery.ui.slider.min.css","themes\/base\/jquery.ui.spinner.css","themes\/base\/jquery.ui.spinner.min.css","themes\/base\/jquery.ui.tabs.css","themes\/base\/jquery.ui.tabs.min.css","themes\/base\/jquery.ui.theme.css","themes\/base\/jquery.ui.theme.min.css","themes\/base\/jquery.ui.tooltip.css","themes\/base\/jquery.ui.tooltip.min.css"]},{"version":"1.10.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.9.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.9.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.8.3","files":["jquery.js","jquery.min.js"]},{"version":"1.8.2","files":["jquery.js","jquery.min.js"]},{"version":"1.8.1","files":["jquery.js","jquery.min.js"]},{"version":"1.8.0","files":["jquery-1.8.0.js","jquery-1.8.0.min.js","jquery.js","jquery.min.js"]},{"version":"1.7.2","files":["jquery.min.js"]},{"version":"1.7.1","files":["jquery.min.js"]},{"version":"1.7","files":["jquery.min.js"]},{"version":"1.6.4","files":["jquery.js","jquery.min.js"]},{"version":"1.6.3","files":["jquery.js","jquery.min.js"]},{"version":"1.6.2","files":["jquery.js","jquery.min.js"]},{"version":"1.6.1","files":["jquery.js","jquery.min.js"]},{"version":"1.5.1","files":["jquery.js","jquery.min.js"]},{"version":"1.4.4","files":["jquery.js","jquery.min.js"]},{"version":"1.4.3","files":["jquery.js","jquery.min.js"]},{"version":"1.4.2","files":["jquery.js","jquery.min.js"]},{"version":"1.4.1","files":["jquery.js","jquery.min.js"]},{"version":"1.4.0","files":["jquery.js","jquery.min.js"]},{"version":"1.3.2","files":["jquery.js","jquery.min.js"]},{"version":"1.3.1","files":["jquery.js","jquery.min.js"]},{"version":"1.3.0","files":["jquery.js","jquery.min.js"]},{"version":"1.2.6","files":["jquery.js","jquery.min.js"]},{"version":"1.2.3","files":["jquery.js","jquery.min.js"]}]}}
\ No newline at end of file
{"_cdn":{"name":"jquery","filename":"jquery.min.js","version":"3.4.1","description":"JavaScript library for DOM operations","homepage":"http:\/\/jquery.com\/","keywords":["jquery","library","ajax","framework","toolkit","popular"],"namespace":"jQuery","repository":{"type":"git","url":"https:\/\/github.com\/jquery\/jquery.git"},"license":"MIT","author":{"name":"jQuery Foundation and other contributors","url":"https:\/\/github.com\/jquery\/jquery\/blob\/master\/AUTHORS.txt"},"autoupdate":{"type":"npm","target":"jquery"},"assets":[{"version":"3.4.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.4.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.3.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.3.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.2.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.2.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.1.1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.1.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-rc1","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-beta1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"3.0.0-alpha1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"3.0.0","files":["core.js","jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.2.3","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.2","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"2.2.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-rc2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1-beta1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-beta3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0-beta2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.1.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"2.0.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.12.4","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.12.3","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.2","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.1","files":["jquery.js","jquery.min.js","jquery.min.map","jquery.slim.js","jquery.slim.min.js","jquery.slim.min.map"]},{"version":"1.12.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-rc2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1-beta1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0-rc1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0-beta3","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.11.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.10.2","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.10.1","files":["jquery.js","jquery.min.js","jquery.min.map","themes\/base\/images\/animated-overlay.gif","themes\/base\/images\/ui-bg_flat_0_aaaaaa_40x100.png","themes\/base\/images\/ui-bg_flat_75_ffffff_40x100.png","themes\/base\/images\/ui-bg_glass_55_fbf9ee_1x400.png","themes\/base\/images\/ui-bg_glass_65_ffffff_1x400.png","themes\/base\/images\/ui-bg_glass_75_dadada_1x400.png","themes\/base\/images\/ui-bg_glass_75_e6e6e6_1x400.png","themes\/base\/images\/ui-bg_glass_95_fef1ec_1x400.png","themes\/base\/images\/ui-bg_highlight-soft_75_cccccc_1x100.png","themes\/base\/images\/ui-icons_222222_256x240.png","themes\/base\/images\/ui-icons_2e83ff_256x240.png","themes\/base\/images\/ui-icons_454545_256x240.png","themes\/base\/images\/ui-icons_888888_256x240.png","themes\/base\/images\/ui-icons_cd0a0a_256x240.png","themes\/base\/jquery.ui.accordion.css","themes\/base\/jquery.ui.accordion.min.css","themes\/base\/jquery.ui.all.css","themes\/base\/jquery.ui.all.min.css","themes\/base\/jquery.ui.autocomplete.css","themes\/base\/jquery.ui.autocomplete.min.css","themes\/base\/jquery.ui.base.css","themes\/base\/jquery.ui.base.min.css","themes\/base\/jquery.ui.button.css","themes\/base\/jquery.ui.button.min.css","themes\/base\/jquery.ui.core.css","themes\/base\/jquery.ui.core.min.css","themes\/base\/jquery.ui.datepicker.css","themes\/base\/jquery.ui.datepicker.min.css","themes\/base\/jquery.ui.dialog.css","themes\/base\/jquery.ui.dialog.min.css","themes\/base\/jquery.ui.menu.css","themes\/base\/jquery.ui.menu.min.css","themes\/base\/jquery.ui.progressbar.css","themes\/base\/jquery.ui.progressbar.min.css","themes\/base\/jquery.ui.resizable.css","themes\/base\/jquery.ui.resizable.min.css","themes\/base\/jquery.ui.selectable.css","themes\/base\/jquery.ui.selectable.min.css","themes\/base\/jquery.ui.slider.css","themes\/base\/jquery.ui.slider.min.css","themes\/base\/jquery.ui.spinner.css","themes\/base\/jquery.ui.spinner.min.css","themes\/base\/jquery.ui.tabs.css","themes\/base\/jquery.ui.tabs.min.css","themes\/base\/jquery.ui.theme.css","themes\/base\/jquery.ui.theme.min.css","themes\/base\/jquery.ui.tooltip.css","themes\/base\/jquery.ui.tooltip.min.css"]},{"version":"1.10.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.9.1","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.9.0","files":["jquery.js","jquery.min.js","jquery.min.map"]},{"version":"1.8.3","files":["jquery.js","jquery.min.js"]},{"version":"1.8.2","files":["jquery.js","jquery.min.js"]},{"version":"1.8.1","files":["jquery.js","jquery.min.js"]},{"version":"1.8.0","files":["jquery-1.8.0.js","jquery-1.8.0.min.js","jquery.js","jquery.min.js"]},{"version":"1.7.2","files":["jquery.min.js"]},{"version":"1.7.1","files":["jquery.min.js"]},{"version":"1.7","files":["jquery.min.js"]},{"version":"1.6.4","files":["jquery.js","jquery.min.js"]},{"version":"1.6.3","files":["jquery.js","jquery.min.js"]},{"version":"1.6.2","files":["jquery.js","jquery.min.js"]},{"version":"1.6.1","files":["jquery.js","jquery.min.js"]},{"version":"1.5.1","files":["jquery.js","jquery.min.js"]},{"version":"1.4.4","files":["jquery.js","jquery.min.js"]},{"version":"1.4.3","files":["jquery.js","jquery.min.js"]},{"version":"1.4.2","files":["jquery.js","jquery.min.js"]},{"version":"1.4.1","files":["jquery.js","jquery.min.js"]},{"version":"1.4.0","files":["jquery.js","jquery.min.js"]},{"version":"1.3.2","files":["jquery.js","jquery.min.js"]},{"version":"1.3.1","files":["jquery.js","jquery.min.js"]},{"version":"1.3.0","files":["jquery.js","jquery.min.js"]},{"version":"1.2.6","files":["jquery.js","jquery.min.js"]},{"version":"1.2.3","files":["jquery.js","jquery.min.js"]}]}}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module
define( [
"./var/arr",
"./var/document",
"./var/getProto",
"./var/slice",
"./var/concat",
"./var/push",
"./var/indexOf",
"./var/class2type",
"./var/toString",
"./var/hasOwn",
"./var/fnToString",
"./var/ObjectFunctionString",
"./var/support",
"./var/isFunction",
"./var/isWindow",
"./core/DOMEval",
"./core/toType"
], function( arr, document, getProto, slice, concat, push, indexOf,
class2type, toString, hasOwn, fnToString, ObjectFunctionString,
support, isFunction, isWindow, DOMEval, toType ) {
"use strict";
var
version = "3.3.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init( selector, context );
},
// Support: Android <=4.0 only
// Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
jQuery.fn = jQuery.prototype = {
// The current version of jQuery being used
jquery: version,
constructor: jQuery,
// The default length of a jQuery object is 0
length: 0,
toArray: function() {
return slice.call( this );
},
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
// Return all the elements in a clean array
if ( num == null ) {
return slice.call( this );
}
// Return just the one element from the set
return num < 0 ? this[ num + this.length ] : this[ num ];
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
// Return the newly-formed element set
return ret;
},
// Execute a callback for every element in the matched set.
each: function( callback ) {
return jQuery.each( this, callback );
},
map: function( callback ) {
return this.pushStack( jQuery.map( this, function( elem, i ) {
return callback.call( elem, i, elem );
} ) );
},
slice: function() {
return this.pushStack( slice.apply( this, arguments ) );
},
first: function() {
return this.eq( 0 );
},
last: function() {
return this.eq( -1 );
},
eq: function( i ) {
var len = this.length,
j = +i + ( i < 0 ? len : 0 );
return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
},
end: function() {
return this.prevObject || this.constructor();
},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: arr.sort,
splice: arr.splice
};
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[ 0 ] || {},
i = 1,
length = arguments.length,
deep = false;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
// Skip the boolean and the target
target = arguments[ i ] || {};
i++;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !isFunction( target ) ) {
target = {};
}
// Extend jQuery itself if only one argument is passed
if ( i === length ) {
target = this;
i--;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( ( options = arguments[ i ] ) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
( copyIsArray = Array.isArray( copy ) ) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && Array.isArray( src ) ? src : [];
} else {
clone = src && jQuery.isPlainObject( src ) ? src : {};
}
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};
jQuery.extend( {
// Unique for each copy of jQuery on the page
expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
// Assume jQuery is ready without the ready module
isReady: true,
error: function( msg ) {
throw new Error( msg );
},
noop: function() {},
isPlainObject: function( obj ) {
var proto, Ctor;
// Detect obvious negatives
// Use toString instead of jQuery.type to catch host objects
if ( !obj || toString.call( obj ) !== "[object Object]" ) {
return false;
}
proto = getProto( obj );
// Objects with no prototype (e.g., `Object.create( null )`) are plain
if ( !proto ) {
return true;
}
// Objects with prototype are plain iff they were constructed by a global Object function
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
},
isEmptyObject: function( obj ) {
/* eslint-disable no-unused-vars */
// See https://github.com/eslint/eslint/issues/6125
var name;
for ( name in obj ) {
return false;
}
return true;
},
// Evaluates a script in a global context
globalEval: function( code ) {
DOMEval( code );
},
each: function( obj, callback ) {
var length, i = 0;
if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} else {
for ( i in obj ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}
return obj;
},
// Support: Android <=4.0 only
trim: function( text ) {
return text == null ?
"" :
( text + "" ).replace( rtrim, "" );
},
// results is for internal usage only
makeArray: function( arr, results ) {
var ret = results || [];
if ( arr != null ) {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
);
} else {
push.call( ret, arr );
}
}
return ret;
},
inArray: function( elem, arr, i ) {
return arr == null ? -1 : indexOf.call( arr, elem, i );
},
// Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit
merge: function( first, second ) {
var len = +second.length,
j = 0,
i = first.length;
for ( ; j < len; j++ ) {
first[ i++ ] = second[ j ];
}
first.length = i;
return first;
},
grep: function( elems, callback, invert ) {
var callbackInverse,
matches = [],
i = 0,
length = elems.length,
callbackExpect = !invert;
// Go through the array, only saving the items
// that pass the validator function
for ( ; i < length; i++ ) {
callbackInverse = !callback( elems[ i ], i );
if ( callbackInverse !== callbackExpect ) {
matches.push( elems[ i ] );
}
}
return matches;
},
// arg is for internal usage only
map: function( elems, callback, arg ) {
var length, value,
i = 0,
ret = [];
// Go through the array, translating each of the items to their new values
if ( isArrayLike( elems ) ) {
length = elems.length;
for ( ; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
// Go through every key on the object,
} else {
for ( i in elems ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
}
// Flatten any nested arrays
return concat.apply( [], ret );
},
// A global GUID counter for objects
guid: 1,
// jQuery.support is not used in Core but other projects attach their
// properties to it so it needs to exist.
support: support
} );
if ( typeof Symbol === "function" ) {
jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
}
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function isArrayLike( obj ) {
// Support: real iOS 8.2 only (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE
var length = !!obj && "length" in obj && obj.length,
type = toType( obj );
if ( isFunction( obj ) || isWindow( obj ) ) {
return false;
}
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
return jQuery;
} );
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
public_html/vendor/vis/4.21.0/img/network/acceptDeleteIcon.png

3.6 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment