Initial commit
This commit is contained in:
commit
a0c911299f
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# fyrkat theme for SimpleSamlPhp
|
||||
|
||||
Clone this repo to your modules directory
|
||||
|
||||
git clone https://github.com/fyrkat/ssp-theme.git themefyrkat
|
||||
|
||||
Make the following changes in your SSP setup:
|
||||
|
||||
## config/config.php
|
||||
|
||||
'module.enable' => [
|
||||
'themefyrkat' => TRUE,
|
||||
],
|
||||
|
||||
'theme.use' => 'themefyrkat:fyrkat',
|
3
default-disable
Normal file
3
default-disable
Normal file
@ -0,0 +1,3 @@
|
||||
This file indicates that the default state of this module
|
||||
is disabled. To enable, create a file named enable in the
|
||||
same directory as this file.
|
189
themes/fyrkat/core/loginuserpass.php
Normal file
189
themes/fyrkat/core/loginuserpass.php
Normal file
@ -0,0 +1,189 @@
|
||||
<!DOCTYPE html>
|
||||
<title><?php echo $this->t('{login:user_pass_header}'); ?></title>
|
||||
<link rel="stylesheet" href="<?php echo SimpleSAML_Module::getModuleURL('themefyrkat/normalize.css'); ?>" type="text/css">
|
||||
<link rel="stylesheet" href="<?php echo SimpleSAML_Module::getModuleURL('themefyrkat/fyrkat.css'); ?>" type="text/css">
|
||||
<link rel="stylesheet" href="<?php echo SimpleSAML_Module::getModuleURL('themefyrkat/auth.css'); ?>" type="text/css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<?php
|
||||
$this->data['header'] = $this->t('{login:user_pass_header}');
|
||||
|
||||
if (strlen($this->data['username']) > 0) {
|
||||
$this->data['autofocus'] = 'password';
|
||||
} else {
|
||||
$this->data['autofocus'] = 'username';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<form action="?" method="post" id="loginform">
|
||||
<h1><?php echo (isset($this->data['header']) ? $this->data['header'] : 'SimpleSAMLphp'); ?></h1>
|
||||
|
||||
<div class="inputstack">
|
||||
<p><input id="username"<?php echo ($this->data['forceUsername']) ? ' disabled="disabled"' : ''; ?> type="text" name="username" placeholder="<?php echo $this->t('{login:username}'); ?>" required
|
||||
<?php if (!$this->data['forceUsername']) {
|
||||
echo 'tabindex="1"';
|
||||
if (!$this->data['username']) {
|
||||
echo ' autofocus';
|
||||
}
|
||||
} ?> value="<?php echo htmlspecialchars($this->data['username']); ?>" onkeyup="setSubmit()">
|
||||
<p><input id="password" type="password" tabindex="2" name="password" placeholder="<?php echo $this->t('{login:password}'); ?>" required
|
||||
<?php if ($this->data['username']) {
|
||||
echo ' autofocus';
|
||||
} ?> onkeyup="setSubmit()">
|
||||
</div>
|
||||
<?php
|
||||
if ($this->data['rememberMeEnabled']) {
|
||||
// display the remember me checkbox (keep me logged in)
|
||||
?>
|
||||
<p><input type="checkbox" id="remember_me" tabindex="5"
|
||||
<?php echo ($this->data['rememberMeChecked']) ? 'checked="checked"' : ''; ?>
|
||||
name="remember_me" value="Yes"/>
|
||||
<small><?php echo $this->t('{login:remember_me}'); ?></small>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if ($this->data['rememberUsernameEnabled'] && !$this->data['forceUsername']) {
|
||||
// display the "remember my username" checkbox
|
||||
?>
|
||||
<p><input type="checkbox" id="remember_username" tabindex="4"
|
||||
<?php echo ($this->data['rememberUsernameChecked']) ? 'checked="checked"' : ''; ?>
|
||||
name="remember_username" value="Yes"/>
|
||||
<small><?php echo $this->t('{login:remember_username}'); ?></small>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if (array_key_exists('organizations', $this->data)) {
|
||||
?>
|
||||
<p><label for="organization"><?php echo $this->t('{login:organization}'); ?></label></p>
|
||||
<p><select name="organization" tabindex="3">
|
||||
<?php
|
||||
if (array_key_exists('selectedOrg', $this->data)) {
|
||||
$selectedOrg = $this->data['selectedOrg'];
|
||||
} else {
|
||||
$selectedOrg = null;
|
||||
}
|
||||
|
||||
foreach ($this->data['organizations'] as $orgId => $orgDesc) {
|
||||
if (is_array($orgDesc)) {
|
||||
$orgDesc = $this->t($orgDesc);
|
||||
}
|
||||
|
||||
if ($orgId === $selectedOrg) {
|
||||
$selected = 'selected="selected" ';
|
||||
} else {
|
||||
$selected = '';
|
||||
}
|
||||
|
||||
echo '<option '.$selected.'value="'.htmlspecialchars($orgId).'">'.htmlspecialchars($orgDesc).'</option>';
|
||||
}
|
||||
?>
|
||||
</select></p>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if ($this->data['errorcode'] !== null) {
|
||||
?>
|
||||
<p class="error"><?php
|
||||
echo htmlspecialchars($this->t(
|
||||
'{errors:title_'.$this->data['errorcode'].'}',
|
||||
$this->data['errorparams']
|
||||
)); ?></p>
|
||||
<?php
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<p><input id="submit" type="submit" value="<?php echo $this->t('{login:login_button}'); ?>" tabindex="6">
|
||||
<?php
|
||||
foreach ($this->data['stateparams'] as $name => $value) {
|
||||
echo('<input type="hidden" name="'.htmlspecialchars($name).'" value="'.htmlspecialchars($value).'" />');
|
||||
}
|
||||
?>
|
||||
</form>
|
||||
|
||||
<?php
|
||||
if (!empty($this->data['links'])) {
|
||||
echo '<ul style="margin-top: 2em">';
|
||||
foreach ($this->data['links'] as $l) {
|
||||
echo '<li><a href="'.htmlspecialchars($l['href']).'">'.htmlspecialchars($this->t($l['text'])).'</a></li>';
|
||||
}
|
||||
echo '</ul>';
|
||||
}
|
||||
?>
|
||||
<script src="<?php echo SimpleSAML_Module::getModuleURL('themefyrkat/scripts.js'); ?>" async></script>
|
||||
<?php return;
|
||||
|
||||
$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 '<ul id="languagebar">';
|
||||
$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) {
|
||||
$textarray[] = '<li>' . $langnames[$lang];
|
||||
} else {
|
||||
$textarray[] = '<li><a href="' . htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(\SimpleSAML\Utils\HTTP::getSelfURL(), array($this->languageParameterName => $lang))) . '">' .
|
||||
$langnames[$lang] . '</a>';
|
||||
}
|
||||
}
|
||||
echo join("\n", $textarray);
|
||||
echo '</ul>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
78
themes/fyrkat/default/error.php
Normal file
78
themes/fyrkat/default/error.php
Normal file
@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<title><?php echo $this->t($this->data['dictTitle']); ?></title>
|
||||
<link rel="stylesheet" href="<?php echo SimpleSAML_Module::getModuleURL('themefyrkat/fyrkat.css'); ?>" type="text/css">
|
||||
<?php
|
||||
$this->data['header'] = $this->t($this->data['dictTitle']);
|
||||
|
||||
$this->data['head'] = <<<EOF
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="googlebot" content="noarchive, nofollow" />
|
||||
EOF;
|
||||
|
||||
?>
|
||||
<h1><?php echo $this->t($this->data['dictTitle']); ?></h1>
|
||||
<div class="maintext">
|
||||
<?php
|
||||
echo htmlspecialchars($this->t($this->data['dictDescr'], $this->data['parameters']));
|
||||
|
||||
// include optional information for error
|
||||
if (isset($this->data['includeTemplate'])) {
|
||||
$this->includeAtTemplateBase($this->data['includeTemplate']);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="trackidtext">
|
||||
<p><?php echo $this->t('report_trackid'); ?></p>
|
||||
<div class="input-group" style="width: 1em;">
|
||||
<pre id="trackid" class="input-left"><?php echo $this->data['error']['trackId']; ?></pre>
|
||||
<button data-clipboard-target="#trackid" id="btntrackid" class="btnaddonright">
|
||||
<img src="/<?php echo $this->data['baseurlpath'].'resources/icons/clipboard.svg'; ?>"
|
||||
alt="Copy to clipboard">
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
// print out exception only if the exception is available
|
||||
if ($this->data['showerrors']) {
|
||||
?>
|
||||
<h2><?php echo $this->t('debuginfo_header'); ?></h2>
|
||||
<p><?php echo $this->t('debuginfo_text'); ?></p>
|
||||
|
||||
<div style="border: 1px solid #eee; padding: 1em; font-size: x-small">
|
||||
<p style="margin: 1px"><?php echo htmlspecialchars($this->data['error']['exceptionMsg']); ?></p>
|
||||
<pre style="padding: 1em; font-family: monospace;"><?php
|
||||
echo htmlspecialchars($this->data['error']['exceptionTrace']); ?></pre>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/* Add error report submit section if we have a valid technical contact. 'errorreportaddress' will only be set if
|
||||
* the technical contact email address has been set.
|
||||
*/
|
||||
if (isset($this->data['errorReportAddress'])) {
|
||||
?>
|
||||
<h2><?php echo $this->t('report_header'); ?></h2>
|
||||
<form action="<?php echo htmlspecialchars($this->data['errorReportAddress']); ?>" method="post">
|
||||
<p><?php echo $this->t('report_text'); ?></p>
|
||||
<p><?php echo $this->t('report_email'); ?>
|
||||
<input type="text" size="25" name="email" value="<?php echo htmlspecialchars($this->data['email']); ?>" />
|
||||
</p>
|
||||
<p>
|
||||
<textarea class="metadatabox" name="text" rows="6" style="width: 100%; padding: 0.5em;"><?php
|
||||
echo $this->t('report_explain'); ?></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<input type="hidden" name="reportId" value="<?php echo $this->data['error']['reportId']; ?>"/>
|
||||
<button type="submit" name="send" class="btn"><?php echo $this->t('report_submit'); ?></button>
|
||||
</p>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<h2 style="clear: both"><?php echo $this->t('howto_header'); ?></h2>
|
||||
<p><?php echo $this->t('howto_text'); ?></p>
|
||||
<script type="text/javascript">
|
||||
var clipboard = new Clipboard('#btntrackid');
|
||||
</script>
|
||||
<?php
|
||||
$this->includeAtTemplateBase('includes/footer.php');
|
11
themes/fyrkat/default/includes/footer.php
Normal file
11
themes/fyrkat/default/includes/footer.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
if(!empty($this->data['htmlinject']['htmlContentPost'])) {
|
||||
foreach($this->data['htmlinject']['htmlContentPost'] AS $c) {
|
||||
echo $c;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
189
themes/fyrkat/default/includes/header.php
Normal file
189
themes/fyrkat/default/includes/header.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Support the htmlinject hook, which allows modules to change header, pre and post body on all pages.
|
||||
*/
|
||||
$this->data['htmlinject'] = array(
|
||||
'htmlContentPre' => array(),
|
||||
'htmlContentPost' => array(),
|
||||
'htmlContentHead' => array(),
|
||||
);
|
||||
|
||||
|
||||
$jquery = array();
|
||||
if (array_key_exists('jquery', $this->data)) $jquery = $this->data['jquery'];
|
||||
|
||||
if (array_key_exists('pageid', $this->data)) {
|
||||
$hookinfo = array(
|
||||
'pre' => &$this->data['htmlinject']['htmlContentPre'],
|
||||
'post' => &$this->data['htmlinject']['htmlContentPost'],
|
||||
'head' => &$this->data['htmlinject']['htmlContentHead'],
|
||||
'jquery' => &$jquery,
|
||||
'page' => $this->data['pageid']
|
||||
);
|
||||
|
||||
SimpleSAML_Module::callHooks('htmlinject', $hookinfo);
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0" />
|
||||
<script type="text/javascript" src="/<?php echo $this->data['baseurlpath']; ?>resources/script.js"></script>
|
||||
<title><?php
|
||||
if(array_key_exists('header', $this->data)) {
|
||||
echo $this->data['header'];
|
||||
} else {
|
||||
echo 'SimpleSAMLphp';
|
||||
}
|
||||
?></title>
|
||||
|
||||
<!-- <link rel="stylesheet" type="text/css" href="/<?php echo $this->data['baseurlpath']; ?>resources/default.css" /> -->
|
||||
<link rel="icon" type="image/icon" href="/<?php echo $this->data['baseurlpath']; ?>resources/icons/favicon.ico" />
|
||||
|
||||
<?php
|
||||
|
||||
if(!empty($jquery)) {
|
||||
$version = '1.8';
|
||||
if (array_key_exists('version', $jquery))
|
||||
$version = $jquery['version'];
|
||||
|
||||
if ($version == '1.8') {
|
||||
if (isset($jquery['core']) && $jquery['core'])
|
||||
echo('<script type="text/javascript" src="/' . $this->data['baseurlpath'] . 'resources/jquery-1.8.js"></script>' . "\n");
|
||||
|
||||
if (isset($jquery['ui']) && $jquery['ui'])
|
||||
echo('<script type="text/javascript" src="/' . $this->data['baseurlpath'] . 'resources/jquery-ui-1.8.js"></script>' . "\n");
|
||||
|
||||
if (isset($jquery['css']) && $jquery['css'])
|
||||
echo('<link rel="stylesheet" media="screen" type="text/css" href="/' . $this->data['baseurlpath'] .
|
||||
'resources/uitheme1.8/jquery-ui.css" />' . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($this->data['clipboard.js'])) {
|
||||
echo '<script type="text/javascript" src="/'. $this->data['baseurlpath'] .
|
||||
'resources/clipboard.min.js"></script>'."\n";
|
||||
}
|
||||
|
||||
if(!empty($this->data['htmlinject']['htmlContentHead'])) {
|
||||
foreach($this->data['htmlinject']['htmlContentHead'] AS $c) {
|
||||
echo $c;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
|
||||
|
||||
<?php
|
||||
if(array_key_exists('head', $this->data)) {
|
||||
echo '<!-- head -->' . $this->data['head'] . '<!-- /head -->';
|
||||
}
|
||||
?>
|
||||
</head>
|
||||
<?php
|
||||
$onLoad = '';
|
||||
if(array_key_exists('autofocus', $this->data)) {
|
||||
$onLoad .= 'SimpleSAML_focus(\'' . $this->data['autofocus'] . '\');';
|
||||
}
|
||||
if (isset($this->data['onLoad'])) {
|
||||
$onLoad .= $this->data['onLoad'];
|
||||
}
|
||||
|
||||
if($onLoad !== '') {
|
||||
echo '<body onload="' . $onLoad . '">';
|
||||
}
|
||||
?>
|
||||
|
||||
<h1><a href="/<?php echo $this->data['baseurlpath']; ?>"><?php
|
||||
echo (isset($this->data['header']) ? $this->data['header'] : 'SimpleSAMLphp');
|
||||
?></a></h1>
|
||||
|
||||
|
||||
<?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 id="languagebar">';
|
||||
$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) {
|
||||
$textarray[] = $langnames[$lang];
|
||||
} else {
|
||||
$textarray[] = '<a href="' . htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(\SimpleSAML\Utils\HTTP::getSelfURL(), array($this->languageParameterName => $lang))) . '">' .
|
||||
$langnames[$lang] . '</a>';
|
||||
}
|
||||
}
|
||||
echo join(' | ', $textarray);
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
<main>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
if(!empty($this->data['htmlinject']['htmlContentPre'])) {
|
||||
foreach($this->data['htmlinject']['htmlContentPre'] AS $c) {
|
||||
echo $c;
|
||||
}
|
||||
}
|
51
www/auth.css
Normal file
51
www/auth.css
Normal file
@ -0,0 +1,51 @@
|
||||
body {
|
||||
background: #fafafa;
|
||||
}
|
||||
#loginform {
|
||||
text-align: center;
|
||||
/* background: #f8f8f8; */
|
||||
margin: 0 auto;
|
||||
width: 24em;
|
||||
padding: 2em 0 0 0;
|
||||
}
|
||||
#loginform h1 {
|
||||
background: url('fyrkat.svg') no-repeat 0 0;
|
||||
background-size: fill;
|
||||
padding-top: 18em;
|
||||
font-size: 1em;
|
||||
color: gray;
|
||||
|
||||
width: 18em;
|
||||
margin: 1em auto;
|
||||
}
|
||||
|
||||
|
||||
form .inputstack input {
|
||||
display: block;
|
||||
padding: .6rem;
|
||||
margin: 0 auto;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
form .inputstack p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
form .inputstack p input {
|
||||
border: .1em solid #aaa;
|
||||
border-top: none;
|
||||
width: 12.8rem;
|
||||
}
|
||||
form .inputstack p:first-child input {
|
||||
border-top: .1em solid #aaa;
|
||||
border-radius: .3em .3em 0 0;
|
||||
box-shadow: inset #eee 0 2px 0;
|
||||
}
|
||||
form .inputstack p:last-child input {
|
||||
border-radius: 0 0 .3em .3em;
|
||||
}
|
||||
#loginform input[type=submit] {
|
||||
width: 14rem;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
297
www/fyrkat.css
Normal file
297
www/fyrkat.css
Normal file
@ -0,0 +1,297 @@
|
||||
body {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
font-size: .8em;
|
||||
}
|
||||
h1, nav {
|
||||
color: gray;
|
||||
}
|
||||
.overview code:before, .overview span:before {
|
||||
content: attr(title) ':';
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
code, span {
|
||||
display: block;
|
||||
}
|
||||
main {
|
||||
margin-left: 20em;
|
||||
margin-right: 5em;
|
||||
min-height: 40em;
|
||||
}
|
||||
nav {
|
||||
background: url('fyrkat.svg') no-repeat 0 0;
|
||||
background-size: contain;
|
||||
position: absolute;
|
||||
width: 15em;
|
||||
padding-top: 14em;
|
||||
left: 2em;
|
||||
top: 2em;
|
||||
}
|
||||
nav ul {
|
||||
padding:0;
|
||||
}
|
||||
nav li {
|
||||
text-align: right;
|
||||
list-style: none;
|
||||
margin: .5em 0;
|
||||
}
|
||||
nav li a {
|
||||
padding: 1em;
|
||||
color: #257;
|
||||
display: block;
|
||||
border-radius: .2em;
|
||||
text-decoration: none;
|
||||
}
|
||||
nav li a:hover {
|
||||
background: #eee;
|
||||
}
|
||||
nav li a:active {
|
||||
background: #ddd;
|
||||
}
|
||||
nav li a.active {
|
||||
color: #fff;
|
||||
background: #257;
|
||||
}
|
||||
nav .current-user .username {
|
||||
display: block;
|
||||
margin-bottom: .3em;
|
||||
}
|
||||
nav .current-user {
|
||||
font-size: .9em;
|
||||
text-align: right;
|
||||
}
|
||||
nav .current-user .logout {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
background: #567;
|
||||
width: 6em;
|
||||
padding: .5em 0 .3em 0;
|
||||
border-radius: .3em;
|
||||
box-shadow: #345 0 2px 0;
|
||||
font-size: .9em;
|
||||
}
|
||||
nav .current-user .logout:active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
box-shadow: #345 0 1px 0;
|
||||
}
|
||||
form .error {
|
||||
color: #a66;
|
||||
font-weight: bold;
|
||||
}
|
||||
form .error {
|
||||
width: 18em;
|
||||
margin: 1em auto;
|
||||
}
|
||||
.trackidtext, .maintext { /* remove form */
|
||||
background: #fff;
|
||||
color: #000;
|
||||
padding: 3.1em 0 2.1em 0;
|
||||
}
|
||||
|
||||
.buttons label, .buttons a {
|
||||
cursor: pointer;
|
||||
background: #06a;
|
||||
box-shadow: 0 3px 0 #048;
|
||||
color: white;
|
||||
padding: .8em 2em;
|
||||
border-radius: .3em;
|
||||
text-decoration: none;
|
||||
}
|
||||
.buttons label:active, .buttons a:active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
box-shadow: 0 2px 0 #048;
|
||||
}
|
||||
.buttons {
|
||||
}
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
form input[type=submit] { /* remove explicit width, add padding */
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
border-radius: .3em;
|
||||
background: #084;
|
||||
color: #fff;
|
||||
box-shadow: #063 0 3px 0;
|
||||
padding: 1em 2.5em .8em 2.5em;
|
||||
}
|
||||
form input[type=submit].disabled, form input[type=submit].disabled:active {
|
||||
color: #ddd;
|
||||
background: #576;
|
||||
cursor: default;
|
||||
/* border-bottom: .2em solid #254 !important; */
|
||||
box-shadow: #254 0 3px 0;
|
||||
top: 0 !important;
|
||||
}
|
||||
form input[type=submit]:active, form input[type=submit].active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
box-shadow: #063 0 2px 0;
|
||||
}
|
||||
|
||||
.input-group input[type=radio] {
|
||||
display: none;
|
||||
}
|
||||
.input-group input[type=radio] ~ label, .input-group input[type=text], .input-group input[type=password] {
|
||||
width: 17em;
|
||||
}
|
||||
.input-group input[type=radio] ~ label, .input-group input[type=text], .input-group input[type=password], .input-group textarea, .image-well {
|
||||
border: 1px solid #abc;
|
||||
display: block;
|
||||
padding: 1em 1em .9em 1em;
|
||||
border-radius: .3em;
|
||||
}
|
||||
.biginput {
|
||||
border: none;
|
||||
font-size: 2em;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
.image-well, .image-well img {
|
||||
width: 10em;
|
||||
height: 10em;
|
||||
}
|
||||
.image-well {
|
||||
padding: 1em;
|
||||
}
|
||||
.input-group input[type=radio] ~ label {
|
||||
cursor: pointer;
|
||||
box-shadow: #f2f2f2 0 2px 0;
|
||||
}
|
||||
.input-group input[type=text], .input-group input[type=password], .input-group textarea, .image-well {
|
||||
margin-top: .3em;
|
||||
box-shadow: inset #f2f2f2 0 2px 0;
|
||||
}
|
||||
.input-group input[type=text]:focus, .input-group input[type=password]:focus, .input-group textarea:focus {
|
||||
box-shadow: rgba(166,202,240) 0 0 .5em, inset #f2f2f2 0 2px 0;
|
||||
}
|
||||
.input-group input[type=radio] ~ label:hover {
|
||||
border: 1px solid #567;
|
||||
box-shadow: #eee 0 2px 0;
|
||||
}
|
||||
.input-group input[type=radio] ~ label:active {
|
||||
background: #eee;
|
||||
box-shadow: #ddd 0 2px 0;
|
||||
}
|
||||
.input-group input[type=radio]:checked ~ label {
|
||||
background: #257;
|
||||
border: 1px solid #257;
|
||||
color: #fff;
|
||||
box-shadow: #134 0 2px 0;
|
||||
}
|
||||
|
||||
.btnaddonright img {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#languagebar {
|
||||
font-size: .7em;
|
||||
color: #aaa;
|
||||
}
|
||||
#languagebar li {
|
||||
display: inline;
|
||||
}
|
||||
#languagebar li:after {
|
||||
content: ' | ';
|
||||
}
|
||||
#languagebar li:last-child:after {
|
||||
content: '';
|
||||
}
|
||||
#languagebar a {
|
||||
color: #66a;
|
||||
}
|
||||
|
||||
.overview ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
border-collapse: separate;
|
||||
}
|
||||
.overview li {
|
||||
display: inline-block;
|
||||
width: 20em;
|
||||
margin-bottom: 1.5em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: 2px solid white;
|
||||
background: #fefefe;
|
||||
padding: .5em;
|
||||
border-radius: .3em;
|
||||
box-shadow: 0 0 0 1px #eee;
|
||||
}
|
||||
hr, footer {
|
||||
margin: 1em 2em 2em 2em;
|
||||
border: none;
|
||||
border-top: 1px solid #fafafa;
|
||||
}
|
||||
|
||||
@keyframes notification {
|
||||
0% { opacity: 0; display: block; }
|
||||
1% { opacity: 1; display: block; }
|
||||
70% { opacity: 1; display: block; }
|
||||
100% { opacity: 0; display: block; }
|
||||
}
|
||||
.hiding-notification {
|
||||
animation-name: notification;
|
||||
animation-duration: 30s;
|
||||
animation-iteration-count: 1;
|
||||
opacity: 0;
|
||||
}
|
||||
.notification-placeholder {
|
||||
border: .1em solid rgba(0,0,0,0);
|
||||
margin: 0 0 1em 0;
|
||||
padding: 0 1em 1em 1em;
|
||||
}
|
||||
.notification-placeholder:after {
|
||||
color: rgba(0,0,0,0);
|
||||
content: "x";
|
||||
}
|
||||
.info, .warning, .error, .complete {
|
||||
border: .1em solid #eee;
|
||||
border-radius: .3em;
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
div.info, div.warning, div.error, div.complete {
|
||||
padding: 0 1em 1em 1em;
|
||||
}
|
||||
p.info, p.warning, p.error, p.complete {
|
||||
padding: 1em;
|
||||
}
|
||||
.info {
|
||||
border-left: 6px solid #06a;
|
||||
}
|
||||
.complete {
|
||||
border-left: 6px solid #082;
|
||||
}
|
||||
.error {
|
||||
border-left: 6px solid #c02;
|
||||
}
|
||||
.warning {
|
||||
border-left: 6px solid #fa0;
|
||||
}
|
||||
|
||||
footer {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 2em;
|
||||
color: #557;
|
||||
margin-top: 2em;
|
||||
}
|
||||
footer a {
|
||||
color: #567;
|
||||
}
|
19
www/fyrkat.svg
Normal file
19
www/fyrkat.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg fill="#557" xmlns="http://www.w3.org/2000/svg" viewBox="-25 0 250 200" version="1.1">
|
||||
<defs>
|
||||
<mask id="mask" fill="white">
|
||||
<rect x="0" y="0" width="80" height="80"/>
|
||||
<rect x="120" y="0" width="80" height="80"/>
|
||||
<rect x="0" y="120" width="80" height="80"/>
|
||||
<rect x="120" y="120" width="80" height="80"/>
|
||||
</mask>
|
||||
</defs>
|
||||
<g transform="rotate(15 100 100)">
|
||||
<path d="
|
||||
M 199,100 A 99, 99 0 0 1 100,199 99, 99 0 0 1 1,100 99, 99 0 0 1 100, 1 99, 99 0 0 1 199,100 Z
|
||||
M 185,100 A 85, 85 0 0 1 100,185 85, 85 0 0 1 15,100 85, 85 0 0 1 100,15 85, 85 0 0 1 185,100 Z
|
||||
" fill-rule="evenodd" style="mask:url(#mask)" fill="#567"/>
|
||||
<path d="M 0,100 C 110,90 110,90 200,100 C 90,110 90,110 0,100 M 100,0 C 110,90 110,90 100,200 C 90,110 90,110 100,0"/>
|
||||
<path d="M175,100C100,100 100,100 100,25 C100,100 100,100 25,100 C100,100 100,100 100,175 C100,100 100,100 175,100Z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1015 B |
419
www/normalize.css
vendored
Normal file
419
www/normalize.css
vendored
Normal file
@ -0,0 +1,419 @@
|
||||
/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/**
|
||||
* 1. Change the default font family in all browsers (opinionated).
|
||||
* 2. Prevent adjustments of font size after orientation changes in IE and iOS.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the margin in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
* 1. Add the correct display in Edge, IE, and Firefox.
|
||||
* 2. Add the correct display in IE.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details, /* 1 */
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
main, /* 2 */
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary { /* 1 */
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in iOS 4-7.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10-.
|
||||
* 1. Add the correct display in IE.
|
||||
*/
|
||||
|
||||
template, /* 1 */
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove the gray background on active links in IE 10.
|
||||
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent; /* 1 */
|
||||
-webkit-text-decoration-skip: objects; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the outline on focused links when they are also active or hovered
|
||||
* in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Firefox 39-.
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font style in Android 4.3-.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the font size and margin on `h1` elements within `section` and
|
||||
* `article` contexts in Chrome, Firefox, and Safari.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct background and color in IE 9-.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||
* all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the border on images inside links in IE 10-.
|
||||
*/
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the overflow in IE.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct margin in IE 8.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change font properties to `inherit` in all browsers (opinionated).
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font: inherit; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the font weight unset by the previous rule.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
|
||||
* controls in Android 4.
|
||||
* 2. Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
html [type="button"], /* 1 */
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner border and padding in Firefox.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the focus styles unset by the previous rule.
|
||||
*/
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the border, margin, and padding in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the text wrapping in Edge and IE.
|
||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||
* 3. Remove the padding so developers are not caught out when they zero out
|
||||
* `fieldset` elements in all browsers.
|
||||
*/
|
||||
|
||||
legend {
|
||||
box-sizing: border-box; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in IE 10-.
|
||||
* 2. Remove the padding in IE 10-.
|
||||
*/
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||
*/
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the odd appearance in Chrome and Safari.
|
||||
* 2. Correct the outline style in Safari.
|
||||
*/
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
outline-offset: -2px; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner padding and cancel buttons in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the text style of placeholders in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
::-webkit-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: 0.54;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||
* 2. Change font properties to `inherit` in Safari.
|
||||
*/
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
}
|
46
www/scripts.js
Normal file
46
www/scripts.js
Normal file
@ -0,0 +1,46 @@
|
||||
// @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD 3 Clause
|
||||
|
||||
function checkSubmit() {
|
||||
try {
|
||||
var u = document.getElementById('username');
|
||||
var p = document.getElementById('password');
|
||||
if (!u.value) {
|
||||
u.focus();
|
||||
return false;
|
||||
}
|
||||
if (!p.value) {
|
||||
p.focus();
|
||||
return false;
|
||||
}
|
||||
var s = document.getElementById('submit');
|
||||
s.setAttribute('class', 'active');
|
||||
setTimeout(function(){
|
||||
s.removeAttribute('class');
|
||||
}, 250);
|
||||
} catch (e) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function setSubmit() {
|
||||
try {
|
||||
var u = document.getElementById('username');
|
||||
var p = document.getElementById('password');
|
||||
var s = document.getElementById('submit');
|
||||
if (u.value && p.value) {
|
||||
s.removeAttribute('class');
|
||||
} else {
|
||||
s.setAttribute('class', 'disabled');
|
||||
}
|
||||
} catch (e) {
|
||||
s.removeAttribute('class');
|
||||
}
|
||||
}
|
||||
document.getElementById('loginform').onsubmit = checkSubmit;
|
||||
document.getElementById('username').onsubmit = setSubmit;
|
||||
document.getElementById('password').onsubmit = setSubmit;
|
||||
setSubmit();
|
||||
|
||||
document.getElementById('username').removeAttribute('required');
|
||||
document.getElementById('password').removeAttribute('required');
|
||||
|
||||
// @license-end
|
Loading…
Reference in New Issue
Block a user