Merge pull request #12 from redmatrix/dev

Dev
This commit is contained in:
mrjive 2018-01-26 09:43:47 +01:00 committed by GitHub
commit 4b7967b938
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 1007 additions and 1012 deletions

View file

@ -51,7 +51,7 @@ require_once('include/attach.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'STD_VERSION', '3.1.3' ); define ( 'STD_VERSION', '3.1.4' );
define ( 'ZOT_REVISION', '1.3' ); define ( 'ZOT_REVISION', '1.3' );
define ( 'DB_UPDATE_VERSION', 1198 ); define ( 'DB_UPDATE_VERSION', 1198 );

View file

@ -1,81 +0,0 @@
<?php /** @file */
namespace Hubzilla\Import;
/**
* @brief Class Import
*
*/
class Import {
private $credentials = null;
protected $itemlist = null;
protected $src_items = null;
protected $items = null;
function get_credentials() {
return $this->credentials;
}
function get_itemlist() {
return $this->itemlist;
}
function get_item_ident($item) {
}
function get_item($item_ident) {
}
function get_taxonomy($item_ident) {
}
function get_children($item_ident) {
}
function convert_item($item_ident) {
}
function convert_taxonomy($item_ident) {
}
function convert_child($child) {
}
function store($item, $update = false) {
}
function run() {
$this->credentials = $this->get_credentials();
$this->itemlist = $this->get_itemlist();
if($this->itemlist) {
$this->src_items = array();
$this->items = array();
$cnt = 0;
foreach($this->itemlist as $item) {
$ident = $item->get_item_ident($item);
$this->src_items[$ident]['item'] = $this->get_item($ident);
$this->src_items[$ident]['taxonomy'] = $this->get_taxonomy($ident);
$this->src_items[$ident]['children'] = $this->get_children($ident);
$this->items[$cnt]['item'] = $this->convert_item($ident);
$this->items[$cnt]['item']['term'] = $this->convert_taxonomy($ident);
if($this->src_items[$ident]['children']) {
$this->items[$cnt]['children'] = array();
foreach($this->src_items[$ident]['children'] as $child) {
$this[$cnt]['children'][] = $this->convert_child($child);
}
}
$cnt ++;
}
}
}
}

View file

@ -1,284 +0,0 @@
<?php
require_once('include/html2bbcode.php');
// Sample module for importing conversation data from Reflection CMS. Some preparation was used to
// dump relevant posts, categories and comments into individual JSON files, and also JSON dump of
// the user table to search for avatars. Importation was also batched in sets of 20 posts per page
// visit so as to survive shared hosting process limits. This provides some clues as how to handle
// WordPress imports, which use a somewhat similar DB structure. The batching and individual files
// might not be needed in VPS environments. As such this could be considered an extreme test case, but
// the importation was successful in all regards using this code. The module URL was visited repeatedly
// with a browser until all the posts had been imported.
define('REDMATRIX_IMPORTCHANNEL','mike');
define('REFLECT_EXPORTUSERNAME','mike');
define('REFLECT_BLOGNAME','Diary and Other Rantings');
define('REFLECT_BASEURL','http://example.com/');
define('REFLECT_USERFILE','user.json');
// set to true if you need to process everything again
define('REFLECT_OVERWRITE',false);
// we'll only process a small number of posts at a time on a shared host.
define('REFLECT_MAXPERRUN',30);
function reflect_get_channel() {
// this will be the channel_address or nickname of the red channel
$c = q("select * from channel left join xchan on channel_hash = xchan_hash
where channel_address = '%s' limit 1",
dbesc(REDMATRIX_IMPORTCHANNEL)
);
return $c[0];
}
function refimport_content(&$a) {
$channel = reflect_get_channel();
// load the user file. We need that to find the commenter's avatars
$u = file_get_contents(REFLECT_USERFILE);
if($u) {
$users = json_decode($u,true);
}
$ignored = 0;
$processed = 0;
$files = glob('article/*');
if(! $files)
return;
foreach($files as $f) {
$s = file_get_contents($f);
$j = json_decode($s,true);
if(! $j)
continue;
$arr = array();
// see if this article was already processed
$r = q("select * from item where mid = '%s' and uid = %d limit 1",
dbesc($j['guid']),
intval($channel['channel_id'])
);
if($r) {
if(REFLECT_OVERWRITE)
$arr['id'] = $r[0]['id'];
else {
$ignored ++;
rename($f,str_replace('article','done',$f));
continue;
}
}
$arr['uid'] = $channel['channel_account_id'];
$arr['aid'] = $channel['channel_id'];
$arr['mid'] = $arr['parent_mid'] = $j['guid'];
$arr['created'] = $j['created'];
$arr['edited'] = $j['edited'];
$arr['author_xchan'] = $channel['channel_hash'];
$arr['owner_xchan'] = $channel['channel_hash'];
$arr['app'] = REFLECT_BLOGNAME;
$arr['item_origin'] = 1;
$arr['item_wall'] = 1;
$arr['item_thread_top'] = 1;
$arr['verb'] = ACTIVITY_POST;
// this is an assumption
$arr['comment_policy'] = 'contacts';
// import content. In this case the content is XHTML.
$arr['title'] = html2bbcode($j['title']);
$arr['title'] = htmlspecialchars($arr['title'],ENT_COMPAT,'UTF-8',false);
$arr['body'] = html2bbcode($j['body']);
$arr['body'] = htmlspecialchars($arr['body'],ENT_COMPAT,'UTF-8',false);
// convert relative urls to other posts on that service to absolute url on our service.
$arr['body'] = preg_replace_callback("/\[url\=\/+article\/(.*?)\](.*?)\[url\]/",'reflect_article_callback',$arr['body']);
// also import any photos
$arr['body'] = preg_replace_callback("/\[img(.*?)\](.*?)\[\/img\]/",'reflect_photo_callback',$arr['body']);
// add categories
if($j['taxonomy'] && is_array($j['taxonomy']) && count($j['taxonomy'])) {
$arr['term'] = array();
foreach($j['taxonomy'] as $tax) {
$arr['term'][] = array(
'uid' => $channel['channel_id'],
'type' => TERM_CATEGORY,
'otype' => TERM_OBJ_POST,
'term' => trim($tax['name']),
'url' => $channel['xchan_url'] . '?f=&cat=' . urlencode(trim($tax['name']))
);
}
}
// store the item
if($arr['id'])
item_store_update($arr);
else
item_store($arr);
// if there are any comments, process them
// $comment['registered'] is somebody with an account on the system. Others are mostly anonymous
if($j['comments']) {
foreach($j['comments'] as $comment) {
$user = (($comment['registered']) ? reflect_find_user($users,$comment['author']) : null);
reflect_comment_store($channel,$arr,$comment,$user);
}
}
$processed ++;
if(REFLECT_MAXPERRUN && $processed > REFLECT_MAXPERRUN)
break;
}
return 'processed: ' . $processed . EOL . 'completed: ' . $ignored . EOL;
}
function reflect_article_callback($matches) {
return '[zrl=' . z_root() . '/display/'. $matches[1] . ']' . $matches[2] . '[/zrl]';
}
function reflect_photo_callback($matches) {
if(strpos($matches[2],'http') !== false)
return $matches[0];
$prefix = REFLECT_BASEURL;
$x = z_fetch_url($prefix.$matches[2],true);
$hash = basename($matches[2]);
if($x['success']) {
$channel = reflect_get_channel();
require_once('include/photos.php');
$p = photo_upload($channel,$channel,
array('data' => $x['body'],
'resource_id' => str_replace('-','',$hash),
'filename' => $hash . '.jpg',
'type' => 'image/jpeg',
'visible' => false
)
);
if($p['success'])
$newlink = $p['resource_id'] . '-0.jpg';
// import photo and locate the link for it.
return '[zmg]' . z_root() . '/photo/' . $newlink . '[/zmg]';
}
// no replacement. Leave it alone.
return $matches[0];
}
function reflect_find_user($users,$name) {
if($users) {
foreach($users as $x) {
if($x['name'] === $name) {
return $x;
}
}
}
return false;
}
function reflect_comment_store($channel,$post,$comment,$user) {
// if the commenter was the channel owner, use their hubzilla xchan
if($comment['author'] === REFLECT_EXPORTUSERNAME && $comment['registered'])
$hash = $channel['xchan_hash'];
else {
// we need a unique hash for the commenter. We don't know how many may have supplied
// http://yahoo.com as their URL, so we'll use their avatar guid if they have one.
// anonymous folks may get more than one xchan_hash if they commented more than once.
$hash = (($comment['registered'] && $user) ? $user['avatar'] : '');
if(! $hash)
$hash = random_string() . '.unknown';
// create an xchan for them which will also import their profile photo
// they will have a network type 'unknown'.
$x = array(
'hash' => $hash,
'guid' => $hash,
'url' => (($comment['url']) ? $comment['url'] : z_root()),
'photo' => (($user) ? REFLECT_BASEURL . $user['avatar'] : z_root() . '/' . get_default_profile_photo()),
'name' => $comment['author']
);
xchan_store($x);
}
$arr = array();
$r = q("select * from item where mid = '%s' and uid = %d limit 1",
dbesc($comment['guid']),
intval($channel['channel_id'])
);
if($r) {
if(REFLECT_OVERWRITE)
$arr['id'] = $r[0]['id'];
else
return;
}
// this is a lot like storing the post except for subtle differences, like parent_mid, flags, author_xchan,
// and we don't have a comment edited field so use creation date
$arr['uid'] = $channel['channel_account_id'];
$arr['aid'] = $channel['channel_id'];
$arr['mid'] = $comment['guid'];
$arr['parent_mid'] = $post['mid'];
$arr['created'] = $comment['created'];
$arr['edited'] = $comment['created'];
$arr['author_xchan'] = $hash;
$arr['owner_xchan'] = $channel['channel_hash'];
$arr['item_origin'] = 1;
$arr['item_wall'] = 1;
$arr['verb'] = ACTIVITY_POST;
$arr['comment_policy'] = 'contacts';
$arr['title'] = html2bbcode($comment['title']);
$arr['title'] = htmlspecialchars($arr['title'],ENT_COMPAT,'UTF-8',false);
$arr['body'] = html2bbcode($comment['body']);
$arr['body'] = htmlspecialchars($arr['body'],ENT_COMPAT,'UTF-8',false);
$arr['body'] = preg_replace_callback("/\[url\=\/+article\/(.*?)\](.*?)\[url\]/",'reflect_article_callback',$arr['body']);
$arr['body'] = preg_replace_callback("/\[img(.*?)\](.*?)\[\/img\]/",'reflect_photo_callback',$arr['body']);
// logger('comment: ' . print_r($arr,true));
if($arr['id'])
item_store_update($arr);
else
item_store($arr);
}

View file

@ -73,8 +73,35 @@ function get_best_language() {
} }
} }
if(! isset($preferred))
if(! isset($preferred)) {
/*
* We could find no perfect match for any of the preferred languages.
* For cases where the preference is fr-fr and we have fr but *not* fr-fr
* run the test again and only look for the language base
* which should provide an interface they can sort of understand
*/
if(isset($langs) && count($langs)) {
foreach ($langs as $lang => $v) {
if(strlen($lang) === 2) {
/* we have already checked this language */
continue;
}
/* Check the base */
$lang = strtolower(substr($lang,0,2));
if(is_dir("view/$lang")) {
$preferred = $lang;
break;
}
}
}
}
if(! isset($preferred)) {
$preferred = 'unset'; $preferred = 'unset';
}
$arr = array('langs' => $langs, 'preferred' => $preferred); $arr = array('langs' => $langs, 'preferred' => $preferred);
@ -86,6 +113,12 @@ function get_best_language() {
return ((isset(App::$config['system']['language'])) ? App::$config['system']['language'] : 'en'); return ((isset(App::$config['system']['language'])) ? App::$config['system']['language'] : 'en');
} }
/*
* push_lang and pop_lang let you temporarily override the default language.
* Often used to email the administrator during a session created in another language.
* The stack is one level deep - so you must pop after every push.
*/
function push_lang($language) { function push_lang($language) {

View file

@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Grid v4.0.0-beta.3 (https://getbootstrap.com) * Bootstrap Grid v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@-ms-viewport { @-ms-viewport {
@ -200,6 +200,18 @@ html {
order: -1; order: -1;
} }
.order-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13;
}
.order-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0;
}
.order-1 { .order-1 {
-webkit-box-ordinal-group: 2; -webkit-box-ordinal-group: 2;
-ms-flex-order: 1; -ms-flex-order: 1;
@ -409,6 +421,16 @@ html {
-ms-flex-order: -1; -ms-flex-order: -1;
order: -1; order: -1;
} }
.order-sm-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13;
}
.order-sm-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0;
}
.order-sm-1 { .order-sm-1 {
-webkit-box-ordinal-group: 2; -webkit-box-ordinal-group: 2;
-ms-flex-order: 1; -ms-flex-order: 1;
@ -600,6 +622,16 @@ html {
-ms-flex-order: -1; -ms-flex-order: -1;
order: -1; order: -1;
} }
.order-md-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13;
}
.order-md-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0;
}
.order-md-1 { .order-md-1 {
-webkit-box-ordinal-group: 2; -webkit-box-ordinal-group: 2;
-ms-flex-order: 1; -ms-flex-order: 1;
@ -791,6 +823,16 @@ html {
-ms-flex-order: -1; -ms-flex-order: -1;
order: -1; order: -1;
} }
.order-lg-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13;
}
.order-lg-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0;
}
.order-lg-1 { .order-lg-1 {
-webkit-box-ordinal-group: 2; -webkit-box-ordinal-group: 2;
-ms-flex-order: 1; -ms-flex-order: 1;
@ -982,6 +1024,16 @@ html {
-ms-flex-order: -1; -ms-flex-order: -1;
order: -1; order: -1;
} }
.order-xl-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13;
}
.order-xl-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0;
}
.order-xl-1 { .order-xl-1 {
-webkit-box-ordinal-group: 2; -webkit-box-ordinal-group: 2;
-ms-flex-order: 1; -ms-flex-order: 1;
@ -1080,6 +1132,216 @@ html {
} }
} }
.d-none {
display: none !important;
}
.d-inline {
display: inline !important;
}
.d-inline-block {
display: inline-block !important;
}
.d-block {
display: block !important;
}
.d-table {
display: table !important;
}
.d-table-row {
display: table-row !important;
}
.d-table-cell {
display: table-cell !important;
}
.d-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
@media (min-width: 576px) {
.d-sm-none {
display: none !important;
}
.d-sm-inline {
display: inline !important;
}
.d-sm-inline-block {
display: inline-block !important;
}
.d-sm-block {
display: block !important;
}
.d-sm-table {
display: table !important;
}
.d-sm-table-row {
display: table-row !important;
}
.d-sm-table-cell {
display: table-cell !important;
}
.d-sm-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-sm-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
}
@media (min-width: 768px) {
.d-md-none {
display: none !important;
}
.d-md-inline {
display: inline !important;
}
.d-md-inline-block {
display: inline-block !important;
}
.d-md-block {
display: block !important;
}
.d-md-table {
display: table !important;
}
.d-md-table-row {
display: table-row !important;
}
.d-md-table-cell {
display: table-cell !important;
}
.d-md-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-md-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
}
@media (min-width: 992px) {
.d-lg-none {
display: none !important;
}
.d-lg-inline {
display: inline !important;
}
.d-lg-inline-block {
display: inline-block !important;
}
.d-lg-block {
display: block !important;
}
.d-lg-table {
display: table !important;
}
.d-lg-table-row {
display: table-row !important;
}
.d-lg-table-cell {
display: table-cell !important;
}
.d-lg-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-lg-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
}
@media (min-width: 1200px) {
.d-xl-none {
display: none !important;
}
.d-xl-inline {
display: inline !important;
}
.d-xl-inline-block {
display: inline-block !important;
}
.d-xl-block {
display: block !important;
}
.d-xl-table {
display: table !important;
}
.d-xl-table-row {
display: table-row !important;
}
.d-xl-table-cell {
display: table-cell !important;
}
.d-xl-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-xl-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
}
@media print {
.d-print-none {
display: none !important;
}
.d-print-inline {
display: inline !important;
}
.d-print-inline-block {
display: inline-block !important;
}
.d-print-block {
display: block !important;
}
.d-print-table {
display: table !important;
}
.d-print-table-row {
display: table-row !important;
}
.d-print-table-cell {
display: table-cell !important;
}
.d-print-flex {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
.d-print-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
display: inline-flex !important;
}
}
.flex-row { .flex-row {
-webkit-box-orient: horizontal !important; -webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important; -webkit-box-direction: normal !important;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Reboot v4.0.0-beta.3 (https://getbootstrap.com) * Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/ */
@ -147,7 +147,7 @@ a:not([href]):not([tabindex]) {
text-decoration: none; text-decoration: none;
} }
a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
} }
@ -184,19 +184,6 @@ svg:not(:root) {
overflow: hidden; overflow: hidden;
} }
a,
area,
button,
[role="button"],
input:not([type="range"]),
label,
select,
summary,
textarea {
-ms-touch-action: manipulation;
touch-action: manipulation;
}
table { table {
border-collapse: collapse; border-collapse: collapse;
} }
@ -204,7 +191,7 @@ table {
caption { caption {
padding-top: 0.75rem; padding-top: 0.75rem;
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
color: #868e96; color: #6c757d;
text-align: left; text-align: left;
caption-side: bottom; caption-side: bottom;
} }

File diff suppressed because one or more lines are too long

View file

@ -1,8 +1,8 @@
/*! /*!
* Bootstrap Reboot v4.0.0-beta.3 (https://getbootstrap.com) * Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */ /*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v4.0.0-beta.3 (https://getbootstrap.com) * Bootstrap v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@ -53,7 +53,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): util.js * Bootstrap (v4.0.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -65,7 +65,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var transition = false;
var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -86,7 +86,7 @@ var Util = function ($$$1) {
} }
function transitionEndTest() { function transitionEndTest() {
if (window.QUnit) { if (typeof window !== 'undefined' && window.QUnit) {
return false; return false;
} }
@ -120,7 +120,7 @@ var Util = function ($$$1) {
} }
function escapeId(selector) { function escapeId(selector) {
// we escape IDs in case of special selectors (selector = '#myId:something') // We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3 // $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1'); selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector; return selector;
@ -147,7 +147,7 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // if it's an ID } // If it's an ID
if (selector.charAt(0) === '#') { if (selector.charAt(0) === '#') {
@ -157,7 +157,7 @@ var Util = function ($$$1) {
try { try {
var $selector = $$$1(document).find(selector); var $selector = $$$1(document).find(selector);
return $selector.length > 0 ? selector : null; return $selector.length > 0 ? selector : null;
} catch (error) { } catch (err) {
return null; return null;
} }
}, },
@ -193,7 +193,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): alert.js * Bootstrap (v4.0.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -205,7 +205,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -236,12 +236,12 @@ var Alert = function ($$$1) {
function () { function () {
function Alert(element) { function Alert(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Alert.prototype; var _proto = Alert.prototype;
// public // Public
_proto.close = function close(element) { _proto.close = function close(element) {
element = element || this._element; element = element || this._element;
@ -259,7 +259,7 @@ var Alert = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // private }; // Private
_proto._getRootElement = function _getRootElement(element) { _proto._getRootElement = function _getRootElement(element) {
@ -301,7 +301,7 @@ var Alert = function ($$$1) {
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
$$$1(element).detach().trigger(Event.CLOSED).remove(); $$$1(element).detach().trigger(Event.CLOSED).remove();
}; // static }; // Static
Alert._jQueryInterface = function _jQueryInterface(config) { Alert._jQueryInterface = function _jQueryInterface(config) {
@ -365,7 +365,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): button.js * Bootstrap (v4.0.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -377,7 +377,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -410,12 +410,12 @@ var Button = function ($$$1) {
function () { function () {
function Button(element) { function Button(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Button.prototype; var _proto = Button.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
var triggerChangeEvent = true; var triggerChangeEvent = true;
var addAriaPressed = true; var addAriaPressed = true;
@ -463,7 +463,7 @@ var Button = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // static }; // Static
Button._jQueryInterface = function _jQueryInterface(config) { Button._jQueryInterface = function _jQueryInterface(config) {
@ -528,7 +528,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): carousel.js * Bootstrap (v4.0.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -540,7 +540,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -623,12 +623,12 @@ var Carousel = function ($$$1) {
this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0];
this._addEventListeners(); this._addEventListeners();
} // getters } // Getters
var _proto = Carousel.prototype; var _proto = Carousel.prototype;
// public // Public
_proto.next = function next() { _proto.next = function next() {
if (!this._isSliding) { if (!this._isSliding) {
this._slide(Direction.NEXT); this._slide(Direction.NEXT);
@ -718,7 +718,7 @@ var Carousel = function ($$$1) {
this._isSliding = null; this._isSliding = null;
this._activeElement = null; this._activeElement = null;
this._indicatorsElement = null; this._indicatorsElement = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -744,7 +744,7 @@ var Carousel = function ($$$1) {
}); });
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
// if it's a touch-enabled device, mouseenter/leave are fired as // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel // part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it; // would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel // here, we listen for touchend, explicitly pause the carousel
@ -783,7 +783,6 @@ var Carousel = function ($$$1) {
break; break;
default: default:
return;
} }
}; };
@ -875,7 +874,7 @@ var Carousel = function ($$$1) {
} }
if (!activeElement || !nextElement) { if (!activeElement || !nextElement) {
// some weirdness is happening, so we bail // Some weirdness is happening, so we bail
return; return;
} }
@ -917,7 +916,7 @@ var Carousel = function ($$$1) {
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
}; // static }; // Static
Carousel._jQueryInterface = function _jQueryInterface(config) { Carousel._jQueryInterface = function _jQueryInterface(config) {
@ -941,7 +940,7 @@ var Carousel = function ($$$1) {
data.to(config); data.to(config);
} else if (typeof action === 'string') { } else if (typeof action === 'string') {
if (typeof data[action] === 'undefined') { if (typeof data[action] === 'undefined') {
throw new Error("No method named \"" + action + "\""); throw new TypeError("No method named \"" + action + "\"");
} }
data[action](); data[action]();
@ -1028,7 +1027,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): collapse.js * Bootstrap (v4.0.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1040,7 +1039,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1097,6 +1096,8 @@ var Collapse = function ($$$1) {
var selector = Util.getSelectorFromElement(elem); var selector = Util.getSelectorFromElement(elem);
if (selector !== null && $$$1(selector).filter(element).length > 0) { if (selector !== null && $$$1(selector).filter(element).length > 0) {
this._selector = selector;
this._triggerArray.push(elem); this._triggerArray.push(elem);
} }
} }
@ -1110,12 +1111,12 @@ var Collapse = function ($$$1) {
if (this._config.toggle) { if (this._config.toggle) {
this.toggle(); this.toggle();
} }
} // getters } // Getters
var _proto = Collapse.prototype; var _proto = Collapse.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
if ($$$1(this._element).hasClass(ClassName.SHOW)) { if ($$$1(this._element).hasClass(ClassName.SHOW)) {
this.hide(); this.hide();
@ -1135,15 +1136,15 @@ var Collapse = function ($$$1) {
var activesData; var activesData;
if (this._parent) { if (this._parent) {
actives = $$$1.makeArray($$$1(this._parent).children().children(Selector.ACTIVES)); actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]"));
if (!actives.length) { if (actives.length === 0) {
actives = null; actives = null;
} }
} }
if (actives) { if (actives) {
activesData = $$$1(actives).data(DATA_KEY); activesData = $$$1(actives).not(this._selector).data(DATA_KEY);
if (activesData && activesData._isTransitioning) { if (activesData && activesData._isTransitioning) {
return; return;
@ -1158,7 +1159,7 @@ var Collapse = function ($$$1) {
} }
if (actives) { if (actives) {
Collapse._jQueryInterface.call($$$1(actives), 'hide'); Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');
if (!activesData) { if (!activesData) {
$$$1(actives).data(DATA_KEY, null); $$$1(actives).data(DATA_KEY, null);
@ -1170,7 +1171,7 @@ var Collapse = function ($$$1) {
$$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
this._element.style[dimension] = 0; this._element.style[dimension] = 0;
if (this._triggerArray.length) { if (this._triggerArray.length > 0) {
$$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
} }
@ -1216,7 +1217,7 @@ var Collapse = function ($$$1) {
Util.reflow(this._element); Util.reflow(this._element);
$$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
if (this._triggerArray.length) { if (this._triggerArray.length > 0) {
for (var i = 0; i < this._triggerArray.length; i++) { for (var i = 0; i < this._triggerArray.length; i++) {
var trigger = this._triggerArray[i]; var trigger = this._triggerArray[i];
var selector = Util.getSelectorFromElement(trigger); var selector = Util.getSelectorFromElement(trigger);
@ -1260,12 +1261,12 @@ var Collapse = function ($$$1) {
this._element = null; this._element = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
@ -1282,7 +1283,7 @@ var Collapse = function ($$$1) {
var parent = null; var parent = null;
if (Util.isElement(this._config.parent)) { if (Util.isElement(this._config.parent)) {
parent = this._config.parent; // it's a jQuery object parent = this._config.parent; // It's a jQuery object
if (typeof this._config.parent.jquery !== 'undefined') { if (typeof this._config.parent.jquery !== 'undefined') {
parent = this._config.parent[0]; parent = this._config.parent[0];
@ -1302,11 +1303,11 @@ var Collapse = function ($$$1) {
if (element) { if (element) {
var isOpen = $$$1(element).hasClass(ClassName.SHOW); var isOpen = $$$1(element).hasClass(ClassName.SHOW);
if (triggerArray.length) { if (triggerArray.length > 0) {
$$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
} }
} }
}; // static }; // Static
Collapse._getTargetFromElement = function _getTargetFromElement(element) { Collapse._getTargetFromElement = function _getTargetFromElement(element) {
@ -1332,7 +1333,7 @@ var Collapse = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -3830,7 +3831,7 @@ Popper.Defaults = Defaults;
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): dropdown.js * Bootstrap (v4.0.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3842,7 +3843,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3925,12 +3926,12 @@ var Dropdown = function ($$$1) {
this._inNavbar = this._detectNavbar(); this._inNavbar = this._detectNavbar();
this._addEventListeners(); this._addEventListeners();
} // getters } // Getters
var _proto = Dropdown.prototype; var _proto = Dropdown.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {
return; return;
@ -3963,10 +3964,10 @@ var Dropdown = function ($$$1) {
* Popper - https://popper.js.org * Popper - https://popper.js.org
*/ */
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // for dropup with alignment we use the parent as popper container var element = this._element; // For dropup with alignment we use the parent as popper container
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if ($$$1(parent).hasClass(ClassName.DROPUP)) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
@ -3982,13 +3983,13 @@ var Dropdown = function ($$$1) {
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(element, this._menu, this._getPopperConfig());
} // if this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement && !$$$1(parent).closest(Selector.NAVBAR_NAV).length) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1('body').children().on('mouseover', null, $$$1.noop);
} }
@ -4019,7 +4020,7 @@ var Dropdown = function ($$$1) {
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // private }; // Private
_proto._addEventListeners = function _addEventListeners() { _proto._addEventListeners = function _addEventListeners() {
@ -4101,7 +4102,7 @@ var Dropdown = function ($$$1) {
} }
}; };
return popperConfig; return popperConfig;
}; // static }; // Static
Dropdown._jQueryInterface = function _jQueryInterface(config) { Dropdown._jQueryInterface = function _jQueryInterface(config) {
@ -4117,7 +4118,7 @@ var Dropdown = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -4159,7 +4160,7 @@ var Dropdown = function ($$$1) {
if (hideEvent.isDefaultPrevented()) { if (hideEvent.isDefaultPrevented()) {
continue; continue;
} // if this is a touch-enabled device we remove the extra } // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
@ -4182,7 +4183,8 @@ var Dropdown = function ($$$1) {
} }
return parent || element.parentNode; return parent || element.parentNode;
}; }; // eslint-disable-next-line complexity
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
@ -4219,19 +4221,19 @@ var Dropdown = function ($$$1) {
var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get();
if (!items.length) { if (items.length === 0) {
return; return;
} }
var index = items.indexOf(event.target); var index = items.indexOf(event.target);
if (event.which === ARROW_UP_KEYCODE && index > 0) { if (event.which === ARROW_UP_KEYCODE && index > 0) {
// up // Up
index--; index--;
} }
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
// down // Down
index++; index++;
} }
@ -4294,7 +4296,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): modal.js * Bootstrap (v4.0.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -4306,7 +4308,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -4375,12 +4377,12 @@ var Modal = function ($$$1) {
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0; this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // getters } // Getters
var _proto = Modal.prototype; var _proto = Modal.prototype;
// public // Public
_proto.toggle = function toggle(relatedTarget) { _proto.toggle = function toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget); return this._isShown ? this.hide() : this.show(relatedTarget);
}; };
@ -4493,7 +4495,7 @@ var Modal = function ($$$1) {
_proto.handleUpdate = function handleUpdate() { _proto.handleUpdate = function handleUpdate() {
this._adjustDialog(); this._adjustDialog();
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -4508,7 +4510,7 @@ var Modal = function ($$$1) {
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// don't move modals dom position // Don't move modal's DOM position
document.body.appendChild(this._element); document.body.appendChild(this._element);
} }
@ -4551,9 +4553,9 @@ var Modal = function ($$$1) {
_proto._enforceFocus = function _enforceFocus() { _proto._enforceFocus = function _enforceFocus() {
var _this4 = this; var _this4 = this;
$$$1(document).off(Event.FOCUSIN) // guard against infinite focus loop $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop
.on(Event.FOCUSIN, function (event) { .on(Event.FOCUSIN, function (event) {
if (document !== event.target && _this4._element !== event.target && !$$$1(_this4._element).has(event.target).length) { if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {
_this4._element.focus(); _this4._element.focus();
} }
}); });
@ -4774,7 +4776,7 @@ var Modal = function ($$$1) {
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv); document.body.removeChild(scrollDiv);
return scrollbarWidth; return scrollbarWidth;
}; // static }; // Static
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
@ -4790,7 +4792,7 @@ var Modal = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](relatedTarget); data[config](relatedTarget);
@ -4838,7 +4840,7 @@ var Modal = function ($$$1) {
var $target = $$$1(target).one(Event.SHOW, function (showEvent) { var $target = $$$1(target).one(Event.SHOW, function (showEvent) {
if (showEvent.isDefaultPrevented()) { if (showEvent.isDefaultPrevented()) {
// only register focus restorer if modal will actually get shown // Only register focus restorer if modal will actually get shown
return; return;
} }
@ -4870,7 +4872,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): tooltip.js * Bootstrap (v4.0.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -4882,7 +4884,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -4971,7 +4973,7 @@ var Tooltip = function ($$$1) {
* Popper - https://popper.js.org * Popper - https://popper.js.org
*/ */
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
} // private } // private
@ -4979,19 +4981,19 @@ var Tooltip = function ($$$1) {
this._timeout = 0; this._timeout = 0;
this._hoverState = ''; this._hoverState = '';
this._activeTrigger = {}; this._activeTrigger = {};
this._popper = null; // protected this._popper = null; // Protected
this.element = element; this.element = element;
this.config = this._getConfig(config); this.config = this._getConfig(config);
this.tip = null; this.tip = null;
this._setListeners(); this._setListeners();
} // getters } // Getters
var _proto = Tooltip.prototype; var _proto = Tooltip.prototype;
// public // Public
_proto.enable = function enable() { _proto.enable = function enable() {
this._isEnabled = true; this._isEnabled = true;
}; };
@ -5126,7 +5128,7 @@ var Tooltip = function ($$$1) {
_this._handlePopperPlacementChange(data); _this._handlePopperPlacementChange(data);
} }
}); });
$$$1(tip).addClass(ClassName.SHOW); // if this is a touch-enabled device we add extra $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
@ -5189,7 +5191,7 @@ var Tooltip = function ($$$1) {
return; return;
} }
$$$1(tip).removeClass(ClassName.SHOW); // if this is a touch-enabled device we remove the extra $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
@ -5213,7 +5215,7 @@ var Tooltip = function ($$$1) {
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // protected }; // Protected
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
@ -5239,7 +5241,7 @@ var Tooltip = function ($$$1) {
var html = this.config.html; var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) { if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// content is a DOM node or a jQuery // Content is a DOM node or a jQuery
if (html) { if (html) {
if (!$$$1(content).parent().is($element)) { if (!$$$1(content).parent().is($element)) {
$element.empty().append(content); $element.empty().append(content);
@ -5260,7 +5262,7 @@ var Tooltip = function ($$$1) {
} }
return title; return title;
}; // private }; // Private
_proto._getAttachment = function _getAttachment(placement) { _proto._getAttachment = function _getAttachment(placement) {
@ -5449,7 +5451,7 @@ var Tooltip = function ($$$1) {
this.hide(); this.hide();
this.show(); this.show();
this.config.animation = initConfigAnimation; this.config.animation = initConfigAnimation;
}; // static }; // Static
Tooltip._jQueryInterface = function _jQueryInterface(config) { Tooltip._jQueryInterface = function _jQueryInterface(config) {
@ -5469,7 +5471,7 @@ var Tooltip = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -5535,7 +5537,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): popover.js * Bootstrap (v4.0.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -5547,7 +5549,7 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -5600,7 +5602,7 @@ var Popover = function ($$$1) {
var _proto = Popover.prototype; var _proto = Popover.prototype;
// overrides // Overrides
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
return this.getTitle() || this._getContent(); return this.getTitle() || this._getContent();
}; };
@ -5615,7 +5617,7 @@ var Popover = function ($$$1) {
}; };
_proto.setContent = function setContent() { _proto.setContent = function setContent() {
var $tip = $$$1(this.getTipElement()); // we use append for html objects to maintain js events var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
@ -5627,7 +5629,7 @@ var Popover = function ($$$1) {
this.setElementContent($tip.find(Selector.CONTENT), content); this.setElementContent($tip.find(Selector.CONTENT), content);
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
}; // private }; // Private
_proto._getContent = function _getContent() { _proto._getContent = function _getContent() {
@ -5641,7 +5643,7 @@ var Popover = function ($$$1) {
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join('')); $tip.removeClass(tabClass.join(''));
} }
}; // static }; // Static
Popover._jQueryInterface = function _jQueryInterface(config) { Popover._jQueryInterface = function _jQueryInterface(config) {
@ -5661,7 +5663,7 @@ var Popover = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -5671,7 +5673,7 @@ var Popover = function ($$$1) {
_createClass(Popover, null, [{ _createClass(Popover, null, [{
key: "VERSION", key: "VERSION",
// getters // Getters
get: function get() { get: function get() {
return VERSION; return VERSION;
} }
@ -5728,7 +5730,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): scrollspy.js * Bootstrap (v4.0.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -5740,7 +5742,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -5807,16 +5809,16 @@ var ScrollSpy = function ($$$1) {
this.refresh(); this.refresh();
this._process(); this._process();
} // getters } // Getters
var _proto = ScrollSpy.prototype; var _proto = ScrollSpy.prototype;
// public // Public
_proto.refresh = function refresh() { _proto.refresh = function refresh() {
var _this2 = this; var _this2 = this;
var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
this._offsets = []; this._offsets = [];
@ -5835,7 +5837,7 @@ var ScrollSpy = function ($$$1) {
var targetBCR = target.getBoundingClientRect(); var targetBCR = target.getBoundingClientRect();
if (targetBCR.width || targetBCR.height) { if (targetBCR.width || targetBCR.height) {
// todo (fat): remove sketch reliance on jQuery position/offset // TODO (fat): remove sketch reliance on jQuery position/offset
return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];
} }
} }
@ -5863,7 +5865,7 @@ var ScrollSpy = function ($$$1) {
this._targets = null; this._targets = null;
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -5967,7 +5969,7 @@ var ScrollSpy = function ($$$1) {
_proto._clear = function _clear() { _proto._clear = function _clear() {
$$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); $$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
}; // static }; // Static
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
@ -5983,7 +5985,7 @@ var ScrollSpy = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -6039,7 +6041,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): tab.js * Bootstrap (v4.0.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -6051,7 +6053,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -6092,12 +6094,12 @@ var Tab = function ($$$1) {
function () { function () {
function Tab(element) { function Tab(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Tab.prototype; var _proto = Tab.prototype;
// public // Public
_proto.show = function show() { _proto.show = function show() {
var _this = this; var _this = this;
@ -6160,7 +6162,7 @@ var Tab = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // private }; // Private
_proto._activate = function _activate(element, container, callback) { _proto._activate = function _activate(element, container, callback) {
@ -6224,7 +6226,7 @@ var Tab = function ($$$1) {
if (callback) { if (callback) {
callback(); callback();
} }
}; // static }; // Static
Tab._jQueryInterface = function _jQueryInterface(config) { Tab._jQueryInterface = function _jQueryInterface(config) {
@ -6239,7 +6241,7 @@ var Tab = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -6293,7 +6295,7 @@ var Tab = function ($$$1) {
(function ($$$1) { (function ($$$1) {
if (typeof $$$1 === 'undefined') { if (typeof $$$1 === 'undefined') {
throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
} }
var version = $$$1.fn.jquery.split(' ')[0].split('.'); var version = $$$1.fn.jquery.split(' ')[0].split('.');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v4.0.0-beta.3 (https://getbootstrap.com) * Bootstrap v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@ -54,7 +54,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): util.js * Bootstrap (v4.0.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -66,7 +66,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var transition = false;
var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -87,7 +87,7 @@ var Util = function ($$$1) {
} }
function transitionEndTest() { function transitionEndTest() {
if (window.QUnit) { if (typeof window !== 'undefined' && window.QUnit) {
return false; return false;
} }
@ -121,7 +121,7 @@ var Util = function ($$$1) {
} }
function escapeId(selector) { function escapeId(selector) {
// we escape IDs in case of special selectors (selector = '#myId:something') // We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3 // $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1'); selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector; return selector;
@ -148,7 +148,7 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // if it's an ID } // If it's an ID
if (selector.charAt(0) === '#') { if (selector.charAt(0) === '#') {
@ -158,7 +158,7 @@ var Util = function ($$$1) {
try { try {
var $selector = $$$1(document).find(selector); var $selector = $$$1(document).find(selector);
return $selector.length > 0 ? selector : null; return $selector.length > 0 ? selector : null;
} catch (error) { } catch (err) {
return null; return null;
} }
}, },
@ -194,7 +194,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): alert.js * Bootstrap (v4.0.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -206,7 +206,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -237,12 +237,12 @@ var Alert = function ($$$1) {
function () { function () {
function Alert(element) { function Alert(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Alert.prototype; var _proto = Alert.prototype;
// public // Public
_proto.close = function close(element) { _proto.close = function close(element) {
element = element || this._element; element = element || this._element;
@ -260,7 +260,7 @@ var Alert = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // private }; // Private
_proto._getRootElement = function _getRootElement(element) { _proto._getRootElement = function _getRootElement(element) {
@ -302,7 +302,7 @@ var Alert = function ($$$1) {
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
$$$1(element).detach().trigger(Event.CLOSED).remove(); $$$1(element).detach().trigger(Event.CLOSED).remove();
}; // static }; // Static
Alert._jQueryInterface = function _jQueryInterface(config) { Alert._jQueryInterface = function _jQueryInterface(config) {
@ -366,7 +366,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): button.js * Bootstrap (v4.0.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -378,7 +378,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -411,12 +411,12 @@ var Button = function ($$$1) {
function () { function () {
function Button(element) { function Button(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Button.prototype; var _proto = Button.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
var triggerChangeEvent = true; var triggerChangeEvent = true;
var addAriaPressed = true; var addAriaPressed = true;
@ -464,7 +464,7 @@ var Button = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // static }; // Static
Button._jQueryInterface = function _jQueryInterface(config) { Button._jQueryInterface = function _jQueryInterface(config) {
@ -529,7 +529,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): carousel.js * Bootstrap (v4.0.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -541,7 +541,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -624,12 +624,12 @@ var Carousel = function ($$$1) {
this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0];
this._addEventListeners(); this._addEventListeners();
} // getters } // Getters
var _proto = Carousel.prototype; var _proto = Carousel.prototype;
// public // Public
_proto.next = function next() { _proto.next = function next() {
if (!this._isSliding) { if (!this._isSliding) {
this._slide(Direction.NEXT); this._slide(Direction.NEXT);
@ -719,7 +719,7 @@ var Carousel = function ($$$1) {
this._isSliding = null; this._isSliding = null;
this._activeElement = null; this._activeElement = null;
this._indicatorsElement = null; this._indicatorsElement = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -745,7 +745,7 @@ var Carousel = function ($$$1) {
}); });
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
// if it's a touch-enabled device, mouseenter/leave are fired as // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel // part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it; // would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel // here, we listen for touchend, explicitly pause the carousel
@ -784,7 +784,6 @@ var Carousel = function ($$$1) {
break; break;
default: default:
return;
} }
}; };
@ -876,7 +875,7 @@ var Carousel = function ($$$1) {
} }
if (!activeElement || !nextElement) { if (!activeElement || !nextElement) {
// some weirdness is happening, so we bail // Some weirdness is happening, so we bail
return; return;
} }
@ -918,7 +917,7 @@ var Carousel = function ($$$1) {
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
}; // static }; // Static
Carousel._jQueryInterface = function _jQueryInterface(config) { Carousel._jQueryInterface = function _jQueryInterface(config) {
@ -942,7 +941,7 @@ var Carousel = function ($$$1) {
data.to(config); data.to(config);
} else if (typeof action === 'string') { } else if (typeof action === 'string') {
if (typeof data[action] === 'undefined') { if (typeof data[action] === 'undefined') {
throw new Error("No method named \"" + action + "\""); throw new TypeError("No method named \"" + action + "\"");
} }
data[action](); data[action]();
@ -1029,7 +1028,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): collapse.js * Bootstrap (v4.0.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1041,7 +1040,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1098,6 +1097,8 @@ var Collapse = function ($$$1) {
var selector = Util.getSelectorFromElement(elem); var selector = Util.getSelectorFromElement(elem);
if (selector !== null && $$$1(selector).filter(element).length > 0) { if (selector !== null && $$$1(selector).filter(element).length > 0) {
this._selector = selector;
this._triggerArray.push(elem); this._triggerArray.push(elem);
} }
} }
@ -1111,12 +1112,12 @@ var Collapse = function ($$$1) {
if (this._config.toggle) { if (this._config.toggle) {
this.toggle(); this.toggle();
} }
} // getters } // Getters
var _proto = Collapse.prototype; var _proto = Collapse.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
if ($$$1(this._element).hasClass(ClassName.SHOW)) { if ($$$1(this._element).hasClass(ClassName.SHOW)) {
this.hide(); this.hide();
@ -1136,15 +1137,15 @@ var Collapse = function ($$$1) {
var activesData; var activesData;
if (this._parent) { if (this._parent) {
actives = $$$1.makeArray($$$1(this._parent).children().children(Selector.ACTIVES)); actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]"));
if (!actives.length) { if (actives.length === 0) {
actives = null; actives = null;
} }
} }
if (actives) { if (actives) {
activesData = $$$1(actives).data(DATA_KEY); activesData = $$$1(actives).not(this._selector).data(DATA_KEY);
if (activesData && activesData._isTransitioning) { if (activesData && activesData._isTransitioning) {
return; return;
@ -1159,7 +1160,7 @@ var Collapse = function ($$$1) {
} }
if (actives) { if (actives) {
Collapse._jQueryInterface.call($$$1(actives), 'hide'); Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');
if (!activesData) { if (!activesData) {
$$$1(actives).data(DATA_KEY, null); $$$1(actives).data(DATA_KEY, null);
@ -1171,7 +1172,7 @@ var Collapse = function ($$$1) {
$$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
this._element.style[dimension] = 0; this._element.style[dimension] = 0;
if (this._triggerArray.length) { if (this._triggerArray.length > 0) {
$$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
} }
@ -1217,7 +1218,7 @@ var Collapse = function ($$$1) {
Util.reflow(this._element); Util.reflow(this._element);
$$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
if (this._triggerArray.length) { if (this._triggerArray.length > 0) {
for (var i = 0; i < this._triggerArray.length; i++) { for (var i = 0; i < this._triggerArray.length; i++) {
var trigger = this._triggerArray[i]; var trigger = this._triggerArray[i];
var selector = Util.getSelectorFromElement(trigger); var selector = Util.getSelectorFromElement(trigger);
@ -1261,12 +1262,12 @@ var Collapse = function ($$$1) {
this._element = null; this._element = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
@ -1283,7 +1284,7 @@ var Collapse = function ($$$1) {
var parent = null; var parent = null;
if (Util.isElement(this._config.parent)) { if (Util.isElement(this._config.parent)) {
parent = this._config.parent; // it's a jQuery object parent = this._config.parent; // It's a jQuery object
if (typeof this._config.parent.jquery !== 'undefined') { if (typeof this._config.parent.jquery !== 'undefined') {
parent = this._config.parent[0]; parent = this._config.parent[0];
@ -1303,11 +1304,11 @@ var Collapse = function ($$$1) {
if (element) { if (element) {
var isOpen = $$$1(element).hasClass(ClassName.SHOW); var isOpen = $$$1(element).hasClass(ClassName.SHOW);
if (triggerArray.length) { if (triggerArray.length > 0) {
$$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
} }
} }
}; // static }; // Static
Collapse._getTargetFromElement = function _getTargetFromElement(element) { Collapse._getTargetFromElement = function _getTargetFromElement(element) {
@ -1333,7 +1334,7 @@ var Collapse = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -1396,7 +1397,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): dropdown.js * Bootstrap (v4.0.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1408,7 +1409,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1491,12 +1492,12 @@ var Dropdown = function ($$$1) {
this._inNavbar = this._detectNavbar(); this._inNavbar = this._detectNavbar();
this._addEventListeners(); this._addEventListeners();
} // getters } // Getters
var _proto = Dropdown.prototype; var _proto = Dropdown.prototype;
// public // Public
_proto.toggle = function toggle() { _proto.toggle = function toggle() {
if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {
return; return;
@ -1529,10 +1530,10 @@ var Dropdown = function ($$$1) {
* Popper - https://popper.js.org * Popper - https://popper.js.org
*/ */
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // for dropup with alignment we use the parent as popper container var element = this._element; // For dropup with alignment we use the parent as popper container
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if ($$$1(parent).hasClass(ClassName.DROPUP)) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
@ -1548,13 +1549,13 @@ var Dropdown = function ($$$1) {
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(element, this._menu, this._getPopperConfig());
} // if this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement && !$$$1(parent).closest(Selector.NAVBAR_NAV).length) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1('body').children().on('mouseover', null, $$$1.noop);
} }
@ -1585,7 +1586,7 @@ var Dropdown = function ($$$1) {
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // private }; // Private
_proto._addEventListeners = function _addEventListeners() { _proto._addEventListeners = function _addEventListeners() {
@ -1667,7 +1668,7 @@ var Dropdown = function ($$$1) {
} }
}; };
return popperConfig; return popperConfig;
}; // static }; // Static
Dropdown._jQueryInterface = function _jQueryInterface(config) { Dropdown._jQueryInterface = function _jQueryInterface(config) {
@ -1683,7 +1684,7 @@ var Dropdown = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -1725,7 +1726,7 @@ var Dropdown = function ($$$1) {
if (hideEvent.isDefaultPrevented()) { if (hideEvent.isDefaultPrevented()) {
continue; continue;
} // if this is a touch-enabled device we remove the extra } // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
@ -1748,7 +1749,8 @@ var Dropdown = function ($$$1) {
} }
return parent || element.parentNode; return parent || element.parentNode;
}; }; // eslint-disable-next-line complexity
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
@ -1785,19 +1787,19 @@ var Dropdown = function ($$$1) {
var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get();
if (!items.length) { if (items.length === 0) {
return; return;
} }
var index = items.indexOf(event.target); var index = items.indexOf(event.target);
if (event.which === ARROW_UP_KEYCODE && index > 0) { if (event.which === ARROW_UP_KEYCODE && index > 0) {
// up // Up
index--; index--;
} }
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
// down // Down
index++; index++;
} }
@ -1860,7 +1862,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): modal.js * Bootstrap (v4.0.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1872,7 +1874,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1941,12 +1943,12 @@ var Modal = function ($$$1) {
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0; this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // getters } // Getters
var _proto = Modal.prototype; var _proto = Modal.prototype;
// public // Public
_proto.toggle = function toggle(relatedTarget) { _proto.toggle = function toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget); return this._isShown ? this.hide() : this.show(relatedTarget);
}; };
@ -2059,7 +2061,7 @@ var Modal = function ($$$1) {
_proto.handleUpdate = function handleUpdate() { _proto.handleUpdate = function handleUpdate() {
this._adjustDialog(); this._adjustDialog();
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -2074,7 +2076,7 @@ var Modal = function ($$$1) {
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// don't move modals dom position // Don't move modal's DOM position
document.body.appendChild(this._element); document.body.appendChild(this._element);
} }
@ -2117,9 +2119,9 @@ var Modal = function ($$$1) {
_proto._enforceFocus = function _enforceFocus() { _proto._enforceFocus = function _enforceFocus() {
var _this4 = this; var _this4 = this;
$$$1(document).off(Event.FOCUSIN) // guard against infinite focus loop $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop
.on(Event.FOCUSIN, function (event) { .on(Event.FOCUSIN, function (event) {
if (document !== event.target && _this4._element !== event.target && !$$$1(_this4._element).has(event.target).length) { if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {
_this4._element.focus(); _this4._element.focus();
} }
}); });
@ -2340,7 +2342,7 @@ var Modal = function ($$$1) {
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv); document.body.removeChild(scrollDiv);
return scrollbarWidth; return scrollbarWidth;
}; // static }; // Static
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
@ -2356,7 +2358,7 @@ var Modal = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](relatedTarget); data[config](relatedTarget);
@ -2404,7 +2406,7 @@ var Modal = function ($$$1) {
var $target = $$$1(target).one(Event.SHOW, function (showEvent) { var $target = $$$1(target).one(Event.SHOW, function (showEvent) {
if (showEvent.isDefaultPrevented()) { if (showEvent.isDefaultPrevented()) {
// only register focus restorer if modal will actually get shown // Only register focus restorer if modal will actually get shown
return; return;
} }
@ -2436,7 +2438,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): tooltip.js * Bootstrap (v4.0.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2448,7 +2450,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -2537,7 +2539,7 @@ var Tooltip = function ($$$1) {
* Popper - https://popper.js.org * Popper - https://popper.js.org
*/ */
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
} // private } // private
@ -2545,19 +2547,19 @@ var Tooltip = function ($$$1) {
this._timeout = 0; this._timeout = 0;
this._hoverState = ''; this._hoverState = '';
this._activeTrigger = {}; this._activeTrigger = {};
this._popper = null; // protected this._popper = null; // Protected
this.element = element; this.element = element;
this.config = this._getConfig(config); this.config = this._getConfig(config);
this.tip = null; this.tip = null;
this._setListeners(); this._setListeners();
} // getters } // Getters
var _proto = Tooltip.prototype; var _proto = Tooltip.prototype;
// public // Public
_proto.enable = function enable() { _proto.enable = function enable() {
this._isEnabled = true; this._isEnabled = true;
}; };
@ -2692,7 +2694,7 @@ var Tooltip = function ($$$1) {
_this._handlePopperPlacementChange(data); _this._handlePopperPlacementChange(data);
} }
}); });
$$$1(tip).addClass(ClassName.SHOW); // if this is a touch-enabled device we add extra $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
@ -2755,7 +2757,7 @@ var Tooltip = function ($$$1) {
return; return;
} }
$$$1(tip).removeClass(ClassName.SHOW); // if this is a touch-enabled device we remove the extra $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
@ -2779,7 +2781,7 @@ var Tooltip = function ($$$1) {
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // protected }; // Protected
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
@ -2805,7 +2807,7 @@ var Tooltip = function ($$$1) {
var html = this.config.html; var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) { if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// content is a DOM node or a jQuery // Content is a DOM node or a jQuery
if (html) { if (html) {
if (!$$$1(content).parent().is($element)) { if (!$$$1(content).parent().is($element)) {
$element.empty().append(content); $element.empty().append(content);
@ -2826,7 +2828,7 @@ var Tooltip = function ($$$1) {
} }
return title; return title;
}; // private }; // Private
_proto._getAttachment = function _getAttachment(placement) { _proto._getAttachment = function _getAttachment(placement) {
@ -3015,7 +3017,7 @@ var Tooltip = function ($$$1) {
this.hide(); this.hide();
this.show(); this.show();
this.config.animation = initConfigAnimation; this.config.animation = initConfigAnimation;
}; // static }; // Static
Tooltip._jQueryInterface = function _jQueryInterface(config) { Tooltip._jQueryInterface = function _jQueryInterface(config) {
@ -3035,7 +3037,7 @@ var Tooltip = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -3101,7 +3103,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): popover.js * Bootstrap (v4.0.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3113,7 +3115,7 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -3166,7 +3168,7 @@ var Popover = function ($$$1) {
var _proto = Popover.prototype; var _proto = Popover.prototype;
// overrides // Overrides
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
return this.getTitle() || this._getContent(); return this.getTitle() || this._getContent();
}; };
@ -3181,7 +3183,7 @@ var Popover = function ($$$1) {
}; };
_proto.setContent = function setContent() { _proto.setContent = function setContent() {
var $tip = $$$1(this.getTipElement()); // we use append for html objects to maintain js events var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
@ -3193,7 +3195,7 @@ var Popover = function ($$$1) {
this.setElementContent($tip.find(Selector.CONTENT), content); this.setElementContent($tip.find(Selector.CONTENT), content);
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
}; // private }; // Private
_proto._getContent = function _getContent() { _proto._getContent = function _getContent() {
@ -3207,7 +3209,7 @@ var Popover = function ($$$1) {
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join('')); $tip.removeClass(tabClass.join(''));
} }
}; // static }; // Static
Popover._jQueryInterface = function _jQueryInterface(config) { Popover._jQueryInterface = function _jQueryInterface(config) {
@ -3227,7 +3229,7 @@ var Popover = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -3237,7 +3239,7 @@ var Popover = function ($$$1) {
_createClass(Popover, null, [{ _createClass(Popover, null, [{
key: "VERSION", key: "VERSION",
// getters // Getters
get: function get() { get: function get() {
return VERSION; return VERSION;
} }
@ -3294,7 +3296,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): scrollspy.js * Bootstrap (v4.0.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3306,7 +3308,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3373,16 +3375,16 @@ var ScrollSpy = function ($$$1) {
this.refresh(); this.refresh();
this._process(); this._process();
} // getters } // Getters
var _proto = ScrollSpy.prototype; var _proto = ScrollSpy.prototype;
// public // Public
_proto.refresh = function refresh() { _proto.refresh = function refresh() {
var _this2 = this; var _this2 = this;
var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
this._offsets = []; this._offsets = [];
@ -3401,7 +3403,7 @@ var ScrollSpy = function ($$$1) {
var targetBCR = target.getBoundingClientRect(); var targetBCR = target.getBoundingClientRect();
if (targetBCR.width || targetBCR.height) { if (targetBCR.width || targetBCR.height) {
// todo (fat): remove sketch reliance on jQuery position/offset // TODO (fat): remove sketch reliance on jQuery position/offset
return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];
} }
} }
@ -3429,7 +3431,7 @@ var ScrollSpy = function ($$$1) {
this._targets = null; this._targets = null;
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
}; // private }; // Private
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
@ -3533,7 +3535,7 @@ var ScrollSpy = function ($$$1) {
_proto._clear = function _clear() { _proto._clear = function _clear() {
$$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); $$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
}; // static }; // Static
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
@ -3549,7 +3551,7 @@ var ScrollSpy = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -3605,7 +3607,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.3): tab.js * Bootstrap (v4.0.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3617,7 +3619,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0-beta.3'; var VERSION = '4.0.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3658,12 +3660,12 @@ var Tab = function ($$$1) {
function () { function () {
function Tab(element) { function Tab(element) {
this._element = element; this._element = element;
} // getters } // Getters
var _proto = Tab.prototype; var _proto = Tab.prototype;
// public // Public
_proto.show = function show() { _proto.show = function show() {
var _this = this; var _this = this;
@ -3726,7 +3728,7 @@ var Tab = function ($$$1) {
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$$$1.removeData(this._element, DATA_KEY); $$$1.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // private }; // Private
_proto._activate = function _activate(element, container, callback) { _proto._activate = function _activate(element, container, callback) {
@ -3790,7 +3792,7 @@ var Tab = function ($$$1) {
if (callback) { if (callback) {
callback(); callback();
} }
}; // static }; // Static
Tab._jQueryInterface = function _jQueryInterface(config) { Tab._jQueryInterface = function _jQueryInterface(config) {
@ -3805,7 +3807,7 @@ var Tab = function ($$$1) {
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new Error("No method named \"" + config + "\""); throw new TypeError("No method named \"" + config + "\"");
} }
data[config](); data[config]();
@ -3859,7 +3861,7 @@ var Tab = function ($$$1) {
(function ($$$1) { (function ($$$1) {
if (typeof $$$1 === 'undefined') { if (typeof $$$1 === 'undefined') {
throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
} }
var version = $$$1.fn.jquery.split(' ')[0].split('.'); var version = $$$1.fn.jquery.split(' ')[0].split('.');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -68,14 +68,11 @@ $(document).ready(function() {
$('a.notification-link').click(function(e){ $('a.notification-link').click(function(e){
var notifyType = $(this).data('type'); var notifyType = $(this).data('type');
if (!$(this).data('clicked') && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) { if(! $('#nav-' + notifyType + '-sub').hasClass('show')) {
var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache'));
loadNotificationItems(notifyType, cached_data);
$(this).data('clicked', true);
}
else {
loadNotificationItems(notifyType); loadNotificationItems(notifyType);
} }
$(this).data('clicked', true);
}); });
// Allow folks to stop the ajax page updates with the pause/break key // Allow folks to stop the ajax page updates with the pause/break key
@ -391,6 +388,14 @@ function notificationsUpdate(cached_data) {
}); });
} }
var notifyType = null;
if($('.notification-content.show').length) {
notifyType = $('.notification-content.show').data('type');
}
if(notifyType !== null) {
loadNotificationItems(notifyType);
}
if(timer) clearTimeout(timer); if(timer) clearTimeout(timer);
timer = setTimeout(updateInit,updateInterval); timer = setTimeout(updateInit,updateInterval);
} }
@ -431,7 +436,6 @@ function handleNotifications(data) {
} }
function handleNotificationsItems(notifyType, data) { function handleNotificationsItems(notifyType, data) {
var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html()); var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
var notify_menu = $("#nav-" + notifyType + "-menu"); var notify_menu = $("#nav-" + notifyType + "-menu");
@ -924,33 +928,33 @@ function justifyPhotosAjax(id) {
$('#' + id).justifiedGallery('norewind').on('jg.complete', function(e){ justifiedGalleryActive = false; }); $('#' + id).justifiedGallery('norewind').on('jg.complete', function(e){ justifiedGalleryActive = false; });
} }
function loadNotificationItems(notifyType, cached_data) { function loadNotificationItems(notifyType) {
var pingExCmd = 'ping/' + notifyType + ((localUser != 0) ? '?f=&uid=' + localUser : ''); var pingExCmd = 'ping/' + notifyType + ((localUser != 0) ? '?f=&uid=' + localUser : '');
if(cached_data !== undefined) { var clicked = $('[data-type=\'' + notifyType + '\']').data('clicked');
if((clicked === undefined) && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) {
var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache'));
handleNotificationsItems(notifyType, cached_data); handleNotificationsItems(notifyType, cached_data);
console.log('updating ' + notifyType + ' notifications from cache...');
} }
else { else {
var cached_data = [];
}
console.log('updating ' + notifyType + ' notifications...');
$.get(pingExCmd, function(data) { $.get(pingExCmd, function(data) {
if(data.invalid == 1) { if(data.invalid == 1) {
window.location.href=window.location.href; window.location.href=window.location.href;
} }
$("." + notifyType + "-update").html(data.notify.length); if(JSON.stringify(cached_data[0]) === JSON.stringify(data.notify[0])) {
console.log(notifyType + ' notifications cache up to date - update deferred');
sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify)); }
else {
handleNotificationsItems(notifyType, data.notify); handleNotificationsItems(notifyType, data.notify);
sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify));
}
}); });
}
setTimeout(function() {
if($('#nav-' + notifyType + '-sub').hasClass('show')) {
console.log('updating ' + notifyType + ' notifications...');
setTimeout(loadNotificationItems, updateInterval, notifyType);
}
}, 1000);
} }
// Since our ajax calls are asynchronous, we will give a few // Since our ajax calls are asynchronous, we will give a few

View file

@ -8,8 +8,7 @@ head_add_css('/library/datetimepicker/jquery.datetimepicker.css');
head_add_css('/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css'); head_add_css('/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css');
require_once('view/php/theme_init.php'); require_once('view/php/theme_init.php');
head_add_js('/library/popper/popper.min.js'); head_add_js('/library/bootstrap/js/bootstrap.bundle.min.js');
head_add_js('/library/bootstrap/js/bootstrap.min.js');
head_add_js('/library/bootbox/bootbox.min.js'); head_add_js('/library/bootbox/bootbox.min.js');
head_add_js('/library/bootstrap-tagsinput/bootstrap-tagsinput.js'); head_add_js('/library/bootstrap-tagsinput/bootstrap-tagsinput.js');
head_add_js('/library/datetimepicker/jquery.datetimepicker.js'); head_add_js('/library/datetimepicker/jquery.datetimepicker.js');

View file

@ -115,7 +115,6 @@
<div id="no_notifications" class="d-xl-none"> <div id="no_notifications" class="d-xl-none">
{{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span> {{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
</div> </div>
<div id="notifications" class="navbar-nav" data-children=".nav-item">
<div id="nav-notifications-template" rel="template"> <div id="nav-notifications-template" rel="template">
<a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}" data-notify_id="{7}" data-thread_top="{8}" data-contact_name="{2}"> <a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}" data-notify_id="{7}" data-thread_top="{8}" data-contact_name="{2}">
<img class="menu-img-3" data-src="{1}"> <img class="menu-img-3" data-src="{1}">
@ -123,13 +122,14 @@
<span class="dropdown-sub-text">{3}<br>{4}</span> <span class="dropdown-sub-text">{3}<br>{4}</span>
</a> </a>
</div> </div>
<div id="notifications" class="navbar-nav">
{{foreach $notifications as $notification}} {{foreach $notifications as $notification}}
<div class="collapse {{$notification.type}}-button"> <div class="collapse {{$notification.type}}-button">
<a class="list-group-item notification-link" href="#nav-{{$notification.type}}-sub" title="{{$notification.title}}" data-toggle="collapse" data-parent="#notifications" data-type="{{$notification.type}}"> <a class="list-group-item notification-link" href="#" title="{{$notification.title}}" data-target="#nav-{{$notification.type}}-sub" data-toggle="collapse" data-type="{{$notification.type}}">
<i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}} <i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}}
<span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span> <span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span>
</a> </a>
<div id="nav-{{$notification.type}}-sub" class="collapse notification-content"> <div id="nav-{{$notification.type}}-sub" class="collapse notification-content" data-parent="#notifications" data-type="{{$notification.type}}">
{{if $notification.viewall}} {{if $notification.viewall}}
<a class="list-group-item text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}"> <a class="list-group-item text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
<i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}} <i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}