35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # WSU Alerts Child Theme
2 |
3 | ## Managing Alerts
4 |
5 | Alerts are created as posts with 2 important details:
6 |
7 | Site categories are used to classify the importance. The three main categories are "Announcements", "Emergency", and "Warning".
8 |
9 | In the top right of the edit screen, "Alert Status" is available. For an alert to show as active, the drop down must be changed to **active**.
10 |
11 | ## Header
12 |
13 | A common header is shown on all alert.wsu.edu pages and is populated with information on the latest active alert. This common header is split into two pieces.
14 |
15 | ### Overall alert status
16 |
17 | The text at the top of the page changes depending on the status:
18 |
19 | * Emergency: "There is an active emergency"
20 | * Warning: "There is an active warning"
21 | * None: "There are no alerts"
22 |
23 | ### Full Announcement
24 |
25 | * If there are no active alerts, the area is colored green and the text shows "There are no warnings or emergencies".
26 | * If there is an active **warning**, the area is colored yellow and the text of the warning is displayed.
27 | * If there is an active **emergency**, the area is colored orange and the text of the warning is displayed.
28 |
29 | ## Front page
30 |
31 | The front page (after the common header) displays the most recent 3 posts tagged as "Post to alert home page" (slug: `home`) in the first section. These can be categorized in any way.
32 |
33 | The remaining sections on the page are customizable through the page builder interface.
34 |
--------------------------------------------------------------------------------
/front-page.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
NOTE: When dialing 911 from a WSU Pullman campus number, there will be a 7 second delay in connecting. WAIT! DO NOT HANG UP!
56 |
57 |
58 |
59 |
60 |
75 |
76 |
77 |
78 |
79 | slug, array( 'emergency', 'warning' ), true ) ) {
44 | return $category->slug;
45 | }
46 | }
47 |
48 | return 'clear';
49 | }
50 |
51 |
52 | /**
53 | * Get current item alert level
54 | *
55 | * @since 1.0.0
56 | *
57 | * @return string
58 | */
59 | function wsu_get_alert_level($post_id) {
60 | $categories = get_the_category( $post_id );
61 |
62 | foreach ( $categories as $category ) {
63 | if ( in_array( $category->slug, array( 'emergency', 'warning' ), true ) ) {
64 | return $category->slug;
65 | }
66 | }
67 |
68 | return 'clear';
69 | }
70 |
71 | /**
72 | * Returns the total number of active alerts
73 | *
74 | * @since 1.0.0
75 | *
76 | * @return string
77 | */
78 | function wsu_alert_count() {
79 | $active_alerts = wsu_alert_get_latest();
80 |
81 | return count($active_alerts);
82 | }
83 |
84 | /**
85 | * Retrieves the latest active alert.
86 | *
87 | * @since 0.1.0
88 | *
89 | * @return array
90 | */
91 | function wsu_alert_get_latest() {
92 | $active_alerts = wp_cache_get( 'active-alert-id', 'alert' );
93 |
94 | if ( false === $active_alerts ) {
95 | $args = array(
96 | 'meta_key' => 'wsu_alert_status',
97 | 'meta_value' => 'active',
98 | 'posts_per_page' => 99,
99 | 'fields' => 'ids',
100 | );
101 | $active_alerts = get_posts( $args );
102 |
103 | wp_cache_set( 'active-alert-id', $active_alerts, 'alert', HOUR_IN_SECONDS );
104 | }
105 |
106 | return $active_alerts;
107 | }
108 |
109 | add_action( 'clean_post_cache', 'wsu_alert_clean_cache' );
110 | /**
111 | * Clear the alert cache whenever post cache is cleaned on
112 | * alert.wsu.edu.
113 | *
114 | * @since 0.3.0
115 | */
116 | function wsu_alert_clean_cache() {
117 | wp_cache_delete( 'active-alert-id', 'alert' );
118 | }
119 |
120 | /**
121 | * Displays the header title with an overall alert status based on the current
122 | * alert level.
123 | *
124 | * @since 0.1.0
125 | */
126 | function wsu_alert_display_status_title() {
127 | $count = wsu_alert_count();
128 |
129 | if ( $count === 0 ) {
130 | echo 'There are no WSU Pullman alerts.';
131 | } else {
132 | echo 'Current active alerts: ' . $count;
133 | }
134 | }
135 |
136 | add_action( 'rest_api_init', 'wsu_alert_register_rest_endpoint' );
137 | /**
138 | * Registers the active alert REST API endpoint.
139 | *
140 | * @since 0.2.0
141 | */
142 | function wsu_alert_register_rest_endpoint() {
143 | register_rest_route( 'alert/v1', '/active/', array(
144 | 'methods' => 'GET',
145 | 'callback' => 'wsu_alert_handle_active_endpoint',
146 | ) );
147 | }
148 |
149 | /**
150 | * Provides an endpoint information about any active alerts.
151 | *
152 | * @since 0.2.0
153 | *
154 | * @return array
155 | */
156 | function wsu_alert_handle_active_endpoint() {
157 | if ( 'emergency' !== wsu_alert_level() ) {
158 | return array(
159 | 'status' => 'clear',
160 | 'message' => 'There are no active emergency alerts.',
161 | 'url' => '',
162 | );
163 | }
164 |
165 | $active_alerts = wsu_alert_get_latest();
166 | $active_alert = array_shift( $active_alerts );
167 | setup_postdata( $active_alert );
168 |
169 | $data = array(
170 | 'status' => 'emergency',
171 | 'message' => get_the_title( $active_alert ),
172 | 'url' => esc_url( get_the_permalink( $active_alert ) ),
173 | );
174 | wp_reset_postdata();
175 |
176 | return $data;
177 | }
178 |
179 | add_action( 'add_meta_boxes', 'wsu_alert_add_meta_boxes', 10 );
180 | /**
181 | * Adds meta boxes used to manage alerts.
182 | *
183 | * @since 0.1.0
184 | *
185 | * @param string $post_type
186 | */
187 | function wsu_alert_add_meta_boxes( $post_type ) {
188 | if ( 'post' !== $post_type ) {
189 | return;
190 | }
191 |
192 | add_meta_box( 'wsu_alert_active_status', 'Alert Status', 'wsu_alert_display_alert_status', 'post', 'side', 'high' );
193 | }
194 |
195 | /**
196 | * Displays the meta box used to capture an alert's active or inactive status.
197 | *
198 | * @since 0.1.0
199 | *
200 | * @param WP_Post $post
201 | */
202 | function wsu_alert_display_alert_status( $post ) {
203 | $alert_status = get_post_meta( $post->ID, 'wsu_alert_status', true );
204 |
205 | if ( ! in_array( $alert_status, array( 'active', 'inactive' ), true ) ) {
206 | $alert_status = 'inactive';
207 | }
208 |
209 | ?>
210 |
211 |
215 | post_status ) {
233 | return;
234 | }
235 |
236 | // @codingStandardsIgnoreStart
237 | if ( ! isset( $_POST['alert_status_select'] ) ) {
238 | return;
239 | }
240 |
241 | if ( in_array( $_POST['alert_status_select'], array( 'inactive', 'active' ), true ) ) {
242 | update_post_meta( $post_id, 'wsu_alert_status', sanitize_text_field( $_POST['alert_status_select'] ) );
243 | } else {
244 | update_post_meta( $post_id, 'wsu_alert_status', 'inactive' );
245 | }
246 | // @codingStandardsIgnoreEnd
247 | }
248 |
249 | add_action( 'init', 'wsu_alert_unregister_taxonomies', 12 );
250 | /**
251 | * Removes support for additional taxonomies on alerts.
252 | *
253 | * This helps to keep the new alert screen free of clutter so that it's
254 | * easier to manage things quickly without distraction.
255 | *
256 | * @since 0.1.0
257 | */
258 | function wsu_alert_unregister_taxonomies() {
259 | unregister_taxonomy_for_object_type( 'wsuwp_university_category', 'post' );
260 | unregister_taxonomy_for_object_type( 'wsuwp_university_location', 'post' );
261 | unregister_taxonomy_for_object_type( 'wsuwp_university_org', 'post' );
262 | }
263 |
264 | add_action( 'after_setup_theme', 'wsu_alert_setup_image_sizes', 9 );
265 | /**
266 | * Removes support for featured images and other post thumbnails on alerts.
267 | *
268 | * This helps to keep the new alert screen free of clutter. If background
269 | * images are needed for other pages on the site, we'll need to selectively
270 | * re-enable them.
271 | *
272 | * @since 0.1.0
273 | */
274 | function wsu_alert_setup_image_sizes() {
275 | remove_theme_support( 'post-thumbnails' );
276 | remove_action( 'after_setup_theme', 'Spine_Theme_Images' );
277 | }
278 |
--------------------------------------------------------------------------------
/css/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | font-size: 100%;
5 | box-sizing: border-box;
6 | word-wrap: break-word;
7 | }
8 |
9 | body,
10 | body:not(.has-background-image) {
11 | background-image: none;
12 | background-color: #d7dadb;
13 | color: #23282b;
14 | }
15 |
16 | main section {
17 | background-color: #fff;
18 | margin-top: 30px;
19 | }
20 |
21 | main section:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | .main-header {
26 | background-color: #fff;
27 | }
28 |
29 | .main-header sub,
30 | .main-header sup,
31 | .main-header sup a {
32 | color: #23282b;
33 | font-size: 32px;
34 | font-weight: 300;
35 | }
36 |
37 | .main-header sup a:hover {
38 | color: #981e32;
39 | }
40 |
41 | .main-header sub *,
42 | .main-header sub a {
43 | display: none;
44 | }
45 |
46 | main section.no-margin,
47 | header.main-header + section {
48 | margin-top: 0;
49 | }
50 |
51 | hr {
52 | background-color: rgba(0, 0, 0, .1);
53 | margin-top: 2em;
54 | margin-bottom: 2em;
55 | }
56 |
57 | /*******************
58 | Typography
59 | *******************/
60 |
61 | h2 {
62 | font-size: 24px;
63 | font-weight: 400;
64 | padding: 1.6em 0;
65 | }
66 |
67 | h5 {
68 | font-weight: 600;
69 | padding-bottom: 1.2em;
70 | font-size: 1.1rem;
71 | }
72 |
73 | main p,
74 | main ol,
75 | main ul {
76 | font-weight: 300;
77 | font-size: 1rem;
78 | line-height: 1.6;
79 | padding-bottom: 1.5em;
80 | }
81 |
82 | main ul li {
83 | list-style: circle;
84 | padding-bottom: 1em;
85 | }
86 |
87 | /************************
88 | Notification System
89 | *************************/
90 |
91 | .notifications-wrap {
92 | width: 100%;
93 | display: block;
94 | color: #2e2e2e;
95 | }
96 |
97 | .notifications-wrap .crimson-title {
98 | width: 100%;
99 | background-color: #981e32;
100 | padding: .8em 2rem;
101 | }
102 |
103 | .notifications-wrap .crimson-title header {
104 | font-size: 1rem;
105 | color: #fff;
106 | }
107 |
108 | .notifications-wrap .system-announcement-wrapper {
109 | width: auto;
110 | min-height: 200px;
111 | padding: 2rem;
112 | margin: 0 -2rem;
113 | border-bottom: 3px solid rgba(0, 0, 0, 0.1);
114 | }
115 |
116 | .notifications-wrap .system-announcement-wrapper:last-child {
117 | border-bottom: none;
118 | }
119 |
120 | .notifications-wrap .system-announcement-wrapper.clear {
121 | background-color: rgb(172, 163, 1);
122 | }
123 |
124 | .notifications-wrap .system-announcement-wrapper.warning {
125 | background-color: rgba(255, 184, 28, 1);
126 | }
127 |
128 | .notifications-wrap .system-announcement-wrapper.emergency {
129 | background-color: rgb(246, 134, 31);
130 | }
131 |
132 | .notifications-wrap .system-announcement-container {
133 | width: 100%;
134 | max-width: 900px;
135 | max-width: 98ch;
136 | }
137 |
138 | .notifications-wrap .system-announcement-container header {
139 | font-size: 1.8rem;
140 | font-weight: 600;
141 | text-transform: capitalize;
142 | padding-bottom: 1em;
143 | }
144 |
145 | .notifications-wrap .system-announcement-content {
146 | margin-top: 1.3em;
147 | }
148 |
149 | .notifications-wrap .system-announcement-container h1 {
150 | font-size: 1.3em;
151 | line-height: 1.3;
152 | }
153 |
154 | .notifications-wrap .system-announcement-container p {
155 | font-weight: 400;
156 | }
157 |
158 | .notifications-wrap .alert-content-area {
159 | padding: 2rem 2rem 0rem 2rem;
160 | }
161 |
162 | .notifications-wrap .alert-content-area header {
163 | margin-bottom: 1rem;
164 | }
165 | .notifications-wrap .alert-content-area .no-active-alerts {
166 | padding-bottom: 0;
167 | margin-bottom: 1rem;
168 | }
169 |
170 | /*******************
171 | Content Syndicate
172 | *******************/
173 |
174 | .announcements-container {
175 | counter-reset: section;
176 | }
177 |
178 | .announcements-container ul {
179 | padding-left: 45px;
180 | }
181 |
182 | .announcements-container ul li {
183 | list-style: none;
184 | border-bottom: 1px solid #d9d9d9;
185 | padding: 2em 0;
186 | }
187 |
188 | .announcements-container ul li:first-child {
189 | padding-top: 0;
190 | }
191 |
192 | .announcements-container ul li:last-child {
193 | border-bottom: 0;
194 | }
195 |
196 | .announcements-container ul li:before {
197 | position: absolute;
198 | left: 68px;
199 | width: 20px;
200 | text-align: center;
201 | counter-increment: section;
202 | content: counter(section);
203 | padding: .2em;
204 | font-size: .8rem;
205 | border: 1px solid #23282b;
206 | border-radius: 50%;
207 | }
208 |
209 | .announcement-item-byline-author {
210 | display: none;
211 | }
212 |
213 | .announcement-item-title,
214 | .announcement-item-byline {
215 | font-weight: 600;
216 | margin-bottom: .7em;
217 | }
218 |
219 | .announcement-item-excerpt {
220 | margin-top: .8em;
221 | display: block;
222 | }
223 |
224 | /*******************
225 | Notifications
226 | *******************/
227 |
228 | .notifications {
229 | counter-reset: notifications;
230 | }
231 |
232 | ul.notifications {
233 | column-count: 2;
234 | column-gap: 20px;
235 | margin-top: 2em;
236 | }
237 |
238 | ul.notifications li {
239 | list-style: none;
240 | padding-bottom: 3em;
241 | }
242 |
243 | ul.notifications li:before {
244 | display: inline-block;
245 | width: 20px;
246 | text-align: center;
247 | vertical-align: middle;
248 | counter-increment: notifications;
249 | content: counter(notifications);
250 | padding: .2em;
251 | margin-right: .8em;
252 | font-size: .8rem;
253 | border: 1px solid #23282b;
254 | border-radius: 50%;
255 | }
256 |
257 | .showTip {
258 | font-size: .9em;
259 | border: 1px solid #981e32;
260 | border-radius: 50%;
261 | padding: .3em;
262 | display: inline-block;
263 | width: 20px;
264 | text-align: center;
265 | height: 20px;
266 | vertical-align: text-top;
267 | line-height: .9;
268 | margin-left: .5em;
269 | }
270 |
271 | /*******************
272 | Dial 911
273 | *******************/
274 |
275 | .dial-911 > p:first-child {
276 | padding-top: 1.6em;
277 | text-transform: uppercase;
278 | }
279 |
280 | .dial-911 .dial {
281 | display: flex;
282 | width: 100%;
283 | height: 60px;
284 | padding-bottom: 1em;
285 | }
286 |
287 | .dial-911 .dial img,
288 | .dial-911 .dial h2 {
289 | display: inline-flex;
290 | }
291 |
292 | .dial-911 .dial img {
293 | min-width: 47px;
294 | height: 47px;
295 | margin-right: .8em;
296 | }
297 |
298 | .dial-911 .dial h2 {
299 | font-weight: 600;
300 | font-size: 2rem;
301 | line-height: .4;
302 | padding-top: .5em;
303 | white-space: nowrap;
304 | }
305 |
306 | .dial-911 em {
307 | font-size: .9em;
308 | }
309 |
310 | /*******************
311 | Accordion
312 | *******************/
313 |
314 | .ui-accordion {
315 | height: 100%;
316 | padding-bottom: 2em;
317 | }
318 |
319 | .ui-accordion div.accordion-content {
320 | padding-top: .8em;
321 | }
322 |
323 | .ui-accordion h4 {
324 | cursor: pointer;
325 | font-size: 1.2rem;
326 | font-weight: 400;
327 | outline: 0;
328 | }
329 |
330 | .ui-accordion h4.ui-state-default:before {
331 | content: "+";
332 | }
333 |
334 | .ui-accordion h4.ui-state-active:before {
335 | content: "-";
336 | }
337 |
338 | .ui-accordion h4.ui-state-default:before,
339 | .ui-accordion h4.ui-state-active:before {
340 | font-size: .8rem;
341 | font-weight: 300;
342 | border: 1px solid #981e32;
343 | border-radius: 50%;
344 | padding: .2em;
345 | display: inline-block;
346 | width: 20px;
347 | text-align: center;
348 | vertical-align: middle;
349 | margin-right: 10px;
350 | color: #981e32;
351 | }
352 |
353 | /*******************
354 | Examples
355 | *******************/
356 |
357 | .examples {
358 | padding-bottom: 2em;
359 | }
360 |
361 | .examples p {
362 | padding-bottom: 1em;
363 | }
364 |
365 | /****************************
366 | Blog, Archive, and Search
367 | *****************************/
368 |
369 | .blog main section,
370 | .archive main section,
371 | .search main section {
372 | margin-top: 0;
373 | }
374 |
375 | .blog article,
376 | .archive article,
377 | .search article {
378 | padding-bottom: 1.4em;
379 | }
380 |
381 | .blog h2.article-title,
382 | .archive h2.article-title,
383 | .search h2.article-title {
384 | padding-bottom: 0;
385 | }
386 |
387 | .article-header hgroup.source,
388 | .article-header .hgroup.source {
389 | padding-bottom: 1.8em;
390 | }
391 |
392 | .article-author {
393 | display: none;
394 | }
395 |
396 | /*******************
397 | Media Query
398 | *******************/
399 | @media screen and (max-width: 990px) {
400 |
401 | main ol,
402 | main ul {
403 | padding-left: 0;
404 | padding-right: 0;
405 | }
406 |
407 | ul.notifications {
408 | column-count: 1;
409 | }
410 |
411 | ul.notifications li:before,
412 | .ui-accordion h4.ui-state-default:before,
413 | .ui-accordion h4.ui-state-active:before {
414 | position: absolute;
415 | display: block;
416 | left: 25px;
417 | }
418 | }
419 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | /*
2 | Theme Name: WSU Alert
3 | Theme URI: https://github.com/washingtonstateuniversity/alert.wsu.edu/
4 | Description: A child theme for Washington State University's Spine framework
5 | Author: WSU Web Communication
6 | Author URI: https://web.wsu.edu/
7 | Template: spine
8 | Version: 1.0.0
9 | */
10 |
11 | * {
12 | margin: 0;
13 | padding: 0;
14 | font-size: 100%;
15 | box-sizing: border-box;
16 | word-wrap: break-word;
17 | }
18 |
19 | body,
20 | body:not(.has-background-image) {
21 | background-image: none;
22 | background-color: #d7dadb;
23 | color: #23282b;
24 | }
25 |
26 | main section {
27 | background-color: #fff;
28 | margin-top: 30px;
29 | }
30 |
31 | main section:first-child {
32 | margin-top: 0;
33 | }
34 |
35 | .main-header {
36 | background-color: #fff;
37 | }
38 |
39 | .main-header sub,
40 | .main-header sup,
41 | .main-header sup a {
42 | color: #23282b;
43 | font-size: 32px;
44 | font-weight: 300;
45 | }
46 |
47 | .main-header sup a:hover {
48 | color: #981e32;
49 | }
50 |
51 | .main-header sub *,
52 | .main-header sub a {
53 | display: none;
54 | }
55 |
56 | main section.no-margin,
57 | header.main-header + section {
58 | margin-top: 0;
59 | }
60 |
61 | hr {
62 | background-color: rgba(0, 0, 0, .1);
63 | margin-top: 2em;
64 | margin-bottom: 2em;
65 | }
66 |
67 | /*******************
68 | Typography
69 | *******************/
70 |
71 | h2 {
72 | font-size: 24px;
73 | font-weight: 400;
74 | padding: 1.6em 0;
75 | }
76 |
77 | h5 {
78 | font-weight: 600;
79 | padding-bottom: 1.2em;
80 | font-size: 1.1rem;
81 | }
82 |
83 | main p,
84 | main ol,
85 | main ul {
86 | font-weight: 300;
87 | font-size: 1rem;
88 | line-height: 1.6;
89 | padding-bottom: 1.5em;
90 | }
91 |
92 | main ul li {
93 | list-style: circle;
94 | padding-bottom: 1em;
95 | }
96 |
97 | /************************
98 | Notification System
99 | *************************/
100 |
101 | .notifications-wrap {
102 | width: 100%;
103 | display: block;
104 | color: #2e2e2e;
105 | }
106 |
107 | .notifications-wrap .crimson-title {
108 | width: 100%;
109 | background-color: #981e32;
110 | padding: .8em 2rem;
111 | }
112 |
113 | .notifications-wrap .crimson-title header {
114 | font-size: 1rem;
115 | color: #fff;
116 | }
117 |
118 | .notifications-wrap .system-announcement-wrapper {
119 | width: auto;
120 | min-height: 200px;
121 | padding: 2rem;
122 | margin: 0 -2rem;
123 | border-bottom: 3px solid rgba(0, 0, 0, 0.1);
124 | }
125 |
126 | .notifications-wrap .system-announcement-wrapper:last-child {
127 | border-bottom: none;
128 | }
129 |
130 | .notifications-wrap .system-announcement-wrapper.clear {
131 | background-color: rgb(172, 163, 1);
132 | }
133 |
134 | .notifications-wrap .system-announcement-wrapper.warning {
135 | background-color: rgba(255, 184, 28, 1);
136 | }
137 |
138 | .notifications-wrap .system-announcement-wrapper.emergency {
139 | background-color: rgb(246, 134, 31);
140 | }
141 |
142 | .notifications-wrap .system-announcement-container {
143 | width: 100%;
144 | max-width: 900px;
145 | max-width: 98ch;
146 | }
147 |
148 | .notifications-wrap .system-announcement-container header {
149 | font-size: 1.8rem;
150 | font-weight: 600;
151 | text-transform: capitalize;
152 | padding-bottom: 1em;
153 | }
154 |
155 | .notifications-wrap .system-announcement-content {
156 | margin-top: 1.3em;
157 | }
158 |
159 | .notifications-wrap .system-announcement-container h1 {
160 | font-size: 1.3em;
161 | line-height: 1.3;
162 | }
163 |
164 | .notifications-wrap .system-announcement-container p {
165 | font-weight: 400;
166 | }
167 |
168 | .notifications-wrap .alert-content-area {
169 | padding: 2rem 2rem 0rem 2rem;
170 | }
171 |
172 | .notifications-wrap .alert-content-area header {
173 | margin-bottom: 1rem;
174 | }
175 | .notifications-wrap .alert-content-area .no-active-alerts {
176 | padding-bottom: 0;
177 | margin-bottom: 1rem;
178 | }
179 |
180 | /*******************
181 | Content Syndicate
182 | *******************/
183 |
184 | .announcements-container {
185 | counter-reset: section;
186 | }
187 |
188 | .announcements-container ul {
189 | padding-left: 45px;
190 | }
191 |
192 | .announcements-container ul li {
193 | list-style: none;
194 | border-bottom: 1px solid #d9d9d9;
195 | padding: 2em 0;
196 | }
197 |
198 | .announcements-container ul li:first-child {
199 | padding-top: 0;
200 | }
201 |
202 | .announcements-container ul li:last-child {
203 | border-bottom: 0;
204 | }
205 |
206 | .announcements-container ul li:before {
207 | position: absolute;
208 | left: 68px;
209 | width: 20px;
210 | text-align: center;
211 | counter-increment: section;
212 | content: counter(section);
213 | padding: .2em;
214 | font-size: .8rem;
215 | border: 1px solid #23282b;
216 | border-radius: 50%;
217 | }
218 |
219 | .announcement-item-byline-author {
220 | display: none;
221 | }
222 |
223 | .announcement-item-title,
224 | .announcement-item-byline {
225 | font-weight: 600;
226 | margin-bottom: .7em;
227 | }
228 |
229 | .announcement-item-excerpt {
230 | margin-top: .8em;
231 | display: block;
232 | }
233 |
234 | /*******************
235 | Notifications
236 | *******************/
237 |
238 | .notifications {
239 | counter-reset: notifications;
240 | }
241 |
242 | ul.notifications {
243 | column-count: 2;
244 | column-gap: 20px;
245 | margin-top: 2em;
246 | }
247 |
248 | ul.notifications li {
249 | list-style: none;
250 | padding-bottom: 3em;
251 | }
252 |
253 | ul.notifications li:before {
254 | display: inline-block;
255 | width: 20px;
256 | text-align: center;
257 | vertical-align: middle;
258 | counter-increment: notifications;
259 | content: counter(notifications);
260 | padding: .2em;
261 | margin-right: .8em;
262 | font-size: .8rem;
263 | border: 1px solid #23282b;
264 | border-radius: 50%;
265 | }
266 |
267 | .showTip {
268 | font-size: .9em;
269 | border: 1px solid #981e32;
270 | border-radius: 50%;
271 | padding: .3em;
272 | display: inline-block;
273 | width: 20px;
274 | text-align: center;
275 | height: 20px;
276 | vertical-align: text-top;
277 | line-height: .9;
278 | margin-left: .5em;
279 | }
280 |
281 | /*******************
282 | Dial 911
283 | *******************/
284 |
285 | .dial-911 > p:first-child {
286 | padding-top: 1.6em;
287 | text-transform: uppercase;
288 | }
289 |
290 | .dial-911 .dial {
291 | display: -ms-flexbox;
292 | display: flex;
293 | width: 100%;
294 | height: 60px;
295 | padding-bottom: 1em;
296 | }
297 |
298 | .dial-911 .dial img,
299 | .dial-911 .dial h2 {
300 | display: -ms-inline-flexbox;
301 | display: inline-flex;
302 | }
303 |
304 | .dial-911 .dial img {
305 | min-width: 47px;
306 | height: 47px;
307 | margin-right: .8em;
308 | }
309 |
310 | .dial-911 .dial h2 {
311 | font-weight: 600;
312 | font-size: 2rem;
313 | line-height: .4;
314 | padding-top: .5em;
315 | white-space: nowrap;
316 | }
317 |
318 | .dial-911 em {
319 | font-size: .9em;
320 | }
321 |
322 | /*******************
323 | Accordion
324 | *******************/
325 |
326 | .ui-accordion {
327 | height: 100%;
328 | padding-bottom: 2em;
329 | }
330 |
331 | .ui-accordion div.accordion-content {
332 | padding-top: .8em;
333 | }
334 |
335 | .ui-accordion h4 {
336 | cursor: pointer;
337 | font-size: 1.2rem;
338 | font-weight: 400;
339 | outline: 0;
340 | }
341 |
342 | .ui-accordion h4.ui-state-default:before {
343 | content: "+";
344 | }
345 |
346 | .ui-accordion h4.ui-state-active:before {
347 | content: "-";
348 | }
349 |
350 | .ui-accordion h4.ui-state-default:before,
351 | .ui-accordion h4.ui-state-active:before {
352 | font-size: .8rem;
353 | font-weight: 300;
354 | border: 1px solid #981e32;
355 | border-radius: 50%;
356 | padding: .2em;
357 | display: inline-block;
358 | width: 20px;
359 | text-align: center;
360 | vertical-align: middle;
361 | margin-right: 10px;
362 | color: #981e32;
363 | }
364 |
365 | /*******************
366 | Examples
367 | *******************/
368 |
369 | .examples {
370 | padding-bottom: 2em;
371 | }
372 |
373 | .examples p {
374 | padding-bottom: 1em;
375 | }
376 |
377 | /****************************
378 | Blog, Archive, and Search
379 | *****************************/
380 |
381 | .blog main section,
382 | .archive main section,
383 | .search main section {
384 | margin-top: 0;
385 | }
386 |
387 | .blog article,
388 | .archive article,
389 | .search article {
390 | padding-bottom: 1.4em;
391 | }
392 |
393 | .blog h2.article-title,
394 | .archive h2.article-title,
395 | .search h2.article-title {
396 | padding-bottom: 0;
397 | }
398 |
399 | .article-header hgroup.source,
400 | .article-header .hgroup.source {
401 | padding-bottom: 1.8em;
402 | }
403 |
404 | .article-author {
405 | display: none;
406 | }
407 |
408 | /*******************
409 | Media Query
410 | *******************/
411 | @media screen and (max-width: 990px) {
412 |
413 | main ol,
414 | main ul {
415 | padding-left: 0;
416 | padding-right: 0;
417 | }
418 |
419 | ul.notifications {
420 | column-count: 1;
421 | }
422 |
423 | ul.notifications li:before,
424 | .ui-accordion h4.ui-state-default:before,
425 | .ui-accordion h4.ui-state-active:before {
426 | position: absolute;
427 | display: block;
428 | left: 25px;
429 | }
430 | }
431 | /*# sourceMappingURL=style.css.map */
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | WSU Alerts Child Theme
2 |
3 | Copyright 2017 by Washington State University
4 |
5 | This program is free software; you can redistribute it and/or modify
6 | it under the terms of the GNU General Public License as published by
7 | the Free Software Foundation; either version 2 of the License, or
8 | (at your option) any later version.
9 |
10 | This program is distributed in the hope that it will be useful,
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | GNU General Public License for more details.
14 |
15 | You should have received a copy of the GNU General Public License
16 | along with this program; if not, write to the Free Software
17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 |
19 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 |
21 | GNU GENERAL PUBLIC LICENSE
22 | Version 2, June 1991
23 |
24 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
25 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 | Everyone is permitted to copy and distribute verbatim copies
27 | of this license document, but changing it is not allowed.
28 |
29 | Preamble
30 |
31 | The licenses for most software are designed to take away your
32 | freedom to share and change it. By contrast, the GNU General Public
33 | License is intended to guarantee your freedom to share and change free
34 | software--to make sure the software is free for all its users. This
35 | General Public License applies to most of the Free Software
36 | Foundation's software and to any other program whose authors commit to
37 | using it. (Some other Free Software Foundation software is covered by
38 | the GNU Lesser General Public License instead.) You can apply it to
39 | your programs, too.
40 |
41 | When we speak of free software, we are referring to freedom, not
42 | price. Our General Public Licenses are designed to make sure that you
43 | have the freedom to distribute copies of free software (and charge for
44 | this service if you wish), that you receive source code or can get it
45 | if you want it, that you can change the software or use pieces of it
46 | in new free programs; and that you know you can do these things.
47 |
48 | To protect your rights, we need to make restrictions that forbid
49 | anyone to deny you these rights or to ask you to surrender the rights.
50 | These restrictions translate to certain responsibilities for you if you
51 | distribute copies of the software, or if you modify it.
52 |
53 | For example, if you distribute copies of such a program, whether
54 | gratis or for a fee, you must give the recipients all the rights that
55 | you have. You must make sure that they, too, receive or can get the
56 | source code. And you must show them these terms so they know their
57 | rights.
58 |
59 | We protect your rights with two steps: (1) copyright the software, and
60 | (2) offer you this license which gives you legal permission to copy,
61 | distribute and/or modify the software.
62 |
63 | Also, for each author's protection and ours, we want to make certain
64 | that everyone understands that there is no warranty for this free
65 | software. If the software is modified by someone else and passed on, we
66 | want its recipients to know that what they have is not the original, so
67 | that any problems introduced by others will not reflect on the original
68 | authors' reputations.
69 |
70 | Finally, any free program is threatened constantly by software
71 | patents. We wish to avoid the danger that redistributors of a free
72 | program will individually obtain patent licenses, in effect making the
73 | program proprietary. To prevent this, we have made it clear that any
74 | patent must be licensed for everyone's free use or not licensed at all.
75 |
76 | The precise terms and conditions for copying, distribution and
77 | modification follow.
78 |
79 | GNU GENERAL PUBLIC LICENSE
80 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
81 |
82 | 0. This License applies to any program or other work which contains
83 | a notice placed by the copyright holder saying it may be distributed
84 | under the terms of this General Public License. The "Program", below,
85 | refers to any such program or work, and a "work based on the Program"
86 | means either the Program or any derivative work under copyright law:
87 | that is to say, a work containing the Program or a portion of it,
88 | either verbatim or with modifications and/or translated into another
89 | language. (Hereinafter, translation is included without limitation in
90 | the term "modification".) Each licensee is addressed as "you".
91 |
92 | Activities other than copying, distribution and modification are not
93 | covered by this License; they are outside its scope. The act of
94 | running the Program is not restricted, and the output from the Program
95 | is covered only if its contents constitute a work based on the
96 | Program (independent of having been made by running the Program).
97 | Whether that is true depends on what the Program does.
98 |
99 | 1. You may copy and distribute verbatim copies of the Program's
100 | source code as you receive it, in any medium, provided that you
101 | conspicuously and appropriately publish on each copy an appropriate
102 | copyright notice and disclaimer of warranty; keep intact all the
103 | notices that refer to this License and to the absence of any warranty;
104 | and give any other recipients of the Program a copy of this License
105 | along with the Program.
106 |
107 | You may charge a fee for the physical act of transferring a copy, and
108 | you may at your option offer warranty protection in exchange for a fee.
109 |
110 | 2. You may modify your copy or copies of the Program or any portion
111 | of it, thus forming a work based on the Program, and copy and
112 | distribute such modifications or work under the terms of Section 1
113 | above, provided that you also meet all of these conditions:
114 |
115 | a) You must cause the modified files to carry prominent notices
116 | stating that you changed the files and the date of any change.
117 |
118 | b) You must cause any work that you distribute or publish, that in
119 | whole or in part contains or is derived from the Program or any
120 | part thereof, to be licensed as a whole at no charge to all third
121 | parties under the terms of this License.
122 |
123 | c) If the modified program normally reads commands interactively
124 | when run, you must cause it, when started running for such
125 | interactive use in the most ordinary way, to print or display an
126 | announcement including an appropriate copyright notice and a
127 | notice that there is no warranty (or else, saying that you provide
128 | a warranty) and that users may redistribute the program under
129 | these conditions, and telling the user how to view a copy of this
130 | License. (Exception: if the Program itself is interactive but
131 | does not normally print such an announcement, your work based on
132 | the Program is not required to print an announcement.)
133 |
134 | These requirements apply to the modified work as a whole. If
135 | identifiable sections of that work are not derived from the Program,
136 | and can be reasonably considered independent and separate works in
137 | themselves, then this License, and its terms, do not apply to those
138 | sections when you distribute them as separate works. But when you
139 | distribute the same sections as part of a whole which is a work based
140 | on the Program, the distribution of the whole must be on the terms of
141 | this License, whose permissions for other licensees extend to the
142 | entire whole, and thus to each and every part regardless of who wrote it.
143 |
144 | Thus, it is not the intent of this section to claim rights or contest
145 | your rights to work written entirely by you; rather, the intent is to
146 | exercise the right to control the distribution of derivative or
147 | collective works based on the Program.
148 |
149 | In addition, mere aggregation of another work not based on the Program
150 | with the Program (or with a work based on the Program) on a volume of
151 | a storage or distribution medium does not bring the other work under
152 | the scope of this License.
153 |
154 | 3. You may copy and distribute the Program (or a work based on it,
155 | under Section 2) in object code or executable form under the terms of
156 | Sections 1 and 2 above provided that you also do one of the following:
157 |
158 | a) Accompany it with the complete corresponding machine-readable
159 | source code, which must be distributed under the terms of Sections
160 | 1 and 2 above on a medium customarily used for software interchange; or,
161 |
162 | b) Accompany it with a written offer, valid for at least three
163 | years, to give any third party, for a charge no more than your
164 | cost of physically performing source distribution, a complete
165 | machine-readable copy of the corresponding source code, to be
166 | distributed under the terms of Sections 1 and 2 above on a medium
167 | customarily used for software interchange; or,
168 |
169 | c) Accompany it with the information you received as to the offer
170 | to distribute corresponding source code. (This alternative is
171 | allowed only for noncommercial distribution and only if you
172 | received the program in object code or executable form with such
173 | an offer, in accord with Subsection b above.)
174 |
175 | The source code for a work means the preferred form of the work for
176 | making modifications to it. For an executable work, complete source
177 | code means all the source code for all modules it contains, plus any
178 | associated interface definition files, plus the scripts used to
179 | control compilation and installation of the executable. However, as a
180 | special exception, the source code distributed need not include
181 | anything that is normally distributed (in either source or binary
182 | form) with the major components (compiler, kernel, and so on) of the
183 | operating system on which the executable runs, unless that component
184 | itself accompanies the executable.
185 |
186 | If distribution of executable or object code is made by offering
187 | access to copy from a designated place, then offering equivalent
188 | access to copy the source code from the same place counts as
189 | distribution of the source code, even though third parties are not
190 | compelled to copy the source along with the object code.
191 |
192 | 4. You may not copy, modify, sublicense, or distribute the Program
193 | except as expressly provided under this License. Any attempt
194 | otherwise to copy, modify, sublicense or distribute the Program is
195 | void, and will automatically terminate your rights under this License.
196 | However, parties who have received copies, or rights, from you under
197 | this License will not have their licenses terminated so long as such
198 | parties remain in full compliance.
199 |
200 | 5. You are not required to accept this License, since you have not
201 | signed it. However, nothing else grants you permission to modify or
202 | distribute the Program or its derivative works. These actions are
203 | prohibited by law if you do not accept this License. Therefore, by
204 | modifying or distributing the Program (or any work based on the
205 | Program), you indicate your acceptance of this License to do so, and
206 | all its terms and conditions for copying, distributing or modifying
207 | the Program or works based on it.
208 |
209 | 6. Each time you redistribute the Program (or any work based on the
210 | Program), the recipient automatically receives a license from the
211 | original licensor to copy, distribute or modify the Program subject to
212 | these terms and conditions. You may not impose any further
213 | restrictions on the recipients' exercise of the rights granted herein.
214 | You are not responsible for enforcing compliance by third parties to
215 | this License.
216 |
217 | 7. If, as a consequence of a court judgment or allegation of patent
218 | infringement or for any other reason (not limited to patent issues),
219 | conditions are imposed on you (whether by court order, agreement or
220 | otherwise) that contradict the conditions of this License, they do not
221 | excuse you from the conditions of this License. If you cannot
222 | distribute so as to satisfy simultaneously your obligations under this
223 | License and any other pertinent obligations, then as a consequence you
224 | may not distribute the Program at all. For example, if a patent
225 | license would not permit royalty-free redistribution of the Program by
226 | all those who receive copies directly or indirectly through you, then
227 | the only way you could satisfy both it and this License would be to
228 | refrain entirely from distribution of the Program.
229 |
230 | If any portion of this section is held invalid or unenforceable under
231 | any particular circumstance, the balance of the section is intended to
232 | apply and the section as a whole is intended to apply in other
233 | circumstances.
234 |
235 | It is not the purpose of this section to induce you to infringe any
236 | patents or other property right claims or to contest validity of any
237 | such claims; this section has the sole purpose of protecting the
238 | integrity of the free software distribution system, which is
239 | implemented by public license practices. Many people have made
240 | generous contributions to the wide range of software distributed
241 | through that system in reliance on consistent application of that
242 | system; it is up to the author/donor to decide if he or she is willing
243 | to distribute software through any other system and a licensee cannot
244 | impose that choice.
245 |
246 | This section is intended to make thoroughly clear what is believed to
247 | be a consequence of the rest of this License.
248 |
249 | 8. If the distribution and/or use of the Program is restricted in
250 | certain countries either by patents or by copyrighted interfaces, the
251 | original copyright holder who places the Program under this License
252 | may add an explicit geographical distribution limitation excluding
253 | those countries, so that distribution is permitted only in or among
254 | countries not thus excluded. In such case, this License incorporates
255 | the limitation as if written in the body of this License.
256 |
257 | 9. The Free Software Foundation may publish revised and/or new versions
258 | of the General Public License from time to time. Such new versions will
259 | be similar in spirit to the present version, but may differ in detail to
260 | address new problems or concerns.
261 |
262 | Each version is given a distinguishing version number. If the Program
263 | specifies a version number of this License which applies to it and "any
264 | later version", you have the option of following the terms and conditions
265 | either of that version or of any later version published by the Free
266 | Software Foundation. If the Program does not specify a version number of
267 | this License, you may choose any version ever published by the Free Software
268 | Foundation.
269 |
270 | 10. If you wish to incorporate parts of the Program into other free
271 | programs whose distribution conditions are different, write to the author
272 | to ask for permission. For software which is copyrighted by the Free
273 | Software Foundation, write to the Free Software Foundation; we sometimes
274 | make exceptions for this. Our decision will be guided by the two goals
275 | of preserving the free status of all derivatives of our free software and
276 | of promoting the sharing and reuse of software generally.
277 |
278 | NO WARRANTY
279 |
280 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
281 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
282 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
283 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
284 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
285 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
286 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
287 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
288 | REPAIR OR CORRECTION.
289 |
290 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
291 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
292 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
293 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
294 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
295 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
296 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
297 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
298 | POSSIBILITY OF SUCH DAMAGES.
299 |
300 | END OF TERMS AND CONDITIONS
301 |
302 | How to Apply These Terms to Your New Programs
303 |
304 | If you develop a new program, and you want it to be of the greatest
305 | possible use to the public, the best way to achieve this is to make it
306 | free software which everyone can redistribute and change under these terms.
307 |
308 | To do so, attach the following notices to the program. It is safest
309 | to attach them to the start of each source file to most effectively
310 | convey the exclusion of warranty; and each file should have at least
311 | the "copyright" line and a pointer to where the full notice is found.
312 |
313 |
314 | Copyright (C)
315 |
316 | This program is free software; you can redistribute it and/or modify
317 | it under the terms of the GNU General Public License as published by
318 | the Free Software Foundation; either version 2 of the License, or
319 | (at your option) any later version.
320 |
321 | This program is distributed in the hope that it will be useful,
322 | but WITHOUT ANY WARRANTY; without even the implied warranty of
323 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
324 | GNU General Public License for more details.
325 |
326 | You should have received a copy of the GNU General Public License along
327 | with this program; if not, write to the Free Software Foundation, Inc.,
328 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
329 |
330 | Also add information on how to contact you by electronic and paper mail.
331 |
332 | If the program is interactive, make it output a short notice like this
333 | when it starts in an interactive mode:
334 |
335 | Gnomovision version 69, Copyright (C) year name of author
336 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
337 | This is free software, and you are welcome to redistribute it
338 | under certain conditions; type `show c' for details.
339 |
340 | The hypothetical commands `show w' and `show c' should show the appropriate
341 | parts of the General Public License. Of course, the commands you use may
342 | be called something other than `show w' and `show c'; they could even be
343 | mouse-clicks or menu items--whatever suits your program.
344 |
345 | You should also get your employer (if you work as a programmer) or your
346 | school, if any, to sign a "copyright disclaimer" for the program, if
347 | necessary. Here is a sample; alter the names:
348 |
349 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
350 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
351 |
352 | , 1 April 1989
353 | Ty Coon, President of Vice
354 |
355 | This General Public License does not permit incorporating your program into
356 | proprietary programs. If your program is a subroutine library, you may
357 | consider it more useful to permit linking proprietary applications with the
358 | library. If this is what you want to do, use the GNU Lesser General
359 | Public License instead of this License.
360 |
361 | WRITTEN OFFER
362 |
363 | The source code for any program binaries or compressed scripts that are
364 | included with WSU Alerts Child Theme can be freely obtained at the following URL:
365 |
366 | https://github.com/washingtonstateuniversity/alert.wsu.edu/
367 |
--------------------------------------------------------------------------------