Unverified Commit 21ffddb5 authored by Nicolas Liampotis's avatar Nicolas Liampotis Committed by GitHub
Browse files

Merge pull request #11 from EGI-Foundation/release-egi-1.4

Release egi 1.4 - v1.4.1
No related merge requests found
Showing with 332 additions and 162 deletions
+332 -162
......@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v-egi-1.4.1](https://github.com/EGI-Foundation/simplesamlphp-module-themeegi/compare/v-egi-1.4.0...v-egi-1.4.1) - 2021-01-20
### Added
- Added comanage loader spinner
- Added Modal element
### Changed
- Retrieve terms and privacy policy urls from theme configuration
- Copyright update date dynamically
- Refactor disco-tpl.php, footer.php
- Move default loader spinner into a shared, stand alone element
- Made loader spinner configurable
- Moved language bar into a shared, stand alone element
## [v-egi-1.4.0](https://github.com/EGI-Foundation/simplesamlphp-module-themeegi/compare/v-egi-1.3.2...v-egi-1.4.0) - 2021-01-15
### Added
......
......@@ -18,8 +18,10 @@ $config = array(
array('type' => 'Session State', 'provider' => 'aai.egi.eu', 'name' => 'JSESSIONID', 'thirdParty' => false, 'category' => 'Session', 'purpose' => 'Preserve user session ID to retrieve session information')
),
'views' => array(
// 'aup' => 'https://example.com/test.html',
'aup' => 'https://aai.egi.eu/aup/check-in.html', // Terms and Conditions URL. The key MUST BE `aup`
'privacy' => 'https://aai.egi.eu/privacy.html', // Privace URL. The key MUST BE `privacy`
),
'loader' => 'loader', // Loading Spinner to use. Two options are available. `loader` or `cmg_loader`
);
?>
?>
\ No newline at end of file
<div id="loader">
<div class="sk-circle">
<div class="sk-circle1 sk-child"></div>
<div class="sk-circle2 sk-child"></div>
<div class="sk-circle3 sk-child"></div>
<div class="sk-circle4 sk-child"></div>
<div class="sk-circle5 sk-child"></div>
<div class="sk-circle6 sk-child"></div>
<div class="sk-circle7 sk-child"></div>
<div class="sk-circle8 sk-child"></div>
<div class="sk-circle9 sk-child"></div>
<div class="sk-circle10 sk-child"></div>
<div class="sk-circle11 sk-child"></div>
<div class="sk-circle12 sk-child"></div>
</div>
</div>
<?php
// Get Configuration and set the loader
$themeConfig = SimpleSAML_Configuration::getConfig('module_themeegi.php');
$loader = $themeConfig->getValue('loader');
if(!empty($loader)) {
$this->includeAtTemplateBase('includes/' . $loader . '.php');
}
/**
* Template form for giving consent.
*
......
<div id="cmg-loader" class="loader-container">
<div class="redirect-box">
<div class="lds-spinner"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
<span id="cmg-loader-comment" class="comment" style="display: none;">Please wait...</span>
</div>
</div>
\ No newline at end of file
<?php
if(!empty($this->data['htmlinject']['htmlContentPost'])) {
foreach($this->data['htmlinject']['htmlContentPost'] AS $c) {
echo $c;
foreach($this->data['htmlinject']['htmlContentPost'] as $c) {
print $c;
}
}
?>
</div><!-- /container -->
</div><!-- /ssp-container -->
</div><!-- /container -->
</div><!-- /ssp-container -->
<?php if(strpos($this->t('{themeegi:discopower:cookies_text}'), 'not translated') === FALSE || strpos($this->t('{themeegi:discopower:cookies_accept_btn_text}'), 'not translated') === FALSE) { ?>
<?php if(strpos($this->t('{themeegi:discopower:cookies_text}'), 'not translated') === false || strpos($this->t('{themeegi:discopower:cookies_accept_btn_text}'), 'not translated') === false): ?>
<!-- cookies popup -->
<div id="cookies">
<div id="cookies-wrapper">
<p>
<?php echo $this->t('{themeegi:discopower:cookies_text}'); ?>
<?php if(strpos($this->t('{themeegi:discopower:cookies_link_text}'), 'not translated') === FALSE) { ?>
<a href="<?php echo $this->t('{themeegi:discopower:cookies_link_url}'); ?>" target="_blank"><?php echo $this->t('{themeegi:discopower:cookies_link_text}'); ?></a>
<?php } ?>
<?php print $this->t('{themeegi:discopower:cookies_text}'); ?>
<?php if(strpos($this->t('{themeegi:discopower:cookies_link_text}'), 'not translated') === false): ?>
<a href="<?php print $this->t('{themeegi:discopower:cookies_link_url}'); ?>" target="_blank"><?php print $this->t('{themeegi:discopower:cookies_link_text}'); ?></a>
<?php endif; ?>
</p>
<a id="js-accept-cookies" class="cookies-ok" href="#">
<?php echo $this->t('{themeegi:discopower:cookies_accept_btn_text}'); ?>
<?php print $this->t('{themeegi:discopower:cookies_accept_btn_text}'); ?>
</a>
</div>
</div>
<!-- /cookies popup -->
<?php
}
?>
<?php endif; ?>
<footer class="ssp-footer text-center">
<div class="container-fluid ssp-footer--container container">
<div class="row ssp-content-group--footer">
<!-- Add language bar -->
<?php
$includeLanguageBar = (!empty($_POST)) ? false : true;
$includeLanguageBar = (isset($this->data['hideLanguageBar']) && $this->data['hideLanguageBar'] === true) ? false : true;
<?php
$includeLanguageBar = TRUE;
if (!empty($_POST))
$includeLanguageBar = FALSE;
if (isset($this->data['hideLanguageBar']) && $this->data['hideLanguageBar'] === TRUE)
$includeLanguageBar = FALSE;
if ($includeLanguageBar) {
$languages = $this->getLanguageList();
if ( count($languages) > 1 ) {
echo '<div class="col-sm-12 col-md-4 ssp-footer__item">
<div class="dropup ssp-footer__item__lang">';
$langnames = array(
'no' => 'Bokmål', // Norwegian Bokmål
'nn' => 'Nynorsk', // Norwegian Nynorsk
'se' => 'Sámegiella', // Northern Sami
'sam' => 'Åarjelh-saemien giele', // Southern Sami
'da' => 'Dansk', // Danish
'en' => 'English',
'de' => 'Deutsch', // German
'sv' => 'Svenska', // Swedish
'fi' => 'Suomeksi', // Finnish
'es' => 'Español', // Spanish
'fr' => 'Français', // French
'it' => 'Italiano', // Italian
'nl' => 'Nederlands', // Dutch
'lb' => 'Lëtzebuergesch', // Luxembourgish
'cs' => 'Čeština', // Czech
'sl' => 'Slovenščina', // Slovensk
'lt' => 'Lietuvių kalba', // Lithuanian
'hr' => 'Hrvatski', // Croatian
'hu' => 'Magyar', // Hungarian
'pl' => 'Język polski', // Polish
'pt' => 'Português', // Portuguese
'pt-br' => 'Português brasileiro', // Portuguese
'ru' => 'русский язык', // Russian
'et' => 'eesti keel', // Estonian
'tr' => 'Türkçe', // Turkish
'el' => 'ελληνικά', // Greek
'ja' => '日本語', // Japanese
'zh' => '简体中文', // Chinese (simplified)
'zh-tw' => '繁體中文', // Chinese (traditional)
'ar' => 'العربية', // Arabic
'fa' => 'پارسی', // Persian
'ur' => 'اردو', // Urdu
'he' => 'עִבְרִית', // Hebrew
'id' => 'Bahasa Indonesia', // Indonesian
'sr' => 'Srpski', // Serbian
'lv' => 'Latviešu', // Latvian
'ro' => 'Românește', // Romanian
'eu' => 'Euskara', // Basque
);
$textarray = array();
foreach ($languages AS $lang => $current) {
$lang = strtolower($lang);
if ($current) {
$lang_current = $langnames[$lang];
} else {
$textarray[] = '<li class="ssp-dropdown__two_cols--item"><a href="' . htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(\SimpleSAML\Utils\HTTP::getSelfURL(), array($this->languageParameterName => $lang))) . '">' .
$langnames[$lang] . '</a></li>';
if ($includeLanguageBar) {
$this->includeAtTemplateBase('includes/language_bar.php');
}
}
echo '<button class="ssp-btn btn ssp-btn__footer dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">'
. $lang_current
. '<span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-left ssp-dropdown__two_cols" aria-labelledby="dropdownMenu1">';
echo join(' ', $textarray);
echo '</ul></div></div>'; // /dropup /col-sm-4
}
}
?>
?>
<div class="col-sm-12 col-md-4 ssp-footer__item ssp-footer__item--images text-center">
<a href="https://grnet.gr/">
<img class="ssp-footer__item__logo" src="<?php echo SimpleSAML_Module::getModuleURL('themeegi/resources/images/grnet_logo_en.svg'); ?>" alt="GRNET" />
<img class="ssp-footer__item__logo" src="<?php print SimpleSAML_Module::getModuleURL('themeegi/resources/images/grnet_logo_en.svg'); ?>" alt="GRNET" />
</a>
<img class="ssp-footer__item__logo--eu" src="<?php echo SimpleSAML_Module::getModuleURL('themeegi/resources/images/eu.svg'); ?>" alt="European Union" />
<img class="ssp-footer__item__logo--eu" src="<?php print SimpleSAML_Module::getModuleURL('themeegi/resources/images/eu.svg'); ?>" alt="European Union" />
</div>
<div class="col-sm-12 col-md-4 ssp-footer__item">
<div class="ssp-footer__item__links">
<a class="ssp-footer__item__links__left_link" href="https://aai.egi.eu/ToU.html">Terms</a><a href="https://aai.egi.eu/privacy.html">Privacy</a>
<a class="ssp-footer__item__links__left_link" href="/proxy/module.php/themeegi/views.php?id=aup">Terms</a><a href="/proxy/module.php/themeegi/views.php?id=privacy">Privacy</a>
</div>
</div>
</div><!-- /row -->
<div class="row">
<div class="col-sm-12 ssp-footer__item ssp-footer__item--ack text-center">
Copyright &copy; 2016-2021 | Check-in is an EGI service provided by GRNET, receiving funding from the <a href="https://www.egi.eu/about/egi-foundation/" target="_blank">EGI Foundation (EGI.eu)</a> and the <a href="https://eosc-hub.eu" target="_blank">EOSC-hub project</a> (Horizon 2020) under Grant number 777536 | Powered by <a href="https://github.com/rciam">RCIAM</a>
Copyright &copy;<?php
print (strpos($this->t('{themeegi:discopower:copyright_year_start}'), 'not translated') === false)
? $this->t('{themeegi:discopower:copyright_year_start}') . '-'
: '';
print date("Y");
?> | Check-in is an EGI service provided by GRNET, receiving funding from the
<a href="https://www.egi.eu/about/egi-foundation/" target="_blank">EGI Foundation (EGI.eu)</a> and the <a href="https://eosc-hub.eu" target="_blank">EOSC-hub project</a> (Horizon 2020) under Grant number 777536 | Powered by <a href="https://github.com/rciam">RCIAM</a>
</div>
</div>
</div> <!-- /container-fluid -->
</footer>
<script type="text/javascript"
src="<?php echo htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/cookie.js')); ?>">
src="<?php print htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/cookie.js')); ?>">
</script>
<script type="text/javascript"
src="<?php echo htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/dropdown.js')); ?>">
src="<?php print htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/dropdown.js')); ?>">
</script>
<script type="text/javascript"
src="<?php echo htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/modal.js')); ?>">
src="<?php print htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/modal.js')); ?>">
</script>
<script type="text/javascript"
src="<?php echo htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/tooltip.js')); ?>">
src="<?php print htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/tooltip.js')); ?>">
</script>
<script type="text/javascript"
src="<?php echo htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/theme.js')); ?>">
src="<?php print htmlspecialchars(SimpleSAML_Module::getModuleURL('themeegi/resources/js/theme.js')); ?>">
</script>
</body>
......
<?php
// Language names dictionary
$langnames = array(
'no' => 'Bokmål', // Norwegian Bokmål
'nn' => 'Nynorsk', // Norwegian Nynorsk
'se' => 'Sámegiella', // Northern Sami
'sam' => 'Åarjelh-saemien giele', // Southern Sami
'da' => 'Dansk', // Danish
'en' => 'English',
'de' => 'Deutsch', // German
'sv' => 'Svenska', // Swedish
'fi' => 'Suomeksi', // Finnish
'es' => 'Español', // Spanish
'fr' => 'Français', // French
'it' => 'Italiano', // Italian
'nl' => 'Nederlands', // Dutch
'lb' => 'Lëtzebuergesch', // Luxembourgish
'cs' => 'Čeština', // Czech
'sl' => 'Slovenščina', // Slovensk
'lt' => 'Lietuvių kalba', // Lithuanian
'hr' => 'Hrvatski', // Croatian
'hu' => 'Magyar', // Hungarian
'pl' => 'Język polski', // Polish
'pt' => 'Português', // Portuguese
'pt-br' => 'Português brasileiro', // Portuguese
'ru' => 'русский язык', // Russian
'et' => 'eesti keel', // Estonian
'tr' => 'Türkçe', // Turkish
'el' => 'ελληνικά', // Greek
'ja' => '日本語', // Japanese
'zh' => '简体中文', // Chinese (simplified)
'zh-tw' => '繁體中文', // Chinese (traditional)
'ar' => 'العربية', // Arabic
'fa' => 'پارسی', // Persian
'ur' => 'اردو', // Urdu
'he' => 'עִבְרִית', // Hebrew
'id' => 'Bahasa Indonesia', // Indonesian
'sr' => 'Srpski', // Serbian
'lv' => 'Latviešu', // Latvian
'ro' => 'Românește', // Romanian
'eu' => 'Euskara', // Basque
);
$languages = $this->getLanguageList();
?>
<?php if ( count($languages) > 1 ): ?>
<div class="col-sm-12 col-md-4 ssp-footer__item">
<div class="dropup ssp-footer__item__lang">
<?php
$textarray = array();
foreach ($languages as $lang => $current) {
$lang = strtolower($lang);
if ($current) {
$lang_current = $langnames[$lang];
} else {
$textarray[] =
'<li class="ssp-dropdown__two_cols--item">'
. '<a href="' . htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(\SimpleSAML\Utils\HTTP::getSelfURL(), array($this->languageParameterName => $lang))) . '">'
. $langnames[$lang]
. '</a>'
. '</li>';
}
}
?>
<button class="ssp-btn btn ssp-btn__footer dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<?php print $lang_current; ?>
<span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-left ssp-dropdown__two_cols" aria-labelledby="dropdownMenu1">
<?php print implode(' ', $textarray); ?>
</ul>
</div> <!-- dropup -->
</div> <!-- col-sm-4 -->
<?php endif; ?>
\ No newline at end of file
<div id="def-loader" class="loader-container">
<div class="sk-circle">
<div class="sk-circle1 sk-child"></div>
<div class="sk-circle2 sk-child"></div>
<div class="sk-circle3 sk-child"></div>
<div class="sk-circle4 sk-child"></div>
<div class="sk-circle5 sk-child"></div>
<div class="sk-circle6 sk-child"></div>
<div class="sk-circle7 sk-child"></div>
<div class="sk-circle8 sk-child"></div>
<div class="sk-circle9 sk-child"></div>
<div class="sk-circle10 sk-child"></div>
<div class="sk-circle11 sk-child"></div>
<div class="sk-circle12 sk-child"></div>
</div>
</div>
\ No newline at end of file
<!-- Modal -->
<div class="modal fade" id="themeModal" tabindex="-1" role="dialog" aria-labelledby="themeModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="themeModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Ok</button>
</div>
</div>
</div>
</div>
\ No newline at end of file
<div id="loader">
<div class="sk-circle">
<div class="sk-circle1 sk-child"></div>
<div class="sk-circle2 sk-child"></div>
<div class="sk-circle3 sk-child"></div>
<div class="sk-circle4 sk-child"></div>
<div class="sk-circle5 sk-child"></div>
<div class="sk-circle6 sk-child"></div>
<div class="sk-circle7 sk-child"></div>
<div class="sk-circle8 sk-child"></div>
<div class="sk-circle9 sk-child"></div>
<div class="sk-circle10 sk-child"></div>
<div class="sk-circle11 sk-child"></div>
<div class="sk-circle12 sk-child"></div>
</div>
</div>
<?php
// Get Configuration and set the loader
$themeConfig = SimpleSAML_Configuration::getConfig('module_themeegi.php');
$loader = $themeConfig->getValue('loader');
if(!empty($loader)) {
$this->includeAtTemplateBase('includes/' . $loader . '.php');
}
$faventry = NULL;
foreach( $this->data['idplist'] AS $tab => $slist) {
......@@ -106,7 +96,7 @@ function showEntry($t, $metadata, $favourite = FALSE, $withIcon = FALSE) {
?>
<h2 class="text-center"><?php echo $this->t('{themeegi:discopower:title}'); ?></h2>
<h2 class="text-center"><?php print $this->t('{themeegi:discopower:title}'); ?></h2>
<?php
......@@ -133,37 +123,39 @@ function getTranslatedName($t, $metadata) {
$this->includeAtTemplateBase('includes/login_help.php');
if (!empty($faventry)) {
echo('
?>
<?php if (!empty($faventry)): ?>
<div class="modal fade" id="favourite-modal" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="js-close-custom close"><span aria-hidden="true">&times;</span></button>
<h2 class="modal-title">' . $this->t('{themeegi:discopower:favourite_dialog_title}') . '</h2>
<h2 class="modal-title"><?php print $this->t('{themeegi:discopower:favourite_dialog_title}'); ?></h2>
</div>
<div class="modal-body ssp-modal-body">
<div class="row text-center">
<form id="idpselectform" method="get" action="' . $this->data['urlpattern'] . '" class="ssp-form-favourite">
<input type="hidden" name="entityID" value="' . htmlspecialchars($this->data['entityID']) . '" />
<input type="hidden" name="return" value="' . htmlspecialchars($this->data['return']) . '" />
<input type="hidden" name="returnIDParam" value="' . htmlspecialchars($this->data['returnIDParam']) . '" />
<input type="hidden" name="idpentityid" value="' . htmlspecialchars($faventry['entityid']) . '" />
<input type="submit" name="formsubmit" id="favouritesubmit" class="ssp-btn ssp-btn__action text-uppercase" value="'
. $this->t('login_at') . ' ' . htmlspecialchars(getTranslatedName($this, $faventry)) . '" />
<form id="idpselectform" method="get" action="<?php print $this->data['urlpattern']; ?>" class="ssp-form-favourite">
<input type="hidden" name="entityID" value="<?php print htmlspecialchars($this->data['entityID']); ?>" />
<input type="hidden" name="return" value="<?php print htmlspecialchars($this->data['return']); ?>" />
<input type="hidden" name="returnIDParam" value="<?php print htmlspecialchars($this->data['returnIDParam']); ?>" />
<input type="hidden" name="idpentityid" value="<?php print htmlspecialchars($faventry['entityid']); ?>" />
<input type="submit"
name="formsubmit"
id="favouritesubmit"
class="ssp-btn ssp-btn__action text-uppercase"
value="<?php print $this->t('login_at') . htmlspecialchars(getTranslatedName($this, $faventry)); ?>" />
</form>
</div>
<div class="row text-center ssp-modal-or">' . $this->t('{themeegi:discopower:or}') . '</div>
<div class="row text-center ssp-modal-or"><?php print $this->t('{themeegi:discopower:or}'); ?></div>
<div class="row text-center">
<button class="ssp-btn text-uppercase ssp-btn ssp-btn__secondary js-close-custom">' . $this->t('{themeegi:discopower:favourite_dialog_button_close}') . '</button>
<button class="ssp-btn text-uppercase ssp-btn ssp-btn__secondary js-close-custom"><?php print $this->t('{themeegi:discopower:favourite_dialog_button_close}'); ?></button>
</div>
</div> <!-- /modal-body -->
</div> <!-- /modal-content -->
</div> <!-- /modal-dialog -->
</div> <!-- /modal -->
');
}
<?php endif; ?>
<?php
$idps_in_searchable_list_index;
$idps_with_logos_index;
......@@ -195,7 +187,7 @@ foreach( $this->data['idplist'] AS $tab => $slist) {
$list_items .= (showEntry($this, $idpentry));
}
}
echo($top . $search . $list_open . $list_items . $close);
print $top . $search . $list_open . $list_items . $close;
}
else if($tab == "idps_with_logos") {
$idps_with_logos_index = array_search($tab, array_keys($this->data['idplist']));
......@@ -218,11 +210,11 @@ foreach( $this->data['idplist'] AS $tab => $slist) {
$list_items .= '<p class="ssp-logos__help" id="js-open-help"><a href="#">' . $this->t('{themeegi:discopower:login_help_text}') .'</a></p>';
if($idps_in_searchable_list_index < $idps_with_logos_index) {
$or = '<div class="text-center ssp-line-or-line ssp-line-or-line--top"><span class="ssp-line-or-line__or">' . $this->t('{themeegi:discopower:or}') . '</span></div>';
echo $top . $or . $list_open . $list_items . $close_list . $close;
print $top . $or . $list_open . $list_items . $close_list . $close;
}
else {
$or = '<div class="text-center ssp-line-or-line ssp-line-or-line--bottom"><span class="ssp-line-or-line__or">' . $this->t('{themeegi:discopower:or}') . '</span></div>';
echo $top . $list_open . $list_items . $close_list . $or . $close;
print $top . $list_open . $list_items . $close_list . $or . $close;
}
}
}
......
simplesamlphp-module-themeegi
version egi-1.3.2
version egi-1.4.1
......@@ -35,9 +35,12 @@ $(document).ready(function() {
resizeAll();
// loader for discopower view
$('#loader').delay(300).fadeOut('slow', function() {
$('.loader-container').delay(300).fadeOut('slow', function() {
$('#favourite-modal').modal('show');
});
$("#yesbutton").on("click", function(){
$(".loader-container").show();
});
// hide modal smoothly
$('.js-close-custom').click(function() {
......
// Loader from https://loading.io/css/
//.loader-container {
// position: fixed;
// width: 100%;
// height: 100%;
// background: $white;
// z-index: 10;
// display: flex;
// align-items: center;
// justify-content: center;
//}
.redirect-box {
margin: auto;
height: auto;
display: flex;
flex-direction: column;
}
.comment {
padding: 1rem;
}
.lds-spinner {
display: inline-block;
position: relative;
margin: auto;
width: 80px;
height: 100px;
}
.lds-spinner div {
transform-origin: 40px 50px; /*Second parameter is the inner radius*/
animation: lds-spinner 1.2s linear infinite;
}
.lds-spinner div:after {
content: " ";
display: block;
position: absolute;
top: 3px;
left: 37px;
width: 7px;
height: 30px;
border-radius: 10%;
background: #9FC6E2;
}
.lds-spinner div:nth-child(1) {
transform: rotate(0deg);
animation-delay: -1.1s;
}
.lds-spinner div:nth-child(2) {
transform: rotate(30deg);
animation-delay: -1s;
}
.lds-spinner div:nth-child(3) {
transform: rotate(60deg);
animation-delay: -0.9s;
}
.lds-spinner div:nth-child(4) {
transform: rotate(90deg);
animation-delay: -0.8s;
}
.lds-spinner div:nth-child(5) {
transform: rotate(120deg);
animation-delay: -0.7s;
}
.lds-spinner div:nth-child(6) {
transform: rotate(150deg);
animation-delay: -0.6s;
}
.lds-spinner div:nth-child(7) {
transform: rotate(180deg);
animation-delay: -0.5s;
}
.lds-spinner div:nth-child(8) {
transform: rotate(210deg);
animation-delay: -0.4s;
}
.lds-spinner div:nth-child(9) {
transform: rotate(240deg);
animation-delay: -0.3s;
}
.lds-spinner div:nth-child(10) {
transform: rotate(270deg);
animation-delay: -0.2s;
}
.lds-spinner div:nth-child(11) {
transform: rotate(300deg);
animation-delay: -0.1s;
}
.lds-spinner div:nth-child(12) {
transform: rotate(330deg);
animation-delay: 0s;
}
@keyframes lds-spinner {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
......@@ -29,6 +29,21 @@ body {
flex-direction: column;
}
.loader-container {
position: fixed;
width: 100%;
height: 100%;
background: $white;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.ssp-container {
flex: 1;
margin-top: 12px;
......
// Loader from http://tobiasahlin.com/spinkit/
#loader {
position: absolute;
width: 100%;
height: 100%;
background: $white;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
}
//.loader-container {
// position: fixed;
// width: 100%;
// height: 100%;
// background: $white;
// z-index: 10;
// display: flex;
// align-items: center;
// justify-content: center;
//}
.sk-circle {
margin: 100px auto;
......
......@@ -4,4 +4,5 @@
@import "bootstrap-custom";
@import "extra";
@import "loader";
@import "cmg_loader";
@import "idps_buttons";
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment