diff --git a/VERSION b/VERSION index 225453ec83..f5e19dd525 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.15 +6.16 diff --git a/app/Helpers/ImageHelpers.php b/app/Helpers/ImageHelpers.php index f35510c90a..95603549a9 100644 --- a/app/Helpers/ImageHelpers.php +++ b/app/Helpers/ImageHelpers.php @@ -653,3 +653,8 @@ function aic_gridListingImageSizes($data) { return $sizes; } + +function aic_getIconClass($key = 0) { + $icons = \App\Models\Page::getIconTypes(); + return Str::kebab($icons[$key]); +} diff --git a/app/Helpers/StringHelpers.php b/app/Helpers/StringHelpers.php index 11793e0788..b08fd2311a 100644 --- a/app/Helpers/StringHelpers.php +++ b/app/Helpers/StringHelpers.php @@ -225,3 +225,28 @@ function rightTrim($string, $needle) { return $string; } } + +if (!function_exists('summation')) { + + /** + * Helper method that converts `['item', 'hey', 'wow']` to `item, hey, and wow`. + * Per request from communications, we use the Oxford comma. + * + * @return string + */ + function summation(array $array = []) { + switch (count($array)) { + case 0; + return null; + case 1; + return array_pop($array); + break; + case 2; + return implode(' and ', $array); + break; + default; + $last = array_pop($array); + return implode(', ', $array) . ', and ' . $last; + } + } +} diff --git a/app/Http/Controllers/Admin/PageController.php b/app/Http/Controllers/Admin/PageController.php index c8043b0119..885542bb61 100644 --- a/app/Http/Controllers/Admin/PageController.php +++ b/app/Http/Controllers/Admin/PageController.php @@ -89,13 +89,13 @@ public function visit(PageRepository $pages) $additionalFieldsets = [ ['fieldset' => 'hours', 'label' => 'Hours'], + ['fieldset' => 'call-to-action', 'label' => 'CTA'], + ['fieldset' => 'expect', 'label' => 'What to Expect'], ['fieldset' => 'admissions', 'label' => 'Admissions'], - ['fieldset' => 'featured_offer', 'label' => 'Featured offer'], - ['fieldset' => 'directions', 'label' => 'Museum address'], - ['fieldset' => 'dining_hours', 'label' => 'Dining'], ['fieldset' => 'faq', 'label' => 'FAQ'], - ['fieldset' => 'tourpages', 'label' => 'Tours'], - ['fieldset' => 'families', 'label' => 'Families, teens and educators'], + ['fieldset' => 'accessibility', 'label' => 'Accessibility'], + ['fieldset' => 'directions', 'label' => 'Directions'], + ['fieldset' => 'explore', 'label' => 'Ways to Explore'], ]; $fields = $this->form($page->id); diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 02e3b2e7ec..d345207a20 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -161,7 +161,7 @@ public function autocomplete() break; case 'Artist': $item->url = route('artists.show', $item); - $item->section = 'Artists'; + $item->section = 'Artists/Cultures'; break; case 'Event': $item->url = route('events.show', $item); @@ -405,7 +405,7 @@ protected function buildSearchLinks($all, $active = 'all') array_push($links, $this->buildLabel('All', $all->getMetadata('pagination')->total, route('search', ['q' => request('q')]), $active == 'all')); if (extractAggregation($aggregations, 'agents')) { - array_push($links, $this->buildLabel('Artist', extractAggregation($aggregations, 'agents'), route('search.artists', ['q' => request('q')]), $active == 'artists')); + array_push($links, $this->buildLabel('Artists/Cultures', extractAggregation($aggregations, 'agents'), route('search.artists', ['q' => request('q')]), $active == 'artists')); } if (extractAggregation($aggregations, 'generic-pages')) { array_push($links, $this->buildLabel('Pages', extractAggregation($aggregations, 'generic-pages'), route('search.pages', ['q' => request('q')]), $active == 'generic-pages')); diff --git a/app/Http/Controllers/VisitController.php b/app/Http/Controllers/VisitController.php index dd0f24c6ba..27cc5aec67 100644 --- a/app/Http/Controllers/VisitController.php +++ b/app/Http/Controllers/VisitController.php @@ -61,6 +61,20 @@ public function index() 'primary' => $page->visit_hour_header, 'secondary' => $page->visit_hour_subheader, 'sections' => $page->featured_hours, + 'intro' => $page->visit_hour_intro + ); + + $expects = array(); + foreach ($page->whatToExpects as $item) { + array_push($expects, array( + 'iconType' => $item->icon_type, + 'text' => $item->text, + )); + }; + $whatToExpect = array( + 'more_link' => $page->visit_what_to_expect_more_link, + 'more_text' => $page->visit_what_to_expect_more_text, + 'items' => $expects, ); // Get prices grid for admissions @@ -109,14 +123,6 @@ public function index() 'link' => $page->visit_buy_tickets_link, ), ); - $dining = array(); - foreach ($page->dining_hours as $hour) { - array_push($dining, array( - 'image' => $hour->imageFront('dining_cover'), - 'title' => $hour->name, - 'text' => $hour->accessible_hours, - )); - }; $directions = array( 'intro' => __('Located in the heart of Chicago—across from Millennium Park and steps from Lake Michigan—the Art Institute welcomes visitors at two entrances.'), @@ -126,6 +132,10 @@ public function index() 'href' => $page->visit_parking_link, 'label' => __('Directions, Parking, and Public Transportation'), ), + 'accessibility_link' => array( + 'href' => $page->visit_parking_accessibility_link, + 'label' => __('Visitors with Mobility Needs'), + ), ); $questions = array(); @@ -142,9 +152,16 @@ public function index() 'questions' => $questions, ); - $families = array(); + $accessibility = array( + 'image' => $page->imageFront('visit_accessibility'), + 'text' => $page->visit_accessibility_text, + 'link_text' => $page->visit_accessibility_link_text, + 'link_url' => $page->visit_accessibility_link_url, + ); + + $explore = array(); foreach ($page->families as $item) { - array_push($families, array( + array_push($explore, array( 'image' => $item->imageFront('family_cover'), 'title' => $item->title, 'text' => $item->text, @@ -156,23 +173,6 @@ public function index() )); }; - $tours = []; - foreach ($page->visitTourPages as $item) { - $links = []; - foreach ($item->children()->orderBy('position')->published()->get() as $child) { - array_push($links, array( - 'href' => $child->url, - 'label' => $child->title, - )); - } - array_push($tours, array( - 'title' => $item->title, - 'titleLink' => $item->url, - 'image' => $item->imageFront('listing'), - 'links' => $links, - )); - } - $itemprops = [ 'name' => 'Art Institute of Chicago', 'telephone' => '+13124433600', @@ -187,12 +187,12 @@ public function index() 'filledLogo' => true, 'headerMedia' => $headerMedia, 'hours' => $hours, + 'whatToExpect' => $whatToExpect, 'admission' => $admission, - 'dining' => $dining, 'directions' => $directions, 'faq' => $faq, - 'families' => $families, - 'tours' => $tours, + 'accessibility' => $accessibility, + 'explore' => $explore, 'itemprops' => $itemprops, ]); } diff --git a/app/Models/Behaviors/HasApiRelations.php b/app/Models/Behaviors/HasApiRelations.php index 5eaef7f699..d9ef9caba3 100644 --- a/app/Models/Behaviors/HasApiRelations.php +++ b/app/Models/Behaviors/HasApiRelations.php @@ -78,8 +78,10 @@ public function loadRelatedWithApiModels($browser_name, $apiModelsDefinitions, $ return $items->map(function ($relatedElement) { $element = $relatedElement->related; $element->position = $relatedElement->position; - - if (!$element->isListed ?? false) { + if ($element->isListed === false) { + return false; + } + if ($element->isPublished === false) { return false; } diff --git a/app/Models/MagazineIssue.php b/app/Models/MagazineIssue.php index 24cd618b6c..cbf8afa070 100644 --- a/app/Models/MagazineIssue.php +++ b/app/Models/MagazineIssue.php @@ -14,8 +14,8 @@ class MagazineIssue extends AbstractModel { use HasSlug, HasRevisions, HasBlocks, HasMedias, HasMediasEloquent, HasRelated; - protected $presenter = 'App\Presenters\Admin\GenericPresenter'; - protected $presenterAdmin = 'App\Presenters\Admin\GenericPresenter'; + protected $presenter = 'App\Presenters\Admin\MagazineIssuePresenter'; + protected $presenterAdmin = 'App\Presenters\Admin\MagazineIssuePresenter'; protected $fillable = [ 'title', diff --git a/app/Models/Page.php b/app/Models/Page.php index bbc9d9913b..ac2154d345 100644 --- a/app/Models/Page.php +++ b/app/Models/Page.php @@ -80,20 +80,17 @@ class Page extends AbstractModel 'resources_landing_title', 'resources_landing_intro', + // Visit page 'visit_dining_link', - 'visit_transportation_link', - 'visit_parking_link', - 'visit_buy_tickets_link', - 'visit_become_member_link', - 'visit_faq_accessibility_link', - 'visit_faq_more_link', - + 'visit_accessibility_link_url', + 'visit_cta_module_action_url', + 'visit_what_to_expect_more_link', ]; public $translatedAttributes = [ @@ -101,6 +98,7 @@ class Page extends AbstractModel 'visit_intro', 'visit_hour_header', 'visit_hour_subheader', + 'visit_hour_intro', 'visit_city_pass_title', 'visit_city_pass_text', 'visit_city_pass_button_label', @@ -108,6 +106,12 @@ class Page extends AbstractModel 'visit_admission_description', 'visit_buy_tickets_label', 'visit_become_member_label', + 'visit_accessibility_text', + 'visit_accessibility_link_text', + 'visit_cta_module_header', + 'visit_cta_module_body', + 'visit_cta_module_button_text', + 'visit_what_to_expect_more_text', 'active' ]; @@ -142,6 +146,14 @@ class Page extends AbstractModel ], ], ], + 'visit_accessibility' => [ + 'default' => [ + [ + 'name' => 'default', + 'ratio' => 16 / 9, + ], + ], + ], 'visit_map' => [ 'default' => [ [ @@ -199,6 +211,18 @@ class Page extends AbstractModel ]; public $filesParams = ['video']; // a list of file roles + public static $iconTypes = [ + 0 => 'Face Coverings', + 1 => 'Physical Distancing', + 2 => 'Mobile Ticket', + 3 => 'Showing Symptoms', + 4 => 'No Checkroom', + 5 => 'No Dining', + 6 => 'Caution', + 7 => 'Floor Icon', + 8 => 'Virtual Queue', + ]; + public function scopeForType($query, $type) { return $query->where('type', array_flip(self::$types)[$type]); @@ -302,6 +326,11 @@ public function featured_hours() return $this->hasMany(FeaturedHour::class)->orderBy('position'); } + public function whatToExpects() + { + return $this->hasMany(WhatToExpect::class)->orderBy('position'); + } + public function articlesCategories() { return $this->belongsToMany('App\Models\Category', 'page_article_category')->withPivot('position')->orderBy('position'); @@ -357,6 +386,11 @@ public function researchResourcesStudyRoomMore() return $this->belongsToMany('App\Models\GenericPage', 'research_resource_study_room_more_pages')->withPivot('position')->orderBy('research_resource_study_room_more_pages.position', 'asc'); } + public static function getIconTypes() + { + return collect(self::$iconTypes); + } + protected function transformMappingInternal() { return [ diff --git a/app/Models/Revisions/WhatToExpectRevision.php b/app/Models/Revisions/WhatToExpectRevision.php new file mode 100644 index 0000000000..4b3765e31d --- /dev/null +++ b/app/Models/Revisions/WhatToExpectRevision.php @@ -0,0 +1,10 @@ +entity->author_display) { + return $this->entity->author_display; + } + if ($this->entity->authors->isNotEmpty()) { - $array = $this->entity->authors->pluck('title')->all(); - return join(' and ', array_filter(array_merge(array(join(', ', array_slice($array, 0, -1))), array_slice($array, -1)), 'strlen')); + $names = $this->entity->authors->pluck('title')->all(); + + return summation($names); } - return $this->entity->author_display; } } diff --git a/app/Presenters/Admin/ArtworkPresenter.php b/app/Presenters/Admin/ArtworkPresenter.php index 6ac4b6ad5c..c1f201c1d4 100644 --- a/app/Presenters/Admin/ArtworkPresenter.php +++ b/app/Presenters/Admin/ArtworkPresenter.php @@ -142,7 +142,6 @@ private function getArtistLink($pivot) 'label' => $label, 'href' => $href, 'gtmAttributes' => 'data-gtm-event="'. $pivot->artist_title . '"' - . ' data-gtm-event-action="' . $this->entity->title . '"' . ' data-gtm-event-category="collection-nav"', ]; } diff --git a/app/Presenters/Admin/AuthorPresenter.php b/app/Presenters/Admin/AuthorPresenter.php index 0c9d701461..60fc747104 100644 --- a/app/Presenters/Admin/AuthorPresenter.php +++ b/app/Presenters/Admin/AuthorPresenter.php @@ -47,7 +47,10 @@ private function _prepWriting($element, $type = 'article') { $element->date = $element->date ?? $element->publish_start_date ?? $element->updated_at; $element->writingType = $type; - if (!$element->isListed ?? false) { + if ($element->isListed === false) { + return false; + } + if ($element->isPublished === false) { return false; } diff --git a/app/Presenters/Admin/MagazineIssuePresenter.php b/app/Presenters/Admin/MagazineIssuePresenter.php new file mode 100644 index 0000000000..77f4525f74 --- /dev/null +++ b/app/Presenters/Admin/MagazineIssuePresenter.php @@ -0,0 +1,24 @@ +]*)>([^<]*)}i"; + + return preg_replace_callback($p, [$this, 'hero_text_callback'], $this->entity->hero_text); + } + + private function hero_text_callback($matches) + { + return '' . $matches[2] .''; + } + +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 870b6953a4..31c9586ad8 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -163,7 +163,7 @@ private function composeTemplatesViews() $view->with([ '_pages' => [ - 'visit' => '/visit-us-virtually' + 'visit' => route('visit') , 'hours' => route('visit') . '#hours' , 'directions' => route('visit') . '#directions' diff --git a/app/Repositories/PageRepository.php b/app/Repositories/PageRepository.php index b569720e3e..a41f1e35f7 100644 --- a/app/Repositories/PageRepository.php +++ b/app/Repositories/PageRepository.php @@ -65,6 +65,7 @@ public function afterSave($object, $fields) $this->updateRepeater($object, $fields, 'dining_hours', 'DiningHour'); $this->updateRepeater($object, $fields, 'faqs', 'Faq'); $this->updateRepeater($object, $fields, 'families', 'Family'); + $this->updateRepeater($object, $fields, 'whatToExpects', 'WhatToExpect'); $this->updateBrowser($object, $fields, 'visitTourPages'); // Article Categories @@ -119,6 +120,7 @@ public function getFormFields($object) $fields = $this->getFormFieldsForRepeater($object, $fields, 'dining_hours', 'DiningHour'); $fields = $this->getFormFieldsForRepeater($object, $fields, 'faqs', 'Faq'); $fields = $this->getFormFieldsForRepeater($object, $fields, 'families', 'Family'); + $fields = $this->getFormFieldsForRepeater($object, $fields, 'whatToExpects', 'WhatToExpect'); $fields['browsers']['visitTourPages'] = $this->getFormFieldsForBrowser($object, 'visitTourPages', 'generic', 'title', 'genericPages'); // Article Categories diff --git a/app/Repositories/WhatToExpectRepository.php b/app/Repositories/WhatToExpectRepository.php new file mode 100644 index 0000000000..28b95c6d52 --- /dev/null +++ b/app/Repositories/WhatToExpectRepository.php @@ -0,0 +1,18 @@ +model = $model; + } +} diff --git a/config/twill/block_editor.php b/config/twill/block_editor.php index ed4c8f20b2..f945316a94 100644 --- a/config/twill/block_editor.php +++ b/config/twill/block_editor.php @@ -244,11 +244,17 @@ 'max' => 5, ], 'families' => [ - 'title' => 'Families, teens and educators', + 'title' => 'Explore on your own', 'trigger' => 'Add item', 'component' => 'a17-block-families', 'max' => 3, ], + 'whatToExpects' => [ + 'title' => 'What to Expect', + 'trigger' => 'Add item', + 'component' => 'a17-block-what_to_expect', + 'max' => 9, + ], 'accordion_item' => [ 'title' => 'Accordion Item', 'trigger' => 'Add accordion item', diff --git a/database/migrations/2020_07_06_160517_add_visit_intro_column_to_pages_table.php b/database/migrations/2020_07_06_160517_add_visit_intro_column_to_pages_table.php new file mode 100644 index 0000000000..de07cc789b --- /dev/null +++ b/database/migrations/2020_07_06_160517_add_visit_intro_column_to_pages_table.php @@ -0,0 +1,32 @@ +text('visit_hour_intro')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('page_translations', function (Blueprint $table) { + $table->dropColumn('visit_hour_intro'); + }); + } +} diff --git a/database/migrations/2020_07_07_111814_remove_featured_hours_records.php b/database/migrations/2020_07_07_111814_remove_featured_hours_records.php new file mode 100644 index 0000000000..37a4b8e468 --- /dev/null +++ b/database/migrations/2020_07_07_111814_remove_featured_hours_records.php @@ -0,0 +1,80 @@ +first(); + + if ($visitPage) { + $visitPage->featured_hours()->delete(); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $data = [ + 'external_link' => '/learn-with-us/ryan-learning-center', + 'position' => 1, + 'page_id' => 6, + 'published' => false, + 'de' => ['title' => 'The Ryan Learning Center', 'copy' => '

10:30-17:00 und donnerstags bis 20:00 Uhr
Freier Eintritt

', 'active' => true], + 'en' => ['title' => 'The Ryan Learning Center', 'copy' => '

10:30–5:00 and Wednesday, Thursday, and Friday until 8:00
Access is currently limited. Learn more.
Free admission

', 'active' => true], + 'es' => ['title' => 'El Centro Educativo Ryan', 'copy' => '

De 10:30 a.m. a 5:00 p.m. y los jueves hasta las 8:00 p.m. 
Entrada libre

', 'active' => true], + 'fr' => ['title' => 'Le centre d ́apprentissage Ryan', 'copy' => '

10h30-17h et les jeudis jusqu\'à 20h
Entrée libre 

', 'active' => true], + 'ja' => ['title' => 'ライアンラーニングセンター', 'copy' => '

AM 10:30–PM 5:00、木曜日のみPM 8:00まで
入場無料

', 'active' => true], + 'pt' => ['title' => 'The Ryan Learning Center', 'copy' => '

das 10h30 às 17h e quintas-feiras até às 20h.
Entrada gratuita

', 'active' => true], + 'zh' => ['title' => 'Ryan Learning Center开放时间', 'copy' => '

每天上午10:30至下午5:00,周四开放至晚上8:00
RLC 免费入馆

', 'active' => true], + ]; + $hour = FeaturedHour::create($data); + + $data = [ + 'external_link' => '/library', + 'position' => 2, + 'page_id' => 6, + 'published' => false, + 'de' => ['title' => 'Die Ryerson und Burnham Bibliotheken', 'copy' => '

Montag–Freitag 13:00–17:00
Samstag–Sonntag GESCHLOSSEN

', 'active' => true], + 'en' => ['title' => 'The Ryerson and Burnham Libraries', 'copy' => '

Monday–Friday 1:00–5:00
Saturday–Sunday CLOSED

', 'active' => true], + 'es' => ['title' => 'Las bibliotecas Ryerson y Burnham', 'copy' => '

De lunes a viernes de 1:00 p.m. a 5:00 p.m.
Sábado y domingo CERRADO

', 'active' => true], + 'fr' => ['title' => 'Les bibliothèques Ryerson et Burnham', 'copy' => '

Lundi–vendredi 13h–17h
Samedi-dimanche FERMÉ 

', 'active' => true], + 'ja' => ['title' => 'ライヤーソン & バーナム図書館', 'copy' => '

月曜-金曜 PM1:00–5:00
土曜-日曜 閉館

', 'active' => true], + 'pt' => ['title' => 'The Ryerson and Burnham Libraries', 'copy' => '

Segundas e sextas-feiras das 13 às 17h
Sábados e domingos - FECHADO

', 'active' => true], + 'zh' => ['title' => 'Ryerson和Burnham图书馆开放时间', 'copy' => '

周一至周五下午1:00至5:00
周六至周日闭馆休息

', 'active' => true], + ]; + $hour = FeaturedHour::create($data); + + $data = [ + 'external_link' => 'http://shop.artic.edu', + 'position' => 3, + 'page_id' => 6, + 'published' => false, + 'de' => ['title' => 'Museumsshops', 'copy' => '

10:30-17:00 und donnerstags bis 20:00 Uhr

', 'active' => true], + 'en' => ['title' => 'Museum Shops', 'copy' => '

10:30–5:00 and Wednesday, Thursday, and Friday until 8:00

', 'active' => true], + 'es' => ['title' => 'Tiendas del museo', 'copy' => '

De 10:30 a.m. a 5:00 p.m. y los jueves hasta las 08:00 p.m.

', 'active' => true], + 'fr' => ['title' => 'Magasins du musée', 'copy' => '

10h30-17h30 et le jeudi jusqu\'à 20h00 

', 'active' => true], + 'ja' => ['title' => '館内売店', 'copy' => '

AM 10:30–PM 5:30、木曜日のみPM 8:00まで

', 'active' => true], + 'pt' => ['title' => 'Lojas do Museu', 'copy' => '

das 10h30 às 17h30 e quintas-feiras até às 20h

', 'active' => true], + 'zh' => ['title' => '博物馆商店', 'copy' => '

上午10:30至下午5:30,周四开放至晚上8:00

', 'active' => true], + ]; + $hour = FeaturedHour::create($data); + } +} diff --git a/database/migrations/2020_07_07_131910_change_hours_header_and_description_copy.php b/database/migrations/2020_07_07_131910_change_hours_header_and_description_copy.php new file mode 100644 index 0000000000..f31c638570 --- /dev/null +++ b/database/migrations/2020_07_07_131910_change_hours_header_and_description_copy.php @@ -0,0 +1,36 @@ +first(); + + $visitPage->translate('en')->visit_hour_header = '* The first hour of each day is accessible to museum members only'; + $visitPage->translate('en')->visit_hour_subheader = '

All dining spaces, libraries, meeting halls, and the Ryan Learning Center are closed until further notice.

'; + $visitPage->save(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $visitPage->translate('en')->visit_hour_header = 'The museum is temporarily closed.'; + $visitPage->translate('en')->visit_hour_subheader = '

Learn more about the museum\'s response to COVID-19.

'; + $visitPage->save(); + } +} diff --git a/database/migrations/2020_07_07_153848_add_visit_parking_accessibility_link_to_pages_table.php b/database/migrations/2020_07_07_153848_add_visit_parking_accessibility_link_to_pages_table.php new file mode 100644 index 0000000000..aeedf3bba5 --- /dev/null +++ b/database/migrations/2020_07_07_153848_add_visit_parking_accessibility_link_to_pages_table.php @@ -0,0 +1,38 @@ +string('visit_parking_accessibility_link')->nullable(); + }); + + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $visitPage->visit_parking_accessibility_link = '/visit/accessibility/visitors-with-mobility-needs'; + $visitPage->save(); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('pages', function (Blueprint $table) { + $table->dropColumn('visit_parking_accessibility_link'); + }); + } +} diff --git a/database/migrations/2020_07_08_090827_add_accessibility_fields_to_pages_table.php b/database/migrations/2020_07_08_090827_add_accessibility_fields_to_pages_table.php new file mode 100644 index 0000000000..4b8d75f82e --- /dev/null +++ b/database/migrations/2020_07_08_090827_add_accessibility_fields_to_pages_table.php @@ -0,0 +1,41 @@ +text('visit_accessibility_text')->nullable(); + $table->text('visit_accessibility_link_text')->nullable(); + }); + + Schema::table('pages', function (Blueprint $table) { + $table->text('visit_accessibility_link_url')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('page_translations', function (Blueprint $table) { + $table->dropColumn(['visit_accessibility_text', 'visit_accessibility_link_text']); + }); + + Schema::table('pages', function (Blueprint $table) { + $table->dropColumn('visit_accessibility_link_url'); + }); + } +} diff --git a/database/migrations/2020_07_08_160948_add_cta_fields_to_pages_table.php b/database/migrations/2020_07_08_160948_add_cta_fields_to_pages_table.php new file mode 100644 index 0000000000..2c526b1de5 --- /dev/null +++ b/database/migrations/2020_07_08_160948_add_cta_fields_to_pages_table.php @@ -0,0 +1,46 @@ +text('visit_cta_module_header')->nullable(); + $table->text('visit_cta_module_body')->nullable(); + $table->text('visit_cta_module_button_text')->nullable(); + }); + + Schema::table('pages', function (Blueprint $table) { + $table->text('visit_cta_module_action_url')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('page_translations', function (Blueprint $table) { + $table->dropColumn([ + 'visit_cta_module_header', + 'visit_cta_module_body', + 'visit_cta_module_button_text', + ]); + }); + + Schema::table('pages', function (Blueprint $table) { + $table->dropColumn('visit_cta_module_action_url'); + }); + } +} diff --git a/database/migrations/2020_07_09_090656_apply_additional_visit_updates.php b/database/migrations/2020_07_09_090656_apply_additional_visit_updates.php new file mode 100644 index 0000000000..32b9ba5632 --- /dev/null +++ b/database/migrations/2020_07_09_090656_apply_additional_visit_updates.php @@ -0,0 +1,45 @@ +first(); + + $visitPage->translate('en')->visit_hour_intro = 'The Art Institute reopens on July 30, and we\'re so happy to welcome you back to our galleries. Please see below for new hours—including member-only hours—and updated safety policies.'; + $visitPage->translate('en')->visit_hour_header = 'Member-Only Hours'; + $visitPage->translate('en')->visit_hour_subheader = '

Monday 10–11 a.m.
Thursday–Friday 12-1 p.m.
Saturday–Sunday 10–11 a.m.

'; + $visitPage->translate('en')->visit_admission_description = '

The Art Institute of Chicago provides free access to children under 14, Chicago teens under 18, Link and WIC cardholders, and Illinois educators every day, and to Illinois residents on certain days throughout the year. Learn more about free access.

'; + $visitPage->translate('en')->visit_accessibility_text = 'The Art Institute of Chicago welcomes all visitors and is committed to making its services accessible to everyone. We offer a range of resources for both adults and children with disabilities.'; + $visitPage->translate('en')->visit_accessibility_link_text = 'Learn more about accessibility'; + $visitPage->save(); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $visitPage->translate('en')->visit_hour_intro = ''; + $visitPage->translate('en')->visit_hour_header = ''; + $visitPage->translate('en')->visit_hour_subheader = ''; + $visitPage->translate('en')->visit_admission_description = '

The Art Institute of Chicago provides free access to children under 14, Chicago teens under 18, Link and WIC cardholders, and Illinois educators every day, and to Illinois residents every Wednesday evening from 5:00 to 8:00 p.m. Learn more.

Visiting with a group? Learn more about group admission rates.

'; + $visitPage->translate('en')->visit_accessibility_text = ''; + $visitPage->translate('en')->visit_accessibility_link_text = ''; + $visitPage->save(); + } +} diff --git a/database/migrations/2020_07_09_115513_create_what_to_expects_tables.php b/database/migrations/2020_07_09_115513_create_what_to_expects_tables.php new file mode 100644 index 0000000000..a8b886d72a --- /dev/null +++ b/database/migrations/2020_07_09_115513_create_what_to_expects_tables.php @@ -0,0 +1,35 @@ +integer('icon_type')->unsigned()->nullable(); + $table->integer('position')->unsigned()->nullable(); + + $table->integer('page_id')->unsigned()->nullable(); + $table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade'); + }); + + Schema::create('what_to_expect_translations', function (Blueprint $table) { + createDefaultTranslationsTableFields($table, 'what_to_expect'); + $table->text('text')->nullable(); + }); + + Schema::create('what_to_expect_revisions', function (Blueprint $table) { + createDefaultRevisionsTableFields($table, 'what_to_expect'); + }); + } + + public function down() + { + Schema::dropIfExists('what_to_expect_revisions'); + Schema::dropIfExists('what_to_expect_translations'); + Schema::dropIfExists('what_to_expects'); + } +} diff --git a/database/migrations/2020_07_09_153354_add_visit_what_to_expect_more_link_column_to_pages_table.php b/database/migrations/2020_07_09_153354_add_visit_what_to_expect_more_link_column_to_pages_table.php new file mode 100644 index 0000000000..cdb9b1bc94 --- /dev/null +++ b/database/migrations/2020_07_09_153354_add_visit_what_to_expect_more_link_column_to_pages_table.php @@ -0,0 +1,40 @@ +text('visit_what_to_expect_more_link')->nullable(); + }); + + Schema::table('page_translations', function (Blueprint $table) { + $table->text('visit_what_to_expect_more_text')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('pages', function (Blueprint $table) { + $table->dropColumn('visit_what_to_expect_more_link'); + }); + + Schema::table('page_translations', function (Blueprint $table) { + $table->dropColumn('visit_what_to_expect_more_text'); + }); + } +} diff --git a/database/migrations/2020_07_14_092914_update_ways_to_explore_content.php b/database/migrations/2020_07_14_092914_update_ways_to_explore_content.php new file mode 100644 index 0000000000..39b290b06e --- /dev/null +++ b/database/migrations/2020_07_14_092914_update_ways_to_explore_content.php @@ -0,0 +1,98 @@ +first(); + + $visitPage->families()->delete(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'Art Institute Mobile App'; + $family->translateOrNew('en')->text = 'The Art Institute\'s free app offers the stories behind the art through conversations with artists, experts, and community members. Download it via the App Store or Google Play.'; + $family->translateOrNew('en')->link_label = 'Learn more'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/visit/explore-on-your-own/mobile-app-audio-tours'; + $family->position = 1; + $family->page_id = $visitPage->id; + $family->save(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'What to See in an Hour'; + $family->translateOrNew('en')->text = 'Short on time? Check out this must-see guide to the collection.'; + $family->translateOrNew('en')->link_label = 'More custom tours'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/highlights'; + $family->position = 2; + $family->page_id = $visitPage->id; + $family->save(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'Visit Us Virtually'; + $family->translateOrNew('en')->text = 'Even from afar, there\'s a host of ways to connect to our collection of art from around the world—whether you\'re seeking inspiration, community, or a little adventure.'; + $family->translateOrNew('en')->link_label = 'Learn more'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/visit-us-virtually'; + $family->position = 3; + $family->page_id = $visitPage->id; + $family->save(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $visitPage->families()->delete(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'Families'; + $family->translateOrNew('en')->text = 'Explore family-friendly art-making activities and interactive spaces.'; + $family->translateOrNew('en')->link_label = 'See upcoming family events'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/events?audience=1'; + $family->position = 1; + $family->page_id = $visitPage->id; + $family->save(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'Teens'; + $family->translateOrNew('en')->text = 'Find yourself here. Look at art. Make art. Talk about life. Meet new people. Be inspired.'; + $family->translateOrNew('en')->link_label = 'See upcoming teen events'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/events?audience=4'; + $family->position = 2; + $family->page_id = $visitPage->id; + $family->save(); + + $family = new \App\Models\Family; + $family->translateOrNew('en')->title = 'Educators'; + $family->translateOrNew('en')->text = 'Explore diverse resources and dynamic professional development offerings for K–12 educators.'; + $family->translateOrNew('en')->link_label = 'See upcoming events for educators'; + $family->translateOrNew('en')->active = true; + $family->published = true; + $family->external_link = '/events?audience=6'; + $family->position = 3; + $family->page_id = $visitPage->id; + $family->save(); + } +} diff --git a/database/migrations/2020_07_14_152133_update_what_to_expect_content.php b/database/migrations/2020_07_14_152133_update_what_to_expect_content.php new file mode 100644 index 0000000000..6911414cf6 --- /dev/null +++ b/database/migrations/2020_07_14_152133_update_what_to_expect_content.php @@ -0,0 +1,113 @@ +first(); + + $visitPage->whatToExpects()->delete(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 0; + $whatToExpect->translateOrNew('en')->text = 'Face coverings will be required for your entire museum visit.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 1; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 1; + $whatToExpect->translateOrNew('en')->text = 'Maintain a physical distance of six-feet from staff and visitors.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 2; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 2; + $whatToExpect->translateOrNew('en')->text = 'Advance ticket purchase is required. Members will be required to display digital member card using the Art Institute of Chicago mobile app.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 3; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 3; + $whatToExpect->translateOrNew('en')->text = 'Anyone feeling unwell should postpone their visit for another time.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 4; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 4; + $whatToExpect->translateOrNew('en')->text = 'Our checkrooms are currently closed. Pack light, and remember some items are not allowed in the galleries.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 5; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 5; + $whatToExpect->translateOrNew('en')->text = 'Our amenities are temporarily limited. Service and spaces currently unavailable include restaurants, auditoria, valet service, and the Member Lounge.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 6; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 6; + $whatToExpect->translateOrNew('en')->text = 'Some galleries may have limited capacity or be temporarily closed.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 7; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 7; + $whatToExpect->translateOrNew('en')->text = 'Be mindful to abide by directional signage, including designated entrances and exits.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 8; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + + $whatToExpect = new \App\Models\WhatToExpect; + $whatToExpect->icon_type = 8; + $whatToExpect->translateOrNew('en')->text = 'Special exhibitions may use timed queueing systems. Check in at exhibition entrances to reserve your spot in line.'; + $whatToExpect->translateOrNew('en')->active = true; + $whatToExpect->published = true; + $whatToExpect->position = 9; + $whatToExpect->page_id = $visitPage->id; + $whatToExpect->save(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $visitPage = \App\Models\Page::where('type', 3)->first(); + + $visitPage->whatToExpects()->delete(); + } +} diff --git a/frontend/icons/caution.svg b/frontend/icons/caution.svg new file mode 100644 index 0000000000..cfe43eb51a --- /dev/null +++ b/frontend/icons/caution.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/icons/face-coverings.svg b/frontend/icons/face-coverings.svg new file mode 100644 index 0000000000..e236b2401c --- /dev/null +++ b/frontend/icons/face-coverings.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/frontend/icons/floor-icon.svg b/frontend/icons/floor-icon.svg new file mode 100644 index 0000000000..c9884ad873 --- /dev/null +++ b/frontend/icons/floor-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/icons/mobile-ticket.svg b/frontend/icons/mobile-ticket.svg new file mode 100644 index 0000000000..6a670c4cf8 --- /dev/null +++ b/frontend/icons/mobile-ticket.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/icons/no-checkroom.svg b/frontend/icons/no-checkroom.svg new file mode 100644 index 0000000000..3940cfe3df --- /dev/null +++ b/frontend/icons/no-checkroom.svg @@ -0,0 +1,30 @@ + + + + + + + diff --git a/frontend/icons/no-dining.svg b/frontend/icons/no-dining.svg new file mode 100644 index 0000000000..27845e074b --- /dev/null +++ b/frontend/icons/no-dining.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/frontend/icons/physical-distancing.svg b/frontend/icons/physical-distancing.svg new file mode 100644 index 0000000000..fdbc172cd4 --- /dev/null +++ b/frontend/icons/physical-distancing.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/icons/showing-symptoms.svg b/frontend/icons/showing-symptoms.svg new file mode 100644 index 0000000000..ebecd85c4d --- /dev/null +++ b/frontend/icons/showing-symptoms.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + diff --git a/frontend/icons/virtual-queue.svg b/frontend/icons/virtual-queue.svg new file mode 100644 index 0000000000..5279d1694f --- /dev/null +++ b/frontend/icons/virtual-queue.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/frontend/js/app.js b/frontend/js/app.js index aec7dc7ab7..4d9511b36d 100755 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -135,9 +135,12 @@ if (typeof console === 'undefined') { }; } -if ('scrollRestoration' in history) { - history.scrollRestoration = 'manual'; -} +document.addEventListener('ajaxPageLoad:complete', function _setScrollRestoration(){ + if ('scrollRestoration' in history) { + history.scrollRestoration = 'manual'; + document.removeEventListener('ajaxPageLoad:complete', _setScrollRestoration); + } +}, false); // polyfil .closest if (window.Element && !Element.prototype.closest) { diff --git a/frontend/js/behaviors/magazineHeader.js b/frontend/js/behaviors/magazineHeader.js index 6f67bbd7b9..34e0f0c6dc 100644 --- a/frontend/js/behaviors/magazineHeader.js +++ b/frontend/js/behaviors/magazineHeader.js @@ -19,7 +19,7 @@ const magazineHeader = function(container){ let idleTimeout = 2000; let autoTimer; - let autoTimeout = 4000; + let autoTimeout = 5000; let activeClass = 'is-slideshow-active'; diff --git a/frontend/js/behaviors/triggerMediaModal.js b/frontend/js/behaviors/triggerMediaModal.js index 2eb9a7f3a5..48ca7b8a2e 100644 --- a/frontend/js/behaviors/triggerMediaModal.js +++ b/frontend/js/behaviors/triggerMediaModal.js @@ -25,13 +25,20 @@ const triggerMediaModal = function(container) { 'eventAction': container.dataset.title+' - Modal 3D' }); } - if(container.parentNode.dataset.type == 'module360' && container.dataset.title) { + else if (container.parentNode.dataset.type == 'module360' && container.dataset.title) { triggerCustomEvent(document, 'gtm:push', { 'event': '360-open-modal', 'eventCategory': 'in-page', 'eventAction': container.dataset.title+' - Modal 360' }); } + else { + triggerCustomEvent(document, 'gtm:push', { + 'event': container.parentNode.dataset.gtmEvent || (container.parentNode.dataset.type + '-open-modal'), + 'eventCategory': container.parentNode.dataset.gtmEventCategory || 'in-page', + 'eventAction': container.parentNode.dataset.gtmEventAction || (container.parentNode.dataset.title+' - ' + container.parentNode.dataset.type) + }); + } } } } diff --git a/frontend/scss/molecules/_m-article-header.scss b/frontend/scss/molecules/_m-article-header.scss index 4ea32df4f6..d22e71e3d1 100644 --- a/frontend/scss/molecules/_m-article-header.scss +++ b/frontend/scss/molecules/_m-article-header.scss @@ -760,6 +760,7 @@ .f-subheading-1, .f-subheading-2, + .f-subheading-3, a { // text-shadow: 0 0 1px rgba(0, 0, 0, 0.5); color: $color__text--title-contrast; @@ -784,7 +785,7 @@ left: 0; right: 0; bottom: 0; - background-color: rgba(0,0,0,0.3); + background-color: rgba(0,0,0,0.2); z-index: 2; } @@ -955,10 +956,6 @@ transition: opacity .25s; opacity: 0; - &:first-child { - opacity: 1; - } - &.is-slideshow-active { opacity: 1; } @@ -989,13 +986,13 @@ .m-article-header__pip { display: inline-block; - color: $color__text--title-contrast; + color: $color__black--40; cursor: pointer; margin-right: 4px; &.is-slideshow-active { - color: $color__black--40; + color: $color__text--title-contrast; } .icon--circle { @@ -1016,10 +1013,21 @@ color: white; } + $magazine-intro-width-basis: ( + // derived from .o-grid-listing--2-col\@foobar + xsmall: colspan(grid-cols-to-colspan(2, 58, 6), 'xsmall'), + small: colspan(grid-cols-to-colspan(2), 'small'), + medium: colspan(grid-cols-to-colspan(2), 'medium'), + // derived from .o-grid-listing--2-col\@foobar + large: colspan(20.5, 'large'), + xlarge: colspan(20.5, 'xlarge'), + ); + .m-article-header__intro { @each $name, $point in $breakpoints { @include breakpoint('#{$name}') { width: map-get($magazine-intro-width, $name); + margin-right: calc(#{map-get($magazine-intro-width-basis, $name)} - #{map-get($magazine-intro-width, $name)}); } } @@ -1045,7 +1053,7 @@ @each $name, $point in ('small', 'medium', 'large', 'xlarge') { @include breakpoint('#{$name}') { - left: #{100% - map-get($magazine-intro-width, $name)}; + left: calc(100% - #{map-get($magazine-intro-width-basis, $name)}); bottom: #{map-get($journal-header-padding, $name) + $magazine-controls-offset}; } } @@ -1089,7 +1097,6 @@ .m-article-header__info-trigger { @each $name, $point in $breakpoints { @include breakpoint('#{$name}') { - right: colspan(1, $name); bottom: #{map-get($journal-header-padding, $name) + 20px}; } } @@ -1100,7 +1107,6 @@ @each $name, $point in $breakpoints { @include breakpoint('#{$name}') { - right: colspan(1, $name); bottom: #{map-get($journal-header-padding, $name) + 20px + $button-vertical-offset}; } } diff --git a/frontend/scss/molecules/_m-author.scss b/frontend/scss/molecules/_m-author.scss index 4342ebeb1e..8142e16ca8 100644 --- a/frontend/scss/molecules/_m-author.scss +++ b/frontend/scss/molecules/_m-author.scss @@ -62,6 +62,11 @@ .m-author .f-secondary { @include tucked-margin-top($f-secondary, ('xsmall': 12, 'medium+': 12)); flex: 0 0 auto; + max-width: 100%; +} + +.m-author .m-author__img + .f-secondary { + max-width: calc(100% - 52px); } .m-author a { diff --git a/frontend/scss/molecules/_m-cta-banner.scss b/frontend/scss/molecules/_m-cta-banner.scss index 6805e14556..7775d9b680 100644 --- a/frontend/scss/molecules/_m-cta-banner.scss +++ b/frontend/scss/molecules/_m-cta-banner.scss @@ -1,5 +1,9 @@ - .m-cta-banner { + display: block; + position: relative; + height: 240px; + overflow: hidden; + margin-top: 36px; & + * { @@ -15,146 +19,166 @@ } @include breakpoint('medium+') { + height: 200px; margin-top: 60px; & + * { margin-top: 60px; } } -} -.m-cta-banner__link { - display: block; - position: relative; - height: 240px; - overflow: hidden; + .m-cta-banner__txt { + position: absolute; + top: 46px; + left: 0; + right: 0; + z-index: 3; + + display: flex; + flex-direction: column; + justify-content: center; + + @include breakpoint('medium+') { + top: 0; + bottom: 0; + padding-right: colspan(20, medium); + } - @include breakpoint('small+') { - height: 200px; + @include breakpoint('large+') { + padding-right: colspan(13, large); + } + + @include breakpoint('xlarge') { + padding-right: colspan(11, xlarge); + } } -} -.m-cta-banner__link::after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 2; - background-color: rgba(0,0,0,0.2); -} + .m-cta-banner__action { + position: absolute; + right: 0; + bottom: 0; + left: auto; + bottom: auto; + top: 96px; + width: 100%; -.m-cta-banner__img { - z-index: 1; -} + @include breakpoint('medium+') { + top: 76px; + width: colspan(14, medium); + } -.m-cta-banner__img, -.m-cta-banner__img img, -.m-cta-banner__img video { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; - height: 100%; -} + @include breakpoint('large+') { + width: colspan(10, large); + } -.m-cta-banner--parallax .m-cta-banner__img { - top: -100px; - height: 340px; + @include breakpoint('xlarge') { + width: colspan(8, xlarge); + } - @include breakpoint('small+') { - height: 300px; + .btn { + display: block; + width: 100%; + + .m-cta-banner__link:hover &, + .m-cta-banner__link:focus:hover & { + border-color: $color__link--accent-hover; + background-color: $color__link--accent-hover; + color: $color__white; + } + } } -} -.m-cta-banner__img img, -.m-cta-banner__img video { - @include objectFitFix; - object-fit: cover; -} + .m-cta-banner__title.f-module-title-2 { + @include untuck(); + } -.m-cta-banner__txt { - position: absolute; - left: 20px; - right: 20px; - top: 0; - bottom: 20px; - z-index: 3; + .m-cta-banner__msg.f-list-2 { + @include untuck(); - @include breakpoint('small+') { - top: 20px; - left: colspan(3, small); - right: colspan(3, small); - padding-right: colspan(17, small); - } + margin-top: 16px; - @include breakpoint('medium+') { - left: colspan(3, medium); - right: colspan(3, medium); - padding-right: colspan(20, medium); + @include breakpoint('large+') { + margin-top: 24x + } } +} - @include breakpoint('large+') { - left: colspan(3, large); - right: colspan(3, large); - padding-right: colspan(13, large); +.m-cta-banner--with-image { + &::after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + background-color: rgba(0,0,0,0.2); } - @include breakpoint('xlarge') { - left: colspan(3, xlarge); - right: colspan(3, xlarge); - padding-right: colspan(11, xlarge); - } -} + .m-cta-banner__img { + z-index: 1; -.m-cta-banner__title, -.m-cta-banner__msg { - color: $color__text--title-contrast; -} + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; -.m-cta-banner__title.f-module-title-2 { - @include tucked-margin-top($f-module-title-2, ('xsmall': 40, 'small+': 48, 'large+': 60)); -} + // Position for parallax: + position: absolute; -.m-cta-banner__msg.f-list-2 { - @include tucked-margin-top($f-list-2, ('xsmall': 40, 'small+': 40, 'large+': 48)); -} + top: -100px; + height: 340px; -.m-cta-banner__action { - position: absolute; - left: 0; - right: 0; - bottom: 0; + @include breakpoint('small+') { + height: 300px; + } - @include breakpoint('small+') { - left: auto; - top: 56px; - bottom: auto; - width: colspan(14, small); - } + img, video { + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; + height: 100%; - @include breakpoint('medium+') { - width: colspan(14, medium); + @include objectFitFix; + object-fit: cover; + } } - @include breakpoint('large+') { - width: colspan(10, large); - } + .m-cta-banner__txt { + left: 20px; + right: 20px; + + @include breakpoint('small+') { + left: colspan(3, small); + right: colspan(3, small); + } - @include breakpoint('xlarge') { - width: colspan(8, xlarge); + @include breakpoint('medium+') { + left: colspan(3, medium); + right: colspan(3, medium); + } + + @include breakpoint('large+') { + left: colspan(3, large); + right: colspan(3, large); + } + + @include breakpoint('xlarge') { + left: colspan(3, xlarge); + right: colspan(3, xlarge); + } } -} -.m-cta-banner__action .btn { - display: block; - width: 100%; + .m-cta-banner__title, + .m-cta-banner__msg { + color: $color__text--title-contrast; + } - .m-cta-banner__link:hover &, - .m-cta-banner__link:focus:hover & { + .m-cta-banner__link:hover .btn, + .m-cta-banner__link:focus:hover .btn { border-color: $color__link--accent-hover; background-color: $color__link--accent-hover; color: $color__white; diff --git a/frontend/scss/molecules/_m-directions-block.scss b/frontend/scss/molecules/_m-directions-block.scss index 7c9ca64bdd..038a93b195 100644 --- a/frontend/scss/molecules/_m-directions-block.scss +++ b/frontend/scss/molecules/_m-directions-block.scss @@ -49,6 +49,18 @@ width: colspan(18, xlarge); margin-left: colspan(2, xlarge); } + + h3 { + @include breakpoint('small+') { + margin-top: 11px; + } + @include breakpoint('medium+') { + margin-top: 16px; + } + @include breakpoint('large+') { + margin-top: 0; + } + } } .m-directions-block__links { diff --git a/frontend/scss/molecules/_m-listing.scss b/frontend/scss/molecules/_m-listing.scss index 36bbfe1d31..41ad326037 100644 --- a/frontend/scss/molecules/_m-listing.scss +++ b/frontend/scss/molecules/_m-listing.scss @@ -122,6 +122,10 @@ padding-bottom: percentage(4 / 3); // 3:4 } +.m-listing__img--icon::before { + padding-bottom: 0; // 16:9 +} + .m-listing--hover-bar .m-listing__img::after { content: ''; position: absolute; @@ -1991,9 +1995,7 @@ $f-audio-subtitle: generate-font-obj( @include untuck; margin-bottom: 20px; - .f-tag { - text-transform: initial; - letter-spacing: 0.04em; + .f-secondary { color: $color__black--54; } } @@ -2195,6 +2197,7 @@ $f-audio-subtitle: generate-font-obj( // variant for Member Magazine .m-listing--magazine { + border-color: $color__rules--primary; .m-listing__meta > .f-tag { color: $color__plum; } @@ -2202,14 +2205,49 @@ $f-audio-subtitle: generate-font-obj( // variant for author pages .m-listing--author { - .m-listing__img img { - transition: none; + border-color: $color__rules--primary; + .m-listing__link:hover, + .m-listing__link:focus { + .m-listing__img img { + transform: none; + } } } -.m-listing--author:hover, -.m-listing--author:focus { - .m-listing__img img { - transform: none; +// variant for visit page +.m-listing--icon { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + + .m-listing__img { + @include breakpoint('small+') { + width: initial; + align-self: initial; + } + } + + svg { + width: 100px; + height: 100px; + margin-right: 20px; + + @include breakpoint('large') { + width: 120px; + height: 120px; + margin-right: 40px; + } + } + + .m-listing__meta { + flex-basis: 0; + min-height: initial; + padding: 20px 0; + + .f-body { + @include untuck(); + margin-top: 0; + } } } diff --git a/frontend/scss/molecules/_m-mini-promo.scss b/frontend/scss/molecules/_m-mini-promo.scss index e9f7f801a3..5d79249d0c 100644 --- a/frontend/scss/molecules/_m-mini-promo.scss +++ b/frontend/scss/molecules/_m-mini-promo.scss @@ -4,14 +4,11 @@ display: flex; flex-flow: row-reverse wrap; align-items: flex-start; - margin-top: 60px; + margin-top: 30px; padding-top: .2px; - @include breakpoint('small') { - margin-top: 40px; - } - @include breakpoint('small+') { + margin-top: 40px; flex-flow: row wrap; } @@ -82,9 +79,7 @@ padding-left: 0; @include breakpoint('small+') { - width: colspan(13, small); margin-top: 40px; - margin-left: colspan(2, small); } @include breakpoint('medium+') { diff --git a/frontend/scss/molecules/_m-table.scss b/frontend/scss/molecules/_m-table.scss index 6fc3f79884..13f4ecbe79 100644 --- a/frontend/scss/molecules/_m-table.scss +++ b/frontend/scss/molecules/_m-table.scss @@ -67,7 +67,6 @@ Intended for very simple m-tables.. .m-table table { width: 100%; - min-width: 500px; border-collapse: collapse; } @@ -83,6 +82,15 @@ Intended for very simple m-tables.. font-weight: normal; text-align: left; white-space: nowrap; + + @include breakpoint('xsmall') { + padding-right: 7px; + } +} + +.m-table.m-table--minimal th, +.m-table.m-table--minimal td { + border-top: 0; } .m-table th:first-child, @@ -90,6 +98,12 @@ Intended for very simple m-tables.. padding-left: 0; } +.m-table.m-table--minimal tr:last-child th, +.m-table.m-table--minimal tr:last-child td{ + border-bottom: 0; +} + + .m-table td[rowspan], .m-table td[colspan] { background: $color__bg--primary; diff --git a/frontend/scss/organisms/_o-artist-bio.scss b/frontend/scss/organisms/_o-artist-bio.scss index 9ff52b1703..5b0654880d 100644 --- a/frontend/scss/organisms/_o-artist-bio.scss +++ b/frontend/scss/organisms/_o-artist-bio.scss @@ -6,14 +6,12 @@ $bioBreakpoints: ( .o-artist-bio { position: relative; margin-top: 24px; + padding-top: 24px; @include breakpoint('small+') { margin-top: 40px; } - @include breakpoint('large+') { - padding-top: 40px; - } } .o-artist-bio::before { @@ -29,15 +27,22 @@ $bioBreakpoints: ( .o-artist-bio__inner { display: flex; position: relative; - flex-flow: row wrap; + flex-flow: column wrap; @each $name, $point in $bioBreakpoints { @include breakpoint('#{$name}') { + flex-flow: row wrap; margin-left: colspan(2, $name, 0, true); } } } +.o-author-bio .o-artist-bio__inner { + @include breakpoint('medium') { + flex-flow: row wrap; + } +} + .o-artist-bio__main, .o-artist-bio__image { width: 100%; @@ -50,17 +55,34 @@ $bioBreakpoints: ( } .o-author-bio .o-artist-bio__image { - @each $name, $point in $bioBreakpoints { + @each $name, $point in ('xsmall', 'small') { + @include breakpoint('#{$name}') { + width: 300px; + align-self: center; + } + } + + @each $name, $point in ('medium', 'large', 'xlarge') { @include breakpoint('#{$name}') { - width: calc(#{colspan(grid-cols-to-colspan(2), $name)} * .5); + // width: calc(#{colspan(grid-cols-to-colspan(2), $name)} * .5); + width: 300px; } } + + .m-media__img { + background: none; + } + + img { + border-radius: 50%; + } } .o-author-bio .o-artist-bio__main { - @each $name, $point in $bioBreakpoints { + @each $name, $point in ('medium', 'large', 'xlarge') { @include breakpoint('#{$name}') { - width: calc(#{colspan(grid-cols-to-colspan(2), $name)} * 1.5); + width: calc(#{colspan(58, $name)} - 300px - #{colspan(2, $name)}); + margin-left: colspan(2, #{$name}); } } } @@ -68,7 +90,7 @@ $bioBreakpoints: ( .o-author-bio .o-artist-bio__main .o-artist-bio__body { margin-top: 24px; - @include breakpoint('large+') { + @include breakpoint('medium+') { margin-top: 0; } } @@ -96,6 +118,17 @@ $bioBreakpoints: ( @extend %f-caption; margin-top: 8px; color: $color__text--secondary; + + p a { + @include text-underline(20px, $color__rules--primary); + padding-bottom: 1px; + color: $color__text--accent; + } + + p a:hover, + p a:focus { + @include text-underline(20px, $color__rules--brand); + } } .o-artist-bio__main { diff --git a/frontend/scss/organisms/_o-grid-listing.scss b/frontend/scss/organisms/_o-grid-listing.scss index da11639fe2..2519fe2f12 100644 --- a/frontend/scss/organisms/_o-grid-listing.scss +++ b/frontend/scss/organisms/_o-grid-listing.scss @@ -80,7 +80,8 @@ Basic flexed set up } @else { margin-left: colspan(2, #{$name}); } - border-top: 0 none; + border-top-style: none; + border-top-width: 0; } } } @@ -902,7 +903,8 @@ Draws boxes around each grid item @each $name, $point in $breakpoints { @include breakpoint('#{$name}') { &[class*="col@#{$name}"] > * { - border-top: thin solid; + border-top-style: solid; + border-top-width: thin; } } } diff --git a/frontend/scss/organisms/_o-visit.scss b/frontend/scss/organisms/_o-visit.scss index a69d98b4c0..35b6057ec3 100644 --- a/frontend/scss/organisms/_o-visit.scss +++ b/frontend/scss/organisms/_o-visit.scss @@ -10,6 +10,38 @@ } } +.o-visit .m-cta-banner { + margin-top: 0; + + & + * { + margin-top: 0; + } + + @include breakpoint('small+') { + margin-top: 0; + + & + * { + margin-top: 0; + } + } + + @include breakpoint('medium+') { + margin-top: 0; + + & + * { + margin-top: 0; + } + } + + + .m-title-bar { + margin-top: 0; + } +} + +.o-visit hr { + border-top: 1px solid $color__rules--quaternary; +} + .o-visit .m-title-bar { margin-top: 52px; diff --git a/frontend/scss/setup/_icons.scss b/frontend/scss/setup/_icons.scss index b49b6709ea..453cd91d73 100755 --- a/frontend/scss/setup/_icons.scss +++ b/frontend/scss/setup/_icons.scss @@ -34,6 +34,9 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + @@ -64,9 +67,15 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + + + + @@ -124,9 +133,18 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + + + + + + + @@ -136,6 +154,9 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + @@ -175,6 +196,9 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + @@ -187,6 +211,9 @@ More variants maybe added later, so anything thats not a 16px square SVG needs a + + + @@ -264,6 +291,11 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 24px; } +.icon--caution { + width: 200px; + height: 200px; +} + .icon--check { width: 16px; height: 16px; @@ -314,11 +346,21 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 24px; } +.icon--face-coverings { + width: 200px; + height: 200px; +} + .icon--filter--24 { width: 24px; height: 24px; } +.icon--floor-icon { + width: 200px; + height: 200px; +} + .icon--footer_map_120x92 { width: 120px; height: 92px; @@ -414,11 +456,26 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 56.9px; } +.icon--mobile-ticket { + width: 200px; + height: 200px; +} + .icon--new-window { width: 16px; height: 16px; } +.icon--no-checkroom { + width: 200px; + height: 200px; +} + +.icon--no-dining { + width: 200px; + height: 200px; +} + .icon--no-image { width: 80px; height: 56px; @@ -434,6 +491,11 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 16px; } +.icon--physical-distancing { + width: 200px; + height: 200px; +} + .icon--play { width: 16px; height: 16px; @@ -499,6 +561,11 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 24px; } +.icon--showing-symptoms { + width: 200px; + height: 200px; +} + .icon--slideshow--24 { width: 24px; height: 24px; @@ -519,6 +586,11 @@ The cloud front server caches icons, if you add a new icon, or edit an icon, you height: 24px; } +.icon--virtual-queue { + width: 200px; + height: 200px; +} + .icon--zoom--24 { width: 24px; height: 24px; diff --git a/frontend/scss/setup/_typography.scss b/frontend/scss/setup/_typography.scss index 5c80c38aac..d0b14b3a0d 100755 --- a/frontend/scss/setup/_typography.scss +++ b/frontend/scss/setup/_typography.scss @@ -393,6 +393,42 @@ $f-subheading-1: generate-font-obj( /*** +f-subheading-3 + +``` +

The quick brown fox,
jumps over the lazy dog

+``` + +***/ + +$f-subheading-3: generate-font-obj( + ( + font-family: $sans-serif-font, + font-family-loaded: $sans-serif-font--loaded, + font-loaded-class: $sans-serif-font-loaded-class, + settings: ( + 'xsmall': (font-size: 19, line-height: 26, letter-spacing: 0.01em, push: 0), + 'medium+': (font-size: 21, line-height: 30, push: 0), + 'xlarge': (font-size: 24, line-height: 34, push: 0) + ) + ) +); + +@mixin f-subheading-3() { + @include font-styles($f-subheading-3); + font-feature-settings: 'lnum' on; + // color: $color__text--title; +} + +%f-subheading-3, +.f-subheading-3, +%f-subheading-3-editorial, +.f-subheading-3-editorial { + @include f-subheading-3; +} + +/*** + f-body ``` diff --git a/frontend/scss/setup/mixins/_typography.scss b/frontend/scss/setup/mixins/_typography.scss index 84608595b7..4591d367a0 100755 --- a/frontend/scss/setup/mixins/_typography.scss +++ b/frontend/scss/setup/mixins/_typography.scss @@ -352,19 +352,7 @@ $f-ui: ( $pos - vertical position */ @mixin text-underline($pos: .85em, $underline: $color__text, $background: $color__white) { - background: { - image: linear-gradient(to bottom, rgba($underline, 0) 50%, rgba($underline, 1) 50%); - repeat: repeat-x; - size: 2px 2px; - position: 0 $pos; - } - text-decoration: none; - text-shadow: 0 .08em 0 $background, 0 -.08em 0 $background, .08em 0 0 $background, -.08em 0 0 $background; - - .s-print & { - text-decoration: underline; - text-shadow: none; - } + text-decoration: underline !important; } diff --git a/resources/assets/js/blocks/BlockFamilies.vue b/resources/assets/js/blocks/BlockFamilies.vue index c6cc7a8227..826cc43f6a 100644 --- a/resources/assets/js/blocks/BlockFamilies.vue +++ b/resources/assets/js/blocks/BlockFamilies.vue @@ -1,7 +1,7 @@ diff --git a/resources/assets/js/blocks/BlockWhat_To_Expect.vue b/resources/assets/js/blocks/BlockWhat_To_Expect.vue new file mode 100644 index 0000000000..73f52568ff --- /dev/null +++ b/resources/assets/js/blocks/BlockWhat_To_Expect.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/lang/de.json b/resources/lang/de.json index 826f3b67e1..acb9595bc3 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -12,7 +12,7 @@ "Explore all dining": "Entdecken Sie alle Restaurants", "FAQs": "FAQs", "Accessibility information": "Zugangsinformationen", - "More FAQs and guidelines": "Weitere FAQs und Richtlinien", + "More FAQs": "Weitere FAQs", "Tours": "Touren", "Families, Teens, and Educators": "Familien, Jugendliche und BerufstäTige im Bereich Bildung" } diff --git a/resources/lang/es.json b/resources/lang/es.json index 1e61dff50f..44cc867eb2 100644 --- a/resources/lang/es.json +++ b/resources/lang/es.json @@ -1,18 +1,18 @@ { "Visit": "Horarios", - "Hours": "de visita", + "Hours": "De visita", "Admission": "Entrada", "Children": "Niños", "Members": "Miembros", "Free": "Gratuito", "Directions": "Indicaciones", - "Located in the heart of Chicago—across from Millennium Park and steps from Lake Michigan—the Art Institute welcomes visitors at two entrances.": "Ubicado en el corazón de Chicago —enfrente del Parque del Milenio y a pasos del Lago Michigan— el Instituto de Arte recibe a los visitantes en dos entradas.", + "Located in the heart of Chicago—across from Millennium Park and steps from Lake Michigan—the Art Institute welcomes visitors at two entrances.": "Ubicado en el corazón de Chicago—enfrente del Parque del Milenio y a pasos del Lago Michigan—el Instituto de Arte recibe a los visitantes en dos entradas.", "Directions, Parking, and Public Transportation": "Indicaciones, estacionamiento y transporte público", "Dining": "Dónde comer", "Explore all dining": "Explorar todos los lugares para comer", "FAQs": "Preguntas frecuentes", "Accessibility information": "Información sobre facilidad de acceso", - "More FAQs and guidelines": "Más preguntas frecuentes e indicaciones", + "More FAQs": "Más preguntas frecuentes", "Tours": "Recorridos", "Families, Teens, and Educators": "Familias, adolescentes e professores" } diff --git a/resources/lang/fr.json b/resources/lang/fr.json index 5af7f297dd..b19a8ad91d 100644 --- a/resources/lang/fr.json +++ b/resources/lang/fr.json @@ -12,7 +12,7 @@ "Explore all dining": "Explorer toute la restauration", "FAQs": "FAQ", "Accessibility information": "Information sur l'accessibilité", - "More FAQs and guidelines": "Plus de questions et guides", + "More FAQs": "Plus de questions", "Tours": "Visites guidées", "Families, Teens, and Educators": "Familles, jeunes et éducateurs" } diff --git a/resources/lang/ja.json b/resources/lang/ja.json index 1a7a20bfcb..60c46b0917 100644 --- a/resources/lang/ja.json +++ b/resources/lang/ja.json @@ -12,7 +12,7 @@ "Explore all dining": "すべてのレストランを展開する", "FAQs": "よくある質問", "Accessibility information": "アクセス情報", - "More FAQs and guidelines": "その他の質問とガイドライン", + "More FAQs": "その他の質問とガイドライン", "Tours": "ツアー", "Families, Teens, and Educators": "ファミリー、ティーン、教師向け" } diff --git a/resources/lang/pt.json b/resources/lang/pt.json index ab6bb599ee..b38cba5d73 100644 --- a/resources/lang/pt.json +++ b/resources/lang/pt.json @@ -12,7 +12,7 @@ "Explore all dining": "Explore todos os restaurantes", "FAQs": "Perguntas frequentes", "Accessibility information": "Informações de acessibilidade", - "More FAQs and guidelines": "Mais Perguntas frequentes e orientações", + "More FAQs": "Mais Perguntas frequentes", "Tours": "Visitas", "Families, Teens, and Educators": "Famílias, adolescentes e professores" } diff --git a/resources/lang/zh.json b/resources/lang/zh.json index f9056869b1..693964a385 100644 --- a/resources/lang/zh.json +++ b/resources/lang/zh.json @@ -12,7 +12,7 @@ "Explore all dining": "餐饮设施指南", "FAQs": "常见问题", "Accessibility information": "无障碍服务信息", - "More FAQs and guidelines": "更多常见问题及指南", + "More FAQs": "更多常见问题及指南", "Tours": "导览服务", "Families, Teens, and Educators": "家庭,青少年和教育工作者" } diff --git a/resources/views/admin/artists/form.blade.php b/resources/views/admin/artists/form.blade.php index c08afad041..20a254b635 100644 --- a/resources/views/admin/artists/form.blade.php +++ b/resources/views/admin/artists/form.blade.php @@ -15,9 +15,12 @@ 'note' => 'Minimum image width 2000px' ]) - @formField('input', [ + @formField('wysiwyg', [ 'name' => 'caption', - 'label' => 'Caption' + 'label' => 'Caption', + 'toolbarOptions' => [ + 'italic', 'link' + ], ]) @formField('input', [ diff --git a/resources/views/admin/blocks/families.blade.php b/resources/views/admin/blocks/families.blade.php index 85044ea9ca..4fd766361b 100644 --- a/resources/views/admin/blocks/families.blade.php +++ b/resources/views/admin/blocks/families.blade.php @@ -27,14 +27,14 @@ @formField('input', [ 'name' => 'link_label', 'field_name' => 'link_label', - 'label' => 'Audience link Label', + 'label' => 'Link Label', 'required' => true, 'translated' => true ]) @formField('input', [ 'name' => 'external_link', 'field_name' => 'external_link', - 'label' => 'Audience link', + 'label' => 'Link URL', 'required' => true ]) diff --git a/resources/views/admin/blocks/what_to_expect.blade.php b/resources/views/admin/blocks/what_to_expect.blade.php new file mode 100644 index 0000000000..84287f1cd9 --- /dev/null +++ b/resources/views/admin/blocks/what_to_expect.blade.php @@ -0,0 +1,15 @@ +
+ @formField('select', [ + 'name' => 'icon_type', + 'label' => 'Icon', + 'options' => \App\Models\Page::getIconTypes(), + 'default' => 0 + ]) + @formField('input', [ + 'name' => 'text', + 'field_name' => 'text', + 'label' => 'Text', + 'required' => true, + 'translated' => true + ]) +
diff --git a/resources/views/admin/exhibitions/form.blade.php b/resources/views/admin/exhibitions/form.blade.php index 08b4d34dbc..ce3268b959 100644 --- a/resources/views/admin/exhibitions/form.blade.php +++ b/resources/views/admin/exhibitions/form.blade.php @@ -115,7 +115,7 @@ 'event', 'paragraph', 'image', 'video', 'gallery', 'media_embed', 'quote', 'list', 'accordion', 'newsletter_signup_inline', 'timeline', 'link', 'artwork', 'artworks', - 'hr', 'split_block', 'tour_stop', 'button', 'mobile_app', '3d_model' + 'hr', 'split_block', 'tour_stop', 'button', 'mobile_app', '3d_model', '360_embed', '360_modal' ]) ]) @stop diff --git a/resources/views/admin/pages/form_visit.blade.php b/resources/views/admin/pages/form_visit.blade.php index c900c166c3..c39427e10c 100644 --- a/resources/views/admin/pages/form_visit.blade.php +++ b/resources/views/admin/pages/form_visit.blade.php @@ -20,6 +20,13 @@ @section('fieldsets') + @formField('input', [ + 'name' => 'visit_hour_intro', + 'label' => 'Intro text', + 'type' => 'textarea', + 'translated' => true + ]) + @formField('medias', [ 'name' => 'visit_featured_hour', 'label' => 'Image', @@ -43,6 +50,50 @@ @formField('repeater', ['type' => 'featured_hours']) + + @formField('input', [ + 'name' => 'visit_cta_module_header', + 'label' => 'Header', + 'translated' => true, + ]) + + @formField('wysiwyg', [ + 'name' => 'visit_cta_module_body', + 'label' => 'Body', + 'toolbarOptions' => [ + 'italic' + ], + 'translated' => true, + ]) + + @formField('input', [ + 'name' => 'visit_cta_module_button_text', + 'label' => 'Button text', + 'translated' => true, + ]) + + @formField('input', [ + 'name' => 'visit_cta_module_action_url', + 'label' => 'Button URL', + 'note' => 'e.g. https://sales.artic.edu/admissions', + ]) + + + + @formField('input', [ + 'name' => 'visit_what_to_expect_more_text', + 'field_name' => 'visit_what_to_expect_more_text', + 'label' => 'More link text', + 'translated' => true + ]) + @formField('input', [ + 'name' => 'visit_what_to_expect_more_link', + 'field_name' => 'visit_what_to_expect_more_link', + 'label' => 'More link' + ]) + @formField('repeater', ['type' => 'whatToExpects']) + + @formField('wysiwyg', [ 'name' => 'visit_admission_description', @@ -74,40 +125,42 @@ ]) - - @formField('medias', [ - 'name' => 'visit_city_pass', - 'label' => 'Image', - 'note' => 'Minimum image width 2000px' + + @formField('input', [ + 'name' => 'visit_faq_accessibility_link', + 'label' => 'Accessibility information link' ]) @formField('input', [ - 'name' => 'visit_city_pass_title', - 'field_name' => 'visit_city_pass_title', - 'label' => 'Title', - 'required' => true, - 'translated' => true + 'name' => 'visit_faq_more_link', + 'label' => "More FAQs and guidelines link" + ]) + + @formField('repeater', ['type' => 'faqs']) + + + + @formField('medias', [ + 'name' => 'visit_accessibility', + 'label' => 'Image', ]) + @formField('input', [ - 'name' => 'visit_city_pass_text', - 'field_name' => 'visit_city_pass_text', - 'label' => 'Text', - 'rows' => 3, + 'name' => 'visit_accessibility_text', + 'label' => 'Accessibility text', 'type' => 'textarea', 'translated' => true ]) + @formField('input', [ - 'name' => 'visit_city_pass_button_label', - 'field_name' => 'visit_city_pass_button_label', - 'label' => 'Button label', - 'required' => true, + 'name' => 'visit_accessibility_link_text', + 'label' => 'Link text', 'translated' => true ]) + @formField('input', [ - 'name' => 'visit_city_pass_link', - 'field_name' => 'visit_city_pass_link', - 'label' => 'Button link', - 'required' => true, - 'translated' => true + 'name' => 'visit_accessibility_link_url', + 'label' => 'Link URL', + 'note' => 'Accepts HTML tags', ]) @@ -132,43 +185,17 @@ 'required' => true ]) - - @formField('repeater', ['type' => 'locations', 'max' => 2]) - - - @formField('input', [ - 'name' => 'visit_dining_link', - 'label' => 'Explore all dining link' + 'name' => 'visit_parking_accessibility_link', + 'field_name' => 'visit_parking_accessibility_link', + 'label' => 'Visitors with Mobility Needs', ]) - @formField('repeater', ['type' => 'dining_hours']) - - - - @formField('input', [ - 'name' => 'visit_faq_accessibility_link', - 'label' => 'Accessibility information link' - ]) - @formField('input', [ - 'name' => 'visit_faq_more_link', - 'label' => "More FAQs and guidelines link" - ]) - - @formField('repeater', ['type' => 'faqs']) - - - - @formField('browser', [ - 'routePrefix' => 'generic', - 'max' => 3, - 'moduleName' => 'genericPages', - 'name' => 'visitTourPages', - 'label' => 'Tour pages' - ]) + @formField('repeater', ['type' => 'locations', 'max' => 2]) - + @formField('repeater', ['type' => 'families']) + @stop diff --git a/resources/views/components/atoms/_link.blade.php b/resources/views/components/atoms/_link.blade.php index ce6591ec15..e1e81dd844 100644 --- a/resources/views/components/atoms/_link.blade.php +++ b/resources/views/components/atoms/_link.blade.php @@ -1,2 +1,2 @@ -<{{ $tag ?? 'a' }} class="link {{ (isset($font)) ? $font : 'f-link' }}{{ (isset($variation)) ? ' '.$variation : '' }}"{!! (isset($href)) ? ' href="'.$href. '"' : '' !!}>{{ $slot }} +<{{ $tag ?? 'a' }} class="link {{ (isset($font)) ? $font : 'f-link' }}{{ (isset($variation)) ? ' '.$variation : '' }}"{{ (isset($gtmAttributes)) ? ' '.$gtmAttributes : '' }}{!! (isset($href)) ? ' href="'.$href. '"' : '' !!}>{{ $slot }} diff --git a/resources/views/components/blocks/_blocks.blade.php b/resources/views/components/blocks/_blocks.blade.php index 7269a77749..0150e46eaf 100644 --- a/resources/views/components/blocks/_blocks.blade.php +++ b/resources/views/components/blocks/_blocks.blade.php @@ -74,7 +74,7 @@ @endif @if ($block['type'] === 'become-a-member') - @component('components.molecules._m-cta-banner----become-a-member') + @component('components.molecules._m-cta-banner') @slot('variation', 'o-blocks__block') @endcomponent @endif diff --git a/resources/views/components/molecules/_m-article-actions----journal-issue.blade.php b/resources/views/components/molecules/_m-article-actions----journal-issue.blade.php index 2e5abb7288..0fca64e50d 100644 --- a/resources/views/components/molecules/_m-article-actions----journal-issue.blade.php +++ b/resources/views/components/molecules/_m-article-actions----journal-issue.blade.php @@ -27,7 +27,7 @@ @slot('href', $issue->title) @slot('dataAttributes',' data-ajax-scroll-target="collection"') @slot('variation', 'tag--journal tag--senary tag--w-image') - @slot('gtmAttributes', 'data-gtm-event="' . getUtf8Slug( $issue->title ) . '" data-gtm-event-action="' . $seo->title . '" data-gtm-event-category="journal-sidebar-issue"') + @slot('gtmAttributes', 'data-gtm-event="' . getUtf8Slug( $issue->title ) . '" data-gtm-event-category="journal-sidebar-issue"') @if (!empty($issue->imageFront('hero', 'default'))) @component('components.atoms._img') @slot('image', $issue->imageFront('hero', 'default')) diff --git a/resources/views/components/molecules/_m-article-actions----magazine-issue.blade.php b/resources/views/components/molecules/_m-article-actions----magazine-issue.blade.php index c639b51f01..48faf2cfe1 100644 --- a/resources/views/components/molecules/_m-article-actions----magazine-issue.blade.php +++ b/resources/views/components/molecules/_m-article-actions----magazine-issue.blade.php @@ -8,53 +8,55 @@ -

The Member Magazine is a curated selection of exhibitions, events, and behind-the-scenes at the Art Institute of Chicago. The magazine comes out 6 times a year.

+

The Art Institute magazine is a quarterly publication offering members an in-depth look at our collection, exhibitions, and ongoing initiatives.


-

Become a member or renew your membership.

+

Become a member or renew your membership.


Stay connected

-
+ @if (isset($issues) && $issues->count() > 1) +
- + + @endif
diff --git a/resources/views/components/molecules/_m-article-header----gallery.blade.php b/resources/views/components/molecules/_m-article-header----gallery.blade.php index a6213fd5ec..406ac3a489 100644 --- a/resources/views/components/molecules/_m-article-header----gallery.blade.php +++ b/resources/views/components/molecules/_m-article-header----gallery.blade.php @@ -80,7 +80,7 @@ @slot('dataAttributes', 'data-gallery-module360') @slot('behavior', 'triggerMediaModal') @slot('ariaLabel', '360 Viewer') - @slot('gtmAttributes', 'data-gtm-event="360-open-modal" data-gtm-event-action="' . $title . '" data-gtm-event-category="in-page"') + @slot('gtmAttributes', 'data-gtm-event="360-open-modal" data-gtm-event-category="in-page"') @endcomponent - @endif - + @endif + @if(isset($module3d) && $module3d)
  • @component('components.molecules._m-viewer-3d') @slot('type', 'modal') @@ -115,7 +115,7 @@ @slot('title', $title) @endcomponent
  • - @endif + @endif @if(isset($isPublicDomain) && $isPublicDomain)
  • @@ -192,7 +192,8 @@ @if (isset($image['iiifId'])) data-gallery-img-iiifId="{{ $image['iiifId'] }}" @endif - data-gtm-event="{{$image['shareTitle']}}" data-gtm-event-action="{{$title}}" data-gtm-event-category="in-page" + data-gtm-event="{{$image['shareTitle']}}" + data-gtm-event-category="in-page" aria-label="show alternative image" disabled >Show this image diff --git a/resources/views/components/molecules/_m-article-header----magazine.blade.php b/resources/views/components/molecules/_m-article-header----magazine.blade.php index 0b9743e545..b89ce07859 100644 --- a/resources/views/components/molecules/_m-article-header----magazine.blade.php +++ b/resources/views/components/molecules/_m-article-header----magazine.blade.php @@ -1,9 +1,10 @@ <{{ $tag ?? 'header' }} class="m-article-header m-article-header--publication m-article-header--magazine" data-behavior="magazineHeader">
    @if (isset($images)) - @foreach ($images as $image) { + @foreach ($images as $key => $image) @component('components.atoms._img') @slot('image', $image) + @slot('class', $key === 0 ? 'is-slideshow-active' : null) @slot('settings', array( 'srcset' => array(300,600,1000,1500,3000), 'sizes' => '100vw', @@ -20,7 +21,7 @@
    @if (isset($intro)) @component('components.blocks._text') - @slot('font', 'f-subheading-1') + @slot('font', 'f-subheading-3') @slot('variation', 'm-article-header__intro') @slot('tag', 'div') {!! SmartyPants::defaultTransform($intro) !!} diff --git a/resources/views/components/molecules/_m-aside-newsletter.blade.php b/resources/views/components/molecules/_m-aside-newsletter.blade.php index e961ff2559..b6510e5ab6 100644 --- a/resources/views/components/molecules/_m-aside-newsletter.blade.php +++ b/resources/views/components/molecules/_m-aside-newsletter.blade.php @@ -9,7 +9,7 @@ {{ csrf_field() }} - + {{-- Do not show for newsletter block module --}} diff --git a/resources/views/components/molecules/_m-cta-banner----become-a-member.blade.php b/resources/views/components/molecules/_m-cta-banner----become-a-member.blade.php deleted file mode 100644 index 0e969ebcdf..0000000000 --- a/resources/views/components/molecules/_m-cta-banner----become-a-member.blade.php +++ /dev/null @@ -1,43 +0,0 @@ -@php - if (!isset($href)) { - $href = '#'; - } - if (!isset($image)) { - $image = null; - } - if (!isset($header)) { - $header = null; - } - if (!isset($body)) { - $body = null; - } - if (!isset($button_text)) { - $button_text = null; - } -@endphp - diff --git a/resources/views/components/molecules/_m-cta-banner.blade.php b/resources/views/components/molecules/_m-cta-banner.blade.php new file mode 100644 index 0000000000..7da2778202 --- /dev/null +++ b/resources/views/components/molecules/_m-cta-banner.blade.php @@ -0,0 +1,52 @@ +@php + $tag = $tag ?? 'aside'; + + $href = $href ?? '#'; + $image = $image ?? null; + $header = $header ?? null; + $body = $body ?? null; + $button_text = $button_text ?? null; + + // TODO: Make this an option? + $isBigLink = isset($image); +@endphp +<{{ $tag }} class="m-cta-banner{{ isset($image) ? ' m-cta-banner--with-image' : '' }}{{ (isset($variation)) ? ' '.$variation : '' }}"{!! isset($image) ? ' data-behavior="bannerParallax"' : '' !!}> + @if ($isBigLink) + + @endif + @if (isset($image)) +
    + @component('components.atoms._img') + @slot('image', $image) + @slot('settings', array( + 'fit' => 'crop', + 'ratio' => '25:4', + 'srcset' => array(300,600,1000,1500,2000), + 'sizes' => aic_imageSizes(array( + 'xsmall' => '58', + 'small' => '58', + 'medium' => '58', + 'large' => '58', + 'xlarge' => '58', + )), + )) + @endcomponent +
    + @endif +
    + @if ($isBigLink) + + @endif + diff --git a/resources/views/components/molecules/_m-date-listing.blade.php b/resources/views/components/molecules/_m-date-listing.blade.php index 5947541e14..ca6362ecd2 100644 --- a/resources/views/components/molecules/_m-date-listing.blade.php +++ b/resources/views/components/molecules/_m-date-listing.blade.php @@ -11,7 +11,7 @@ @slot('item', $item) @slot('variation', 'm-listing--row') @slot('imageSettings', $imageSettings ?? null) - @slot('gtmAttributes', 'data-gtm-event="' . $item->title . '" data-gtm-event-action="' . ($exhibitionTitle ?? $seo->title) . '" data-gtm-event-category="nav-link"') + @slot('gtmAttributes', 'data-gtm-event="' . $item->title . '" data-gtm-event-category="nav-link"') @endcomponent @endforeach @@ -26,7 +26,7 @@ @slot('hideShortDesc', true) @slot('variation', 'm-listing--row m-listing--secondary') @slot('imageSettings', $imageSettingsOnGoing ?? null) - @slot('gtmAttributes', 'data-gtm-event="' . $item->title . '" data-gtm-event-action="' . ($exhibitionTitle ?? $seo->title) . '" data-gtm-event-category="nav-link"') + @slot('gtmAttributes', 'data-gtm-event="' . $item->title . '" data-gtm-event-category="nav-link"') @endcomponent @endforeach diff --git a/resources/views/components/molecules/_m-listing----icon.blade.php b/resources/views/components/molecules/_m-listing----icon.blade.php new file mode 100644 index 0000000000..f091a85132 --- /dev/null +++ b/resources/views/components/molecules/_m-listing----icon.blade.php @@ -0,0 +1,13 @@ +<{{ $tag ?? 'li' }} class="m-listing m-listing--icon{{ (isset($variation)) ? ' '.$variation : '' }}"> + + + + + @component('components.atoms._title') + @slot('font', $titleFont ?? 'f-body') + @slot('title', $item['text']) + @endcomponent + + diff --git a/resources/views/components/molecules/_m-listing----publication.blade.php b/resources/views/components/molecules/_m-listing----publication.blade.php index 5c1336ca1b..ec06105a8c 100644 --- a/resources/views/components/molecules/_m-listing----publication.blade.php +++ b/resources/views/components/molecules/_m-listing----publication.blade.php @@ -36,7 +36,7 @@
    @if ($author_display) - {{ $author_display }} + {{ $author_display }} @endif diff --git a/resources/views/components/molecules/_m-media.blade.php b/resources/views/components/molecules/_m-media.blade.php index 57058d3bce..3d9afff15b 100644 --- a/resources/views/components/molecules/_m-media.blade.php +++ b/resources/views/components/molecules/_m-media.blade.php @@ -122,7 +122,8 @@ global $_figureCount; @endphp -<{{ $tag ?? 'figure' }} {!! isset($_figureCount) ? 'id="fig-' . $_figureCount . '" ' : '' !!} data-type="{{ $type }}"{!! $hasRestriction ? ' data-restricted="true"' : '' !!} class="m-media m-media--{{ $size }}{{ (isset($item['variation'])) ? ' '.$item['variation'] : '' }}{{ (isset($variation)) ? ' '.$variation : '' }}"> + +<{{ $tag ?? 'figure' }} {!! isset($_figureCount) ? 'id="fig-' . $_figureCount . '" ' : '' !!} data-type="{{ $type }}" data-title="{{ $item['captionTitle'] ?? $item['caption'] ?? $media['caption'] ?? (isset($media['title']) && $media['title'] ? ' data-title="'.$media['title'].'"' : '') }}"{!! $hasRestriction ? ' data-restricted="true"' : '' !!} class="m-media m-media--{{ $size }}{{ (isset($item['variation'])) ? ' '.$item['variation'] : '' }}{{ (isset($variation)) ? ' '.$variation : '' }}"{!! (isset($item['gtmAttributes'])) ? ' '.$item['gtmAttributes'].'' : '' !!}>
    @if ($type == 'image') @if ($showUrlFullscreen) diff --git a/resources/views/components/molecules/_m-search-actions----collection.blade.php b/resources/views/components/molecules/_m-search-actions----collection.blade.php index a5b687cdfd..a11c131413 100644 --- a/resources/views/components/molecules/_m-search-actions----collection.blade.php +++ b/resources/views/components/molecules/_m-search-actions----collection.blade.php @@ -6,7 +6,7 @@
  • - + On view
  • diff --git a/resources/views/components/molecules/_m-search-bar.blade.php b/resources/views/components/molecules/_m-search-bar.blade.php index adf5cb0041..eebe026a8c 100644 --- a/resources/views/components/molecules/_m-search-bar.blade.php +++ b/resources/views/components/molecules/_m-search-bar.blade.php @@ -32,7 +32,14 @@ - + @php + $limitTo = request()->segment(count(request()->segments())); + $limitTo = Str::title(str_replace('-', ' ', $limitTo)); + if ($limitTo == 'Artists') { + $limitTo = 'Artists/Cultures'; + } + @endphp + @endif diff --git a/resources/views/components/molecules/_m-ticket-actions----exhibition.blade.php b/resources/views/components/molecules/_m-ticket-actions----exhibition.blade.php index 5280fca388..3011010fc1 100644 --- a/resources/views/components/molecules/_m-ticket-actions----exhibition.blade.php +++ b/resources/views/components/molecules/_m-ticket-actions----exhibition.blade.php @@ -5,7 +5,7 @@ @slot('variation', 'btn--full') @slot('tag', 'a') @slot('href', 'https://sales.artic.edu/admissions') - @slot('gtmAttributes', 'data-gtm-event="buy-tickets" data-gtm-event-action="' . $exhibitionName . '" data-gtm-event-category="nav-cta-button"') + @slot('gtmAttributes', 'data-gtm-event="buy-tickets" data-gtm-event-category="nav-cta-button"') Buy tickets @endcomponent @@ -14,7 +14,7 @@ @slot('variation', 'btn--secondary btn--full') @slot('tag', 'a') @slot('href', 'https://sales.artic.edu/memberships') - @slot('gtmAttributes', 'data-gtm-event="become-a-member" data-gtm-event-action="' . $exhibitionName . '" data-gtm-event-category="nav-cta-button"') + @slot('gtmAttributes', 'data-gtm-event="become-a-member" data-gtm-event-category="nav-cta-button"') Become a member @endcomponent diff --git a/resources/views/components/organisms/_o-artist-bio.blade.php b/resources/views/components/organisms/_o-artist-bio.blade.php index f90c42d0c3..ce871f21e5 100644 --- a/resources/views/components/organisms/_o-artist-bio.blade.php +++ b/resources/views/components/organisms/_o-artist-bio.blade.php @@ -1,6 +1,7 @@
    @if ($item->imageFront('hero')) + {{-- TODO: This causes two `figure` blocks to be nested in each other --}}
    {{-- Mimicking an image block here. --}} @component('components.molecules._m-media') diff --git a/resources/views/components/organisms/_o-editors-note----magazine.blade.php b/resources/views/components/organisms/_o-editors-note----magazine.blade.php index efd5677705..58fd34be3c 100644 --- a/resources/views/components/organisms/_o-editors-note----magazine.blade.php +++ b/resources/views/components/organisms/_o-editors-note----magazine.blade.php @@ -2,6 +2,7 @@ @component('components.atoms._link') @slot('font', '') @slot('href', $articleLink) + @slot('gtmAttributes', $gtmAttributes) @component('components.blocks._text') @slot('font', 'f-tag') diff --git a/resources/views/partials/_footer.blade.php b/resources/views/partials/_footer.blade.php index 012f37323d..82e077e7d8 100644 --- a/resources/views/partials/_footer.blade.php +++ b/resources/views/partials/_footer.blade.php @@ -88,10 +88,10 @@
    diff --git a/resources/views/partials/_header.blade.php b/resources/views/partials/_header.blade.php index 8a21e02ca2..287167fe92 100644 --- a/resources/views/partials/_header.blade.php +++ b/resources/views/partials/_header.blade.php @@ -42,16 +42,16 @@

    Primary Navigation

    @@ -60,9 +60,9 @@ @if ($_hours['general']) diff --git a/resources/views/partials/_search.blade.php b/resources/views/partials/_search.blade.php index dbf86f7df5..1a61a039c7 100644 --- a/resources/views/partials/_search.blade.php +++ b/resources/views/partials/_search.blade.php @@ -1,4 +1,4 @@ -