Browse Source

Merge branch 'dev' into mix

pull/9/head
Ned Zimmerman 8 years ago
parent
commit
11c2589530
No known key found for this signature in database
GPG Key ID: FF56334A013120CA
  1. 1
      .gitignore
  2. 70
      app/activation.php
  3. 81
      app/admin.php
  4. 10
      app/controllers/About.php
  5. 93
      app/controllers/App.php
  6. 66
      app/controllers/FrontPage.php
  7. 111
      app/controllers/PageCatalog.php
  8. 15
      app/filters.php
  9. 59
      app/helpers.php
  10. 38
      app/intervention.php
  11. 132
      app/setup.php
  12. 24
      app/widgets.php
  13. 86
      app/widgets/linkbutton.php
  14. 95
      app/widgets/pagebutton.php
  15. 3
      composer.json
  16. 51
      composer.lock
  17. 3
      package.json
  18. 4
      resources/assets/build/webpack.config.js
  19. BIN
      resources/assets/images/banner-desktop.jpg
  20. BIN
      resources/assets/images/banner-mobile.jpg
  21. BIN
      resources/assets/images/banner-two.jpg
  22. BIN
      resources/assets/images/banner.jpg
  23. BIN
      resources/assets/images/catalog-header.jpg
  24. BIN
      resources/assets/images/header.jpg
  25. 1
      resources/assets/images/left-arrow.svg
  26. BIN
      resources/assets/images/logo.png
  27. 1
      resources/assets/images/logo.svg
  28. BIN
      resources/assets/images/logo@2x.png
  29. BIN
      resources/assets/images/pb.png
  30. BIN
      resources/assets/images/pb@2x.png
  31. 1
      resources/assets/images/right-arrow.svg
  32. 7
      resources/assets/scripts/main.js
  33. 5
      resources/assets/scripts/routes/about.js
  34. 101
      resources/assets/scripts/routes/catalog.js
  35. 58
      resources/assets/scripts/routes/home.js
  36. 8
      resources/assets/styles/common/_functions.scss
  37. 56
      resources/assets/styles/common/_global.scss
  38. 7
      resources/assets/styles/common/_variables.scss
  39. 60
      resources/assets/styles/components/_buttons.scss
  40. 93
      resources/assets/styles/components/_forms.scss
  41. 1
      resources/assets/styles/components/_grid.scss
  42. 20
      resources/assets/styles/layouts/_footer.scss
  43. 61
      resources/assets/styles/layouts/_header.scss
  44. 266
      resources/assets/styles/layouts/_pages.scss
  45. 514
      resources/assets/styles/layouts/pages/_catalog.scss
  46. 404
      resources/assets/styles/layouts/pages/_front-page.scss
  47. 1
      resources/assets/styles/main.scss
  48. 5
      resources/functions.php
  49. 71
      resources/views/front-page.blade.php
  50. 67
      resources/views/page-catalog.blade.php
  51. 17
      resources/views/partials/book.blade.php
  52. 22
      resources/views/partials/contact-form.blade.php
  53. 11
      resources/views/partials/footer.blade.php
  54. 7
      resources/views/partials/front-page-block.blade.php
  55. 27
      resources/views/partials/front-page-catalog.blade.php
  56. 20
      resources/views/partials/header.blade.php
  57. 364
      yarn.lock

1
.gitignore vendored

@ -1,6 +1,7 @@
# Include your project-specific ignores in this file
# Read about how to use .gitignore: https://help.github.com/articles/ignoring-files
.cache-loader
.sass-cache
dist
node_modules
npm-debug.log

70
app/activation.php

