kcc-gem-theme 2.11.1 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.caf5fc19b7bad1928a93.css} +0 -0
- data/assets/js/dist/{647.eb877787e2886ec50c13.css → 647.caf5fc19b7bad1928a93.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.caf5fc19b7bad1928a93.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.caf5fc19b7bad1928a93.css +2 -0
- data/assets/js/dist/{translate.eb877787e2886ec50c13.css → translate.caf5fc19b7bad1928a93.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 +65 -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 +76 -23
- data/assets/scss/2-modules/_hero-slider.scss +13 -4
- 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: aefdad4640874a0916ba41419412f4e96ac2134a646b63d18e3f3cbba247cb8e
|
4
|
+
data.tar.gz: 66167c7dc2695e22c520dff5bf6230d7a8bb31cbf8c21cd271a5bb162a671f66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cdf1291f296acb55cf544d59178e39d41aa04473903263a3e453df8437fb668391a9a86c715f0de1ceb5cb1893e082e171144beb19f8f512547a98322902497
|
7
|
+
data.tar.gz: 83b995b44c6cfbb99102d934b0fb6677fc3c6c2b144d4655a2fa1889ec1fba9c82b0205dcffc37463ffc8fd8affc66ee0315cf33143d46083d2f741332baa31e
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
caf5fc19b7bad1928a93
|
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 .header-global__nav--search-icon,.dark-mode .header-global__nav--close-icon{filter:brightness(0.9)}.dark-mode .header-global__brand--svg{color:#bfbfbf}.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 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:#011a36}.dark-mode .header-global__nav-bottom{background-color:#600f23}.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:#011a36}.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}.dark-mode .svg__sync{fill:#8db2e5}.dark-mode button:hover .svg__sync,.dark-mode button:focus .svg__sync{fill:#bfd7f9}.buttons--sync:hover,.buttons--sync:focus{border-color:rgba(141,178,229,0.75);border-style:solid;border-width:1px}
|
2
|
+
|