kcc-gem-theme 2.11.1 → 2.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/hash/theme_hash.yml +1 -1
- data/assets/js/alerts/addAccordionOrTabHistoryStates.js +1 -1
- data/assets/js/alerts/alerts.js +36 -7
- data/assets/js/alerts/cacheResponse.js +3 -3
- data/assets/js/alerts/checkForAccordionOrTab.js +1 -1
- data/assets/js/alerts/checkForPrefersReducedMotion.js +1 -1
- data/assets/js/alerts/contentHashLink.js +5 -5
- data/assets/js/alerts/createAlertsHtml.js +41 -15
- data/assets/js/alerts/fetchNewAlert.js +33 -0
- data/assets/js/alerts/getCachedResponse.js +7 -13
- data/assets/js/alerts/refreshAlertButton.js +37 -0
- data/assets/js/dist/243.bundle.js +1 -0
- data/assets/js/dist/528.bundle.js +1 -0
- data/assets/js/dist/{618.eb877787e2886ec50c13.css → 618.c28b5f95745c3ae51033.css} +0 -0
- data/assets/js/dist/{647.eb877787e2886ec50c13.css → 647.c28b5f95745c3ae51033.css} +0 -0
- data/assets/js/dist/853.bundle.js +1 -0
- data/assets/js/dist/859.bundle.js +1 -0
- data/assets/js/dist/87.c28b5f95745c3ae51033.css +2 -0
- data/assets/js/dist/alerts.bundle.js +1 -1
- data/assets/js/dist/contentHashLink.bundle.js +1 -1
- data/assets/js/dist/kcc-theme.bundle.js +1 -1
- data/assets/js/dist/kcc-theme.c28b5f95745c3ae51033.css +2 -0
- data/assets/js/dist/{translate.eb877787e2886ec50c13.css → translate.c28b5f95745c3ae51033.css} +0 -0
- data/assets/scss/0-tools/_bootstrap-overrides.scss +18 -0
- data/assets/scss/0-tools/_vars.scss +13 -1
- data/assets/scss/1-base/_buttons.scss +59 -0
- data/assets/scss/1-base/_svg.scss +12 -0
- data/assets/scss/1-base/_typography.scss +6 -5
- data/assets/scss/2-modules/_dark-mode.scss +27 -0
- data/assets/scss/2-modules/_loader.scss +16 -0
- metadata +13 -8
- data/assets/js/alerts/campusAlertsSheetsAPI.js +0 -50
- data/assets/js/dist/87.eb877787e2886ec50c13.css +0 -2
- data/assets/js/dist/kcc-theme.eb877787e2886ec50c13.css +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c9fe676b5ed8a981d3a0d1bdc797b8994c924f0a2048e414b180bfb4a5abcf3
|
4
|
+
data.tar.gz: 0f4fe47cf73ba8e105e542f6eddaa5f2e2f432a56e3230807f926c82a5d16f26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 196a29b0e803963cd0ca72a70fda0d566b5e97a3b9e5d6c8a52f379c5aea8f1b8cc6e0b0084cb83b8eb2eca8c31a76cde7576697f3636aba96d3e7967ea35ebf
|
7
|
+
data.tar.gz: 5e71a0d2c3465fcc22bd284d838c98f09ea2c9a93eeba0289e46c10579f81ab0fe8e686ad61854d0ef96c1ed400ca609811ed3d8f5c7829bcf55c326fb9e676f
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
c28b5f95745c3ae51033
|
data/assets/js/alerts/alerts.js
CHANGED
@@ -2,10 +2,23 @@
|
|
2
2
|
// Custom JS | written by https://github.com/wdzajicek
|
3
3
|
// © 2020 Kankakee Community College
|
4
4
|
// =================================================== */
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import
|
5
|
+
import createAlertsHtml from './createAlertsHtml';
|
6
|
+
import cacheResponse from './cacheResponse';
|
7
|
+
import getCachedResponse from './getCachedResponse';
|
8
|
+
import checkForPrefersReducedMotion from './checkForPrefersReducedMotion';
|
9
|
+
|
10
|
+
const SHEET_KEY = '1plXBiZY5pVbhNT-mszxEuqCl4zy8wMnz9gXXbbT_yLs'; // Corresponds to the ID of the Google Sheet
|
11
|
+
const SHEET_TAB = 'Alerts'; // Corresponds to the tab of workbook: either 'Alerts' or 'Alerts Testing' unless you make a new one.
|
12
|
+
const EMERGENCY_ALERT_DIV_ID = 'emergencyAlerts'
|
13
|
+
const SHEET_PARAMS = {spreadsheetId: SHEET_KEY, range: SHEET_TAB}; // Configures the Object used for `sheets.spreadsheets.values.get()` parameters
|
14
|
+
const API_PARAMS = { // This is configuration for API call with spreadsheets that are setup as readonly
|
15
|
+
'apiKey': 'AIzaSyCEBsbXfFcdbkASlg-PodD1rT_Fe3Nw62A',
|
16
|
+
'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest']
|
17
|
+
};
|
18
|
+
|
19
|
+
function loadModule(module) {
|
20
|
+
import(`./${module}`).then(({default: module}) => module())
|
21
|
+
}
|
9
22
|
|
10
23
|
document.addEventListener('DOMContentLoaded', () => {
|
11
24
|
checkForPrefersReducedMotion();
|
@@ -13,7 +26,23 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
13
26
|
if (!document.getElementById('emergencyAlerts'))
|
14
27
|
return checkForAccordionOrTab()
|
15
28
|
|
16
|
-
|
17
|
-
|
18
|
-
|
29
|
+
new Promise((resolve, reject) => { // First build the alert, whether by cache or API call
|
30
|
+
if (! window.sessionStorage.getItem('Alert-Content')) { // If cache exists there will be an `Alert-Content` key in `sessionStorage` (which gets set in `./cacheResponse.js`)
|
31
|
+
gapi.load('client', () => {
|
32
|
+
gapi.client.init(API_PARAMS).then(() => {
|
33
|
+
return gapi.client.sheets.spreadsheets.values.get(SHEET_PARAMS);
|
34
|
+
}).then(response => {
|
35
|
+
createAlertsHtml(response, resolve) // Promise is resolved after HTML alert is built
|
36
|
+
return response;
|
37
|
+
}).then(response => {
|
38
|
+
cacheResponse(response);
|
39
|
+
}, err => {
|
40
|
+
console.error("Error trying to fetch the alert from gapi:", err);
|
41
|
+
})
|
42
|
+
});
|
43
|
+
} else {
|
44
|
+
getCachedResponse(resolve); // Promise is resolved after HTML alert is built
|
45
|
+
}
|
46
|
+
}).then(() => loadModule('checkForAccordionOrTab')) // Run accordion/tab JS, which includes a `scrollTo()`, after alert has painted
|
47
|
+
.then(() => loadModule('refreshAlertButton')) // Allow user to refresh the alert (and check for changes/updates)
|
19
48
|
});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
// Custom JS | written by https://github.com/wdzajicek
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek for,
|
3
3
|
// © 2020 Kankakee Community College
|
4
4
|
// =================================================== */
|
5
5
|
// Modules' default function stores our Google Sheet response in sessionStorage to be retrieved later
|
@@ -15,9 +15,9 @@ function cacheResponse(response) { // response from Google API's spreadsheet.val
|
|
15
15
|
const cell = TABLE_BODY_ROW[i];
|
16
16
|
const column = TABLE_HEADER_ROW[i];
|
17
17
|
|
18
|
-
window.sessionStorage.setItem(column.replace(
|
18
|
+
window.sessionStorage.setItem(column.replace(/\s/g, '-'), cell);
|
19
19
|
}
|
20
20
|
//window.sessionStorage.clear();
|
21
21
|
}
|
22
22
|
|
23
|
-
export default cacheResponse;
|
23
|
+
export default cacheResponse;
|
@@ -57,9 +57,9 @@ function checkForMatchingTabOrAccordion(hash) {
|
|
57
57
|
.on('shown.bs.tab', () => { // Bootstrap 4 method for tab events // Must be defined before the tab is activated
|
58
58
|
window.location.search ?
|
59
59
|
checkForQuery(window.location.search.replace(queryStartRegex, ''), hash)
|
60
|
-
:
|
60
|
+
: findContentTarget(`${hash}-label`); // You need to .scrollIntoView() & .focus() on the tab-label which is an <a href="...">. It won't work to do .scrollIntoView() and .focus() on the div
|
61
|
+
})
|
61
62
|
.tab('show'); // Bootstrap 4 Tab method
|
62
|
-
findContentTarget(`${hash}-label`); // You need to .scrollIntoView() & .focus() on the tab-label which is an <a href="...">. It won't work to do .scrollIntoView() and .focus() on the div
|
63
63
|
} else if ( document.querySelector(`${hash}.collapse`) ) { // Looks for a matching BS4 collapse element
|
64
64
|
let card = $(hash); // **SIGH**, BS4 requires JQuery
|
65
65
|
|
@@ -67,9 +67,9 @@ function checkForMatchingTabOrAccordion(hash) {
|
|
67
67
|
.on('shown.bs.collapse', () => { // Bootstrap 4 Collapse method // Must be defined before the collapse is activated
|
68
68
|
window.location.search ?
|
69
69
|
checkForQuery(window.location.search.replace(queryStartRegex, ''), hash)
|
70
|
-
:
|
70
|
+
: findContentTarget(`button[data-target="${hash}"]`);
|
71
|
+
})
|
71
72
|
.collapse('show'); // Bootstrap 4 Collapse method
|
72
|
-
findContentTarget(`button[data-target="${hash}"]`);
|
73
73
|
}
|
74
74
|
}
|
75
75
|
|
@@ -98,4 +98,4 @@ function contentHashLink() {
|
|
98
98
|
});
|
99
99
|
}
|
100
100
|
|
101
|
-
export default contentHashLink;
|
101
|
+
export default contentHashLink;
|
@@ -6,43 +6,69 @@
|
|
6
6
|
//
|
7
7
|
// This exported module requires you pass it's default-function the `response` object from the API call, as the only argument
|
8
8
|
//
|
9
|
-
import checkForAccordionOrTab from './checkForAccordionOrTab.js';
|
10
9
|
import parseMarkdownToHTML from './parseMarkdownToHTML.js'; // Parses a simplified markdown into html & creates the paragraph el's with appropriate class
|
11
10
|
//
|
12
11
|
const CAMPUS_ALERTS_DIV_ID_STRING = 'emergencyAlerts'; // ID of the div to house campus alerts - already built into the page.
|
13
12
|
const ALERTS_VISIBLE_CLASS = 'position__offset-alert--visible';
|
13
|
+
const TARGET = document.getElementById(CAMPUS_ALERTS_DIV_ID_STRING); // This targets an element built into the DOM that we inject everything into.
|
14
14
|
|
15
|
-
function injectAlert(target, alert) {
|
15
|
+
function injectAlert(target, alert, resolve) {
|
16
16
|
target.innerHTML = alert;
|
17
|
-
|
17
|
+
target.classList.add(ALERTS_VISIBLE_CLASS);
|
18
|
+
return resolve != undefined ? resolve() : null;
|
18
19
|
}
|
19
20
|
|
20
|
-
function
|
21
|
-
|
21
|
+
function checkAlertType(type) {
|
22
|
+
return type == 'SCHOOL EMERGENCY/CLOSURE - red' ? 'danger'
|
23
|
+
: type == 'SCHOOL INFO - blue' ? 'primary'
|
24
|
+
: type == 'SCHOOL INFO - cyan' ? 'info'
|
25
|
+
: 'warning';
|
26
|
+
}
|
22
27
|
|
23
|
-
|
24
|
-
|
28
|
+
function createAlertsHtml(response, resolve) { // Incoming response from our Google Sheet via the Sheets API
|
29
|
+
let [visibility, allPages, content, expire, start, end, type] = response.result.values[2]; // The 3rd row has our table's data
|
30
|
+
if (visibility === 'FALSE') // Predefined dropdown options in the Sheet are `'TRUE'` & `'FALSE'`
|
31
|
+
return;
|
25
32
|
|
26
|
-
const
|
27
|
-
|
28
|
-
|
29
|
-
|
33
|
+
const d = new Date;
|
34
|
+
const s = new Date(start);
|
35
|
+
const e = new Date(end);
|
36
|
+
const alertTypeClass = checkAlertType(type);
|
37
|
+
const alertType = checkAlertType(type);
|
30
38
|
const alertIsActive = expire === 'FALSE' || expire === 'TRUE' && s.getTime() <= d.getTime() && e.getTime() > d.getTime();
|
31
39
|
const indexPageOnly = allPages === 'TRUE' || allPages === 'FALSE' && window.location.pathname == '/';
|
32
40
|
let alert = `
|
33
41
|
<div class="container">
|
34
42
|
<div class="row">
|
35
43
|
<div class="col">
|
36
|
-
<div class="alert alert-
|
37
|
-
|
44
|
+
<div role="alert" class="alert alert-${alertType} d-lg-flex align-items-center pr-lg-1">
|
45
|
+
<div class="typography__last-p--mb0">
|
46
|
+
${parseMarkdownToHTML(content)}
|
47
|
+
</div>
|
48
|
+
<button
|
49
|
+
aria-label="Refresh the alert"
|
50
|
+
title="Refresh the alert"
|
51
|
+
id="syncAlert"
|
52
|
+
type="button"
|
53
|
+
class="btn btn-link buttons--sync ml-auto">
|
54
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
55
|
+
class="svg__sync"
|
56
|
+
height="24px"
|
57
|
+
width="24px"
|
58
|
+
viewBox="0 0 24 24">
|
59
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
60
|
+
<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20
|
61
|
+
12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0
|
62
|
+
4.42 3.58 8 8 8v3l4-4-4-4v3z"/>
|
63
|
+
</svg>
|
64
|
+
</button>
|
38
65
|
</div>
|
39
66
|
</div>
|
40
67
|
</div>
|
41
68
|
</div>`;
|
42
69
|
|
43
70
|
[d,s,e].map(d => d.setHours(0, 0, 0, 0));
|
44
|
-
alertIsActive && indexPageOnly ? injectAlert(TARGET, alert) : null;
|
45
|
-
return checkForAccordionOrTab();
|
71
|
+
alertIsActive && indexPageOnly ? injectAlert(TARGET, alert, resolve) : null;
|
46
72
|
}
|
47
73
|
|
48
74
|
export default createAlertsHtml;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Custom JS to make a Google API call to the alerts spreadsheet
|
2
|
+
// Then paint the alert into the DOM using module `./createAlertsHtml.js`
|
3
|
+
//
|
4
|
+
const SHEET_KEY = '1plXBiZY5pVbhNT-mszxEuqCl4zy8wMnz9gXXbbT_yLs'; // Corresponds to the ID of the Google Sheet
|
5
|
+
const SHEET_TAB = 'Alerts'; // Corresponds to the tab of workbook: either 'Alerts' or 'Alerts Testing' unless you make a new one.
|
6
|
+
const EMERGENCY_ALERT_DIV_ID = 'emergencyAlerts'
|
7
|
+
const SHEET_PARAMS = {spreadsheetId: SHEET_KEY, range: SHEET_TAB}; // Configures the Object used for `sheets.spreadsheets.values.get()` parameters
|
8
|
+
const API_PARAMS = { // This is configuration for API call with spreadsheets that are setup as readonly
|
9
|
+
'apiKey': 'AIzaSyCEBsbXfFcdbkASlg-PodD1rT_Fe3Nw62A',
|
10
|
+
'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest']
|
11
|
+
};
|
12
|
+
|
13
|
+
function fetchNewAlert() {
|
14
|
+
gapi.client.init(API_PARAMS).then(() => {
|
15
|
+
return gapi.client.sheets.spreadsheets.values.get(SHEET_PARAMS); // Get the new values from the spreadsheet
|
16
|
+
}).then(response => {
|
17
|
+
import('./createAlertsHtml').then(({default: createAlertsHtml}) => {
|
18
|
+
// Since everything in the page has already loaded, `createAlertsHtml()` can be lazily loaded w/ ES6 import()
|
19
|
+
// createAlertsHtml expects 2 args: 1.) `response` object and 2.) either `resolve()` (from `./alert.js`) or `undefined`
|
20
|
+
createAlertsHtml(response, undefined); // We don't need to resolve a promise this time so use `undefined` as 2nd arg
|
21
|
+
});
|
22
|
+
return response;
|
23
|
+
}).then(response => {
|
24
|
+
import('./cacheResponse').then(({default: cacheResponse}) => {
|
25
|
+
// Lazy load cacheResponse() using ES6 imports() w/ Webpack 5
|
26
|
+
cacheResponse(response);
|
27
|
+
})
|
28
|
+
}, err => {
|
29
|
+
console.error('Error fetching new alert from gapi:', err);
|
30
|
+
});
|
31
|
+
}
|
32
|
+
|
33
|
+
export default fetchNewAlert;
|
@@ -8,16 +8,10 @@
|
|
8
8
|
// 2. Then we pass our mock-sheet response object to the `createAlertsHtml` module to
|
9
9
|
// build and inject the alert into the DOM.
|
10
10
|
import createAlertsHtml from './createAlertsHtml.js';
|
11
|
-
import checkForAccordionOrTab from './checkForAccordionOrTab.js';
|
12
11
|
|
13
12
|
const cache = window.sessionStorage;
|
14
13
|
|
15
|
-
function
|
16
|
-
createAlertsHtml(response);
|
17
|
-
return callback();
|
18
|
-
}
|
19
|
-
|
20
|
-
function createCachedResponseObject() {
|
14
|
+
function createCachedResponseObject(resolve) {
|
21
15
|
let cachedResponse = { // Reconstructing our own Google Sheet-like response from the sessionStorage items
|
22
16
|
result: {
|
23
17
|
values: [
|
@@ -29,21 +23,21 @@ function createCachedResponseObject() {
|
|
29
23
|
cache.getItem('Alert-Content'),
|
30
24
|
cache.getItem('Alert-Expiration'),
|
31
25
|
cache.Start,
|
32
|
-
cache.End
|
26
|
+
cache.End,
|
27
|
+
cache.getItem('Alert-type/Color-scheme')
|
33
28
|
]
|
34
29
|
]
|
35
30
|
}
|
36
31
|
}
|
37
|
-
|
32
|
+
createAlertsHtml(cachedResponse, resolve);
|
38
33
|
}
|
39
34
|
|
40
|
-
function getCachedResponse() {
|
35
|
+
function getCachedResponse(resolve) {
|
41
36
|
try {
|
42
|
-
createCachedResponseObject();
|
37
|
+
createCachedResponseObject(resolve);
|
43
38
|
} catch (error) {
|
44
|
-
checkForAccordionOrTab();
|
45
39
|
console.error(`Error retrieving cached response in sessionStorage:\nName: ${error.name}\nMessage: ${error.message}\n${error}`);
|
46
40
|
}
|
47
41
|
}
|
48
42
|
|
49
|
-
export default getCachedResponse;
|
43
|
+
export default getCachedResponse;
|
@@ -0,0 +1,37 @@
|
|
1
|
+
// Custom JS to give functionality to the "Refresh the alert" button
|
2
|
+
// Button HTML is build into DOM by ./alert.js
|
3
|
+
// Styling is located in /assets/scss/{ _buttons, _loader, _svg}.scss
|
4
|
+
const BUTTON = document.getElementById('syncAlert');
|
5
|
+
|
6
|
+
function syncHandler(e) {
|
7
|
+
const SVG = BUTTON.querySelector('.svg__sync');
|
8
|
+
|
9
|
+
Promise.resolve()
|
10
|
+
.then(() => {
|
11
|
+
BUTTON.classList.add('buttons--sync--visible');
|
12
|
+
SVG.classList.add('loader__sync--animate');
|
13
|
+
}).then(() => {
|
14
|
+
// Add a short delay before fetching the new alert
|
15
|
+
window.setTimeout(() => { // (alert fetches too fast for the loading animation without this delay)
|
16
|
+
import('./fetchNewAlert').then(({default: fetchNewAlert}) => {
|
17
|
+
gapi.load('client', fetchNewAlert); // Runs a new call to gapi and repaints the alert HTML
|
18
|
+
});
|
19
|
+
}, 1000);
|
20
|
+
})
|
21
|
+
}
|
22
|
+
|
23
|
+
function showButtonOnInitialLoad(button) {
|
24
|
+
button.classList.add('buttons--sync--preview'); // This class has an animation that shows the button for 3-sec.
|
25
|
+
window.setTimeout(() => {
|
26
|
+
button.classList.remove('buttons--sync--preview'); // Remove the class after enough time for animations has elapsed
|
27
|
+
}, 3000);
|
28
|
+
}
|
29
|
+
|
30
|
+
function refreshAlertButton() {
|
31
|
+
window.setTimeout(() => { // Short delay before showing the refresh button
|
32
|
+
showButtonOnInitialLoad(BUTTON);
|
33
|
+
}, 500);
|
34
|
+
BUTTON.addEventListener('click', syncHandler);
|
35
|
+
}
|
36
|
+
|
37
|
+
export default refreshAlertButton;
|
@@ -0,0 +1 @@
|
|
1
|
+
(self.webpackChunkkcc_gem_theme=self.webpackChunkkcc_gem_theme||[]).push([[243],{9243:function(e,n,c){"use strict";function t(){(document.querySelector("#accordion")||document.querySelector(".navTabs"))&&c.e(663).then(c.bind(c,9640)).then((function(e){(0,e.default)()}))}c.r(n),c.d(n,{default:function(){return t}}),c(6992),c(1539),c(8674),c(8783),c(3948)}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
(self.webpackChunkkcc_gem_theme=self.webpackChunkkcc_gem_theme||[]).push([[528],{6528:function(e,c,t){"use strict";t.r(c),c.default=function(e,c){var t,n={};return n.spreadsheetId=e,t=c,n.range=t,n}}}]);
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
(self.webpackChunkkcc_gem_theme=self.webpackChunkkcc_gem_theme||[]).push([[853],{2853:function(e,t,n){"use strict";n.r(t),n(1539),n(8674),n(6992),n(8783),n(3948);var s=document.getElementById("syncAlert");function c(e){var t=s.querySelector(".svg__sync");Promise.resolve().then((function(){s.classList.add("buttons--sync--visible"),t.classList.add("loader__sync--animate")})).then((function(){window.setTimeout((function(){n.e(859).then(n.bind(n,6859)).then((function(e){var t=e.default;gapi.load("client",t)}))}),1e3)}))}t.default=function(){window.setTimeout((function(){var e;(e=s).classList.add("buttons--sync--preview"),window.setTimeout((function(){e.classList.remove("buttons--sync--preview")}),3e3)}),500),s.addEventListener("click",c)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
(self.webpackChunkkcc_gem_theme=self.webpackChunkkcc_gem_theme||[]).push([[859],{6859:function(e,t,n){"use strict";n.r(t),n(6992),n(1539),n(3948),n(8674),n(8783);var s={spreadsheetId:"1plXBiZY5pVbhNT-mszxEuqCl4zy8wMnz9gXXbbT_yLs",range:"Alerts"},i={apiKey:"AIzaSyCEBsbXfFcdbkASlg-PodD1rT_Fe3Nw62A",discoveryDocs:["https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest"]};t.default=function(){gapi.client.init(i).then((function(){return gapi.client.sheets.spreadsheets.values.get(s)})).then((function(e){return Promise.resolve().then(n.bind(n,3169)).then((function(t){(0,t.default)(e,void 0)})),e})).then((function(e){Promise.resolve().then(n.bind(n,6525)).then((function(t){(0,t.default)(e)}))}),(function(e){console.error("Error fetching new alert from gapi:",e)}))}}}]);
|
@@ -0,0 +1,2 @@
|
|
1
|
+
.dark-mode body{background-color:#191f25}.dark-mode{background-color:#191f25}.dark-mode p,.dark-mode ol,.dark-mode ul:not(.navbar-nav),.dark-mode .typography__h2,.dark-mode .typography__h5,.dark-mode .typography__h6,.dark-mode .typography__contacts--title{color:#7e848f}.dark-mode .typography__h4{color:#e46181}.dark-mode .accordion__typography--card-header .btn-link,.dark-mode .typography__h3,.dark-mode .typography__header-global--nav-top,.dark-mode .typography__contacts--name{color:#9bb7dd}.dark-mode .typography__h5--description{color:#7e848f}.dark-mode .typography__h5--oswald{color:#9a9faa}.dark-mode .footer-icons,.dark-mode .buttons__action,.dark-mode .header-global,.dark-mode iframe[title="calendar"],.dark-mode .hero-slider__slider,.dark-mode #emergencyAlerts{filter:brightness(0.75)}.dark-mode .buttons__action{border-color:rgba(255,255,255,0.65)}.dark-mode .buttons__action:hover{background-color:#002348;border-color:rgba(255,255,255,0.4)}.dark-mode footer{background-color:#14191d;border-top-color:rgba(255,255,255,0.5);border-top-width:1px;border-top-style:solid}.dark-mode .breadcrumbs{border-bottom-color:rgba(255,255,255,0.5)}.dark-mode .background__color--tan{background-color:#1e1b15}.dark-mode .benefits__background-color{background-color:#1c282c}.dark-mode .news__h3{color:#abaeb3}.dark-mode .header-global .dropdown-menu{background-color:#151a1e}.dark-mode .header-global .dropdown-menu .dropdown-item{color:#ccc}.dark-mode .header-global .dropdown-menu .dropdown-item:hover,.dark-mode .header-global .dropdown-menu .dropdown-item:focus{background-color:#000;color:#efefef}.dark-mode .benefits__typography--img-cap{color:#abaeb3}.dark-mode .news__li{border-bottom-color:#abaeb3}.dark-mode .svg--fill-blue{stroke:#abaeb3}.dark-mode .svg__fill--blue{fill:#abaeb3}.dark-mode .benefits__borders--circle-img{border-color:#000;filter:drop-shadow(5px 5px 12px rgba(0,0,0,0.5)) brightness(0.75)}.dark-mode .news__span{box-shadow:inset 0 0 0 1.4px #7e848f}.dark-mode .news__div--img{border:solid thin #ccc;filter:brightness(0.75)}.dark-mode .btn-primary{background-color:#002348;border-color:#8db2e5}.dark-mode .btn-primary:hover{background-color:#8db2e5;color:#002348 !important}.dark-mode .alert-warning{background-color:#664d03;border-color:#fff3cd}.dark-mode .alert-warning p{color:#fff3cd}.dark-mode .alert-primary{background-color:#003670;border-color:#cce5ff}.dark-mode .alert-primary p{color:#cce5ff}.dark-mode .alert-info{background-color:#0a4752;border-color:#d1ecf1}.dark-mode .alert-info p{color:#d1ecf1}.dark-mode .alert-danger{background-color:#461116;border-color:#f8d7da}.dark-mode .alert-danger p{color:#f8d7da}.dark-mode a:not(.nav-link),.dark-mode .links__darker-link{color:#8db2e5}.dark-mode a:not(.btn):hover,.dark-mode .links__darker-link:hover{color:#bfd7f9}.dark-mode iframe[title="calendar"]{filter:contrast(0.5)}.dark-mode .header-global__nav-top{background-color:#002348}.dark-mode .header-global__nav-bottom{background-color:#80132e}.dark-mode .buttons__action{color:#fff !important;background-color:#80132e}.dark-mode img{filter:brightness(0.75)}.dark-mode .card{background-color:#151a1c;border-color:rgba(255,255,255,0.4)}.dark-mode .card-body{background-color:#192125}.dark-mode .accordion>.card>.card-header{margin-bottom:0;border-bottom-color:rgba(255,255,255,0.125)}.dark-mode .accordion__button::before{border-style:solid;border-color:rgba(255,255,255,0.25);border-width:thin}.dark-mode .nav-tabs .nav-link{border-left-color:rgba(255,255,255,0.325);border-right-color:rgba(255,255,255,0.325);border-top-color:rgba(255,255,255,0.325);border-bottom-color:rgba(255,255,255,0.5);background-color:#151a1c}.dark-mode .nav-tabs .nav-link.active{border-color:rgba(255,255,255,0.6) !important;background-color:#192125;border-bottom:thin solid #192125 !important}.dark-mode .nav-tabs{border-bottom-color:rgba(255,255,255,0.5)}.dark-mode .nav-tabs .nav-item.show .nav-link,.dark-mode .nav-tabs .nav-link.active{color:#abaeb3}.dark-mode .tab-pane{background-color:#192125;border-bottom:thin solid rgba(255,255,255,0.5);border-left:thin solid rgba(255,255,255,0.5);border-right:thin solid rgba(255,255,255,0.5);border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;padding:.5rem}.dark-mode td,.dark-mode th,.dark-mode thead th{border-color:#454d55}.dark-mode .table{background-color:#262a2e;color:#abaeb3}.dark-mode .table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.dark-mode .table-hover tbody tr:hover{background-color:rgba(255,255,255,0.25);color:#fff}.dark-mode .modal-content{background-color:#2a2f34;border-color:rgba(255,255,255,0.4)}.dark-mode .modal-header{border-bottom-color:rgba(255,255,255,0.5);color:#abaeb3}.dark-mode .modal-footer{border-bottom-color:rgba(255,255,255,0.5)}.dark-mode .close{color:#abaeb3}.dark-mode .close:hover,.dark-mode .close:focus{color:rgba(255,255,255,0.6)}.dark-mode .header-global__navbar--toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.dark-mode .header-global__navbar--toggler{border-color:rgba(255,255,255,0.5)}.dark-mode #headerGlobalNavbarContent.collapse.show .navbar-nav,.dark-mode #headerGlobalNavbarContent.collapsing .navbar-nav{background-color:#14181d}.dark-mode #___gcse_0{filter:invert(1)}.dark-mode pre{background-color:#272934;border-radius:8px;color:#0f0;padding-top:1rem}.dark-mode hr{border-top-color:rgba(255,255,255,0.325)}.dark-mode div.dt-button-collection{filter:invert(1) brightness(2.5)}.dark-mode div.dataTables_scrollBody{filter:brightness(0.95)}@media screen and (min-width: 992px){.dark-mode .header-global__navbar--search-toggle:before{background-color:#002348}.dark-mode .header-global__nav-bottom .dropdown:hover{background-color:#0f1417}.dark-mode .header-global .dropdown-menu{border:thin solid rgba(255,255,255,0.325)}}@media screen and (max-width: 991px){.dark-mode .header-global__core:after{background-color:#272b30;border-top:1px solid #b1b1b1}.dark-mode .header-global .dropdown-menu{border:thin solid rgba(255,255,255,0.325)}}.dark-mode #board-of-trustees{border:none !important}.dark-mode #agendas-and-minutes{border:none !important}.dark-mode #v-pills-tabContent .tab-pane{border:none}.dark-mode .sub-nav__navbar{background-color:#141a1c !important}.dark-mode .sub-nav__nav-link{color:#8db2e5}.dark-mode .typography__sub-nav--red-h2,.dark-mode .typography__section--heading{color:#e46181}.dark-mode .error__main-heading{color:#e46181}.dark-mode .error__sub-heading{color:#9bb7dd}
|
2
|
+
|