@ -0,0 +1,70 @@
<?php
namespace Aldine;
add_action('after_switch_theme', function () {
$default_pages = [
'about' => [
'post_title' => __('About', 'aldine'),
// @codingStandardsIgnoreStart
'post_content' => apply_filters('pb_root_about_page_content', __('Pressbooks is simple book production software. You can use Pressbooks to publish textbooks, scholarly monographs, syllabi, fiction and non-fiction books, white papers, and more in multiple formats including:
<ul><li>MOBI (for Kindle ebooks)</li>
<li>EPUB (for all other ebookstores)</li>
<li>designed PDF (for print-on-demand and digital distribution)</li></ul>
Pressbooks is used by educational institutions around the world as well as authors and publishers.
For more information about Pressbooks, see <a href="https://pressbooks.com/about">here</a>.', 'aldine'))
// @codingstandardsIgnoreEnd
],
'help' => [
'post_title' => __('Help', 'aldine'),
// @codingStandardsIgnoreStart
'post_content' => apply_filters('pb_root_help_page_content', __('The easiest way to get started with Pressbooks is to follow our <a href="https://pressbooks.com/how-to-make-a-book-with-pressbooks">4 Step Guide to Making a Book on Pressbooks</a>. Or, you can review our <a href="https://guide.pressbooks.com/">Guide to Using Pressbooks</a>.
If you require further assistance, please contact your network manager.', 'aldine'))
// @codingstandardsIgnoreEnd
],
'catalog' => [
'post_title' => __('Catalog', 'aldine'),
'post_content' => ''
],
'home' => [
'post_title' => __('Home', 'aldine'),
'post_content' => ''
],
];
if (! get_site_option('pb_aldine_activated')) {
// Add our pages
$pages = [];
foreach ($default_pages as $slug => $page) {
$check = get_page_by_path($slug);
if (empty($check)) {
$pages[$slug] = wp_insert_post(array_merge($page, ['post_type' => 'page', 'post_status' => 'publish']));
} else {
$pages[$slug] = $check->ID;
}
}
// Set front page to Home
update_option('show_on_front', 'page');
update_option('page_on_front', $pages['home']);
// Remove content generated by wp_install_defaults
if (! wp_delete_post(1, true)) {
return;
}
if (! wp_delete_post(2, true)) {
return;
}
if (! wp_delete_comment(1, true)) {
return;
}
// Add "pb_aldine_activated" site option to enable check above
add_site_option('pb_aldine_activated', true);
}
});

81
app/admin.php

@ -14,6 +14,49 @@ add_action('customize_register', function (\WP_Customize_Manager $wp_customize)
bloginfo('name');
}
]);
// Add settings
foreach ([
[
'slug' => 'primary',
'hex' => '#b01109',
'label' => __('Primary Color', 'aldine'),
'description' => __('Primary color, used for links and other primary elements.', 'aldine'),
],
[
'slug' => 'accent',
'hex' => '#015d75',
'label' => __('Accent Color', 'aldine'),
'description' => __('Accent color, used for flourishes and secondary elements.', 'aldine'),
],
[
'slug' => 'primary_fg',
'hex' => '#ffffff',
'label' => __('Primary Foreground Color', 'aldine'),
'description' => __('Used for text on a primary background.', 'aldine'),
],
[
'slug' => 'accent_fg',
'hex' => '#ffffff',
'label' => __('Accent Foreground Color', 'aldine'),
'description' => __('Used for text on an accent color background.', 'aldine'),
],
] as $color) {
$wp_customize->add_setting("pb_network_color_{$color['slug']}", [
'type' => 'option',
'default' => $color['hex'],
]);
$wp_customize->add_control(new \WP_Customize_Color_Control(
$wp_customize,
"pb_network_color_{$color['slug']}",
[
'label' => $color['label'],
'section' => 'colors',
'description' => $color['description'],
'settings' => "pb_network_color_{$color['slug']}",
]
));
}
$wp_customize->add_section('pb_network_social', [
'title' => __('Social Media', 'aldine'),
'priority' => 30,
@ -36,25 +79,50 @@ add_action('customize_register', function (\WP_Customize_Manager $wp_customize)
'section' => 'pb_network_social',
'settings' => 'pb_network_twitter',
]);
$wp_customize->add_section('pb_network_catalog', [
'title' => __('Catalog', 'aldine'),
'priority' => 20,
$wp_customize->add_section('pb_front_page_catalog', [
'title' => __('Front Page Catalog', 'aldine'),
'priority' => 25,
]);
$wp_customize->add_setting('pb_front_page_catalog', [
'type' => 'option',
]);
$wp_customize->add_setting('pb_front_page_catalog');
$wp_customize->add_control('pb_front_page_catalog', [
'label' => __('Show Front Page Catalog', 'aldine'),
'section' => 'pb_network_catalog',
'section' => 'pb_front_page_catalog',
'settings' => 'pb_front_page_catalog',
'type' => 'checkbox'
]);
$wp_customize->add_setting('pb_front_page_catalog_title', [
'type' => 'option',
'sanitize_callback' => 'sanitize_text_field'
]);
$wp_customize->add_control('pb_front_page_catalog_title', [
'label' => __('Front Page Catalog Title', 'aldine'),
'section' => 'pb_network_catalog',
'section' => 'pb_front_page_catalog',
'settings' => 'pb_front_page_catalog_title',
]);
$wp_customize->add_section('pb_network_contact_form', [
'title' => __('Contact Form', 'aldine'),
'priority' => 25,
]);
$wp_customize->add_setting('pb_network_contact_form', [
'type' => 'option',
]);
$wp_customize->add_control('pb_network_contact_form', [
'label' => __('Show Contact Form', 'aldine'),
'section' => 'pb_network_contact_form',
'settings' => 'pb_network_contact_form',
'type' => 'checkbox'
]);
$wp_customize->add_setting('pb_network_contact_form_title', [
'type' => 'option',
'sanitize_callback' => 'sanitize_text_field'
]);
$wp_customize->add_control('pb_network_contact_form_title', [
'label' => __('Contact Form Title', 'aldine'),
'section' => 'pb_network_contact_form',
'settings' => 'pb_network_contact_form_title',
]);
});
/**
@ -62,4 +130,5 @@ add_action('customize_register', function (\WP_Customize_Manager $wp_customize)
*/
add_action('customize_preview_init', function () {
wp_enqueue_script('aldine/customizer.js', asset_path('scripts/customizer.js'), ['customize-preview'], null, true);
wp_localize_script('aldine/customizer.js', 'SAGE_DIST_PATH', get_theme_file_uri() . '/dist/');
});

10
app/controllers/About.php

@ -1,10 +0,0 @@
<?php
namespace Aldine;
use Sober\Controller\Controller;
class About extends Controller
{
}

93
app/controllers/App.php

@ -6,6 +6,16 @@ use Sober\Controller\Controller;
class App extends Controller
{
public function siteLogo()
{
$custom_logo_id = get_theme_mod('custom_logo');
if (has_custom_logo()) {
return wp_get_attachment_image($custom_logo_id, 'original');
} else {
return file_get_contents(get_theme_file_path() . '/dist/' . svg_path('images/logo.svg'));
}
}
public function siteName()
{
return get_bloginfo('name');
@ -55,4 +65,87 @@ class App extends Controller
}
return get_the_title();
}
public function contactFormTitle()
{
$title = get_option('pb_network_contact_form_title');
if ($title) {
return $title;
}
return __('Contact Us', 'aldine');
}
public function currentPage()
{
if (is_front_page()) {
return (get_query_var('page')) ? get_query_var('page') : 1;
} else {
return (get_query_var('paged')) ? get_query_var('paged') : 1;
}
}
public function currentSubject()
{
return (get_query_var('subject')) ? get_query_var('subject') : '';
}
public function currentLicense()
{
return (get_query_var('license')) ? get_query_var('license') : '';
}
public function currentOrderBy()
{
return (get_query_var('orderby')) ? get_query_var('orderby') : 'title';
}
public function previousPage()
{
if (is_front_page()) {
$page = (get_query_var('page')) ? get_query_var('page') : 1;
} else {
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
}
return ($page > 1) ? $page - 1 : 0;
}
public function nextPage()
{
if (is_front_page()) {
$page = (get_query_var('page')) ? get_query_var('page') : 1;
} else {
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
}
return $page + 1;
}
public static function catalogData($page = 1, $per_page = 10, $orderby = 'title', $license = '', $subject = '')
{
$request = new \WP_REST_Request('GET', '/pressbooks/v2/books');
$request->set_query_params([
'page' => $page,
'per_page' => $per_page,
]);
$response = rest_do_request($request);
$pages = $response->headers['X-WP-TotalPages'];
$data = rest_get_server()->response_to_data($response, true);
$books = [];
foreach ($data as $key => $book) {
$book['title'] = $book['metadata']['name'];
$book['date-published'] = (isset($book['metadata']['datePublished'])) ?
$book['metadata']['datePublished'] :
'';
$book['subject'] = (isset($book['metadata']['keywords'])) ? $book['metadata']['keywords'] : '';
$books[] = $book;
}
if ($orderby === 'latest') {
$books = wp_list_sort($books, $orderby, 'desc');
} else {
$books = wp_list_sort($books, $orderby);
}
return ['pages' => $pages, 'books' => $books];
}
}

66
app/controllers/FrontPage.php

@ -8,64 +8,30 @@ class FrontPage extends Controller
{
public function blockCount()
{
$c = 0;
foreach ([
'home-block-1',
'home-block-2',
'home-block-3',
'home-block-4'
] as $block) {
if (is_active_sidebar($block)) {
$c++;
}
global $_wp_sidebars_widgets;
if (empty($_wp_sidebars_widgets)) {
$_wp_sidebars_widgets = get_option('sidebars_widgets', []);
}
return $c;
}
public function blocks()
{
$blocks = [];
for ($i = 0; $i < 4; $i++) {
if (is_active_sidebar("home-block-$i")) {
$blocks[] = "home-block-$i";
}
$sidebars_widgets_count = $_wp_sidebars_widgets;
if (isset($sidebars_widgets_count['front-page-block'])) {
return count($sidebars_widgets_count['front-page-block']);
}
return $blocks;
}
public function totalPages()
{
$books = wp_remote_get(network_home_url('/wp-json/pressbooks/v2/books?per_page=3'));
return $books['headers']['x-wp-totalpages'];
}
public function currentPage()
{
return get_query_var('page', 1);
}
public function previousPage()
{
return (get_query_var('page', 1) > 1) ? get_query_var('page') - 1 : 0;
}
public function nextPage()
{
return (get_query_var('page', 1) < FrontPage::totalPages()) ? get_query_var('page', 1) + 1 : 0;
return 1;
}
public function latestBooksTitle()
{
return (empty(get_theme_mod('pb_front_page_catalog_title'))) ?
__('Our Latest Titles', 'aldine') :
get_theme_mod('pb_front_page_catalog_title');
$title = get_option('pb_front_page_catalog_title');
if ($title) {
return $title;
}
return __('Our Latest Titles', 'aldine');
}
public static function latestBooks($page = 1, $per_page = 3)
public function catalogData()
{
$books = wp_remote_get(network_home_url("/wp-json/pressbooks/v2/books?per_page=$per_page&page=$page"));
$books = json_decode($books['body'], true);
return $books;
$page = (get_query_var('page')) ? get_query_var('page') : 1;
return App::catalogData($page, 3);
}
}

111
app/controllers/PageCatalog.php

@ -0,0 +1,111 @@
<?php
namespace Aldine;
use Sober\Controller\Controller;
class PageCatalog extends Controller
{
public function licenses()
{
$licenses = (new \Pressbooks\Licensing())->getSupportedTypes();
foreach ($licenses as $key => $value) {
$licenses[$key] = preg_replace("/\([^)]+\)/", '', $value['desc']);
}
return $licenses;
}
public function subjectGroups()
{
return [
'business-finance' => [
'title' => __('Business and Finance', 'aldine'),
'subjects' => [
'accounting' => 'Accounting',
'finance' => 'Finance',
'information-systems' => 'Information Systems',
'management' => 'Management',
'marketing' => 'Marketing',
'economics' => 'Economics',
],
],
'engineering-technology' => [
'title' => __('Engineering &amp; Technology', 'aldine'),
'subjects' => [
'architecture' => 'Architecture',
'bioengineering' => 'Bioengineering',
'chemical' => 'Chemical',
'civil' => 'Civil',
'electrical' => 'Electrical',
'mechanical' => 'Mechanical',
'mining-and-materials' => 'Mining and Materials',
'urban-planning' => 'Urban Planning',
'computer-science' => 'Computer Science',
],
],
'health-sciences' => [
'title' => __('Health Sciences', 'aldine'),
'subjects' => [
'nursing' => 'Nursing',
'dentistry' => 'Dentistry',
'medicine' => 'Medicine',
],
],
'humanities-arts' => [
'title' => __('Humanities &amp; Arts', 'aldine'),
'subjects' => [
'archaeology' => 'Archaeology',
'art' => 'Art',
'classics' => 'Classics',
'literature' => 'Literature',
'history' => 'History',
'media' => 'Media',
'music' => 'Music',
'philosophy' => 'Philosophy',
'religion' => 'Religion',
'language' => 'Language',
],
],
'reference' => [
'title' => __('Reference', 'aldine'),
'subjects' => [
'student-guides' => 'Student Guides',
'teaching-guides' => 'Teaching Guides',
],
],
'science' => [
'title' => __('Sciences', 'aldine'),
'subjects' => [
'biology' => 'Biology',
'chemistry' => 'Chemistry',
'environent-and-earth-sciences' => 'Environment and Earth Sciences',
'geography' => 'Geography',
'mathematics' => 'Mathematics',
'physics' => 'Physics',
],
],
'social-sciences' => [
'title' => __('Social Sciences', 'aldine'),
'subjects' => [
'anthropology' => 'Anthropology',
'gender-studies' => 'Gender Studies',
'linguistics' => 'Linguistics',
'museums-libraries-and-information-sciences' => 'Museums, Libraries, and Information Sciences',
'political-science' => 'Political Science',
'psychology' => 'Psychology',
'social-work' => 'Social Work',
'sociology' => 'Sociology',
],
],
];
}
public function catalogData()
{
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$orderby = (get_query_var('orderby')) ? get_query_var('orderby') : 'title';
$subject = (get_query_var('subject')) ? get_query_var('subject') : '';
$license = (get_query_var('license')) ? get_query_var('license') : '';
return App::catalogData($page, 9, $orderby, $license, $subject);
}
}

15
app/filters.php

@ -70,18 +70,3 @@ add_filter('comments_template', function ($comments_template) {
add_action('admin_bar_init', function () {
remove_action('wp_head', '_admin_bar_bump_cb');
});
/**
* Remove Emoji
* @see https://wordpress.stackexchange.com/questions/185577/disable-emojicons-introduced-with-wp-4-2
*/
add_action('init', function () {
remove_action('admin_print_styles', 'print_emoji_styles');
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
add_filter('emoji_svg_url', '__return_false');
});

59
app/helpers.php

@ -136,3 +136,62 @@ function locate_template($templates)
{
return \locate_template(filter_templates($templates));
}
/**
*
* Catch a contact form submission.
*
* @return false | array
*/
function contact_form_submission()
{
if (isset($_POST['submitted'])) {
$output = [];
$name = (isset($_POST['visitor_name'])) ? $_POST['visitor_name'] : false;
$email = (isset($_POST['visitor_email'])) ? $_POST['visitor_email'] : false;
$institution = (isset($_POST['visitor_institution'])) ? $_POST['visitor_institution'] : false;
$message = (isset($_POST['message'])) ? $_POST['message'] : false;
if (!$name) {
$output['message'] = __('Name is required.', 'aldine');
$output['status'] = 'error';
$output['field'] = 'visitor_name';
} elseif (!$email) {
$output['message'] = __('Email is required.', 'aldine');
$output['status'] = 'error';
$output['field'] = 'visitor_email';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$output['message'] = __('Email is invalid.', 'aldine');
$output['status'] = 'error';
$output['field'] = 'visitor_email';
} elseif (!$institution) {
$output['message'] = __('Institution is required.', 'aldine');
$output['status'] = 'error';
$output['field'] = 'visitor_institution';
} elseif (!$message) {
$output['message'] = __('Message is required.', 'aldine');
$output['status'] = 'error';
$output['field'] = 'message';
} else {
$sent = wp_mail(
get_option('admin_email'),
sprintf(__('Contact Form Submission from %s', 'aldine'), $name),
sprintf(
"From: %1\$s <%2\$s>\n%3\$s",
$name,
$email,
strip_tags($message)
),
"From: ${email}\r\nReply-To: ${email}\r\n"
);
if ($sent) {
$output['message'] = __('Your message was sent!', 'aldine');
$output['status'] = 'success';
} else {
$output['message'] = __('Your message could not be sent.', 'aldine');
$output['status'] = 'error';
}
}
return $output;
}
return false;
}

38
app/intervention.php

@ -0,0 +1,38 @@
<?php
namespace Aldine;
use function \Sober\Intervention\intervention;
if (function_exists('\Sober\Intervention\intervention')) {
intervention('remove-customizer-items', 'static-front-page', 'all');
intervention('remove-emoji');
intervention('remove-howdy', __('Hello,', 'aldine'));
intervention('remove-dashboard-items', ['activity', 'quick-draft']);
intervention('remove-menu-items', [
'posts',
'tools',
'setting-writing',
'setting-reading',
'setting-permalink'
], 'all');
intervention('remove-widgets', [
'pages',
'calendar',
'archives',
'links',
'media-audio',
'meta',
'search',
'categories',
'recent-posts',
'recent-comments',
'rss',
'tag-cloud',
'custom-menu',
'custom-html',
'media-video',
'akismet',
], 'all');
intervention('remove-toolbar-frontend', 'all');
}

132
app/setup.php

@ -11,45 +11,9 @@ use Roots\Sage\Template\BladeProvider;
* Theme assets
*/
add_action('wp_enqueue_scripts', function () {
wp_enqueue_style(
'aldine/webfonts',
'https://fonts.googleapis.com/css?family=Karla:400,400i,700|Spectral:400,400i,600',
false,
null
);
$webfonts = 'https://fonts.googleapis.com/css?family=Karla:400,400i,700|Spectral:400,400i,600';
wp_enqueue_style('aldine/webfonts', $webfonts, false, null);
wp_enqueue_style('aldine/main.css', asset_path('styles/main.css'), false, null);
/* wp_enqueue_style(
'uio/normalize.css',
get_theme_file_uri() . '/lib/infusion/src/lib/normalize/css/normalize.css',
false,
null
);
wp_enqueue_style(
'uio/fluid.css',
get_theme_file_uri() . '/lib/infusion/src/framework/core/css/fluid.css',
false,
null
);
wp_enqueue_style(
'uio/enactors.css',
get_theme_file_uri() . '/lib/infusion/src/framework/preferences/css/Enactors.css',
false,
null
);
wp_enqueue_style(
'uio/prefseditor.css',
get_theme_file_uri() . '/lib/infusion/src/framework/preferences/css/PrefsEditor.css',
false,
null
);
wp_enqueue_style(
'uio/separatedpanelprefseditor.css',
get_theme_file_uri() . '/lib/infusion/src/framework/preferences/css/SeparatedPanelPrefsEditor.css',
false,
null
);
wp_enqueue_script('uio.js', get_theme_file_uri() . '/lib/infusion/infusion-uiOptions.js', ['jquery'], null, true);
*/
wp_enqueue_script('aldine/main.js', asset_path('scripts/main.js'), ['jquery'], null, true);
wp_localize_script('aldine/main.js', 'SAGE_DIST_PATH', get_theme_file_uri() . '/dist/');
}, 100);
@ -72,6 +36,28 @@ add_action('after_setup_theme', function () {
'network-footer-menu' => __('Network Footer Menu', 'aldine')
]);
/**
* Enable custom headers
* @link https://developer.wordpress.org/themes/functionality/custom-headers/
*/
add_theme_support('custom-header', [
'default-image' => asset_path('images/header.jpg'),
'width' => 1920,
'height' => 884,
'default-text-color' => '#000',
]);
/**
* Enable custom logos
* @link https://developer.wordpress.org/themes/functionality/custom-logo/
*/
add_theme_support('custom-logo', [
'height' => 40,
'width' => 265,
'flex-width' => true,
'flex-height' => true,
]);
/**
* Enable post thumbnails
* @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/
@ -108,27 +94,35 @@ add_action('widgets_init', function () {
'after_title' => '</h3>'
];
register_sidebar([
'name' => __('Home Block 1', 'aldine'),
'id' => 'home-block-1'
] + $config);
register_sidebar([
'name' => __('Home Block 2', 'aldine'),
'id' => 'home-block-2'
] + $config);
register_sidebar([
'name' => __('Home Block 3', 'aldine'),
'id' => 'home-block-3'
] + $config);
register_sidebar([
'name' => __('Home Block 4', 'aldine'),
'id' => 'home-block-4'
] + $config);
'name' => __('Front Page Content', 'aldine'),
'description' => __(
'Add content for your network&rsquo;s front page here. Currently, only text widgets are supported.',
'aldine'
),
'id' => 'front-page-block',
'before_widget' => '<section class="block %1$s %2$s">',
'after_widget' => '</section>',
'before_title' => '<h3 class="tc ttu">',
'after_title' => '</h3>'
]);
register_sidebar([
'name' => __('Network Footer Block 1', 'aldine'),
'description' => __(
'Add content for your network&rsquo;s customizeable footer here.
Currently, only text and image widgets are supported.
Content in this widget area will appear in the first row (on mobile) or the first column (on desktops).',
'aldine'
),
'id' => 'network-footer-block-1'
] + $config);
register_sidebar([
'name' => __('Network Footer Block 2', 'aldine'),
'description' => __(
'Add content for your network&rsquo;s customizeable footer here.
Currently, only text and image widgets are supported.
Content in this widget area will appear in the second row (on mobile) or the middle column (on desktop).',
'aldine'
),
'id' => 'network-footer-block-2'
] + $config);
});
@ -171,3 +165,35 @@ add_action('after_setup_theme', function () {
return "<?= " . __NAMESPACE__ . "\\asset_path({$asset}); ?>";
});
});
add_action('wp_head', function () {
$primary = get_option('pb_network_color_primary');
$accent = get_option('pb_network_color_accent');
$primary_fg = get_option('pb_network_color_primary_fg');
$accent_fg = get_option('pb_network_color_accent_fg');
$header_text = get_header_textcolor();
if ($primary || $accent || $primary_fg || $accent_fg || $header_text) { ?>
<style type="text/css">:root {
<?php if ($primary) { ?>
--primary: <?= $primary ?>;
<?php }
if ($accent) { ?>
--accent: <?= $accent ?>;
<?php }
if ($primary_fg) { ?>
--primary-fg: <?= $primary_fg ?>;
<?php }
if ($accent_fg) { ?>
--accent-fg: <?= $accent_fg ?>;
<?php }
if ($header_text) { ?>
--header-text: <?= $header_text ?>;
<?php } ?>
}</style>
<?php }
});
add_action('wp_head', function () {
$response = contact_form_submission();
sage('blade')->share('contact_form_response', $response);
});

24
app/widgets.php

@ -1,24 +0,0 @@
<?php
namespace Aldine;
add_action('widgets_init', function () {
foreach ([
'WP_Widget_Pages',
'WP_Widget_Calendar',
'WP_Widget_Archives',
'WP_Widget_Links',
'WP_Widget_Media_Audio',
'WP_Widget_Meta',
'WP_Widget_Search',
'WP_Widget_Categories',
'WP_Widget_Recent_Posts',
'WP_Widget_Recent_Comments',
'WP_Widget_RSS',
'WP_Widget_Tag_Cloud'
] as $widget) {
unregister_widget($widget);
}
register_widget('Aldine\LinkButton');
register_widget('Aldine\PageButton');
});

86
app/widgets/linkbutton.php

@ -1,86 +0,0 @@
<?php
namespace Aldine;
class LinkButton extends \WP_Widget
{
/**
* Constructor.
*
* @see WP_Widget::__construct()
*
*/
public function __construct()
{
parent::__construct('linkbutton', __('Link Button', 'aldine'), [
'description' => esc_html__('Add a styled button which links to a custom URL.', 'aldine')
]);
}
/**
* Front-end display of widget.
*
* @see WP_Widget::widget()
*
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget($args, $instance)
{
echo $args['before_widget'];
if (! empty($instance['url']) && ! empty($instance['title'])) {
printf(
'<a class="button" href="%1$s">%2$s</a>',
$instance['url'],
apply_filters('widget_title', $instance['title'])
);
}
echo $args['after_widget'];
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form($instance)
{
$title = ! empty($instance['title']) ? $instance['title'] : '';
$url = ! empty($instance['url']) ? $instance['url'] : ''; ?>
<p><label for="<?= esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:', 'aldine'); ?></label>
<input
class="widefat"
id="<?= esc_attr($this->get_field_id('title')); ?>"
name="<?= esc_attr($this->get_field_name('title')); ?>"
type="text"
value="<?= esc_attr($title); ?>"></p>
<p><label for="<?= esc_attr($this->get_field_id('url')); ?>"><?php _e('URL:', 'aldine'); ?></label>
<input
class="widefat code"
id="<?= esc_attr($this->get_field_id('url')); ?>"
name="<?= esc_attr($this->get_field_name('url')); ?>"
type="text"
value="<?= esc_attr($url); ?>"></p>
<?php
}
/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
*
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
*
* @return array Updated safe values to be saved.
*/
public function update($new_instance, $old_instance)
{
$instance = [];
$instance['title'] = ( ! empty($new_instance['title']) ) ? strip_tags($new_instance['title']) : '';
$instance['url'] = ( ! empty($new_instance['url']) ) ? esc_url($new_instance['url']) : '';
return $instance;
}
}

95
app/widgets/pagebutton.php

@ -1,95 +0,0 @@
<?php
namespace Aldine;
class PageButton extends \WP_Widget
{
/**
* Constructor.
*
* @see WP_Widget::__construct()
*
*/
public function __construct()
{
parent::__construct('pagebutton', __('Page Button', 'aldine'), [
'description' => esc_html__('Add a styled button which links to a page.', 'aldine')
]);
}
/**
* Front-end display of widget.
*
* @see WP_Widget::widget()
*
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget($args, $instance)
{
echo $args['before_widget'];
if (! empty($instance['page_id'])) {
if (empty($instance['title'])) {
$instance['title'] = get_the_title($instance['page_id']);
}
printf(
'<a class="button" href="%1$s">%2$s</a>',
get_permalink($instance['page_id']),
apply_filters('widget_title', $instance['title'])
);
}
echo $args['after_widget'];
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form($instance)
{
$title = ! empty($instance['title']) ? $instance['title'] : '';
$page_id = ! empty($instance['page_id']) ? $instance['page_id'] : ''; ?>
<p><label for="<?= esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:', 'aldine'); ?></label>
<input
class="widefat"
id="<?= esc_attr($this->get_field_id('title')); ?>"
name="<?= esc_attr($this->get_field_name('title')); ?>"
type="text"
value="<?= esc_attr($title); ?>"></p>
<p><label for="<?= esc_attr($this->get_field_id('page_id')); ?>"><?php _e('Page:', 'aldine'); ?></label>
<select
id="<?= esc_attr($this->get_field_id('page_id')); ?>"
name="<?= esc_attr($this->get_field_name('page_id')); ?>">
<option value="" <?php selected($page_id, ''); ?>> -- </a>
<?php $pages = get_pages();
foreach ($pages as $page) { ?>
<option value="<?= $page->ID; ?>"
<?php selected($page_id, $page->ID); ?>>
<?= $page->post_title; ?>
</option>
<?php } ?>
</select></p>
<?php
}
/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
*
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
*
* @return array Updated safe values to be saved.
*/
public function update($new_instance, $old_instance)
{
$instance = [];
$instance['title'] = ( ! empty($new_instance['title']) ) ? strip_tags($new_instance['title']) : '';
$instance['page_id'] = ( ! empty($new_instance['page_id']) ) ? absint($new_instance['page_id']) : '';
return $instance;
}
}

3
composer.json

@ -31,7 +31,8 @@
"composer/installers": "~1.0",
"illuminate/support": "~5.4",
"roots/sage-lib": "~9.0.0-beta.4",
"soberwp/controller": "~9.0.0-beta.4"
"soberwp/controller": "~9.0.0-beta.4",
"soberwp/intervention": "1.2.0-p"
},
"require-dev": {
"squizlabs/php_codesniffer": "^2.8.0"

51
composer.lock generated

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "20e6a6348254da7e1d66757d1a89fc01",
"content-hash": "b64704b574ef5a22a123a59ab6fbc069",
"packages": [
{
"name": "brain/hierarchy",
@ -831,6 +831,55 @@
],
"time": "2017-08-22T17:35:30+00:00"
},
{
"name": "soberwp/intervention",
"version": "1.2.0-p",
"source": {
"type": "git",
"url": "https://github.com/soberwp/intervention.git",
"reference": "1698e51efe696c5867fb78ef7c5d2efff9b79260"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/soberwp/intervention/zipball/1698e51efe696c5867fb78ef7c5d2efff9b79260",
"reference": "1698e51efe696c5867fb78ef7c5d2efff9b79260",
"shasum": ""
},
"require": {
"composer/installers": "~1.0",
"php": ">=5.4.0"
},
"require-dev": {
"squizlabs/php_codesniffer": "2.*"
},
"type": "package",
"autoload": {
"psr-4": {
"Sober\\Intervention\\": "src/",
"Sober\\Intervention\\Module\\": "src/modules/"
},
"files": [
"intervention.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Darren Jacoby",
"email": "darren@jacoby.co.za",
"homepage": "https://twitter.com/withjacoby"
}
],
"description": "WordPress plugin containing modules to cleanup and customize wp-admin.",
"homepage": "https://github.com/soberwp",
"keywords": [
"wordpress"
],
"time": "2017-08-26T12:21:27+00:00"
},
{
"name": "symfony/debug",
"version": "v3.3.6",

3
package.json

@ -102,8 +102,9 @@
"stylelint-webpack-plugin": "^0.8.0"
},
"dependencies": {
"isotope-layout": "^3.0.4",
"jquery": "1.12.4 - 3",
"slick-carousel": "^1.7.1",
"jquery-bridget": "^2.0.1",
"tachyons-sass": "~4.7",
"wpapi": "^1.1.2"
}

4
resources/assets/build/webpack.config.js

@ -120,6 +120,10 @@ let webpackConfig = {
'node_modules',
'bower_components',
],
alias: {
'masonry': 'masonry-layout',
'isotope': 'isotope-layout',
},
enforceExtension: false,
},
resolveLoader: {

BIN
resources/assets/images/banner-desktop.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

BIN
resources/assets/images/banner-mobile.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

BIN
resources/assets/images/banner-two.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

BIN
resources/assets/images/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 KiB

BIN
resources/assets/images/catalog-header.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
resources/assets/images/header.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

1
resources/assets/images/left-arrow.svg

@ -0,0 +1 @@
<svg width="25" height="19" viewBox="0 0 25 19" xmlns="http://www.w3.org/2000/svg"><path d="M10.68 16.286l-6.13-6.148h18.82a1.08 1.08 0 0 0 1.075-1.078A1.08 1.08 0 0 0 23.37 7.98H4.55l6.13-6.147c.216-.216.323-.486.323-.755 0-.27-.107-.54-.323-.755a1.037 1.037 0 0 0-1.505 0l-7.958 7.98a1.045 1.045 0 0 0 0 1.51l7.958 8.036c.43.431 1.075.431 1.505 0 .216-.216.323-.485.323-.81 0-.269-.107-.538-.323-.754z" fill="#0B5B75" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 447 B

BIN
resources/assets/images/logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

1
resources/assets/images/logo.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
resources/assets/images/logo@2x.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
resources/assets/images/pb.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

BIN
resources/assets/images/pb@2x.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

1
resources/assets/images/right-arrow.svg

@ -0,0 +1 @@
<svg width="25" height="19" viewBox="0 0 25 19" xmlns="http://www.w3.org/2000/svg"><path d="M14.66 1.887l6.129 6.148H1.969A1.08 1.08 0 0 0 .896 9.114a1.08 1.08 0 0 0 1.075 1.078h18.819l-6.13 6.148a1.065 1.065 0 0 0-.322.755c0 .27.107.54.323.755.43.431 1.075.431 1.505 0l7.958-7.981c.43-.432.43-1.079 0-1.51L16.165.324a1.037 1.037 0 0 0-1.505 0 1.098 1.098 0 0 0-.323.808c0 .27.107.54.323.755z" fill="#0B5B75" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 436 B

7
resources/assets/scripts/main.js

@ -1,12 +1,11 @@
// import external dependencies
import 'jquery';
import 'slick-carousel';
// import local dependencies
import Router from './util/Router';
import common from './routes/common';
import home from './routes/home';
import aboutUs from './routes/about';
import catalog from './routes/catalog';
/** Populate Router instance with DOM routes */
const routes = new Router({
@ -14,8 +13,8 @@ const routes = new Router({
common,
// Home page
home,
// About Us page, note the change from about-us to aboutUs.
aboutUs,
// Catalog page
catalog,
});
// Load Events

5
resources/assets/scripts/routes/about.js

@ -1,5 +0,0 @@
export default {
init() {
// JavaScript to be fired on the about us page
},
};

101
resources/assets/scripts/routes/catalog.js

@ -0,0 +1,101 @@
const jQueryBridget = require('jquery-bridget');
const Isotope = require('isotope-layout');
export default {
init() {
// JavaScript to be fired on the catalog page
jQueryBridget('isotope', Isotope, $);
let $grid = $('.books');
$grid.isotope({
itemSelector: '.book',
getSortData: {
title: '.title a',
subject: '[data-subject]',
latest: '[data-date-published]',
},
sortAscending: {
title: true,
subject: true,
latest: false,
},
});
$('.filters > a').click((e) => {
e.preventDefault();
$('.filters').toggleClass('is-active');
$('.filter-groups > div').removeClass('is-active');
})
$('.filter-groups .subjects > a').click((e) => {
e.preventDefault();
let id = $(e.currentTarget).attr('href');
$(`.filter-groups .subjects:not(${id})`).removeClass('is-active');
$(`.filter-groups ${id}`).toggleClass('is-active');
})
$('.licenses > a').click((e) => {
e.preventDefault();
let id = $(e.currentTarget).attr('href');
$(id).toggleClass('is-active');
})
$('.subjects .filter-list a').click((e) => {
e.preventDefault();
if ($(e.currentTarget).hasClass('is-active')) {
$('.subjects .filter-list a').removeClass('is-active');
$('.subjects').removeClass('has-active-child');
} else {
$('.subjects .filter-list a').removeClass('is-active');
$(e.currentTarget).addClass('is-active');
$('.subjects').removeClass('has-active-child');
$(e.currentTarget).parent().parent().parent('.subjects').addClass('has-active-child');
}
let subjectValue = $('.subjects .filter-list a.is-active').attr('data-filter');
let licenseValue = $('.licenses .filter-list a.is-active').attr('data-filter');
if(typeof licenseValue === "undefined") {
licenseValue = '';
} else {
licenseValue = `[data-license="${licenseValue}"]`;
}
if(typeof subjectValue === "undefined") {
subjectValue = '';
} else {
subjectValue = `[data-subject="${subjectValue}"]`;
}
$grid.isotope({ filter: `${subjectValue}${licenseValue}` });
});
$('.licenses .filter-list a').click((e) => {
e.preventDefault();
if ($(e.currentTarget).hasClass('is-active')) {
$('.licenses .filter-list a').removeClass('is-active');
$('.licenses').removeClass('has-active-child');
} else {
$('.licenses .filter-list a').removeClass('is-active');
$(e.currentTarget).addClass('is-active');
$('.licenses').addClass('has-active-child');
}
let subjectValue = $('.subjects .filter-list a.is-active').attr('data-filter');
let licenseValue = $('.licenses .filter-list a.is-active').attr('data-filter');
if(typeof licenseValue === "undefined") {
licenseValue = '';
} else {
licenseValue = `[data-license="${licenseValue}"]`;
}
if(typeof subjectValue === "undefined") {
subjectValue = '';
} else {
subjectValue = `[data-subject="${subjectValue}"]`;
}
$grid.isotope({ filter: `${subjectValue}${licenseValue}` });
});
$('.sort > a').click((e) => {
e.preventDefault();
$('.sort').toggleClass('is-active');
})
$('.sorts a').click((e) => {
e.preventDefault();
let sortBy = $(e.currentTarget).attr('data-sort');
$('.sorts a').removeClass('is-active');
$(e.currentTarget).addClass('is-active');
$grid.isotope({sortBy: sortBy});
});
},
finalize() {
},
};

58
resources/assets/scripts/routes/home.js

@ -1,64 +1,6 @@
const WPAPI = require( 'wpapi' );
export default {
init() {
// JavaScript to be fired on the home page
let books = $('.books');
let pb = new WPAPI({ endpoint: 'http://pressbooks.dev/wp-json' });
pb.books = pb.registerRoute( 'pressbooks/v2', '/books/' );
function loadNextPage() {
let nextpage = books.attr('data-next-page');
if (typeof nextpage !== typeof undefined && nextpage !== false) {
const total = parseInt($('.books').attr('data-total-pages'));
const page = parseInt($('.books').attr('data-next-page'));
pb.books().perPage(3).page(page).then(function(data) {
data.forEach((book) => {
books.slick('slickAdd', `<div class="book w-100">
<p class="subject tc ma0"><a href="">Fiction</a></p>
<p class="title tc ma0"><a href="${book.link}">${book.metadata.name}</a></p>
<p class="read-more tl ma0"><a href="${book.link}">About this book &rarr;</a></p>
</div>`); // TODO Localize
});
if (page < total) {
books.attr('data-next-page', page + 1);
} else {
books.removeAttr('data-next-page');
}
}).catch(function(err) { // TODO handle error
console.error(err); // eslint-disable-line
});
}
}
books.on('init', () => {
loadNextPage();
})
books.slick({
slidesToShow: 1,
slidesToScroll: 1,
infinite: false,
mobileFirst: true,
prevArrow: '.latest-books .navigation .previous',
nextArrow: '.latest-books .navigation .next',
responsive: [
{
breakpoint: 960,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
},
},
],
variableWidth: true,
});
books.on('afterChange', (slick, currentSlide) => {
if((parseInt($('.slick-active:last').attr('data-slick-index')) + 1) === currentSlide.slideCount) {
loadNextPage(true);
}
})
},
finalize() {
},

8
resources/assets/styles/common/_functions.scss

@ -1,3 +1,7 @@
@function em($pixels, $context: $base-font-size) {
@return #{$pixels / $context}em;
@function rem($pixels, $context: $base-font-size) {
@return #{$pixels / $context}rem;
}
@function percent($target, $context) {
@return ($target / $context) * 100%;
}

56
resources/assets/styles/common/_global.scss

@ -1,3 +1,7 @@
html {
-webkit-font-smoothing: antialiased;
}
* {
box-sizing: border-box;
}
@ -5,7 +9,8 @@
body {
margin: 0;
font-family: $font-family-serif;
font-size: #{$base-font-size}px;
font-size: rem(18);
background: #fff;
}
h1,
@ -18,22 +23,61 @@ h6 {
}
h1 {
font-size: em(30);
font-size: rem(30);
font-weight: 600;
text-transform: uppercase;
letter-spacing: em(2);
letter-spacing: rem(2);
line-height: (36/30);
margin: 0;
}
h2 {
font-size: em(16);
font-size: rem(16);
font-weight: normal;
line-height: (30/16);
margin: 0;
}
.ml-auto {
margin-left: auto;
}
.mr-auto {
margin-right: auto;
}
:root {
--primary: $brand-primary;
--accent: $brand-accent;
--primary-fg: $white;
--accent-fg: $white;
--header-text: $black;
}
a {
color: $brand-primary;
color: var(--primary, $brand-primary);
text-decoration: none;
}
.primary {
color: var(--brand-primary, $brand-primary);
}
.bg-primary {
background-color: var(--brand-primary, $brand-primary);
}
.b--primary {
border-color: var(--brand-primary, $brand-primary);
}
.accent {
color: var(--brand-secondary, $brand-accent);
}
.bg-accent {
background-color: var(--brand-secondary, $brand-accent);
}
.b--accent {
border-color: var(--brand-secondary, $brand-accent);
}

7
resources/assets/styles/common/_variables.scss

@ -1,6 +1,7 @@
/** Colors */
$brand-primary: #b01109;
$brand-secondary: #015d75;
$brand-primary: #b01109;
$brand-accent: #015d75;
$light-gray: #ececec;
$dark-grey: #444;
$black: #000;
$white: #fff;
@ -17,4 +18,4 @@ $extra-large: 1650px;
/** Fonts */
$font-family-sans-serif: 'Karla', sans-serif;
$font-family-serif: 'Spectral', serif;
$base-font-size: 18;
$base-font-size: 16;

60
resources/assets/styles/components/_buttons.scss

@ -1,63 +1,47 @@
.button {
display: inline-block;
width: 250px;
height: 60px;
margin-top: 2em;
padding: 1.25em;
border: 2px solid $brand-primary;
width: rem(250);
height: rem(60);
padding: rem(19);
border: 2px solid var(--primary, $brand-primary);
border-radius: 3px;
background: $brand-primary;
background: var(--primary, $brand-primary);
font-family: $font-family-sans-serif;
font-size: em(16);
font-size: 1rem;
font-weight: 600;
color: $white;
letter-spacing: 2px;
color: var(--primary-fg, $white);
line-height: normal;
letter-spacing: rem(2);
text-align: center;
text-decoration: none;
text-transform: uppercase;
transition: all 0.5s;
vertical-align: middle;
&:hover,
&:focus {
background: $white;
color: $brand-primary;
color: var(--primary, $brand-primary);
}
&.button-wide {
width: 305px;
&.button--small {
width: rem(150);
height: rem(40);
padding: rem(6.5);
}
&.button-outline {
background: $white;
color: $brand-primary;
&:hover,
&:focus {
background: $brand-primary;
color: $white;
}
&.button--wide {
width: 19.0625rem;
}
&.button-secondary {
border: 2px solid $brand-secondary;
background: $brand-secondary;
color: $white;
&.button--outline {
background: $white;
color: var(--primary, $brand-primary);
&:hover,
&:focus {
background: $white;
color: $brand-secondary;
}
&.button-outline {
background: $white;
color: $brand-secondary;
&:hover,
&:focus {
background: $brand-secondary;
color: $white;
}
color: var(--primary-fg, $white);
background: var(--primary, $brand-primary);
}
}
}

93
resources/assets/styles/components/_forms.scss

@ -3,3 +3,96 @@
// TODO: .search-form label {}
// TODO: .search-form .search-field {}
// TODO: .search-form .search-submit {}
::placeholder {
color: $black;
}
.contact {
background: #f6f6f6;
padding: rem(65) 0 rem(120);
h3 {
color: var(--primary, $brand-primary);
&::before {
content: '';
display: block;
margin: 0 auto 1rem;
width: rem(46);
height: rem(5);
background: var(--accent, $brand-accent);
}
}
p {
font-size: 0.875rem;
font-weight: 600;
font-family: $font-family-sans-serif;
&:last-child {
margin-top: rem(47);
}
}
.success {
color: $dark-green;
}
.error {
color: $dark-red;
}
form {
width: 22.125rem;
.error > input[type="text"],
.error > input[type="email"],
.error > textarea {
border-bottom: solid 2px $dark-red;
}
.error > ::placeholder {
color: $dark-red;
}
}
label {
margin-bottom: 1rem;
}
label,
input[type="text"],
input[type="email"],
textarea {
font-size: 0.875rem;
font-weight: 600;
font-family: $font-family-sans-serif;
background: transparent;
}
.button {
background: transparent;
}
textarea {
height: 7.5em; // TODO
resize: none;
}
input[type="text"],
input[type="email"],
textarea {
flex-grow: 1;
border-top: 0;
border-right: 0;
border-left: 0;
border-bottom: solid 2px $black;
padding: 0 0 1em;
&:focus {
outline: none;
border-bottom: solid 2px var(--accent, $brand-accent);
}
}
}

1
resources/assets/styles/components/_grid.scss

@ -3,5 +3,4 @@
flex-direction: column;
align-items: center;
width: 100%;
padding: 0 7.5px;
}

20
resources/assets/styles/layouts/_footer.scss

@ -1,11 +1,11 @@
.content-info {
.network-footer {
background: $brand-secondary;
margin-bottom: 0;
padding: 60px 42.5px 40px;
font-family: $font-family-sans-serif;
font-size: em(16);
color: $white;
font-size: rem(16);
color: var(--accent-fg, $white);
background: var(--accent, $brand-accent);
ul {
margin: 0;
@ -17,13 +17,13 @@
}
a {
color: $white;
color: var(--accent-fg, $white);
text-decoration: none;
border-bottom: solid 1px transparent;
&:hover,
&:focus {
border-bottom: solid 1px $white;
border-bottom: solid 1px var(--accent-fg, $white);
}
}
@ -36,7 +36,7 @@
}
.network-footer-block {
border-top: solid 1px $white;
border-top: solid 1px var(--accent-fg, $white);
}
.network-footer-block-1 {
@ -76,7 +76,7 @@
margin-top: 1em;
a {
font-size: em(32);
font-size: rem(32);
margin: 0 0.25em;
transition: all 0.4s;
}
@ -103,7 +103,7 @@
}
h1 {
font-size: em(16);
font-size: rem(16);
font-weight: normal;
margin-bottom: 0;
@ -125,7 +125,7 @@
ul {
display: none;
margin: 0;
font-size: em(14);
font-size: rem(14);
}
.pressbooks-icon {
@ -175,7 +175,7 @@
.social-media {
a {
font-size: em(24);
font-size: rem(24);
margin: 0 0.5em 0 0;
}
}

61
resources/assets/styles/layouts/_header.scss

@ -1,6 +1,4 @@
.banner {
background-image: url('../images/banner-mobile.jpg');
.container {
height: 560px;
max-width: 1440px;
@ -18,14 +16,14 @@
top: 7px;
width: 25px;
height: 3px;
background: $brand-primary;
background: var(--primary, $brand-primary);
&::before,
&::after {
width: 25px;
height: 3px;
content: '';
background: $brand-primary;
background: var(--primary, $brand-primary);
}
&::before {
@ -43,21 +41,26 @@
&.is-active .icon {
// TODO
background: $white;
background: var(--primary-fg, $white);
&::before,
&::after {
background: $white;
background: var(--primary-fg, $white);
}
}
}
.brand {
width: 109px;
height: 17px;
width: 6.5625rem;
height: auto;
margin: 30px 0 0 17px;
background-image: url('../images/logo.png');
background-size: 109px 17px;
svg,
img {
width: auto;
max-width: 100%;
height: auto;
}
}
.primary-navigation {
@ -68,9 +71,9 @@
a {
display: none;
font-family: $font-family-sans-serif;
font-size: em(24);
font-size: rem(24);
line-height: (80/24);
color: $white;
color: var(--primary-fg, $white);
letter-spacing: 0;
}
@ -82,12 +85,12 @@
margin: 0;
padding: 0 52px;
z-index: 1;
background: $brand-primary;
background: var(--primary, $brand-primary);
a {
display: block;
width: 100%;
border-bottom: solid 1px $white;
border-bottom: solid 1px var(--primary-fg, $white);
&:last-child {
border-bottom: 0;
@ -105,21 +108,21 @@
}
}
.page:not(.home) .banner .branding {
display: none;
}
@media #{$breakpoint-large} {
.banner {
background-image: url('../images/banner-desktop.jpg');
.container {
height: 880px;
margin: 0 auto;
}
.brand {
width: 265px;
height: 40px;
width: 16.5625rem;
height: auto;
margin-top: 40px;
background-image: url('../images/logo@2x.png');
background-size: 265px 40px;
}
.primary-navigation {
@ -130,20 +133,20 @@
a {
display: inline-block;
font-size: em(18);
color: $black;
font-size: rem(18);
color: var(--header-text, $black);
line-height: normal;
&:hover,
&:focus {
color: $brand-primary;
color: var(--primary, $brand-primary);
}
&.catalog {
&:nth-child(1) {
margin-right: auto;
}
&.contact {
&:nth-child(2) {
margin: 0 1em 0 auto;
}
}
@ -158,17 +161,17 @@
height: 576px;
p {
font-size: em(30);
font-size: rem(30);
letter-spacing: 0.75px;
line-height: (40/30);
}
}
h1 {
margin-bottom: 0.5em;
font-size: em(72);
margin-bottom: rem(32);
font-size: rem(72);
line-height: (40/72);
letter-spacing: 1.8px;
letter-spacing: rem(1.8);
}
}
}

266
resources/assets/styles/layouts/_pages.scss

@ -1,264 +1,2 @@
.home {
.block {
height: 445px;
background-color: $white;
h3 {
font-size: em(30);
font-weight: 600;
letter-spacing: 2px;
line-height: (36/30);
color: $brand-primary;
margin: 0;
&::before {
content: "";
display: block;
margin: 0 auto 1em;
width: 46px;
height: 5px;
background-color: $brand-secondary;
}
}
.widget p {
font-size: em(16);
line-height: (32/16);
}
&.latest-books {
box-shadow: unset;
height: auto;
padding-bottom: 50px;
h3 {
margin-top: 70px;
}
.inside {
padding: 0;
}
.navigation {
a {
color: $brand-secondary;
&.slick-disabled {
opacity: 0;
}
}
}
}
.books {
.book,
.slick-slide {
width: 100vw;
height: 386px;
margin: 45px 0 0;
padding: 0 29.5px;
border: solid 2px $brand-secondary;
background-color: $brand-secondary;
a {
font-family: $font-family-sans-serif;
color: $white;
text-decoration: none;
}
.subject {
height: 91px;
margin-top: 24px;
font-size: em(24);
}
.title {
height: 329px - 115px;
font-size: em(30);
font-weight: 500;
}
.read-more {
font-size: em(18);
}
}
}
}
.one-two {
width: 100%;
display: flex;
flex-direction: column;
.block-2 {
background: $brand-secondary;
p,
h3 {
color: $white;
}
h3::before {
background-color: $white;
}
}
}
.main > .block-2,
.one-two + .block {
background: transparent;
border: solid 2px $brand-primary;
// margin-bottom: 401px;
&::after {
position: absolute;
left: 0;
top: 1840px;
content: "";
display: block;
display: none;
width: 100vw;
height: 600px;
z-index: -1;
background: url('../images/banner-two.jpg');
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
}
}
@media (min-width: $medium) {
.home {
.wrap {
margin-top: -366px;
}
.block {
width: 775px;
margin-bottom: 119px;
box-shadow: -3px 5px 4px 2px rgba(135, 135, 135, 0.09);
h3 {
font-size: em(48);
line-height: (56/48);
&::before {
width: 74px;
}
}
p {
font-size: em(18);
line-height: (32/18);
}
.inside {
width: 595px;
}
}
.one-two {
align-items: center;
}
.main > .block-2,
.one-two + .block {
border: solid 2px $brand-primary;
box-shadow: unset;
&::after {
top: 2020px;
}
}
.block.latest-books {
width: 100%;
.inside {
width: 100%;
}
.books {
flex-direction: row;
justify-content: space-between;
}
.book,
.slick-slide {
width: 300px;
margin-right: 30px;
&:last-child {
margin-right: 0;
}
}
}
}
}
@media (min-width: $large) {
.home {
.block {
width: 1115px;
height: 494px;
}
.main > .block-2,
.one-two + .block {
&::after {
top: 2150px;
}
}
.block.latest-books {
width: 1200px;
margin-bottom: 0;
.inside {
width: 100%;
}
.book,
.slick-slide {
width: 367px;
margin-right: 50px;
&:last-child {
margin-right: 0;
}
}
}
}
}
@media (min-width: $extra-large) {
.home {
.block {
width: 1115px;
box-shadow: -3px 5px 4px 2px rgba(135, 135, 135, 0.09);
}
.one-two {
flex-direction: row;
justify-content: space-between;
width: 1615px;
.block {
border-radius: 4px;
width: 775px;
.inside {
width: 595px;
}
}
}
.main > .block-2,
.one-two + .block {
&::after {
top: 1550px;
}
}
}
}
@import 'pages/front-page';
@import 'pages/catalog';

514
resources/assets/styles/layouts/pages/_catalog.scss

@ -0,0 +1,514 @@
.catalog {
.banner .container {
height: rem(381);
}
.banner .primary-navigation {
height: rem(381);
}
.page-header {
display: flex;
flex-direction: column;
justify-content: center;
height: rem(381);
margin-top: rem(-381);
h1 {
color: var(--primary, $brand-primary);
margin-bottom: 2rem;
font-size: rem(36);
line-height: 0.55556;
letter-spacing: 0.1125rem;
}
}
.network-catalog {
width: 100%;
padding-bottom: rem(152);
}
.controls {
width: 100%;
}
.filters,
.search,
.sort {
width: 100%;
border-top: solid 2px var(--accent, $brand-accent);
background: $white;
a {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
width: 100%;
padding: rem(16) rem(19);
font-size: rem(16);
font-weight: 600;
font-family: $font-family-sans-serif;
letter-spacing: rem(0.67);
color: $black;
&:hover,
&:focus {
background: #fafdff;
color: var(--primary, $brand-primary);
}
}
.has-active-child > a {
color: var(--primary, $brand-primary);
}
ul {
margin: 0;
padding: 0;
list-style: none;
li {
font-size: rem(16);
font-family: $font-family-sans-serif;
letter-spacing: rem(0.67);
a {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
font-weight: normal;
cursor: pointer;
.close {
display: inline-block;
float: right;
margin-top: rem(-2);
font-size: rem(20);
opacity: 0;
transition: opacity 0.5s;
}
}
a.is-active {
font-weight: 600;
color: var(--primary, $brand-primary);
.close {
opacity: 1;
}
}
}
}
}
.arrow {
path {
fill: var(--primary, $brand-primary);
}
}
.is-active > a .arrow {
transform: rotate(180deg);
}
.filters {
.filter-groups {
display: none;
border-top: solid 2px var(--accent, $brand-accent);
h3 {
margin: 0;
border-top: solid 1px $light-gray;
}
h3:first-of-type {
border-top: none;
}
}
.licenses {
display: none;
}
.filter-list {
display: none;
}
&.is-active {
.filter-groups,
.licenses {
display: block;
}
}
.is-active ul {
display: block;
}
}
.search {
display: none;
}
.sort {
border-bottom: solid 2px var(--accent, $brand-accent);
.sorts {
display: none;
border-top: solid 2px var(--accent, $brand-accent);
}
&.is-active {
.sorts {
display: block;
}
}
}
.books {
align-self: flex-start;
width: percent(358, 360);
margin: rem(32) 0 0 percent(10.5, 360);
padding: 0;
}
.book {
display: flex;
flex-direction: column;
justify-content: flex-end;
width: percent(165, 358);
margin: 0 percent(9, 358) rem(8) 0;
height: rem(230);
float: left;
padding: 1.5rem rem(8) rem(26);
border: solid 2px var(--accent, $brand-accent);
background: var(--accent, $brand-accent);
p {
margin: 0;
}
a {
font-family: $font-family-sans-serif;
color: var(--accent-fg, $white);
text-decoration: none;
}
.subject {
height: rem(44);
font-size: rem(14);
}
.title {
height: rem(118);
font-size: rem(16);
font-weight: 600;
line-height: (20/16);
}
.read-more {
font-size: rem(14);
}
}
.catalog-navigation {
display: flex;
flex-direction: row;
justify-content: center;
width: 100%;
margin-top: rem(83);
align-items: baseline;
font-family: $font-family-sans-serif;
a {
color: $black;
&:hover,
&:focus {
color: var(--primary, $brand-primary);
}
}
.previous,
.next {
display: block;
margin: 0 rem(26);
font-family: $font-family-sans-serif;
font-size: rem(16);
svg {
width: rem(16.2);
height: rem(12.5);
margin: 0 rem(6);
path {
fill: var(--primary, $brand-primary);
}
}
}
.pages {
display: inline-block;
border-bottom: solid 2px #ececec;
a,
span {
display: inline-block;
width: rem(41);
padding: rem(8) 0;
font-size: rem(24);
text-align: center;
}
.current {
border-bottom: solid rem(6) var(--primary, $brand-primary);
}
}
}
}
@media (min-width: 768px) {
.catalog {
.controls {
width: percent(706, 768);
height: rem(52);
margin: rem(60) percent(29, 768) rem(20) percent(33, 768);
.filters,
.search,
.sort {
position: relative;
border-top: 0;
border-bottom: solid 2px var(--accent, $brand-accent);
z-index: 99;
}
.filters {
float: left;
width: rem(360);
.filter-groups {
border-right: solid 1px #ececec;
border-left: solid 1px #ececec;
}
}
.sort {
float: right;
width: rem(160);
.sorts {
border-right: solid 1px #ececec;
border-bottom: solid 1px #ececec;
border-left: solid 1px #ececec;
}
}
}
.books {
align-self: flex-start;
width: percent(735, 768);
margin-bottom: rem(15);
margin-left: percent(24, 768);
}
.book {
width: percent(230, 735);
height: rem(260);
margin: 0 percent(15, 735) 2rem 0;
padding: 0 rem(14) rem(21.35);
.subject {
height: rem(45.85);
font-size: rem(18);
}
.title {
height: rem(147.65);
font-size: rem(22);
font-weight: 600;
line-height: (40/30);
}
.read-more {
font-size: rem(16);
}
}
}
}
@media (min-width: $medium) {
.catalog {
.page-header {
h1 {
font-size: rem(72);
}
}
}
}
@media #{$breakpoint-large} {
.catalog {
.banner {
.container {
height: rem(450);
}
.primary-navigation {
height: 40px;
}
.brand {
text-align: center;
img {
max-height: rem(60);
}
}
}
.page-header {
height: rem(360);
margin-top: rem(-360);
}
}
}
@media (min-width: $extra-large) {
.catalog {
.main {
width: rem(1535);
margin: 0 auto;
}
.network-catalog {
margin-top: rem(205);
}
.controls {
width: 100%;
margin: 0 0 rem(64);
.filters {
width: rem(286);
border-bottom: 0;
> a {
border-bottom: solid 3px var(--accent, $brand-accent);
&:hover,
&:focus {
color: $black;
background: $white;
cursor: default;
}
.arrow {
display: none;
}
}
.filter-groups {
display: block;
border-right: 0;
border-top: 0;
border-left: 0;
.subjects {
border-bottom: solid 1px #ececec;
}
}
.licenses {
display: block;
margin-top: rem(60);
> a {
background: var(--primary, $brand-primary);
color: var(--primary-fg, $white);
.arrow {
path {
fill: var(--primary-fg, $white);
}
}
}
}
ul li {
a {
padding-top: 0;
padding-bottom: 0;
line-height: 2;
}
&:last-child a {
padding-bottom: 1rem;
}
}
}
.sort {
.sorts {
border-top: solid 3px var(--accent, $brand-accent);
border-right: 0;
border-left: 0;
}
}
}
.books {
width: percent(1221.5, 1535);
margin: 0 0 0 percent(316, 1535);
}
.book {
width: percent(367, 1221.5);
height: rem(386);
margin: 0 0 2rem percent(39.5, 1221.5);
padding: 1.5rem 1.85rem 2.1875rem;
.subject {
height: 4.625rem;
font-size: rem(24);
}
.title {
height: 13rem;
font-size: rem(30);
font-weight: 500;
line-height: (40/30);
}
.read-more {
font-size: rem(18);
}
}
}
}
.catalog.no-js {
.filters {
.arrow {
display: none;
}
.filter-groups,
.licenses,
.filter-list {
display: block;
}
}
.sort {
.arrow {
display: none;
}
.sorts {
display: block;
}
}
}

404
resources/assets/styles/layouts/pages/_front-page.scss

@ -0,0 +1,404 @@
.home {
.block {
flex-direction: column;
justify-content: center;
align-items: center;
padding: 0 0.78125rem;
display: flex;
height: rem(445);
background-color: $white;
margin-left: auto;
margin-right: auto;
text-align: center;
p {
font-size: rem(18);
line-height: (32/16);
}
}
.blocks.blocks-2,
.blocks.blocks-3 {
.widget_text:nth-child(2) {
margin-right: 0.5rem;
margin-left: 0.5rem;
border: solid 2px var(--primary, $brand-primary);
box-shadow: unset;
}
}
.blocks.blocks-4 {
.widget_text:nth-child(2) {
color: var(--accent-fg, $white);
background: var(--accent, $brand-accent);
h3 {
color: var(--accent-fg, $white);
&::before {
background: var(--accent-fg, $white);
}
}
.button {
color: var(--accent-fg, $white);
border-color: var(--accent-fg, $white);
background: transparent;
&:hover,
&:focus {
color: var(--accent, $brand-accent);
background: var(--accent-fg, $white);
}
}
}
.widget_text:nth-child(3) {
margin-top: 2rem;
margin-right: 0.5rem;
margin-left: 0.5rem;
border: solid 2px var(--primary, $brand-primary);
box-shadow: unset;
}
}
.blocks.blocks-2 .widget_text:nth-child(2),
.blocks.blocks-3 .widget_text:nth-child(2),
.blocks.blocks-4 .widget_text:nth-child(3) {
background: transparent;
margin-bottom: rem(400);
&::after {
z-index: -1;
content: "";
display: block;
width: 100vw;
height: rem(444);
background-image: url('../images/banner.jpg');
background-position: center;
background-size: cover;
position: absolute;
top: rem(1410);
left: 0;
}
}
.blocks.blocks-4 .widget_text:nth-child(3) {
&::after {
top: rem(1880);
}
}
.block,
.latest-books {
h3 {
font-size: rem(30);
font-weight: 600;
color: var(--primary, $brand-primary);
letter-spacing: 2px;
line-height: (36/30);
margin: 0;
&::before {
content: "";
display: block;
margin: 0 auto 1em;
width: 46px;
height: 5px;
background: var(--accent, $brand-accent);
}
}
}
.latest-books {
height: auto;
padding: 0 0 rem(154);
h3 {
text-align: center;
text-transform: uppercase;
margin-top: 4.375rem;
margin-bottom: 2.8125rem;
}
.track {
display: flex;
flex-flow: row wrap;
justify-content: center;
align-items: center;
max-width: 22.9375rem;
margin-left: auto;
margin-right: auto;
margin-bottom: 2rem;
padding: 0 0.46875rem;
position: relative;
}
.books {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
order: 0;
padding: 0;
width: 100%;
margin-bottom: rem(34);
}
.book {
display: flex;
flex-direction: column;
justify-content: flex-end;
width: 100%;
max-width: 22.9375rem;
height: 24.125rem;
margin: 0 0 2rem;
padding: 1.5rem 1.85rem 2.1875rem;
border: solid 2px var(--accent, $brand-accent);
background: var(--accent, $brand-accent);
a {
margin: 0;
font-family: $font-family-sans-serif;
color: var(--accent-fg, $white);
text-decoration: none;
text-align: center;
}
.subject {
height: 4.625rem;
margin: 0;
font-size: rem(24);
text-align: center;
}
.title {
height: 13rem;
margin: 0;
font-size: rem(30);
font-weight: 500;
line-height: (40/30);
text-align: left;
}
.read-more {
margin: 0;
font-size: rem(18);
text-align: left;
}
&:last-child {
margin-bottom: 0;
}
}
.previous,
.next {
display: block;
width: auto;
height: auto;
svg {
path {
fill: var(--primary, $brand-primary);
}
}
}
.previous {
order: 1;
margin-right: auto;
}
.next {
order: 2;
margin-left: auto;
}
.catalog-link {
text-align: center;
}
}
}
@media (min-width: $medium) {
.home {
.wrap {
margin-top: rem(-366);
}
.block {
width: rem(775);
height: rem(494);
margin-bottom: rem(119);
padding: 0 90px;
box-shadow: -3px 5px 4px 2px rgba(135, 135, 135, 0.09);
&:last-child {
margin-bottom: 4.0625rem;
}
h3 {
font-size: rem(48);
line-height: (56/48);
&::before {
width: 74px;
}
}
p {
font-size: rem(18);
line-height: (32/18);
}
}
.blocks.blocks-2 .widget_text:nth-child(2),
.blocks.blocks-3 .widget_text:nth-child(2),
.blocks.blocks-4 .widget_text:nth-child(3) {
margin-left: auto;
margin-right: auto;
}
.blocks.blocks-2 .widget_text:nth-child(2),
.blocks.blocks-3 .widget_text:nth-child(2),
.blocks.blocks-4 .widget_text:nth-child(3) {
margin-bottom: rem(119);
&::after {
height: rem(600);
top: rem(1547);
}
}
.blocks.blocks-4 .widget_text:nth-child(3) {
&::after {
top: rem(2177);
}
}
.latest-books {
width: 100%;
margin-left: auto;
margin-right: auto;
h3 {
margin-bottom: 4.375rem;
}
.track {
display: flex;
flex-flow: row nowrap;
width: 100%;
max-width: 100%;
margin: 0;
padding: 0;
}
.next,
.previous {
position: absolute;
top: rem(165.5);
svg {
width: 2.4375rem;
height: 1.875rem;
}
}
.next {
margin-right: 0.9375rem;
right: 0;
}
.previous {
order: 0;
margin-left: 0.9375rem;
left: 0;
}
.books {
width: auto;
min-width: 50rem;
flex-direction: row;
order: 1;
justify-content: space-between;
margin-bottom: 2rem;
}
.book {
width: 30%;
max-width: 19.54rem;
&:last-child {
margin-bottom: 2rem;
}
}
}
}
}
@media (min-width: $large) {
.home {
.block {
width: rem(1115);
}
.latest-books {
width: 100%;
margin-bottom: 0;
.track {
width: 100%;
margin: 0 auto;
max-width: 87rem;
}
.books {
width: 100%;
max-width: 75rem;
}
.book {
min-width: 19.54rem;
max-width: 22.9375rem;
}
}
}
}
@media (min-width: $extra-large) {
.home {
.block {
width: 1115px;
box-shadow: -3px 5px 4px 2px rgba(135, 135, 135, 0.09);
}
.blocks.blocks-4 {
display: flex;
flex-flow: row wrap;
width: 1615px;
.widget_text {
width: 1115px;
margin-right: auto;
margin-left: auto;
}
.widget_text:nth-child(1),
.widget_text:nth-child(2) {
width: 775px;
}
.widget_text:nth-child(1) {
margin-right: 65px;
}
}
.blocks.blocks-4 .widget_text:nth-child(3) {
&::after {
top: rem(1596);
}
}
}
}

1
resources/assets/styles/main.scss

@ -7,7 +7,6 @@
* @see https://github.com/webpack-contrib/sass-loader#imports
*/
@import "~tachyons-sass/tachyons";
@import "~slick-carousel/slick/slick";
/** Import theme styles */
@import "common/functions";

5
resources/functions.php

@ -65,10 +65,9 @@ array_map(function ($file) use ($sage_error) {
'helpers',
'setup',
'filters',
'intervention',
'activation',
'admin',
'widgets',
'widgets/linkbutton',
'widgets/pagebutton'
]);
/**

71
resources/views/front-page.blade.php

@ -1,40 +1,47 @@
@extends('layouts.app')
@section('content')
@if($block_count === 0)
<div class="block block-1 flex flex-column items-center justify-center p-0 w-100">
<div class="inside">
<h3>{{ __('About Pressbooks', 'aldine') }}</h3>
<p>{{ __('Pressbooks is easy-to-use book writing software that lets you create a book in all the formats you need to publish.', 'aldine')}}</p>
</div>
</div>
@elseif($block_count < 4)
@for($i = 0; $i < $block_count; $i++)
<div class="block block-{{ $i + 1 }} flex flex-column items-center justify-center p-0 w-100">
<div class="inside tc">
@php(dynamic_sidebar($blocks[$i]))
<section class="blocks blocks-{{ $block_count }} w-100">
@if(is_active_sidebar('front-page-block'))
@php(dynamic_sidebar('front-page-block'))
@else
@component('front-page-block')
@slot('title')
{{ __('About Pressbooks', 'aldine') }}
@endslot
<p>{{ __('Pressbooks is easy-to-use book writing software that lets you create a book in all the formats you need to publish.', 'aldine')}}</p>
@slot('button_title')
{{ __('Learn More', 'aldine') }}
@endslot
@slot('button_url')
{{ network_home_url('/about/') }}
@endslot
@endcomponent
@endif
@if(get_option('pb_front_page_catalog'))
<div id="latest-titles" class="latest-books">
<h3>{{ $latest_books_title }}</h3>
<div class="track">
<div class="books" data-total-pages="{{ $catalog_data['pages'] }}" @if($next_page <= $catalog_data['pages'])data-next-page="{{ $next_page }}"@endif>
@foreach($catalog_data['books'] as $book)
@include('partials.book', ['book' => $book])
@endforeach
</div>
@if($previous_page)
<a class="previous" data-page="{{ $previous_page }}" href="{{ network_home_url("/page/$previous_page/#latest-titles") }}">
@php(include get_theme_file_path() . '/dist/' . Aldine\svg_path('images/left-arrow.svg'))
</a>
@endif
@if($next_page <= $catalog_data['pages'])
<a class="next" data-page="{{ $next_page }}" href="{{ network_home_url("/page/$next_page/#latest-titles") }}">
@php(include get_theme_file_path() . '/dist/' . Aldine\svg_path('images/right-arrow.svg'))
</a>
@endif
</div>
@endfor
@elseif($block_count === 4)
<div class="one-two">
@for($i = 0; $i < 2; $i++)
<div class="block block-{{ $i + 1 }} flex flex-column items-center justify-center p-0 w-100">
<div class="inside tc">
@php(dynamic_sidebar($blocks[$i]))
</div>
</div>
@endfor
</div>
@for($i = 2; $i < $block_count; $i++)
<div class="block block-{{ $i + 1 }} flex flex-column items-center justify-center p-0 w-100">
<div class="inside tc">
@php(dynamic_sidebar($blocks[$i]))
</div>
<div class="catalog-link">
<a class="button button--outline button--wide" href="{{ network_home_url('/catalog/') }}">{{ __('View Complete Catalog', 'aldine') }}</a>
</div>
@endfor
@endif
@if(get_theme_mod('pb_front_page_catalog'))
@include('partials.front-page-catalog')
</div>
@endif
</section>
@endsection

67
resources/views/page-catalog.blade.php

@ -0,0 +1,67 @@
{{--
Template Name: Catalog
--}}
@extends('layouts.app')
@section('content')
@include('partials.page-header')
<section class="network-catalog">
<div class="controls">
<div class="search">
<h2><a href="#search">{{ __('Search by titles or keyword', 'aldine') }} <svg class="arrow" width="13" height="8" viewBox="0 0 13 8" xmlns="http://www.w3.org/2000/svg"><path d="M6.255 8L0 0h12.51z" fill="#b01109" fill-rule="evenodd"/></svg></a></h2>
</div>
<div class="filters">
<a href="#filter">{{ __('Filter by', 'aldine') }} <svg class="arrow" width="13" height="8" viewBox="0 0 13 8" xmlns="http://www.w3.org/2000/svg"><path d="M6.255 8L0 0h12.51z" fill="#b01109" fill-rule="evenodd"/></svg></a>
<div id="filter" class="filter-groups">
@foreach($subject_groups as $key => $val)
<div class="{{ $key }} subjects" id="{{ $key }}">
<a href="#{{ $key }}">{{ $val['title'] }} <svg class="arrow" width="13" height="8" viewBox="0 0 13 8" xmlns="http://www.w3.org/2000/svg"><path d="M6.255 8L0 0h12.51z" fill="#b01109" fill-rule="evenodd"/></svg></a>
<ul class="filter-list">
@foreach($val['subjects'] as $k => $v)
<li><a data-filter="{{ $k }}">{{ $v }}<span class="close">&times;</span></a></li>
@endforeach
</ul>
</div>
@endforeach
</div>
<div class="licenses" id="licenses">
<a href="#licenses">{{ __('Licenses', 'aldine' ) }}<svg class="arrow" width="13" height="8" viewBox="0 0 13 8" xmlns="http://www.w3.org/2000/svg"><path d="M6.255 8L0 0h12.51z" fill="#b01109" fill-rule="evenodd"/></svg></a>
<ul class="filter-list">
@foreach($licenses as $key => $value)
<li><a data-filter="{{ $key }}">{{ $value }}<span class="close">&times;</span></a></li>
@endforeach
</ul>
</div>
</div>
<div class="sort">
<a href="#sort">{{ __('Sort by', 'aldine') }} <svg class="arrow" width="13" height="8" viewBox="0 0 13 8" xmlns="http://www.w3.org/2000/svg"><path d="M6.255 8L0 0h12.51z" fill="#b01109" fill-rule="evenodd"/></svg></a>
<ul id="sort" class="sorts">
<li><a data-sort="title" href="{{ "/catalog/page/$current_page/?orderby=title" }}">{{ __('Title', 'aldine') }}</a></li>
<li><a data-sort="subject" href="{{ "/catalog/page/$current_page/?orderby=subject" }}">{{ __('Subject', 'aldine') }}</a></li>
<li><a data-sort="latest" href="{{ "/catalog/page/$current_page/?orderby=latest" }}">{{ __('Latest', 'aldine') }}</a></li>
</ul>
</div>
</div>
<div class="books">
@foreach($catalog_data['books'] as $book)
@include('partials.book', ['book' => $book])
@endforeach
</div>
@if($catalog_data['pages'] > 1)
<nav class="catalog-navigation">
@if($previous_page)<a class="previous" data-page="{{ $previous_page }}" href="{{ network_home_url("/catalog/page/$previous_page/") }}">@php(include get_theme_file_path() . '/dist/' . Aldine\svg_path('images/left-arrow.svg')) {{ __('Previous', 'aldine') }}</a>@endif
<div class="pages">
@for($i = 1; $i <= $catalog_data['pages']; $i++)
@if($i === $current_page)
<span class="current">{{ $i }}</span>
@else
<a href="{{ network_home_url("/catalog/page/$i/") }}">{{ $i }}</a>
@endif
@endfor
</div>
@if($next_page <= $catalog_data['pages'])<a class="next" data-page="{{ $next_page }}" href="{{ network_home_url("/catalog/page/$next_page/") }}">{{ __('Next', 'aldine') }} @php(include get_theme_file_path() . '/dist/' . Aldine\svg_path('images/right-arrow.svg'))</a>@endif
</nav>
@endif
</section>
@endsection

17
resources/views/partials/book.blade.php

@ -0,0 +1,17 @@
<div class="book"
data-date-published="{{ str_replace('-', '', @$book['metadata']['datePublished']) }}"
data-license="{{ (new \Pressbooks\Licensing())->getLicenseFromUrl($book['metadata']['license']) }}"
data-subject="{{ sanitize_title(@$book['metadata']['keywords']) }}"
>
@if(isset($book['metadata']['keywords']))
<p class="subject">
<a href="{{ network_home_url('/catalog/#') . $book['metadata']['keywords'] }}">{{ $book['metadata']['keywords'] }}</a>
</p>
@endif
<p class="title">
<a href="{{ $book['link'] }}">{{ $book['metadata']['name'] }}</a>
</p>
<p class="read-more">
<a href="{{ $book['link'] }}">{{ __('About this book &rarr;', 'aldine') }}</a>
</p>
</div>

22
resources/views/partials/contact-form.blade.php

@ -0,0 +1,22 @@
<section class="contact flex flex-column justify-center items-center w-100" id="contact">
<h3 class="tc ttu">{{ $contact_form_title }}</h3>
<form action="{{ network_home_url('/#contact') }}" method="post">
@if($contact_form_response)
<p class="tl mb4 w-100 {{ $contact_form_response['status'] }}">{{ $contact_form_response['message'] }}</p>
@endif
<input type="hidden" name="submitted" value="1">
<p class="flex flex-row items-center @if(@$contact_form_response['field'] === 'visitor_name'){{ 'error' }}@endif">
<label class="clip" for="visitor_name">{{ __('Your name*', 'aldine' ) }}</label>
<input class="input-reset" type="text" placeholder="{{ __('Your name*', 'aldine' ) }}" name="visitor_name" value="@if($contact_form_response['status'] === 'error'){{ @esc_attr($_POST['visitor_name']) }}@endif"></p>
<p class="flex flex-row items-center @if(@$contact_form_response['field'] === 'visitor_email'){{ 'error' }}@endif">
<label class="clip" for="visitor_email">{{ __('Your email*', 'aldine' ) }}</label>
<input class="input-reset" type="email" placeholder="{{ __('Your email*', 'aldine' ) }}" name="visitor_email" value="@if($contact_form_response['status'] === 'error'){{ @esc_attr($_POST['visitor_email']) }}@endif"></p>
<p class="flex flex-row items-center @if(@$contact_form_response['field'] === 'visitor_institution'){{ 'error' }}@endif">
<label class="clip" for="visitor_institution">{{ __('Your institution*', 'aldine' ) }}</label>
<input class="input-reset" type="text" placeholder="{{ __('Your institution*', 'aldine' ) }}" name="visitor_institution" value="@if($contact_form_response['status'] === 'error'){{ @esc_attr($_POST['visitor_institution']) }}@endif"></p>
<p class="flex flex-row items-center @if(@$contact_form_response['field'] === 'message'){{ 'error' }}@endif">
<label class="clip" for="message">{{ __('Your message here', 'aldine' ) }}</label>
<textarea class="input-reset" type="text" placeholder="{{ __('Your message here', 'aldine' ) }}" name="message">@if($contact_form_response['status'] === 'error'){{ @esc_textarea($_POST['message']) }}@endif</textarea></p>
<p class="tc"><input class="button-reset button button--small button--outline input-reset pointer" type="submit" value="{{ __('Send', 'aldine' ) }}" /></p>
</form>
</section>

11
resources/views/partials/footer.blade.php

@ -1,5 +1,8 @@
<footer class="content-info">
<div class="container">
@if(get_option('pb_network_contact_form'))
@include('partials.contact-form')
@endif
<section class="network-footer">
<div class="network-footer-block {{ App::networkFooter(1) }}">
@if(App::networkFooter(1) !== 'empty')
@ -32,10 +35,10 @@
<div class="pressbooks-links">
<h1><a href="https://pressbooks.com">{!! sprintf(__('Powered by %s', 'aldine'), '<span class="pressbooks">Pressbooks</span>') !!}</a></h1>
<ul>
<li>{{ __('Open Source', 'aldine') }}</li>
<li>{{ __('Open Textbooks', 'aldine') }}</li>
<li>{{ __('Open Book Publishing', 'aldine') }}</li>
<li>{{ __('Learn More', 'aldine') }}</li>
<li><a href="https://pressbooks.org">{{ __('Open Source', 'aldine') }}</a></li>
<li><a href="https://pressbooks.com/for-academia">{{ __('Open Textbooks', 'aldine') }}</a></li>
<li><a href="https://pressbooks.com">{{ __('Open Book Publishing', 'aldine') }}</a></li>
<li><a href="https://pressbooks.com/about">{{ __('Learn More', 'aldine') }}</a></li>
</ul>
</div>
<div class="social-media">

7
resources/views/partials/front-page-block.blade.php

@ -0,0 +1,7 @@
<div class="block flex flex-column items-center justify-center p-0 w-100">
<div class="inside tc">
<h3 class="tc ttu">{{ $title }}</h3>
{{ $slot }}
<a class="button" href="{{ $button_url }}">{{ $button_title }}</a>
</div>
</div>

27
resources/views/partials/front-page-catalog.blade.php

@ -1,27 +0,0 @@
<div class="block latest-books w-100">
<div class="inside">
<h3 class="tc ttu">{{ $latest_books_title }}</h3>
<div class="books flex flex-column justify-center flex-row-m justify-between-m" data-total-pages="{{ $total_pages }}" data-next-page="2">
@foreach(FrontPage::latestBooks( $current_page, 3 ) as $book)
<div class="book w-100">
<p class="subject tc ma0">
<a href="">Fiction</a>
</p>
<p class="title tc ma0">
<a href="{{ $book['link'] }}">{{ $book['metadata']['name'] }}</a>
</p>
<p class="read-more tl ma0">
<a href="{{ $book['link'] }}">{{ __('About this book &rarr;', 'aldine') }}</a>
</p>
</div>
@endforeach
</div>
<nav class="navigation flex flex-row justify-between mt2 tr" data-total="{{ $total_pages }}">
<a class="previous f1 @if(!$previous_page) slick-disabled @endif" data-page="{{ $previous_page }}" href="{{ network_home_url("/page/$previous_page/") }}">&larr;</a>
<a class="next f1" data-page="{{ $next_page }}" href="{{ network_home_url("/page/$next_page/") }}">&rarr;</a>
</nav>
<div class="catalog-link tc">
<a class="button button-outline button-wide" href="{{ network_home_url('/catalog/') }}">{{ __('View Complete Catalog', 'aldine') }}</a>
</div>
</div>
</div>

20
resources/views/partials/header.blade.php

@ -1,18 +1,22 @@
<section class="banner bg-bottom cover">
<section class="banner bg-bottom cover" style="background-image: url(@if(is_front_page())
@php(header_image())
@else
@asset('images/catalog-header.jpg')
@endif);">
<div class="container flex flex-column justify-between items-center w-100 mw-100">
<a class="toggle-menu db dn-l absolute" href="#primary-navigation">{{ __('Toggle menu', 'aldine') }}<span class="icon db absolute"></span></a>
<a class="brand db self-start self-center-l" href="{{ home_url('/') }}"><span class="clip>"{{ get_bloginfo('name', 'display') }}</a></a>
<a class="brand db self-start self-center-l" href="{{ home_url('/') }}"><span class="clip">{{ get_bloginfo('name', 'display') }}</span>{!! $site_logo !!}</a>
<nav id="primary-navigation" class="primary-navigation absolute flex flex-column justify-center items-start top-0 w-100 bg-transparent bg-animate flex-row-l justify-start-l items-center-l">
<a class="catalog" href="{{ home_url('/catalog') }}">Catalog</a>
<a class="contact" href="#contact">Contact</a>
<a href="{{ home_url('/catalog') }}">Catalog</a>
<a href="#contact">Contact</a>
@if(!is_user_logged_in())
<a class="signin" href="{{ wp_login_url() }}">{{ __('Sign in', 'aldine') }}</a>
<a href="{{ wp_login_url() }}">{{ __('Sign in', 'aldine') }}</a>
<span class="sep">/</span>
<a class="signup" href="{{ network_home_url('/wp-signup.php') }}">{{ __('Sign up', 'aldine') }}</a>
<a href="{{ network_home_url('/wp-signup.php') }}">{{ __('Sign up', 'aldine') }}</a>
@else
<a class="admin" href="{{ admin_url() }}">{{ __('Admin', 'aldine') }}</a>
<a href="{{ admin_url() }}">{{ __('Admin', 'aldine') }}</a>
<span class="sep">/</span>
<a class="signin" href="{{ wp_logout_url() }}">{{ __('Sign out', 'aldine') }}</a>
<a href="{{ wp_logout_url() }}">{{ __('Sign out', 'aldine') }}</a>
@endif
</nav>
<header class="branding flex flex-column justify-start items-center tc">

364
yarn.lock

@ -48,8 +48,8 @@ acorn@^4.0.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0, acorn@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75"
version "5.1.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
adjust-sourcemap-loader@^1.1.0:
version "1.1.0"
@ -291,14 +291,14 @@ autoprefixer@^6.0.0, autoprefixer@^6.3.1:
postcss-value-parser "^3.2.3"
autoprefixer@^7.1.1:
version "7.1.3"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.3.tgz#0e8d337976d6f13644db9f8813b4c42f3d1ccc34"
version "7.1.4"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.4.tgz#960847dbaa4016bc8e8e52ec891cbf8f1257a748"
dependencies:
browserslist "^2.4.0"
caniuse-lite "^1.0.30000718"
caniuse-lite "^1.0.30000726"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^6.0.10"
postcss "^6.0.11"
postcss-value-parser "^3.2.3"
aws-sign2@~0.6.0:
@ -991,14 +991,15 @@ browser-sync@^2.18.13:
yargs "6.4.0"
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
version "1.0.8"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309"
dependencies:
buffer-xor "^1.0.2"
buffer-xor "^1.0.3"
cipher-base "^1.0.0"
create-hash "^1.1.0"
evp_bytestokey "^1.0.0"
evp_bytestokey "^1.0.3"
inherits "^2.0.1"
safe-buffer "^5.0.1"
browserify-cipher@^1.0.0:
version "1.0.0"
@ -1076,7 +1077,7 @@ buffer-to-vinyl@^1.0.0:
uuid "^2.0.1"
vinyl "^1.0.0"
buffer-xor@^1.0.2:
buffer-xor@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
@ -1154,12 +1155,12 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000187, caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000718"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000718.tgz#86cdd97987302554934c61e106f4e470f16f993c"
version "1.0.30000727"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000727.tgz#4e22593089b0f35c1b2adcfc28234493a21a4b2e"
caniuse-lite@^1.0.30000718:
version "1.0.30000718"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000718.tgz#0dd24290beb11310b2d80f6b70a823c2a65a6fad"
caniuse-lite@^1.0.30000718, caniuse-lite@^1.0.30000726:
version "1.0.30000727"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000727.tgz#20c895768398ded5f98a4beab4a76c285def41d2"
capture-stack-trace@^1.0.0:
version "1.0.0"
@ -1247,8 +1248,8 @@ clap@^1.0.9:
chalk "^1.1.3"
clean-css@4.1.x, clean-css@^4.1.3:
version "4.1.7"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032"
version "4.1.8"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.8.tgz#061455b2494a750ac98f46d8d5ebb17c679ea9d1"
dependencies:
source-map "0.5.x"
@ -1529,8 +1530,8 @@ content-disposition@0.5.2:
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
content-type@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
convert-source-map@^0.3.3:
version "0.3.5"
@ -1553,8 +1554,8 @@ cookiejar@^2.1.0:
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a"
core-js@^2.4.0, core-js@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086"
version "2.5.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@ -1654,8 +1655,8 @@ css-color-names@0.0.4:
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
css-loader@^0.28.3:
version "0.28.5"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.5.tgz#dd02bb91b94545710212ef7f6aaa66663113d754"
version "0.28.7"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
dependencies:
babel-code-frame "^6.11.0"
css-selector-tokenizer "^0.7.0"
@ -1871,7 +1872,7 @@ decompress@^3.0.0:
vinyl-assign "^1.0.1"
vinyl-fs "^2.2.0"
deep-equal@^1.0.1:
deep-equal@^1.0.1, deep-equal@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@ -1883,7 +1884,14 @@ deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
defined@^1.0.0:
define-properties@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
dependencies:
foreach "^2.0.5"
object-keys "^1.0.8"
defined@^1.0.0, defined@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@ -1929,6 +1937,10 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
desandro-matches-selector@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz#717beed4dc13e7d8f3762f707a6d58a6774218e1"
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@ -2100,8 +2112,8 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.18:
version "1.3.18"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz#3dcc99da3e6b665f6abbc71c28ad51a2cd731a9c"
version "1.3.21"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2"
elliptic@^6.0.0:
version "6.4.0"
@ -2199,6 +2211,24 @@ error-stack-parser@^2.0.0:
dependencies:
stackframe "^1.0.3"
es-abstract@^1.5.0:
version "1.8.2"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
has "^1.0.1"
is-callable "^1.1.3"
is-regex "^1.0.4"
es-to-primitive@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
dependencies:
is-callable "^1.1.1"
is-date-object "^1.0.1"
is-symbol "^1.0.1"
es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
version "0.10.30"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939"
@ -2411,6 +2441,10 @@ etag@^1.7.0, etag@~1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
ev-emitter@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a"
event-emitter@~0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
@ -2432,9 +2466,9 @@ eventsource@0.1.6:
dependencies:
original ">=0.0.5"
evp_bytestokey@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz#f66bb88ecd57f71a766821e20283ea38c68bf80a"
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
dependencies:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
@ -2732,6 +2766,12 @@ first-chunk-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
fizzy-ui-utils@^2.0.0, fizzy-ui-utils@^2.0.4:
version "2.0.5"
resolved "https://registry.yarnpkg.com/fizzy-ui-utils/-/fizzy-ui-utils-2.0.5.tgz#d72debc74d2c9d272dbcbb7b001707897f6c3210"
dependencies:
desandro-matches-selector "^2.0.0"
flat-cache@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
@ -2745,6 +2785,12 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
for-each@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
dependencies:
is-function "~1.0.0"
for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
@ -2765,6 +2811,10 @@ for-own@^1.0.0:
dependencies:
for-in "^1.0.1"
foreach@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@ -2794,8 +2844,8 @@ formidable@^1.1.1:
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
forwarded@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
version "0.1.1"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.1.tgz#8a4e30c640b05395399a3549c730257728048961"
fresh@0.5.0:
version "0.5.0"
@ -2849,7 +2899,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
mkdirp ">=0.5 0"
rimraf "2"
function-bind@^1.0.2:
function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@ -2886,6 +2936,10 @@ get-proxy@^1.0.1:
dependencies:
rc "^1.1.2"
get-size@^2.0.0, get-size@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/get-size/-/get-size-2.0.2.tgz#555ea98ab8732e0c021e9e23e2219adcbe398e98"
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
@ -2955,7 +3009,7 @@ glob@^5.0.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@ -3154,7 +3208,7 @@ has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
has@^1.0.1:
has@^1.0.1, has@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
dependencies:
@ -3248,8 +3302,8 @@ html-loader@^0.4.5:
object-assign "^4.1.0"
html-minifier@^3.0.1:
version "3.5.3"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9"
version "3.5.4"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.4.tgz#e9bbcca964a6815617ed7c31f1f20b476b50b807"
dependencies:
camel-case "3.0.x"
clean-css "4.1.x"
@ -3258,7 +3312,7 @@ html-minifier@^3.0.1:
ncname "1.0.x"
param-case "2.1.x"
relateurl "0.2.x"
uglify-js "3.0.x"
uglify-js "3.1.x"
html-tags@^2.0.0:
version "2.0.0"
@ -3285,6 +3339,10 @@ http-errors@~1.6.1, http-errors@~1.6.2:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
http-parser-js@>=0.4.0:
version "0.4.5"
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.5.tgz#a3ecf39a667481a38ca60882ab57a2db578b9970"
http-proxy-middleware@~0.17.4:
version "0.17.4"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
@ -3321,8 +3379,8 @@ https-browserify@0.0.1:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
iconv-lite@^0.4.17:
version "0.4.18"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
version "0.4.19"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
icss-replace-symbols@^1.1.0:
version "1.1.0"
@ -3450,8 +3508,8 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
inquirer@^3.0.6:
version "3.2.2"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.2.tgz#c2aaede1507cc54d826818737742d621bef2e823"
version "3.2.3"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.3.tgz#1c7b1731cf77b934ec47d22c9ac5aa8fe7fbe095"
dependencies:
ansi-escapes "^2.0.0"
chalk "^2.0.0"
@ -3538,6 +3596,14 @@ is-bzip2@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc"
is-callable@^1.1.1, is-callable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
@ -3580,6 +3646,10 @@ is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
is-function@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
is-gif@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-gif/-/is-gif-1.0.0.tgz#a6d2ae98893007bffa97a1d8c01d63205832097e"
@ -3676,6 +3746,12 @@ is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
dependencies:
has "^1.0.1"
is-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
@ -3708,6 +3784,10 @@ is-svg@^2.0.0:
dependencies:
html-comment-regex "^1.1.0"
is-symbol@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
is-tar@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d"
@ -3758,17 +3838,33 @@ isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
isotope-layout@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/isotope-layout/-/isotope-layout-3.0.4.tgz#f3ed8d15f8cfb3850b11777f1ca76e0a8bb5b73a"
dependencies:
desandro-matches-selector "^2.0.0"
fizzy-ui-utils "^2.0.4"
get-size "^2.0.0"
masonry-layout "^4.1.0"
outlayer "^2.1.0"
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
"jquery@1.12.4 - 3", jquery@>=1.7.2:
jquery-bridget@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/jquery-bridget/-/jquery-bridget-2.0.1.tgz#784d17a85e641780c5d89ac3f8a7eb47b0bce1fc"
dependencies:
jquery ">=1.4.2 <4"
"jquery@1.12.4 - 3", "jquery@>=1.4.2 <4":
version "3.2.1"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787"
js-base64@^2.1.8, js-base64@^2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
version "2.3.1"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.1.tgz#3705897c35fce0e202132630e750d8a17cd220ec"
js-beautify@^1.6.3:
version "1.6.14"
@ -3784,8 +3880,8 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.4.3, js-yaml@^3.8.4:
version "3.9.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0"
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -3898,8 +3994,8 @@ known-css-properties@^0.2.0:
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.2.0.tgz#899c94be368e55b42d7db8d5be7d73a4a4a41454"
laravel-mix@~1.4:
version "1.4.2"
resolved "https://registry.yarnpkg.com/laravel-mix/-/laravel-mix-1.4.2.tgz#5fff0434c98c027e68ffb28c3f54bac95d7e2d1f"
version "1.4.3"
resolved "https://registry.yarnpkg.com/laravel-mix/-/laravel-mix-1.4.3.tgz#7e42888bb1663026a3cea57af4dc5dcae2ffab3b"
dependencies:
autoprefixer "^7.1.1"
babel-core "^6.24.1"
@ -3928,8 +4024,8 @@ laravel-mix@~1.4:
uglify-js "^2.8.28"
uglifyjs-webpack-plugin "^0.4.6"
vue-loader "^12.1.1"
vue-template-compiler "^2.3.3"
webpack "^3.4.0"
vue-template-compiler "^2.4.2"
webpack "^3.5.0"
webpack-chunk-hash "^0.4.0"
webpack-dev-server "^2.5.1"
webpack-merge "^4.1.0"
@ -4253,8 +4349,8 @@ logalot@^2.0.0:
squeak "^1.0.0"
loglevel@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.4.1.tgz#95b383f91a3c2756fd4ab093667e4309161f2bcd"
version "1.5.0"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.5.0.tgz#3863984a2c326b986fbb965f378758a6dc8a4324"
longest@^1.0.0, longest@^1.0.1:
version "1.0.1"
@ -4331,6 +4427,13 @@ marked@^0.3.6:
version "0.3.6"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
masonry-layout@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/masonry-layout/-/masonry-layout-4.2.0.tgz#43835c6b6e0d72eff2c31a118c8000cccc4ab965"
dependencies:
get-size "^2.0.2"
outlayer "^2.1.0"
math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
@ -4425,19 +4528,15 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
"mime-db@>= 1.29.0 < 2":
"mime-db@>= 1.29.0 < 2", mime-db@~1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
mime-db@~1.29.0:
version "1.29.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878"
mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.7:
version "2.1.16"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23"
version "2.1.17"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
dependencies:
mime-db "~1.29.0"
mime-db "~1.30.0"
mime@1.2.4:
version "1.2.4"
@ -4473,7 +4572,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@ -4553,8 +4652,8 @@ mute-stream@0.0.7:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
nan@^2.3.0, nan@^2.3.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
version "2.7.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
natural-compare@^1.4.0:
version "1.4.0"
@ -4571,8 +4670,8 @@ negotiator@0.6.1:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
no-case@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
version "2.3.2"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
dependencies:
lower-case "^1.1.1"
@ -4645,8 +4744,8 @@ node-notifier@^4.1.0:
which "^1.0.5"
node-pre-gyp@^0.6.36:
version "0.6.36"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
version "0.6.37"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05"
dependencies:
mkdirp "^0.5.1"
nopt "^4.0.1"
@ -4655,6 +4754,7 @@ node-pre-gyp@^0.6.36:
request "^2.81.0"
rimraf "^2.6.1"
semver "^5.3.0"
tape "^4.6.3"
tar "^2.2.1"
tar-pack "^3.4.0"
@ -4787,6 +4887,14 @@ object-hash@^1.1.4:
version "1.1.8"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.1.8.tgz#28a659cf987d96a4dabe7860289f3b5326c4a03c"
object-inspect@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d"
object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
object-path@^0.9.0, object-path@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"
@ -4916,6 +5024,14 @@ osenv@0, osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
outlayer@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/outlayer/-/outlayer-2.1.1.tgz#29863b6de10ea5dadfffcadfa0d728907387e9a2"
dependencies:
ev-emitter "^1.0.0"
fizzy-ui-utils "^2.0.0"
get-size "^2.0.2"
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@ -4998,8 +5114,8 @@ parseuri@0.0.5:
better-assert "~1.0.0"
parseurl@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
path-browserify@0.0.0:
version "0.0.0"
@ -5054,8 +5170,8 @@ path-type@^2.0.0:
pify "^2.0.0"
pbkdf2@^3.0.3:
version "3.0.13"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.13.tgz#c37d295531e786b1da3e3eadc840426accb0ae25"
version "3.0.14"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
dependencies:
create-hash "^1.1.2"
create-hmac "^1.1.4"
@ -5449,13 +5565,13 @@ postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.
source-map "^0.5.6"
supports-color "^3.2.3"
postcss@^6.0.1, postcss@^6.0.10, postcss@^6.0.2:
version "6.0.10"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4"
postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.2:
version "6.0.11"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.11.tgz#f48db210b1d37a7f7ab6499b7a54982997ab6f72"
dependencies:
chalk "^2.1.0"
source-map "^0.5.7"
supports-color "^4.2.1"
supports-color "^4.4.0"
prelude-ls@~1.1.2:
version "1.1.2"
@ -5534,10 +5650,14 @@ qs@6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
qs@6.5.0, "qs@>= 0.4.0", qs@^6.2.0, qs@^6.4.0:
qs@6.5.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49"
"qs@>= 0.4.0", qs@^6.2.0, qs@^6.4.0:
version "6.5.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@ -5730,15 +5850,14 @@ regenerator-transform@^0.10.0:
private "^0.1.6"
regex-cache@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
version "0.4.4"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
dependencies:
is-equal-shallow "^0.1.3"
is-primitive "^2.0.0"
regex-parser@^2.2.1:
version "2.2.7"
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.7.tgz#bd090e09181849acc45457e765f7be2a63f50ef1"
version "2.2.8"
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.8.tgz#da4c0cda5a828559094168930f455f532b6ffbac"
regexpu-core@^1.0.0:
version "1.0.0"
@ -5872,7 +5991,7 @@ resolve-url@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
resolve@^1.2.0, resolve@^1.3.3:
resolve@^1.2.0, resolve@^1.3.3, resolve@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
dependencies:
@ -5892,6 +6011,12 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
resumer@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
dependencies:
through "~2.3.4"
rework-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
@ -5910,8 +6035,8 @@ right-align@^0.1.1:
align-text "^0.1.1"
rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@~2.6:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
glob "^7.0.5"
@ -6171,12 +6296,6 @@ slice-ansi@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
slick-carousel@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/slick-carousel/-/slick-carousel-1.7.1.tgz#51f5489bbb52212542ccbe9f42689f818bd29ed2"
dependencies:
jquery ">=1.7.2"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@ -6265,8 +6384,8 @@ source-map-resolve@^0.3.0:
urix "~0.1.0"
source-map-support@^0.4.15:
version "0.4.16"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8"
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
dependencies:
source-map "^0.5.6"
@ -6452,6 +6571,14 @@ string-width@^2.0.0, string-width@^2.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
string.prototype.trim@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
dependencies:
define-properties "^1.1.2"
es-abstract "^1.5.0"
function-bind "^1.0.2"
string_decoder@^0.10.25, string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
@ -6692,9 +6819,9 @@ supports-color@^3.1.1, supports-color@^3.2.3:
dependencies:
has-flag "^1.0.0"
supports-color@^4.0.0, supports-color@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836"
supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
dependencies:
has-flag "^2.0.0"
@ -6745,6 +6872,24 @@ tapable@^0.2.7:
version "0.2.8"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
tape@^4.6.3:
version "4.8.0"
resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e"
dependencies:
deep-equal "~1.0.1"
defined "~1.0.0"
for-each "~0.3.2"
function-bind "~1.1.0"
glob "~7.1.2"
has "~1.0.1"
inherits "~2.0.3"
minimist "~1.2.0"
object-inspect "~1.3.0"
resolve "~1.4.0"
resumer "~0.0.0"
string.prototype.trim "~1.1.2"
through "~2.3.8"
tar-pack@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
@ -6825,7 +6970,7 @@ through2@^2.0.0, through2@~2.0.0:
readable-stream "^2.1.5"
xtend "~4.0.1"
"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4, through@~2.3.6:
"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4, through@~2.3.6, through@~2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@ -6938,9 +7083,9 @@ ua-parser-js@0.7.12:
version "0.7.12"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
uglify-js@3.0.x:
version "3.0.28"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.28.tgz#96b8495f0272944787b5843a1679aa326640d5f7"
uglify-js@3.1.x:
version "3.1.0"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.0.tgz#92fae17b88dfbc3c394175a935044cdbcf4085ae"
dependencies:
commander "~2.11.0"
source-map "~0.5.1"
@ -7188,7 +7333,7 @@ vue-style-loader@^3.0.0:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
vue-template-compiler@^2.3.3:
vue-template-compiler@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.4.2.tgz#5a45d843f148b098f6c1d1e35ac20c4956d30ad1"
dependencies:
@ -7282,9 +7427,9 @@ webpack-sources@^1.0.1:
source-list-map "^2.0.0"
source-map "~0.5.3"
webpack@^3.4.0:
version "3.5.5"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.5.tgz#3226f09fc8b3e435ff781e7af34f82b68b26996c"
webpack@^3.5.0:
version "3.5.6"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.6.tgz#a492fb6c1ed7f573816f90e00c8fbb5a20cc5c36"
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
@ -7310,14 +7455,15 @@ webpack@^3.4.0:
yargs "^8.0.2"
websocket-driver@>=0.5.1:
version "0.6.5"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
version "0.7.0"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
dependencies:
http-parser-js ">=0.4.0"
websocket-extensions ">=0.1.1"
websocket-extensions@>=0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
version "0.1.2"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d"
weinre@^2.0.0-pre-I0Z7U9OV:
version "2.0.0-pre-I0Z7U9OV"

Loading…
Cancel
Save