├── .babelrc
├── .browserslistrc
├── .editorconfig
├── .env.example
├── .eslintrc.yaml
├── .gitignore
├── 404.php
├── CHANGELOG.md
├── LICENSE
├── README.md
├── app
├── bootstrap.php
├── config
│ ├── autoload.php
│ ├── timber.php
│ ├── woocommerce.php
│ └── wp
│ │ ├── admin-page.php
│ │ ├── image-sizes.php
│ │ ├── login-page.php
│ │ ├── maintenance.php
│ │ ├── menus.php
│ │ ├── scripts-and-styles.php
│ │ ├── security.php
│ │ ├── sidebars.php
│ │ └── theme-supports.php
├── helpers.php
├── models
│ ├── Blueprints
│ │ ├── PostType.php
│ │ └── Taxonomy.php
│ ├── Category.php
│ ├── Page.php
│ ├── Post.php
│ └── Tag.php
├── timber-extends
│ └── BaseCampSite.php
└── utils
│ └── Session.php
├── archive.php
├── author.php
├── build
├── config.js
└── webpack.config.js
├── composer.json
├── composer.lock
├── functions.php
├── index.php
├── luna
├── package-lock.json
├── package.json
├── page.php
├── postcss.config.js
├── resources
├── assets
│ ├── images
│ │ ├── base-camp-logo.png
│ │ ├── base-camp-logo_alt.png
│ │ └── favicon.png
│ ├── js
│ │ ├── components
│ │ │ └── Example.vue
│ │ └── main.js
│ └── sass
│ │ ├── _common.sass
│ │ ├── _footer.sass
│ │ ├── _helpers.sass
│ │ ├── _pageloader.sass
│ │ ├── _single.sass
│ │ ├── _variables.sass
│ │ ├── admin.sass
│ │ ├── components
│ │ ├── _article.sass
│ │ ├── _comment.sass
│ │ ├── _navbar.sass
│ │ ├── _social-media.sass
│ │ └── index.sass
│ │ ├── login.sass
│ │ ├── main.sass
│ │ ├── shared-with-vue.sass
│ │ └── woocommerce
│ │ ├── _archive.sass
│ │ ├── _common.sass
│ │ ├── _single-product.sass
│ │ ├── _tease-product.sass
│ │ └── index.sass
├── languages
│ ├── base-camp.pot
│ └── messages.php
└── views
│ ├── 404.twig
│ ├── archive.twig
│ ├── author.twig
│ ├── base.twig
│ ├── comment-form.twig
│ ├── comment.twig
│ ├── components
│ ├── article.twig
│ ├── navbar
│ │ ├── _navbar-brand.twig
│ │ ├── _navbar-end.twig
│ │ ├── _navbar-menu.twig
│ │ ├── _navbar-start.twig
│ │ └── index.twig
│ ├── pagination.twig
│ └── social-media.twig
│ ├── footer
│ └── index.twig
│ ├── header
│ ├── _head.twig
│ └── index.twig
│ ├── index.twig
│ ├── maintenance.twig
│ ├── page.twig
│ ├── search.twig
│ ├── searchform.twig
│ ├── single-password.twig
│ ├── single.twig
│ └── woocommerce
│ ├── archive.twig
│ ├── single-product.twig
│ └── tease-product.twig
├── screenshot.png
├── search.php
├── searchform.php
├── single.php
├── style.css
├── woocommerce.php
└── yarn.lock
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage"
7 | }
8 | ]
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | indent_style = space
7 | indent_size = 2
8 | end_of_line = lf
9 | charset = utf-8
10 | trim_trailing_whitespace = true
11 | insert_final_newline = true
12 |
13 | [*.php]
14 | indent_size = 4
15 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | # Supported values: false, "enable", "full"
2 | MAINTENANCE="false"
3 |
4 | # Supported values: "development", "production"
5 | MODE="development"
6 |
--------------------------------------------------------------------------------
/.eslintrc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | extends: [
3 | "airbnb-base",
4 | "plugin:vue/recommended"
5 | ]
6 | env:
7 | browser: true
8 | es6: true
9 | plugins: [
10 | "vue"
11 | ]
12 | rules:
13 | import/extensions: 0
14 | import/no-unresolved: 0
15 | no-new: 0
16 | max-len: [2, 80, 2, { "ignoreUrls": true }]
17 | quotes: [2, "single"]
18 | parserOptions:
19 | parser: "babel-eslint"
20 | ecmaVersion: 6
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | vendor
2 | node_modules
3 | static
4 | .idea
5 | .vscode
6 | .env
7 |
--------------------------------------------------------------------------------
/404.php:
--------------------------------------------------------------------------------
1 | 0.7.2
21 |
22 | ## **v1.8.2 (2018-08-09)**
23 |
24 | ### Changed
25 | * Timber will be added via composer instead of wordpress plugin
26 |
27 | ## **v1.8.0 (2018-07-27)**
28 |
29 | ### Added
30 | * Models (Wrapper classes for Wordpress Post Types and Taxonomies.)
31 | * Updated Luna (A new command `make:custom-taxonomy`)
32 | * `make:custom-post-type` and `make:custom-taxonomy` command creates model which helps interact with a new post types or taxonomy.
33 | * namespace `Basecamp\Models\` for `app/models/` directory
34 |
35 | ## **v1.7.0 (2018-07-01)**
36 |
37 | ### Added
38 | * Variables in `_variables.sass` can be used in `*.vue` files
39 | * Webpack removes unused css from `app.[hash].css` file
40 | * A new command `make:menu-page`
41 | * screenshot for theme
42 |
43 | ### Changed
44 | * Migrated from webpack 3 to webpack 4
45 | * Moved Luna CLIs [docs](https://github.com/suomato/luna) to `suomato/luna` repository
46 | * Updated composer packages (Now PHP version must be at least v7.0!)
47 | * Updated Timber to v1.7.1
48 |
49 | ### Removed
50 | * `dd()` from `/app/helpers.php`. This function comes now with the `symfony/var-dumper`
51 |
52 | ## **v1.6.0 (2018-03-30)**
53 |
54 | ### Added
55 | * Woocommerce support
56 | * Basic boilerplate for woocommerce (`.twig` and `.sass.` files)
57 |
58 | ### Changed
59 | * Updated javascrit packages
60 |
61 | ### Fixed
62 | * Images and fonts `publicPath` in `webpack.config.js`
63 | * Fixed localize path in `bootstrap.php`
64 |
65 | ## **v1.5.0 (2017-11-19)**
66 |
67 | ### Added
68 | * `build/` for webpack config and custom config
69 | * new webpack alias `~images` for relative image paths
70 |
71 | ### Changed
72 | * moved `bootstrap.php` to `app/bootstrap.php`
73 | * refactored webpack config
74 |
75 | ## **v1.4.2 (2017-11-16)**
76 |
77 | ### Added
78 | * Theme init config from `functions.php` to `bootstrap.php`
79 | * Extensions to webpack config. Now Vue file can be imported without using .vue extension
80 |
81 | ### Changed
82 | * Refactored assets
83 |
84 | ### Fixed
85 | * Vue production bundle (Fixed Webpack config)
86 |
87 | ## **v1.4.0 (2017-11-11)**
88 |
89 | ### Added
90 | * Maintenance mode
91 | * Maintenance config to `app/config/wp/maintenance.php`
92 | * Maintenance page tempalte `resources/views/maintenance.twig`
93 | * PHP dotenv (Environment variables)
94 |
95 | ### Fixed
96 | * Bug in webpack config
97 |
98 | ## **v1.3.0 (2017-11-05)**
99 |
100 | ### Added
101 | * Custom image size config to `app/config/wp/image-sizes.php`
102 | * Some security config to `app/config/wp/security.php`
103 |
104 | ### Changed
105 | * Luna 1.0.0 -> 1.1.0 (A new command make:shortcode)
106 | * updated packages
107 |
108 | ## **v1.2.0 (2017-10-22)**
109 |
110 | ### Added
111 | * Third menu level (Wordpress Main menu supports third menu level)
112 | * Favicon to admin page and login page
113 |
114 | ### Changed
115 | * Refactored Navbar component
116 | * Refactored `_variables.sass` file
117 |
118 | ### Fixed
119 | * Pagination border-color
120 |
121 | ---
122 |
123 | ## **v1.1.0 (2017-10-01)**
124 |
125 | ### Added
126 | * Login page config to `app/config/wp/login-page.php`
127 | * Favicon to `resources/assets/images/favicon.png`
128 | * Login page styles to `resources/assets/sass/login.sass`
129 | * Images path helper `images_path()` to `app/helpers.php`
130 | * `File-loader` and `image-webpack-loader` to webpack
131 |
132 | ### Changed
133 | * Sass variables to own file `resources/assets/sass/_variables.sass`
134 |
135 |
136 | ### Fixed
137 | * CleanWebpackPlugin better config. Watch mode clear static folder after every build
138 |
139 | ### Removed
140 | * `purifycss` and `purifycss-webpack` packages
141 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2017 Toni Suomalainen
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |

2 |
3 |
4 |
5 |
6 |
7 | ## About Base Camp
8 |
9 | > Awesome WordPress starter theme with own CLI for developers based on modern web technologies.
10 |
11 | ## Features
12 | * [Bulma](http://bulma.io/) (Responsive CSS framework based on Flexbox)
13 | * [Timber](https://www.upstatement.com/timber/)
14 | * Twig Template Engine
15 | * Cleaner and better code
16 | * Separates the logic from presentation
17 | * [Webpack](https://webpack.github.io/)
18 | * Sass / Scss for stylesheets (Minimize in production)
19 | * ES6 for Javascript (Minimize in production)
20 | * Automatic Cache Busting
21 | * Split javascript code to two chunks, app.js and vendor.js
22 | * [Vuejs](https://vuejs.org/) for boosting frontend development
23 | * [BrowserSync](https://www.browsersync.io/) for synchronised browser testing
24 | * [Luna](https://github.com/suomato/luna) (Command-line interface included with Base Camp)
25 | * [WooCommerce](https://woocommerce.com/) support with basic boilerplate.
26 |
27 | ## Requirements
28 | * [Wordpress](https://wordpress.org/) >= v4.9.6
29 | * [Composer](https://getcomposer.org/download/) >= v1.6.5
30 | * [PHP](http://php.net/manual/en/install.php) >= v7.0
31 | * [Yarn](https://yarnpkg.com/en/) >= v1.7.0 **or** [npm](https://www.npmjs.com/) >= v6.1.0
32 | * [Nodejs](https://nodejs.org/en/) >= v8.11.1
33 |
34 | ## Installation
35 | * Go your themes folder and run`composer create-project suomato/base-camp`
36 | * `cd base-camp`
37 | * `yarn` **or** `npm install`
38 | * define your custom webpack config to `build/config.js` file
39 | * `yarn watch` **or** `npm run watch`
40 | * Happy developing :)
41 |
42 | ## Structure
43 | ```
44 | base-camp/ # Theme root
45 | ├── app/ # Theme logic
46 | │ ├── config/ # Theme config
47 | │ │ ├── wp/ # WordPress specific config
48 | │ │ │ ├── admin-page.php # Register here WordPress Admin Page config
49 | │ │ │ ├── image-sizes.php # Register here WordPress Custom image sizes
50 | │ │ │ ├── login-page.php # Register here WordPress Login Page config
51 | │ │ │ ├── maintenance.php # Maintenance mode config
52 | │ │ │ ├── menus.php # Register here WordPress navigation menus
53 | │ │ │ ├── scripts-and-styles.php # Register here WordPress scripts and styles
54 | │ │ │ ├── security.php # Things that increase the site security
55 | │ │ │ ├── sidebars.php # Register here WordPress sidebars
56 | │ │ │ └── theme-supports.php # Register here WordPress theme features
57 | │ │ ├── autoload.php # Includes all config files (DON'T REMOVE THIS)
58 | │ │ ├── timber.php # Timber specific config
59 | │ │ └── woocommerce.php # Init woocommerce support
60 | │ ├── models/ # Wrappers for Timber Classes
61 | │ ├── timber-extends/ # Extended Timber Classes
62 | │ │ └── BaseCampSite.php # Extended TimberSite Class
63 | │ ├── bootstrap.php # Bootstrap theme
64 | │ ├── helpers.php # Common helper functions
65 | ├── build/ # Theme assets and views
66 | │ ├── config.js # Custom webpack config
67 | │ ├── webpack.config.js # Webpack config
68 | ├── resources/ # Theme assets and views
69 | │ ├── assets/ # Front-end assets
70 | │ │ ├── js/ # Javascripts
71 | │ │ │ └── components/ # Vue Components
72 | │ │ ├── sass/ # Styles
73 | │ │ │ └── components/ # Partials
74 | │ ├── languages/ # Language features
75 | │ │ ├── base-camp.pot # Template for translation
76 | │ │ └── messages.php # Language strings
77 | │ ├── views/ # Theme Twig files
78 | │ │ ├── components/ # Partials
79 | │ │ ├── footer/ # Theme footer templates
80 | │ │ └── header/ # Theme header templates
81 | ```
82 |
83 | ## Models
84 | > Models are wrapper classes for Wordpress Post Types and Taxonomies. They provide very simple interface to interact with the database.
85 |
86 | ### How to use
87 | ```
88 | // index.php
89 |
90 | get();
102 |
103 | // skips first two posts;
104 | Post::skip(2)->get();
105 |
106 | // returns published posts;
107 | // Supported values: https://codex.wordpress.org/Post_Status#Default_Statuses
108 | Post::status('publish')->get();
109 |
110 | // returns all posts except post with ID 1;
111 | Post::exclude([1])->get();
112 |
113 | // returns only posts with ID 1;
114 | Post::include([1])->get();
115 |
116 | // returns an array of posts descending order by author;
117 | // Supported Values: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
118 | Post::orderby('author', 'desc')->get();
119 |
120 | // returns an array of posts authored by admin;
121 | Post::author('admin')->get();
122 |
123 | // returns an array of posts which are in category 'cars' or 'vehicles';
124 | Post::inCategory(['cars', 'vehicles'])->get();
125 | ```
126 |
127 | > All queries are chainable. For example you can get three first incomplete posts authored by admin:
128 | ```
129 | Post::status('draft')->author('admin')->take(3)->get();
130 | ```
131 |
132 | All models are able to use almost every methods. However there are some exceptions:
133 |
134 | * Only `Post` model has `inCategory()` method
135 | * Taxonomies (Category, Tag) have `hideEmpty()` method
136 |
137 |
138 | ## Luna (Command-line interface)
139 | > [Docs](https://github.com/suomato/luna)
140 |
141 |
--------------------------------------------------------------------------------
/app/bootstrap.php:
--------------------------------------------------------------------------------
1 | load();
14 |
15 | // Load WordPress config files
16 | require_once __DIR__ . '/../app/config/autoload.php';
17 |
18 | // Init Sessions
19 | Session::init();
20 |
21 | /**
22 | * Loads the theme's translated strings.
23 | */
24 | function localize()
25 | {
26 | load_theme_textdomain('base-camp', get_template_directory() . '/resources/languages');
27 | }
28 |
29 | add_action('after_setup_theme', 'localize');
30 |
--------------------------------------------------------------------------------
/app/config/autoload.php:
--------------------------------------------------------------------------------
1 | files()
12 | ->in(__DIR__)
13 | ->name('*.php')
14 | ->notName(basename(__FILE__));
15 |
16 | foreach ($finder as $file) {
17 | require_once $file->getRealPath();
18 | }
19 |
--------------------------------------------------------------------------------
/app/config/timber.php:
--------------------------------------------------------------------------------
1 | 1 ... 5 [6] 7 ... 11
13 | | $pagination_mid_size = 2 => 1 ... 4 5 [6] 7 8 ... 11
14 | | $pagination_mid_size = 3 => 1 ... 3 4 5 [6] 7 8 9 ... 11
15 | | $pagination_mid_size = 3 => 1 2 3 4 [5] 6 7 8 ... 11
16 | |
17 | | Supported Mid size value: 1 - n
18 | |
19 | */
20 |
21 | $pagination_mid_size = 2;
22 |
23 | $pagination_mid_size += 2; // DON'T TOUCH
24 |
25 | /*
26 | |--------------------------------------------------------------------------
27 | | Template paths
28 | |--------------------------------------------------------------------------
29 | |
30 | | Here you may specify an array of paths where to load templates.
31 | |
32 | | Default path: 'resources/views'
33 | |
34 | */
35 |
36 | Timber::$dirname = ['resources/views'];
37 |
38 | /**
39 | * Adds data to Timber context.
40 | *
41 | * @param $data
42 | *
43 | * @return mixed
44 | */
45 | function add_to_context($data)
46 | {
47 | // Add Main Menu to Timber context object
48 | $data['menu'] = new TimberMenu();
49 |
50 | // Add main-sidebar to Timber context object
51 | $data['main_sidebar'] = Timber::get_widgets('main-sidebar');
52 |
53 | // Add Locale strings to Timber context object
54 | $data['messages'] = get_template_messages();
55 |
56 | // Logo
57 | $data['logo'] = images_path('base-camp-logo.png');
58 |
59 | // Favicon
60 | $data['favicon'] = images_path('favicon.png');
61 |
62 | // Current Template File Name
63 | $data['current_template_file'] = basename($GLOBALS['template']);
64 |
65 | // Extend TimberSite object
66 | $data['site'] = new BaseCampSite();
67 |
68 | $data['in_production'] = bc_env('MODE', 'production') === 'production';
69 |
70 | return $data;
71 | }
72 |
73 | add_filter('timber_context', 'add_to_context');
74 |
--------------------------------------------------------------------------------
/app/config/woocommerce.php:
--------------------------------------------------------------------------------
1 | ID);
13 | }
14 | }
15 |
16 | add_action('after_setup_theme', 'woocommerce_support');
17 | function woocommerce_support()
18 | {
19 | add_theme_support('woocommerce');
20 | }
21 |
22 | add_theme_support('wc-product-gallery-zoom');
23 | add_theme_support('wc-product-gallery-lightbox');
24 | add_theme_support('wc-product-gallery-slider');
25 |
--------------------------------------------------------------------------------
/app/config/wp/admin-page.php:
--------------------------------------------------------------------------------
1 | ';
8 | });
9 |
--------------------------------------------------------------------------------
/app/config/wp/image-sizes.php:
--------------------------------------------------------------------------------
1 | __('Square', 'base-camp'),
17 | ]);
18 | }
19 |
20 | add_filter('image_size_names_choose', 'base_camp_custom_image_sizes');
21 |
--------------------------------------------------------------------------------
/app/config/wp/login-page.php:
--------------------------------------------------------------------------------
1 | ';
32 | });
33 |
--------------------------------------------------------------------------------
/app/config/wp/maintenance.php:
--------------------------------------------------------------------------------
1 | __('Main Sidebar', 'base-camp'),
7 | 'id' => 'main-sidebar',
8 | 'description' => __('Widgets in this area will be shown on all posts and pages.', 'base-camp'),
9 | 'before_widget' => '',
10 | 'after_widget' => '
',
11 | 'before_title' => '',
13 | ]);
14 | }
15 |
16 | add_action('widgets_init', 'base_camp_register_sidebars');
17 |
--------------------------------------------------------------------------------
/app/config/wp/theme-supports.php:
--------------------------------------------------------------------------------
1 |
32 | add_theme_support('automatic-feed-links');
33 |
34 | // Allows the use of HTML5 markup for the listen options
35 | add_theme_support('html5', [
36 | 'caption',
37 | 'comment-form',
38 | 'comment-list',
39 | 'gallery',
40 | 'search-form',
41 | ]);
42 |
43 | // Enables Custom_Backgrounds support for a theme
44 | //add_theme_support('custom-background', [
45 | // 'default-image' => '',
46 | // 'default-preset' => 'default',
47 | // 'default-position-x' => 'left',
48 | // 'default-position-y' => 'top',
49 | // 'default-size' => 'auto',
50 | // 'default-repeat' => 'repeat',
51 | // 'default-attachment' => 'scroll',
52 | // 'default-color' => '',
53 | // 'wp-head-callback' => '_custom_background_cb',
54 | // 'admin-head-callback' => '',
55 | // 'admin-preview-callback' => '',
56 | //]);
57 |
58 | // Enables Custom_Headers support for a theme
59 | //add_theme_support('custom-header', [
60 | // 'default-image' => '',
61 | // 'random-default' => false,
62 | // 'width' => 0,
63 | // 'height' => 0,
64 | // 'flex-height' => false,
65 | // 'flex-width' => false,
66 | // 'default-text-color' => '',
67 | // 'header-text' => true,
68 | // 'uploads' => true,
69 | // 'wp-head-callback' => '',
70 | // 'admin-head-callback' => '',
71 | // 'admin-preview-callback' => '',
72 | // 'video' => false,
73 | // 'video-active-callback' => 'is_front_page',
74 | //]);
75 |
76 | // Enables Theme_Logo support for a theme
77 | //add_theme_support('custom-logo', [
78 | // 'height' => 100,
79 | // 'width' => 400,
80 | // 'flex-height' => true,
81 | // 'flex-width' => true,
82 | // 'header-text' => ['site-title', 'site-description'],
83 | //]);
84 |
--------------------------------------------------------------------------------
/app/helpers.php:
--------------------------------------------------------------------------------
1 | getShortName());
13 | }
14 |
15 | public static function all()
16 | {
17 | return \Timber::get_posts(['post_type' => self::post_type()]);
18 | }
19 |
20 | public static function find($id)
21 | {
22 | $post = new \TimberPost($id);
23 | if ($post->post_type !== self::post_type()) {
24 | return null;
25 | }
26 |
27 | return $post;
28 | }
29 |
30 | public static function take($take)
31 | {
32 | static::$args['posts_per_page'] = $take;
33 | return new static;
34 | }
35 |
36 | public static function skip($skip)
37 | {
38 | static::$args['offset'] = $skip;
39 | return new static;
40 | }
41 |
42 | public static function status($status)
43 | {
44 | static::$args['post_status'] = $status;
45 | return new static;
46 | }
47 |
48 | public static function include($include)
49 | {
50 | static::$args['post__in'] = $include;
51 | return new static;
52 | }
53 |
54 | public static function exclude($exclude)
55 | {
56 | static::$args['post__not_in'] = $exclude;
57 | return new static;
58 | }
59 |
60 | public static function orderby($orderby, $order = 'asc')
61 | {
62 | static::$args['orderby'] = $orderby;
63 | static::$args['order'] = $order;
64 | return new static;
65 | }
66 |
67 | public static function author($author)
68 | {
69 | if (is_int($author)) {
70 | static::$args['author'] = $author;
71 | } else {
72 | static::$args['author_name'] = $author;
73 | }
74 | return new static;
75 | }
76 |
77 | public static function inCategory($categories)
78 | {
79 | if (self::post_type() === 'post') {
80 | if (is_int($categories) || array_filter($categories, 'is_int')) {
81 | static::$args['category'] = $categories;
82 | } else {
83 | static::$args['category_name'] = $categories;
84 | }
85 | return new static;
86 | }
87 | die('Not supported');
88 | }
89 |
90 | public static function get()
91 | {
92 | $result = \Timber::get_posts(array_merge(['post_type' => self::post_type()], static::$args));
93 | static::$args = [];
94 |
95 | return $result;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/app/models/Blueprints/Taxonomy.php:
--------------------------------------------------------------------------------
1 | getShortName());
13 | }
14 |
15 | public static function all()
16 | {
17 | return \Timber::get_terms(['taxonomy' => self::taxonomy_type()]);
18 | }
19 |
20 | public static function find($id)
21 | {
22 | $term = new \TimberTerm($id);
23 | if ($term->taxonomy !== self::taxonomy_type()) {
24 | return null;
25 | }
26 |
27 | return $term;
28 | }
29 |
30 | public static function orderby($orderby, $order = 'asc')
31 | {
32 | static::$args['orderby'] = $orderby;
33 | static::$args['order'] = $order;
34 | return new static;
35 | }
36 |
37 | public static function take($take)
38 | {
39 | static::$args['number'] = $take;
40 | return new static;
41 | }
42 |
43 | public static function skip($skip)
44 | {
45 | static::$args['offset'] = $skip;
46 | return new static;
47 | }
48 |
49 | public static function hideEmpty()
50 | {
51 | static::$args['hide_empty'] = true;
52 | return new static;
53 | }
54 |
55 | public static function include($include)
56 | {
57 | static::$args['include'] = $include;
58 | return new static;
59 | }
60 |
61 | public static function exclude($exclude)
62 | {
63 | static::$args['exclude'] = $exclude;
64 | return new static;
65 | }
66 |
67 | public static function get()
68 | {
69 | return \Timber::get_terms(array_merge(['taxonomy' => self::taxonomy_type()], static::$args));
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/app/models/Category.php:
--------------------------------------------------------------------------------
1 | wp_link = site_url();
14 | $this->link = home_url();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/utils/Session.php:
--------------------------------------------------------------------------------
1 | query_vars['author'])) {
11 | $author = new TimberUser($wp_query->query_vars['author']);
12 | $context['author'] = $author;
13 | $context['title'] = 'Author Archives: ' . $author->name();
14 | }
15 | Timber::render($templates, $context);
16 |
--------------------------------------------------------------------------------
/build/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | /**
3 | * Define your assets path here. Assets path are your theme
4 | * path without host.
5 | * E.g. your theme path is http://test.dev/wp-content/themes/base-camp/
6 | * then your assets path is /wp-content/themes/base-camp/
7 | *
8 | * This is for Webpack that it can handle assets relative path right.
9 | */
10 | assetsPath: '/wp-content/themes/base-camp/',
11 |
12 | /**
13 | * Define here your dev server url here.
14 | *
15 | * This is for Browsersync.
16 | */
17 | devUrl: 'http://localhost:8080',
18 |
19 | /**
20 | * You can whitelist selectors to stop purgecss from removing them from your CSS
21 | *
22 | * whitelist: ['random', 'yep', 'button']
23 | * In the example, the selectors .random, #yep, button will be left in the final CSS
24 | */
25 | whitelist: [],
26 | };
27 |
--------------------------------------------------------------------------------
/build/webpack.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const path = require('path');
3 | const glob = require('glob');
4 | const VueLoaderPlugin = require('vue-loader/lib/plugin');
5 | const CleanWebpackPlugin = require('clean-webpack-plugin');
6 | const MiniCssExtractPlugin = require('mini-css-extract-plugin');
7 | const PurgecssPlugin = require('purgecss-webpack-plugin');
8 | const ManifestPlugin = require('webpack-manifest-plugin');
9 | const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
10 | const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries');
11 | const config = require('./config');
12 |
13 | const inProduction = process.env.NODE_ENV === 'production';
14 | const styleHash = inProduction ? '.[contenthash]' : '';
15 | const scriptHash = inProduction ? '.[chunkhash]' : '';
16 |
17 | // LOADER HELPERS
18 | const extractCss = {
19 | loader: MiniCssExtractPlugin.loader,
20 | options: {
21 | publicPath: `${config.assetsPath}static/css/`,
22 | },
23 | };
24 |
25 | const cssLoader = {
26 | loader: 'css-loader',
27 | options: {
28 | importLoaders: 1,
29 | sourceMap: true,
30 | },
31 | };
32 |
33 | const images = [
34 | {
35 | loader: 'file-loader',
36 | options: {
37 | name: '[name].[ext]',
38 | outputPath: 'images/',
39 | publicPath: `${config.assetsPath}static/images/`,
40 | },
41 | },
42 | ];
43 |
44 | if (inProduction) {
45 | images.push('image-webpack-loader');
46 | }
47 |
48 | module.exports = {
49 | entry: {
50 | scripts: './resources/assets/js/main.js',
51 | styles: './resources/assets/sass/main.sass',
52 | login: './resources/assets/sass/login.sass',
53 | admin: './resources/assets/sass/admin.sass',
54 | vendor: ['jquery', 'vue'],
55 | },
56 | output: {
57 | path: path.resolve(__dirname, '../static/'),
58 | filename: `js/[name]${scriptHash}.js`,
59 | },
60 |
61 | watchOptions: {
62 | ignored: /node_modules/,
63 | },
64 |
65 | devtool: false,
66 |
67 | module: {
68 | rules: [
69 | {
70 | test: /\.vue$/,
71 | loader: 'vue-loader',
72 | },
73 | {
74 | test: /\.js$/,
75 | exclude: /node_modules/,
76 | loader: 'babel-loader',
77 | },
78 | {
79 | test: /\.css$/,
80 | use: ['vue-style-loader', extractCss, cssLoader, 'postcss-loader'],
81 | },
82 | {
83 | test: /\.scss$/,
84 | exclude: /node_modules/,
85 | use: [
86 | 'vue-style-loader',
87 | extractCss,
88 | cssLoader,
89 | {
90 | loader: 'postcss-loader',
91 | options: {
92 | sourceMap: true,
93 | },
94 | },
95 | {
96 | loader: 'sass-loader',
97 | options: {
98 | includePaths: [
99 | path.resolve(__dirname, '../resources/assets/sass'),
100 | ],
101 | data: '@import "shared-with-vue";',
102 | sourceMap: true,
103 | },
104 | },
105 | ],
106 | },
107 | {
108 | test: /\.sass$/,
109 | exclude: /node_modules/,
110 | use: [
111 | 'vue-style-loader',
112 | extractCss,
113 | cssLoader,
114 | {
115 | loader: 'postcss-loader',
116 | options: {
117 | sourceMap: true,
118 | },
119 | },
120 | {
121 | loader: 'sass-loader',
122 | options: {
123 | indentedSyntax: true,
124 | includePaths: [
125 | path.resolve(__dirname, '../resources/assets/sass'),
126 | ],
127 | data: '@import "shared-with-vue";',
128 | sourceMap: true,
129 | },
130 | },
131 | ],
132 | },
133 | {
134 | test: /\.(png|jpe?g|gif|svg)$/,
135 | use: images,
136 | },
137 | {
138 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
139 | loader: 'url-loader',
140 | options: {
141 | limit: 10000,
142 | name: '[name].[hash:7].[ext]',
143 | outputPath: 'fonts/',
144 | publicPath: `${config.assetsPath}static/fonts/`,
145 | },
146 | },
147 | ],
148 | },
149 |
150 | optimization: {
151 | splitChunks: {
152 | cacheGroups: {
153 | vendor: {
154 | chunks: 'all',
155 | name: 'vendor',
156 | test: 'vendor',
157 | enforce: true,
158 | },
159 | },
160 | },
161 | },
162 |
163 | resolve: {
164 | alias: {
165 | vue$: 'vue/dist/vue.esm.js',
166 | images: path.join(__dirname, '../resources/assets/images'),
167 | },
168 | extensions: ['*', '.js', '.vue', '.json'],
169 | },
170 |
171 | plugins: [
172 | new VueLoaderPlugin(),
173 |
174 | new CleanWebpackPlugin(['static'], {
175 | root: path.join(__dirname, '../'),
176 | watch: false,
177 | }),
178 |
179 | new FixStyleOnlyEntriesPlugin({ extensions: ['less', 'scss', 'css', 'sass'] }),
180 |
181 | new MiniCssExtractPlugin({
182 | filename: `css/[name]${styleHash}.css`,
183 | }),
184 |
185 | new ManifestPlugin(),
186 |
187 |
188 | new BrowserSyncPlugin({
189 | host: 'localhost',
190 | port: 3000,
191 | proxy: config.devUrl, // YOUR DEV-SERVER URL
192 | files: ['./*.php', './resources/views/**/*.twig', './static/css/*.*', './static/js/*.*'],
193 | },
194 | {
195 | reload: false,
196 | injectCss: true,
197 | }),
198 | ],
199 | };
200 |
201 | if (!inProduction) {
202 | module.exports.plugins.push(
203 | new webpack.SourceMapDevToolPlugin({}),
204 | );
205 | }
206 |
207 | if (inProduction) {
208 | module.exports.plugins.push(
209 | new PurgecssPlugin({
210 | paths: () => glob.sync(path.join(__dirname, '../resources/**/*'), { nodir: true }),
211 | only: ['styles', 'scripts'],
212 | whitelist: config.whitelist,
213 | }),
214 | );
215 | }
216 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "suomato/base-camp",
3 | "description": "Awesome WordPress starter theme with own CLI for developers based on modern web technologies.",
4 | "license": "MIT",
5 | "keywords": [
6 | "bulma",
7 | "webpack",
8 | "timber",
9 | "starter-theme",
10 | "wordpress",
11 | "composer"
12 | ],
13 | "type": "wordpress-theme",
14 | "minimum-stability": "stable",
15 | "authors": [
16 | {
17 | "name": "Toni Suomalainen",
18 | "email": "toni.suomalainen@gmail.com"
19 | }
20 | ],
21 | "repositories": [
22 | {
23 | "type": "composer",
24 | "url": "https://wpackagist.org"
25 | }
26 | ],
27 | "extra": {
28 | "installer-paths": {
29 | "../../plugins/{$name}/": [
30 | "wpackagist-plugin/*",
31 | "type:wordpress-plugin"
32 | ]
33 | }
34 | },
35 | "require": {
36 | "php": "^7.0",
37 | "symfony/var-dumper": "^4.1",
38 | "symfony/console": "^4.1",
39 | "league/flysystem": "^1.0",
40 | "symfony/finder": "^4.1",
41 | "vlucas/phpdotenv": "^2.4",
42 | "suomato/luna": "^1.3",
43 | "timber/timber": "^1.7"
44 | },
45 | "autoload": {
46 | "files": [
47 | "app/helpers.php",
48 | "resources/languages/messages.php"
49 | ],
50 | "classmap": [
51 | "app/timber-extends"
52 | ],
53 | "psr-4": {
54 | "Basecamp\\Models\\": "app/models/",
55 | "Basecamp\\Utils\\": "app/utils/"
56 | }
57 | },
58 | "scripts": {
59 | "post-create-project-cmd": [
60 | "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
61 | ]
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "0969fe17a1399d04d121a8515528d9e9",
8 | "packages": [
9 | {
10 | "name": "altorouter/altorouter",
11 | "version": "v1.1.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/dannyvankooten/AltoRouter.git",
15 | "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/dannyvankooten/AltoRouter/zipball/09d9d946c546bae6d22a7654cdb3b825ffda54b4",
20 | "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=5.3.0"
25 | },
26 | "type": "library",
27 | "autoload": {
28 | "classmap": [
29 | "AltoRouter.php"
30 | ]
31 | },
32 | "notification-url": "https://packagist.org/downloads/",
33 | "license": [
34 | "MIT"
35 | ],
36 | "authors": [
37 | {
38 | "name": "Danny van Kooten",
39 | "email": "dannyvankooten@gmail.com",
40 | "homepage": "http://dannyvankooten.com/"
41 | },
42 | {
43 | "name": "Koen Punt",
44 | "homepage": "https://github.com/koenpunt"
45 | },
46 | {
47 | "name": "niahoo",
48 | "homepage": "https://github.com/niahoo"
49 | }
50 | ],
51 | "description": "A lightning fast router for PHP",
52 | "homepage": "https://github.com/dannyvankooten/AltoRouter",
53 | "keywords": [
54 | "lightweight",
55 | "router",
56 | "routing"
57 | ],
58 | "time": "2014-04-16T09:44:40+00:00"
59 | },
60 | {
61 | "name": "asm89/twig-cache-extension",
62 | "version": "1.3.2",
63 | "source": {
64 | "type": "git",
65 | "url": "https://github.com/asm89/twig-cache-extension.git",
66 | "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55"
67 | },
68 | "dist": {
69 | "type": "zip",
70 | "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/630ea7abdc3fc62ba6786c02590a1560e449cf55",
71 | "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55",
72 | "shasum": ""
73 | },
74 | "require": {
75 | "php": ">=5.3.2",
76 | "twig/twig": "^1.0|^2.0"
77 | },
78 | "require-dev": {
79 | "doctrine/cache": "~1.0"
80 | },
81 | "suggest": {
82 | "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter."
83 | },
84 | "type": "library",
85 | "extra": {
86 | "branch-alias": {
87 | "dev-master": "1.3-dev"
88 | }
89 | },
90 | "autoload": {
91 | "psr-4": {
92 | "": "lib/"
93 | }
94 | },
95 | "notification-url": "https://packagist.org/downloads/",
96 | "license": [
97 | "MIT"
98 | ],
99 | "authors": [
100 | {
101 | "name": "Alexander",
102 | "email": "iam.asm89@gmail.com"
103 | }
104 | ],
105 | "description": "Cache fragments of templates directly within Twig.",
106 | "homepage": "https://github.com/asm89/twig-cache-extension",
107 | "keywords": [
108 | "cache",
109 | "extension",
110 | "twig"
111 | ],
112 | "time": "2017-01-10T22:04:15+00:00"
113 | },
114 | {
115 | "name": "composer/installers",
116 | "version": "v1.6.0",
117 | "source": {
118 | "type": "git",
119 | "url": "https://github.com/composer/installers.git",
120 | "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b"
121 | },
122 | "dist": {
123 | "type": "zip",
124 | "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b",
125 | "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b",
126 | "shasum": ""
127 | },
128 | "require": {
129 | "composer-plugin-api": "^1.0"
130 | },
131 | "replace": {
132 | "roundcube/plugin-installer": "*",
133 | "shama/baton": "*"
134 | },
135 | "require-dev": {
136 | "composer/composer": "1.0.*@dev",
137 | "phpunit/phpunit": "^4.8.36"
138 | },
139 | "type": "composer-plugin",
140 | "extra": {
141 | "class": "Composer\\Installers\\Plugin",
142 | "branch-alias": {
143 | "dev-master": "1.0-dev"
144 | }
145 | },
146 | "autoload": {
147 | "psr-4": {
148 | "Composer\\Installers\\": "src/Composer/Installers"
149 | }
150 | },
151 | "notification-url": "https://packagist.org/downloads/",
152 | "license": [
153 | "MIT"
154 | ],
155 | "authors": [
156 | {
157 | "name": "Kyle Robinson Young",
158 | "email": "kyle@dontkry.com",
159 | "homepage": "https://github.com/shama"
160 | }
161 | ],
162 | "description": "A multi-framework Composer library installer",
163 | "homepage": "https://composer.github.io/installers/",
164 | "keywords": [
165 | "Craft",
166 | "Dolibarr",
167 | "Eliasis",
168 | "Hurad",
169 | "ImageCMS",
170 | "Kanboard",
171 | "Lan Management System",
172 | "MODX Evo",
173 | "Mautic",
174 | "Maya",
175 | "OXID",
176 | "Plentymarkets",
177 | "Porto",
178 | "RadPHP",
179 | "SMF",
180 | "Thelia",
181 | "WolfCMS",
182 | "agl",
183 | "aimeos",
184 | "annotatecms",
185 | "attogram",
186 | "bitrix",
187 | "cakephp",
188 | "chef",
189 | "cockpit",
190 | "codeigniter",
191 | "concrete5",
192 | "croogo",
193 | "dokuwiki",
194 | "drupal",
195 | "eZ Platform",
196 | "elgg",
197 | "expressionengine",
198 | "fuelphp",
199 | "grav",
200 | "installer",
201 | "itop",
202 | "joomla",
203 | "kohana",
204 | "laravel",
205 | "lavalite",
206 | "lithium",
207 | "magento",
208 | "majima",
209 | "mako",
210 | "mediawiki",
211 | "modulework",
212 | "modx",
213 | "moodle",
214 | "osclass",
215 | "phpbb",
216 | "piwik",
217 | "ppi",
218 | "puppet",
219 | "pxcms",
220 | "reindex",
221 | "roundcube",
222 | "shopware",
223 | "silverstripe",
224 | "sydes",
225 | "symfony",
226 | "typo3",
227 | "wordpress",
228 | "yawik",
229 | "zend",
230 | "zikula"
231 | ],
232 | "time": "2018-08-27T06:10:37+00:00"
233 | },
234 | {
235 | "name": "league/flysystem",
236 | "version": "1.0.48",
237 | "source": {
238 | "type": "git",
239 | "url": "https://github.com/thephpleague/flysystem.git",
240 | "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa"
241 | },
242 | "dist": {
243 | "type": "zip",
244 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
245 | "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
246 | "shasum": ""
247 | },
248 | "require": {
249 | "ext-fileinfo": "*",
250 | "php": ">=5.5.9"
251 | },
252 | "conflict": {
253 | "league/flysystem-sftp": "<1.0.6"
254 | },
255 | "require-dev": {
256 | "phpspec/phpspec": "^3.4",
257 | "phpunit/phpunit": "^5.7.10"
258 | },
259 | "suggest": {
260 | "ext-fileinfo": "Required for MimeType",
261 | "ext-ftp": "Allows you to use FTP server storage",
262 | "ext-openssl": "Allows you to use FTPS server storage",
263 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
264 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
265 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
266 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
267 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
268 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
269 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
270 | "league/flysystem-webdav": "Allows you to use WebDAV storage",
271 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
272 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
273 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
274 | },
275 | "type": "library",
276 | "extra": {
277 | "branch-alias": {
278 | "dev-master": "1.1-dev"
279 | }
280 | },
281 | "autoload": {
282 | "psr-4": {
283 | "League\\Flysystem\\": "src/"
284 | }
285 | },
286 | "notification-url": "https://packagist.org/downloads/",
287 | "license": [
288 | "MIT"
289 | ],
290 | "authors": [
291 | {
292 | "name": "Frank de Jonge",
293 | "email": "info@frenky.net"
294 | }
295 | ],
296 | "description": "Filesystem abstraction: Many filesystems, one API.",
297 | "keywords": [
298 | "Cloud Files",
299 | "WebDAV",
300 | "abstraction",
301 | "aws",
302 | "cloud",
303 | "copy.com",
304 | "dropbox",
305 | "file systems",
306 | "files",
307 | "filesystem",
308 | "filesystems",
309 | "ftp",
310 | "rackspace",
311 | "remote",
312 | "s3",
313 | "sftp",
314 | "storage"
315 | ],
316 | "time": "2018-10-15T13:53:10+00:00"
317 | },
318 | {
319 | "name": "suomato/luna",
320 | "version": "v1.3.0",
321 | "source": {
322 | "type": "git",
323 | "url": "https://github.com/suomato/luna.git",
324 | "reference": "fbf0d1307a9fef383c00e9113d534f3b7f9bac4a"
325 | },
326 | "dist": {
327 | "type": "zip",
328 | "url": "https://api.github.com/repos/suomato/luna/zipball/fbf0d1307a9fef383c00e9113d534f3b7f9bac4a",
329 | "reference": "fbf0d1307a9fef383c00e9113d534f3b7f9bac4a",
330 | "shasum": ""
331 | },
332 | "require": {
333 | "league/flysystem": "^1.0",
334 | "php": "^7.0",
335 | "symfony/console": "^4.1"
336 | },
337 | "type": "library",
338 | "autoload": {
339 | "files": [
340 | "src/helpers.php"
341 | ],
342 | "psr-4": {
343 | "Suomato\\": "src/"
344 | }
345 | },
346 | "notification-url": "https://packagist.org/downloads/",
347 | "license": [
348 | "MIT"
349 | ],
350 | "authors": [
351 | {
352 | "name": "Toni Suomalainen",
353 | "email": "toni.suomalainen@gmail.com"
354 | }
355 | ],
356 | "description": "Command-line interface for Base Camp theme",
357 | "time": "2018-07-27T11:09:37+00:00"
358 | },
359 | {
360 | "name": "symfony/console",
361 | "version": "v4.1.7",
362 | "source": {
363 | "type": "git",
364 | "url": "https://github.com/symfony/console.git",
365 | "reference": "432122af37d8cd52fba1b294b11976e0d20df595"
366 | },
367 | "dist": {
368 | "type": "zip",
369 | "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595",
370 | "reference": "432122af37d8cd52fba1b294b11976e0d20df595",
371 | "shasum": ""
372 | },
373 | "require": {
374 | "php": "^7.1.3",
375 | "symfony/polyfill-mbstring": "~1.0"
376 | },
377 | "conflict": {
378 | "symfony/dependency-injection": "<3.4",
379 | "symfony/process": "<3.3"
380 | },
381 | "require-dev": {
382 | "psr/log": "~1.0",
383 | "symfony/config": "~3.4|~4.0",
384 | "symfony/dependency-injection": "~3.4|~4.0",
385 | "symfony/event-dispatcher": "~3.4|~4.0",
386 | "symfony/lock": "~3.4|~4.0",
387 | "symfony/process": "~3.4|~4.0"
388 | },
389 | "suggest": {
390 | "psr/log-implementation": "For using the console logger",
391 | "symfony/event-dispatcher": "",
392 | "symfony/lock": "",
393 | "symfony/process": ""
394 | },
395 | "type": "library",
396 | "extra": {
397 | "branch-alias": {
398 | "dev-master": "4.1-dev"
399 | }
400 | },
401 | "autoload": {
402 | "psr-4": {
403 | "Symfony\\Component\\Console\\": ""
404 | },
405 | "exclude-from-classmap": [
406 | "/Tests/"
407 | ]
408 | },
409 | "notification-url": "https://packagist.org/downloads/",
410 | "license": [
411 | "MIT"
412 | ],
413 | "authors": [
414 | {
415 | "name": "Fabien Potencier",
416 | "email": "fabien@symfony.com"
417 | },
418 | {
419 | "name": "Symfony Community",
420 | "homepage": "https://symfony.com/contributors"
421 | }
422 | ],
423 | "description": "Symfony Console Component",
424 | "homepage": "https://symfony.com",
425 | "time": "2018-10-31T09:30:44+00:00"
426 | },
427 | {
428 | "name": "symfony/finder",
429 | "version": "v4.1.7",
430 | "source": {
431 | "type": "git",
432 | "url": "https://github.com/symfony/finder.git",
433 | "reference": "1f17195b44543017a9c9b2d437c670627e96ad06"
434 | },
435 | "dist": {
436 | "type": "zip",
437 | "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06",
438 | "reference": "1f17195b44543017a9c9b2d437c670627e96ad06",
439 | "shasum": ""
440 | },
441 | "require": {
442 | "php": "^7.1.3"
443 | },
444 | "type": "library",
445 | "extra": {
446 | "branch-alias": {
447 | "dev-master": "4.1-dev"
448 | }
449 | },
450 | "autoload": {
451 | "psr-4": {
452 | "Symfony\\Component\\Finder\\": ""
453 | },
454 | "exclude-from-classmap": [
455 | "/Tests/"
456 | ]
457 | },
458 | "notification-url": "https://packagist.org/downloads/",
459 | "license": [
460 | "MIT"
461 | ],
462 | "authors": [
463 | {
464 | "name": "Fabien Potencier",
465 | "email": "fabien@symfony.com"
466 | },
467 | {
468 | "name": "Symfony Community",
469 | "homepage": "https://symfony.com/contributors"
470 | }
471 | ],
472 | "description": "Symfony Finder Component",
473 | "homepage": "https://symfony.com",
474 | "time": "2018-10-03T08:47:56+00:00"
475 | },
476 | {
477 | "name": "symfony/polyfill-ctype",
478 | "version": "v1.10.0",
479 | "source": {
480 | "type": "git",
481 | "url": "https://github.com/symfony/polyfill-ctype.git",
482 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
483 | },
484 | "dist": {
485 | "type": "zip",
486 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
487 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
488 | "shasum": ""
489 | },
490 | "require": {
491 | "php": ">=5.3.3"
492 | },
493 | "suggest": {
494 | "ext-ctype": "For best performance"
495 | },
496 | "type": "library",
497 | "extra": {
498 | "branch-alias": {
499 | "dev-master": "1.9-dev"
500 | }
501 | },
502 | "autoload": {
503 | "psr-4": {
504 | "Symfony\\Polyfill\\Ctype\\": ""
505 | },
506 | "files": [
507 | "bootstrap.php"
508 | ]
509 | },
510 | "notification-url": "https://packagist.org/downloads/",
511 | "license": [
512 | "MIT"
513 | ],
514 | "authors": [
515 | {
516 | "name": "Symfony Community",
517 | "homepage": "https://symfony.com/contributors"
518 | },
519 | {
520 | "name": "Gert de Pagter",
521 | "email": "BackEndTea@gmail.com"
522 | }
523 | ],
524 | "description": "Symfony polyfill for ctype functions",
525 | "homepage": "https://symfony.com",
526 | "keywords": [
527 | "compatibility",
528 | "ctype",
529 | "polyfill",
530 | "portable"
531 | ],
532 | "time": "2018-08-06T14:22:27+00:00"
533 | },
534 | {
535 | "name": "symfony/polyfill-mbstring",
536 | "version": "v1.10.0",
537 | "source": {
538 | "type": "git",
539 | "url": "https://github.com/symfony/polyfill-mbstring.git",
540 | "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
541 | },
542 | "dist": {
543 | "type": "zip",
544 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
545 | "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
546 | "shasum": ""
547 | },
548 | "require": {
549 | "php": ">=5.3.3"
550 | },
551 | "suggest": {
552 | "ext-mbstring": "For best performance"
553 | },
554 | "type": "library",
555 | "extra": {
556 | "branch-alias": {
557 | "dev-master": "1.9-dev"
558 | }
559 | },
560 | "autoload": {
561 | "psr-4": {
562 | "Symfony\\Polyfill\\Mbstring\\": ""
563 | },
564 | "files": [
565 | "bootstrap.php"
566 | ]
567 | },
568 | "notification-url": "https://packagist.org/downloads/",
569 | "license": [
570 | "MIT"
571 | ],
572 | "authors": [
573 | {
574 | "name": "Nicolas Grekas",
575 | "email": "p@tchwork.com"
576 | },
577 | {
578 | "name": "Symfony Community",
579 | "homepage": "https://symfony.com/contributors"
580 | }
581 | ],
582 | "description": "Symfony polyfill for the Mbstring extension",
583 | "homepage": "https://symfony.com",
584 | "keywords": [
585 | "compatibility",
586 | "mbstring",
587 | "polyfill",
588 | "portable",
589 | "shim"
590 | ],
591 | "time": "2018-09-21T13:07:52+00:00"
592 | },
593 | {
594 | "name": "symfony/polyfill-php72",
595 | "version": "v1.10.0",
596 | "source": {
597 | "type": "git",
598 | "url": "https://github.com/symfony/polyfill-php72.git",
599 | "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"
600 | },
601 | "dist": {
602 | "type": "zip",
603 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
604 | "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
605 | "shasum": ""
606 | },
607 | "require": {
608 | "php": ">=5.3.3"
609 | },
610 | "type": "library",
611 | "extra": {
612 | "branch-alias": {
613 | "dev-master": "1.9-dev"
614 | }
615 | },
616 | "autoload": {
617 | "psr-4": {
618 | "Symfony\\Polyfill\\Php72\\": ""
619 | },
620 | "files": [
621 | "bootstrap.php"
622 | ]
623 | },
624 | "notification-url": "https://packagist.org/downloads/",
625 | "license": [
626 | "MIT"
627 | ],
628 | "authors": [
629 | {
630 | "name": "Nicolas Grekas",
631 | "email": "p@tchwork.com"
632 | },
633 | {
634 | "name": "Symfony Community",
635 | "homepage": "https://symfony.com/contributors"
636 | }
637 | ],
638 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
639 | "homepage": "https://symfony.com",
640 | "keywords": [
641 | "compatibility",
642 | "polyfill",
643 | "portable",
644 | "shim"
645 | ],
646 | "time": "2018-09-21T13:07:52+00:00"
647 | },
648 | {
649 | "name": "symfony/var-dumper",
650 | "version": "v4.1.7",
651 | "source": {
652 | "type": "git",
653 | "url": "https://github.com/symfony/var-dumper.git",
654 | "reference": "60319b45653580b0cdacca499344577d87732f16"
655 | },
656 | "dist": {
657 | "type": "zip",
658 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16",
659 | "reference": "60319b45653580b0cdacca499344577d87732f16",
660 | "shasum": ""
661 | },
662 | "require": {
663 | "php": "^7.1.3",
664 | "symfony/polyfill-mbstring": "~1.0",
665 | "symfony/polyfill-php72": "~1.5"
666 | },
667 | "conflict": {
668 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
669 | "symfony/console": "<3.4"
670 | },
671 | "require-dev": {
672 | "ext-iconv": "*",
673 | "symfony/process": "~3.4|~4.0",
674 | "twig/twig": "~1.34|~2.4"
675 | },
676 | "suggest": {
677 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
678 | "ext-intl": "To show region name in time zone dump",
679 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
680 | },
681 | "bin": [
682 | "Resources/bin/var-dump-server"
683 | ],
684 | "type": "library",
685 | "extra": {
686 | "branch-alias": {
687 | "dev-master": "4.1-dev"
688 | }
689 | },
690 | "autoload": {
691 | "files": [
692 | "Resources/functions/dump.php"
693 | ],
694 | "psr-4": {
695 | "Symfony\\Component\\VarDumper\\": ""
696 | },
697 | "exclude-from-classmap": [
698 | "/Tests/"
699 | ]
700 | },
701 | "notification-url": "https://packagist.org/downloads/",
702 | "license": [
703 | "MIT"
704 | ],
705 | "authors": [
706 | {
707 | "name": "Nicolas Grekas",
708 | "email": "p@tchwork.com"
709 | },
710 | {
711 | "name": "Symfony Community",
712 | "homepage": "https://symfony.com/contributors"
713 | }
714 | ],
715 | "description": "Symfony mechanism for exploring and dumping PHP variables",
716 | "homepage": "https://symfony.com",
717 | "keywords": [
718 | "debug",
719 | "dump"
720 | ],
721 | "time": "2018-10-02T16:36:10+00:00"
722 | },
723 | {
724 | "name": "timber/timber",
725 | "version": "1.8.1",
726 | "source": {
727 | "type": "git",
728 | "url": "https://github.com/timber/timber.git",
729 | "reference": "51314124b9608de85dc0400c9a2c71caf336eb6c"
730 | },
731 | "dist": {
732 | "type": "zip",
733 | "url": "https://api.github.com/repos/timber/timber/zipball/51314124b9608de85dc0400c9a2c71caf336eb6c",
734 | "reference": "51314124b9608de85dc0400c9a2c71caf336eb6c",
735 | "shasum": ""
736 | },
737 | "require": {
738 | "asm89/twig-cache-extension": "~1.0",
739 | "composer/installers": "~1.0",
740 | "php": ">=5.3.0|7.*",
741 | "twig/twig": "1.34.*|2.*",
742 | "upstatement/routes": "0.4"
743 | },
744 | "require-dev": {
745 | "johnpbloch/wordpress": "4.*",
746 | "phpunit/phpunit": "5.7.16|6.*",
747 | "wpackagist-plugin/advanced-custom-fields": "5.*",
748 | "wpackagist-plugin/co-authors-plus": "3.2.*"
749 | },
750 | "suggest": {
751 | "satooshi/php-coveralls": "1.0.* for code coverage"
752 | },
753 | "type": "library",
754 | "autoload": {
755 | "psr-4": {
756 | "Timber\\": "lib/"
757 | }
758 | },
759 | "notification-url": "https://packagist.org/downloads/",
760 | "license": [
761 | "MIT"
762 | ],
763 | "authors": [
764 | {
765 | "name": "Jared Novack",
766 | "email": "jared@upstatement.com",
767 | "homepage": "http://upstatement.com"
768 | },
769 | {
770 | "name": "Connor J. Burton",
771 | "email": "connorjburton@gmail.com",
772 | "homepage": "http://connorburton.com"
773 | }
774 | ],
775 | "description": "Plugin to write WordPress themes w Object-Oriented Code and the Twig Template Engine",
776 | "homepage": "http://timber.upstatement.com",
777 | "keywords": [
778 | "templating",
779 | "themes",
780 | "timber",
781 | "twig"
782 | ],
783 | "time": "2018-09-30T14:50:29+00:00"
784 | },
785 | {
786 | "name": "twig/twig",
787 | "version": "v2.5.0",
788 | "source": {
789 | "type": "git",
790 | "url": "https://github.com/twigphp/Twig.git",
791 | "reference": "6a5f676b77a90823c2d4eaf76137b771adf31323"
792 | },
793 | "dist": {
794 | "type": "zip",
795 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/6a5f676b77a90823c2d4eaf76137b771adf31323",
796 | "reference": "6a5f676b77a90823c2d4eaf76137b771adf31323",
797 | "shasum": ""
798 | },
799 | "require": {
800 | "php": "^7.0",
801 | "symfony/polyfill-ctype": "^1.8",
802 | "symfony/polyfill-mbstring": "~1.0"
803 | },
804 | "require-dev": {
805 | "psr/container": "^1.0",
806 | "symfony/debug": "^2.7",
807 | "symfony/phpunit-bridge": "^3.3"
808 | },
809 | "type": "library",
810 | "extra": {
811 | "branch-alias": {
812 | "dev-master": "2.5-dev"
813 | }
814 | },
815 | "autoload": {
816 | "psr-0": {
817 | "Twig_": "lib/"
818 | },
819 | "psr-4": {
820 | "Twig\\": "src/"
821 | }
822 | },
823 | "notification-url": "https://packagist.org/downloads/",
824 | "license": [
825 | "BSD-3-Clause"
826 | ],
827 | "authors": [
828 | {
829 | "name": "Fabien Potencier",
830 | "email": "fabien@symfony.com",
831 | "homepage": "http://fabien.potencier.org",
832 | "role": "Lead Developer"
833 | },
834 | {
835 | "name": "Armin Ronacher",
836 | "email": "armin.ronacher@active-4.com",
837 | "role": "Project Founder"
838 | },
839 | {
840 | "name": "Twig Team",
841 | "homepage": "https://twig.symfony.com/contributors",
842 | "role": "Contributors"
843 | }
844 | ],
845 | "description": "Twig, the flexible, fast, and secure template language for PHP",
846 | "homepage": "https://twig.symfony.com",
847 | "keywords": [
848 | "templating"
849 | ],
850 | "time": "2018-07-13T07:18:09+00:00"
851 | },
852 | {
853 | "name": "upstatement/routes",
854 | "version": "0.4",
855 | "source": {
856 | "type": "git",
857 | "url": "https://github.com/Upstatement/routes.git",
858 | "reference": "fae7d46f56e8b5775f072774941a5f0a25cb86f3"
859 | },
860 | "dist": {
861 | "type": "zip",
862 | "url": "https://api.github.com/repos/Upstatement/routes/zipball/fae7d46f56e8b5775f072774941a5f0a25cb86f3",
863 | "reference": "fae7d46f56e8b5775f072774941a5f0a25cb86f3",
864 | "shasum": ""
865 | },
866 | "require": {
867 | "altorouter/altorouter": "1.1.0",
868 | "composer/installers": "~1.0",
869 | "php": ">=5.3.0"
870 | },
871 | "require-dev": {
872 | "phpunit/phpunit": "3.7.*",
873 | "satooshi/php-coveralls": "dev-master",
874 | "wp-cli/wp-cli": "*"
875 | },
876 | "type": "library",
877 | "autoload": {
878 | "psr-0": {
879 | "Routes": ""
880 | }
881 | },
882 | "notification-url": "https://packagist.org/downloads/",
883 | "license": [
884 | "MIT"
885 | ],
886 | "authors": [
887 | {
888 | "name": "Jared Novack",
889 | "email": "jared@upstatement.com",
890 | "homepage": "http://upstatement.com"
891 | }
892 | ],
893 | "description": "Manage rewrites and routes in WordPress with this dead-simple plugin",
894 | "homepage": "http://routes.upstatement.com",
895 | "keywords": [
896 | "redirects",
897 | "rewrite",
898 | "routes",
899 | "routing"
900 | ],
901 | "time": "2016-07-06T12:53:24+00:00"
902 | },
903 | {
904 | "name": "vlucas/phpdotenv",
905 | "version": "v2.5.1",
906 | "source": {
907 | "type": "git",
908 | "url": "https://github.com/vlucas/phpdotenv.git",
909 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e"
910 | },
911 | "dist": {
912 | "type": "zip",
913 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
914 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
915 | "shasum": ""
916 | },
917 | "require": {
918 | "php": ">=5.3.9"
919 | },
920 | "require-dev": {
921 | "phpunit/phpunit": "^4.8.35 || ^5.0"
922 | },
923 | "type": "library",
924 | "extra": {
925 | "branch-alias": {
926 | "dev-master": "2.5-dev"
927 | }
928 | },
929 | "autoload": {
930 | "psr-4": {
931 | "Dotenv\\": "src/"
932 | }
933 | },
934 | "notification-url": "https://packagist.org/downloads/",
935 | "license": [
936 | "BSD-3-Clause"
937 | ],
938 | "authors": [
939 | {
940 | "name": "Vance Lucas",
941 | "email": "vance@vancelucas.com",
942 | "homepage": "http://www.vancelucas.com"
943 | }
944 | ],
945 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
946 | "keywords": [
947 | "dotenv",
948 | "env",
949 | "environment"
950 | ],
951 | "time": "2018-07-29T20:33:41+00:00"
952 | }
953 | ],
954 | "packages-dev": [],
955 | "aliases": [],
956 | "minimum-stability": "stable",
957 | "stability-flags": [],
958 | "prefer-stable": false,
959 | "prefer-lowest": false,
960 | "platform": {
961 | "php": "^7.0"
962 | },
963 | "platform-dev": []
964 | }
965 |
--------------------------------------------------------------------------------
/functions.php:
--------------------------------------------------------------------------------
1 | addCommands(Luna::commands());
12 |
13 | $app->run();
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "base-camp",
3 | "version": "1.9.0",
4 | "description": "Awesome WordPress starter theme with own CLI for developers based on modern web technologies.",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "cross-env webpack --config build/webpack.config.js --progress --hide-modules --mode development",
8 | "watch": "npm run dev -- --watch",
9 | "prod": "cross-env NODE_ENV=production webpack --config build/webpack.config.js --progress --hide-modules --mode production"
10 | },
11 | "keywords": [],
12 | "author": "Toni Suomalainen",
13 | "license": "MIT",
14 | "devDependencies": {
15 | "@babel/core": "^7.1.6",
16 | "@babel/polyfill": "^7.0.0",
17 | "@babel/preset-env": "^7.1.6",
18 | "autoprefixer": "^9.3.1",
19 | "babel-eslint": "^10.0.1",
20 | "babel-loader": "^8.0.4",
21 | "browser-sync": "^2.24.5",
22 | "browser-sync-webpack-plugin": "^2.2.2",
23 | "clean-webpack-plugin": "^1.0.0",
24 | "cross-env": "^5.2.0",
25 | "css-loader": "^1.0.1",
26 | "cssnano": "^4.1.7",
27 | "eslint": "^5.0.1",
28 | "eslint-config-airbnb-base": "^13.1.0",
29 | "eslint-plugin-import": "^2.13.0",
30 | "eslint-plugin-jsx-a11y": "^6.0.3",
31 | "eslint-plugin-vue": "^4.5.0",
32 | "file-loader": "^2.0.0",
33 | "font-awesome": "^4.7.0",
34 | "hard-source-webpack-plugin": "^0.12.0",
35 | "image-webpack-loader": "^4.3.1",
36 | "mini-css-extract-plugin": "^0.4.5",
37 | "node-sass": "^4.10.0",
38 | "postcss-loader": "^3.0.0",
39 | "prettier-eslint": "^8.2.2",
40 | "purgecss-webpack-plugin": "^1.2.0",
41 | "sass-loader": "^7.0.3",
42 | "style-loader": "^0.23.1",
43 | "url-loader": "^1.0.1",
44 | "vue-loader": "^15.2.4",
45 | "vue-template-compiler": "^2.5.16",
46 | "webpack": "^4.14.0",
47 | "webpack-cli": "^3.0.8",
48 | "webpack-fix-style-only-entries": "^0.0.5",
49 | "webpack-manifest-plugin": "^2.0.3"
50 | },
51 | "dependencies": {
52 | "bulma": "0.7.2",
53 | "jquery": "^3.3.1",
54 | "vue": "^2.5.16"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/page.php:
--------------------------------------------------------------------------------
1 | post_name . '.twig', 'page.twig'], $context);
8 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = ({ env }) => ({
2 | plugins: {
3 | autoprefixer: {},
4 | cssnano: env === 'production' ? {} : false,
5 | },
6 | });
7 |
--------------------------------------------------------------------------------
/resources/assets/images/base-camp-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/suomato/base-camp/f9ecc2c03dc906dbf796f2d935e649fc7485052d/resources/assets/images/base-camp-logo.png
--------------------------------------------------------------------------------
/resources/assets/images/base-camp-logo_alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/suomato/base-camp/f9ecc2c03dc906dbf796f2d935e649fc7485052d/resources/assets/images/base-camp-logo_alt.png
--------------------------------------------------------------------------------
/resources/assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/suomato/base-camp/f9ecc2c03dc906dbf796f2d935e649fc7485052d/resources/assets/images/favicon.png
--------------------------------------------------------------------------------
/resources/assets/js/components/Example.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

8 |
{{ message }}
9 |
10 |
11 |
12 |
21 |
22 |
36 |
--------------------------------------------------------------------------------
/resources/assets/js/main.js:
--------------------------------------------------------------------------------
1 | import $ from 'jquery';
2 | import Vue from 'vue';
3 | // import Example from './components/Example';
4 |
5 | new Vue({
6 | el: '#app',
7 | components: {
8 | // Example,
9 | },
10 | });
11 |
12 | // Hide Page Loader when DOM and images are ready
13 | $(window).on('load', () => $('.pageloader').removeClass('is-active'));
14 |
15 | // Toggle mobile menu
16 | $('.navbar-burger').on('click', () => $('.navbar-burger, .navbar-menu').toggleClass('is-active'));
17 |
--------------------------------------------------------------------------------
/resources/assets/sass/_common.sass:
--------------------------------------------------------------------------------
1 | .logo
2 | width: 120px
3 | height: auto
4 | max-height: none !important
5 |
6 | .current-template-file-name
7 | position: fixed
8 | bottom: 0
9 | right: 0
10 | background-color: #1C1E26
11 | color: #e3b28e
12 | padding: 0.2rem 2rem
13 | z-index: 10000
14 | border-radius: 0.5rem 0 0 0
15 |
--------------------------------------------------------------------------------
/resources/assets/sass/_footer.sass:
--------------------------------------------------------------------------------
1 | footer.footer
2 | a
3 | color: $dark-primary
4 | &:hover
5 | color: $dark
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/resources/assets/sass/_helpers.sass:
--------------------------------------------------------------------------------
1 | .required
2 | color: $red
3 |
4 | .timestamp
5 | color: #7a7a7a
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/resources/assets/sass/_pageloader.sass:
--------------------------------------------------------------------------------
1 | .pageloader
2 | position: fixed
3 | top: 0
4 | right: 0
5 | bottom: 0
6 | left: 0
7 | background-color: $primary
8 | z-index: 999998
9 | transition: -webkit-transform .70s ease-out
10 | transition: transform .70s ease-out
11 | transition: transform .70s ease-out,-webkit-transform .70s ease-out
12 | -webkit-transform: translateY(-200%)
13 | transform: translateY(-200%)
14 | will-change: transform
15 | &.is-active
16 | -webkit-transform: translateY(0)
17 | transform: translateY(0)
18 | &::after, &::before
19 | position: absolute
20 | top: 50%
21 | left: 50%
22 | display: block
23 | border-radius: 100%
24 | content: ''
25 | z-index: 999999
26 | &::after
27 | margin-top: -100px
28 | margin-left: -100px
29 | width: 200px
30 | height: 200px
31 | background-color: rgba(255, 255, 255, 0.5)
32 | border: 3px solid rgba(255, 255, 255, 0.75)
33 | -webkit-animation: page-loader-inner 1.5s infinite ease-out
34 | animation: page-loader-inner 1.5s infinite ease-out
35 | &::before
36 | margin-top: -30px
37 | margin-left: -30px
38 | width: 60px
39 | height: 60px
40 | background-color: #fff
41 | -webkit-animation: page-loader-outer 1.5s infinite ease-in
42 | animation: page-loader-outer 1.5s infinite ease-in
43 |
44 | @-webkit-keyframes page-loader-inner
45 | 0%,40%
46 | -webkit-transform: scale(0)
47 | transform: scale(0)
48 |
49 | 100%
50 | -webkit-transform: scale(1)
51 | transform: scale(1)
52 | opacity: 0
53 |
54 |
55 | @keyframes page-loader-inner
56 | 0%,40%
57 | -webkit-transform: scale(0)
58 | transform: scale(0)
59 |
60 | 100%
61 | -webkit-transform: scale(1)
62 | transform: scale(1)
63 | opacity: 0
64 |
65 |
66 | @-webkit-keyframes page-loader-outer
67 | 0%
68 | -webkit-transform: scale(1)
69 | transform: scale(1)
70 |
71 | 100%,40%
72 | -webkit-transform: scale(0)
73 | transform: scale(0)
74 | opacity: 0
75 |
76 |
77 | @keyframes page-loader-outer
78 | 0%
79 | -webkit-transform: scale(1)
80 | transform: scale(1)
81 |
82 | 100%,40%
83 | -webkit-transform: scale(0)
84 | transform: scale(0)
85 | opacity: 0
86 |
--------------------------------------------------------------------------------
/resources/assets/sass/_single.sass:
--------------------------------------------------------------------------------
1 | .single
2 | .main-article
3 | position: relative
4 |
5 | .edit-post-link
6 | margin-top: -1rem
7 | margin-bottom: 1.5rem
8 | i
9 | vertical-align: middle
10 | font-size: 1rem
11 | a
12 | color: $dark-primary
13 |
--------------------------------------------------------------------------------
/resources/assets/sass/_variables.sass:
--------------------------------------------------------------------------------
1 | // COLORS
2 | $bc-primary: #26a69a
3 | $bc-dark-primary: #00695C
4 | $bc-secondary: #EF5350
5 |
6 | // BULMA OVERDRIVE
7 | $primary: $bc-primary
8 | $dark-primary: $bc-dark-primary
9 | $link: $bc-secondary
10 | $link-focus-border: $bc-secondary
11 | $red: $bc-secondary
12 |
13 | // SOCIAL MEDIA COLORS
14 | $tumblr: #2C394C
15 | $facebook: #3B5999
16 | $linkedin: #0077B5
17 | $twitter: #1DA1F3
18 | $pinterest: #CB2026
19 | $google-plus: #DD4C3B
20 | $reddit: #FF4501
21 |
22 | // HELPER URL
23 | $images: '../images'
24 |
25 | // FONT-AWESOME FONT PATH
26 | $fa-font-path: "../../../node_modules/font-awesome/fonts"
27 |
--------------------------------------------------------------------------------
/resources/assets/sass/admin.sass:
--------------------------------------------------------------------------------
1 | @import 'variables'
2 |
3 | // ******************************************************
4 | // Here you can define your own admin page style sheet.
5 | // ******************************************************
6 |
7 | body.wp-admin
8 |
9 |
--------------------------------------------------------------------------------
/resources/assets/sass/components/_article.sass:
--------------------------------------------------------------------------------
1 | .base-camp-article
2 | margin-bottom: 2.5rem
3 | .article-meta
4 | margin-bottom: -0.2rem
5 | margin-top: -0.8rem
6 | i,
7 | a
8 | font-size: 1rem
9 | color: $dark-primary
10 | *
11 | display: inline-block
12 | vertical-align: middle
13 | > *
14 | margin-right: 0.5rem
15 | time
16 | span
17 | color: #7a7a7a
18 |
19 | ul.article-tags
20 | margin-bottom: 1rem
21 | margin-top: 1rem
22 | li
23 | display: inline-block
24 | margin-right: 0.4rem
25 |
26 |
--------------------------------------------------------------------------------
/resources/assets/sass/components/_comment.sass:
--------------------------------------------------------------------------------
1 | .blog-comment
2 | .comments
3 | padding-left: 2rem
4 |
5 | #respond
6 | margin-bottom: 1.5em
7 |
8 | .comment-reply-link
9 | color: $black
10 | > *
11 | font-size: 0.95rem
12 | vertical-align: middle
13 |
14 | #cancel-comment-reply-link
15 | @extend .button, .is-danger
16 |
--------------------------------------------------------------------------------
/resources/assets/sass/components/_navbar.sass:
--------------------------------------------------------------------------------
1 | nav.navbar
2 | .navbar-brand
3 | align-items: center
4 |
5 | +desktop
6 | .second-level
7 | li
8 | position: relative
9 |
10 | a.has-children::after
11 | +arrow($link)
12 | margin-top: -0.375em
13 | right: 1.125em
14 | top: 50%
15 | transform: rotate(-135deg)
16 | font-size: 85%
17 | &:hover
18 | .third-level
19 | display: block!important
20 |
21 | .third-level
22 | left: 100%
23 | top: -6px
24 | display: none!important
25 | border-top-right-radius: 5px
26 |
27 | +touch
28 | ul.navbar-item
29 | padding-bottom: 1rem
30 |
31 | .navbar-dropdown
32 | padding: 0
33 |
34 | .second-level
35 | a
36 | padding-left: 2rem
37 | padding-right: 2rem
38 |
39 | .third-level
40 | padding: 0
41 | a
42 | padding-left: 3rem
43 | font-size: 95%
44 |
45 |
--------------------------------------------------------------------------------
/resources/assets/sass/components/_social-media.sass:
--------------------------------------------------------------------------------
1 | .social-media-share-icons
2 | margin-top: 1rem
3 | a
4 | font-size: 2rem
5 | .fa
6 | transition: 0.2s
7 | .fa:hover
8 | transform: scale(1.2)
9 |
10 | .tumblr
11 | color: $tumblr
12 | .facebook
13 | color: $facebook
14 | .linkedin
15 | color: $linkedin
16 | .twitter
17 | color: $twitter
18 | .pinterest
19 | color: $pinterest
20 | .google-plus
21 | color: $google-plus
22 | .reddit
23 | color: $reddit
24 |
25 |
--------------------------------------------------------------------------------
/resources/assets/sass/components/index.sass:
--------------------------------------------------------------------------------
1 | @import "article"
2 | @import "comment"
3 | @import "navbar"
4 | @import "social-media"
5 |
--------------------------------------------------------------------------------
/resources/assets/sass/login.sass:
--------------------------------------------------------------------------------
1 | @import 'variables'
2 |
3 | // ******************************************************
4 | // Here you can define your own custom login style sheet.
5 | // ******************************************************
6 |
7 | body.login
8 | div#login
9 | h1
10 | a
11 | // Login Page logo
12 | background: url('#{$images}/base-camp-logo.png') no-repeat center bottom
13 | -webkit-background-size: 84px
14 | background-size: 100%
15 | color: #444
16 | height: 120px
17 | font-size: 20px
18 | font-weight: 400
19 | line-height: 1.3em
20 | margin: 0 auto 25px
21 | padding: 0
22 | text-decoration: none
23 | width: 60%
24 | text-indent: -9999px
25 | outline: none
26 | overflow: hidden
27 | display: block
28 |
29 | form#loginform
30 | p
31 | &.submit
32 | input#wp-submit
33 | // Submit button
34 | background: $primary
35 | border-color: darken($primary, 5%) darken($primary, 10%) darken($primary, 10%)
36 | -webkit-box-shadow: 0 1px 0 darken($primary, 10%)
37 | box-shadow: 0 1px 0 darken($primary, 10%)
38 | color: #fff
39 | text-decoration: none
40 | text-shadow: 0 -1px 1px darken($primary, 10%), 1px 0 1px darken($primary, 10%), 0 1px 1px darken($primary, 10%), -1px 0 1px darken($primary, 10%)
41 |
42 |
43 | // Form input and checkbox
44 | input[type="checkbox"],
45 | input[type="text"],
46 | input[type="password"]
47 | &:focus
48 | border-color: $primary
49 | -webkit-box-shadow: 0 0 2px darken($primary, 10%)
50 | box-shadow: 0 0 2px darken($primary, 10%)
51 | &:checked:before
52 | color: $primary
53 |
--------------------------------------------------------------------------------
/resources/assets/sass/main.sass:
--------------------------------------------------------------------------------
1 | @import node_modules/bulma/bulma
2 | @import node_modules/font-awesome/scss/font-awesome
3 | @import pageloader
4 | @import components/index
5 | @import footer
6 | @import helpers
7 | @import single
8 | @import common
9 | @import woocommerce/index
10 |
--------------------------------------------------------------------------------
/resources/assets/sass/shared-with-vue.sass:
--------------------------------------------------------------------------------
1 | @import variables
2 | @import node_modules/bulma/sass/utilities/mixins
3 |
--------------------------------------------------------------------------------
/resources/assets/sass/woocommerce/_archive.sass:
--------------------------------------------------------------------------------
1 | .products
2 | clear: both
3 |
--------------------------------------------------------------------------------
/resources/assets/sass/woocommerce/_common.sass:
--------------------------------------------------------------------------------
1 | input:not([type='checkbox'])
2 | @extend .input
3 |
4 | textarea
5 | @extend .textarea
6 |
7 | label
8 | @extend .label
9 |
10 | button.button
11 | @extend .button
12 |
13 | #respond input#submit
14 | @extend .button
15 |
16 | @extend .is-primary
17 |
18 | button.button.alt,
19 | a.button.alt,
20 | input.button.alt
21 | @extend .is-primary
22 |
23 | display: flex
24 | justify-content: center
25 |
26 | .star-rating > span,
27 | .stars a
28 | color: $dark-primary
29 |
30 | .entry-images
31 | position: relative
32 |
33 | span.onsale
34 | @extend .tag
35 |
36 | @extend .is-small
37 |
38 | @extend .is-danger
39 |
40 | font-size: 0.65rem !important
41 |
42 | .woocommerce-product-details__short-description
43 | margin-bottom: 0.5em
44 |
--------------------------------------------------------------------------------
/resources/assets/sass/woocommerce/_single-product.sass:
--------------------------------------------------------------------------------
1 | div.product
2 | position: relative
3 |
4 | .woocommerce-product-gallery.woocommerce-product-gallery--with-images
5 | width: 100%
6 |
7 | .product_title.entry-title
8 | font-weight: 700
9 |
10 | p.price,
11 | span.price
12 | color: $dark-primary
13 | margin-bottom: 0.5em
14 |
15 | .woocommerce-tabs
16 | margin-top: 2em
17 |
18 | ul.tabs
19 | display: flex
20 | justify-content: flex-start
21 | border-bottom-color: #dbdbdb
22 | border-bottom-style: solid
23 | border-bottom-width: 1px
24 | overflow: visible
25 | padding: 0
26 |
27 | &:before,
28 | &:after
29 | content: none
30 |
31 | li
32 | background-color: transparent
33 | border: 0
34 | margin: 0
35 | padding: 0
36 |
37 | &:before,
38 | &:after
39 | content: none
40 |
41 | a
42 | color: #4a4a4a
43 | border-bottom-color: #dbdbdb
44 | border-bottom-style: solid
45 | border-bottom-width: 1px
46 | padding: 0.5em 1em
47 |
48 | li.active
49 | a
50 | border-bottom-color: $bc-primary
51 | color: $bc-primary
52 |
--------------------------------------------------------------------------------
/resources/assets/sass/woocommerce/_tease-product.sass:
--------------------------------------------------------------------------------
1 | .tease-product
2 | position: relative
3 |
4 | span.price
5 | display: block
6 |
--------------------------------------------------------------------------------
/resources/assets/sass/woocommerce/index.sass:
--------------------------------------------------------------------------------
1 | .woocommerce
2 | @import archive
3 | @import common
4 | @import single-product
5 | @import tease-product
6 |
7 |
--------------------------------------------------------------------------------
/resources/languages/base-camp.pot:
--------------------------------------------------------------------------------
1 | # Copyright (C) 2018 Toni Suomalainen
2 | # This file is distributed under the MIT.
3 | msgid ""
4 | msgstr ""
5 | "Project-Id-Version: Base camp 1.9.0\n"
6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/theme/base-camp\n"
7 | "POT-Creation-Date: 2018-11-21 20:10:46+00:00\n"
8 | "MIME-Version: 1.0\n"
9 | "Content-Type: text/plain; charset=UTF-8\n"
10 | "Content-Transfer-Encoding: 8bit\n"
11 | "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12 | "Last-Translator: FULL NAME \n"
13 | "Language-Team: LANGUAGE \n"
14 |
15 | #: app/config/wp/image-sizes.php:16
16 | msgid "Square"
17 | msgstr ""
18 |
19 | #: app/config/wp/menus.php:8
20 | msgid "Main menu"
21 | msgstr ""
22 |
23 | #: app/config/wp/security.php:56
24 | msgid "Oops! Incorrect input"
25 | msgstr ""
26 |
27 | #: app/config/wp/sidebars.php:6
28 | msgid "Main Sidebar"
29 | msgstr ""
30 |
31 | #: app/config/wp/sidebars.php:8
32 | msgid "Widgets in this area will be shown on all posts and pages."
33 | msgstr ""
34 |
35 | #: resources/languages/messages.php:8
36 | msgid "404 - Page not found."
37 | msgstr ""
38 |
39 | #: resources/languages/messages.php:9
40 | msgid "The page you have looked for does not exist."
41 | msgstr ""
42 |
43 | #: resources/languages/messages.php:10
44 | msgid "Back to home page"
45 | msgstr ""
46 |
47 | #: resources/languages/messages.php:15 resources/languages/messages.php:57
48 | msgid "Edit"
49 | msgstr ""
50 |
51 | #: resources/languages/messages.php:20
52 | msgid "Sorry, no content"
53 | msgstr ""
54 |
55 | #: resources/languages/messages.php:25
56 | msgid "Name"
57 | msgstr ""
58 |
59 | #: resources/languages/messages.php:26
60 | msgid "Email"
61 | msgstr ""
62 |
63 | #: resources/languages/messages.php:27
64 | msgid "Website"
65 | msgstr ""
66 |
67 | #: resources/languages/messages.php:28
68 | msgid "Comment"
69 | msgstr ""
70 |
71 | #: resources/languages/messages.php:29
72 | msgid "Enter your comment here..."
73 | msgstr ""
74 |
75 | #: resources/languages/messages.php:30
76 | msgid "Post Comment"
77 | msgstr ""
78 |
79 | #: resources/languages/messages.php:31
80 | msgid "Reset"
81 | msgstr ""
82 |
83 | #: resources/languages/messages.php:36
84 | msgid "Reply"
85 | msgstr ""
86 |
87 | #: resources/languages/messages.php:41
88 | msgid "Sorry, No Results. Try your search again."
89 | msgstr ""
90 |
91 | #: resources/languages/messages.php:46
92 | msgid "Search"
93 | msgstr ""
94 |
95 | #: resources/languages/messages.php:51
96 | msgid "Password"
97 | msgstr ""
98 |
99 | #: resources/languages/messages.php:52
100 | msgid "Submit"
101 | msgstr ""
102 |
103 | #: resources/languages/messages.php:58
104 | msgid "Comments"
105 | msgstr ""
106 |
107 | #: single.php:6
108 | msgid "Cancel reply"
109 | msgstr ""
110 |
111 | #: vendor/suomato/luna/src/templates/custom-post-type.php:7
112 | msgctxt "Post Type General Name"
113 | msgid "Movies"
114 | msgstr ""
115 |
116 | #: vendor/suomato/luna/src/templates/custom-post-type.php:8
117 | msgctxt "Post Type Singular Name"
118 | msgid "Movie"
119 | msgstr ""
120 |
121 | #: vendor/suomato/luna/src/templates/custom-post-type.php:9
122 | msgid "Movies"
123 | msgstr ""
124 |
125 | #: vendor/suomato/luna/src/templates/custom-post-type.php:10
126 | msgid "Parent Movie"
127 | msgstr ""
128 |
129 | #: vendor/suomato/luna/src/templates/custom-post-type.php:11
130 | msgid "All Movies"
131 | msgstr ""
132 |
133 | #: vendor/suomato/luna/src/templates/custom-post-type.php:12
134 | msgid "View Movie"
135 | msgstr ""
136 |
137 | #: vendor/suomato/luna/src/templates/custom-post-type.php:13
138 | msgid "Add New Movie"
139 | msgstr ""
140 |
141 | #: vendor/suomato/luna/src/templates/custom-post-type.php:14
142 | msgid "Add New"
143 | msgstr ""
144 |
145 | #: vendor/suomato/luna/src/templates/custom-post-type.php:15
146 | msgid "Edit Movie"
147 | msgstr ""
148 |
149 | #: vendor/suomato/luna/src/templates/custom-post-type.php:16
150 | msgid "Update Movie"
151 | msgstr ""
152 |
153 | #: vendor/suomato/luna/src/templates/custom-post-type.php:17
154 | msgid "Search Movie"
155 | msgstr ""
156 |
157 | #: vendor/suomato/luna/src/templates/custom-post-type.php:18
158 | msgid "Not Found"
159 | msgstr ""
160 |
161 | #: vendor/suomato/luna/src/templates/custom-post-type.php:19
162 | msgid "Not found in Trash"
163 | msgstr ""
164 |
165 | #: vendor/suomato/luna/src/templates/custom-post-type.php:24
166 | msgid "movies"
167 | msgstr ""
168 |
169 | #: vendor/suomato/luna/src/templates/custom-post-type.php:25
170 | msgid "Movie"
171 | msgstr ""
172 |
173 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:7
174 | msgctxt "Taxonomy general name"
175 | msgid "Genres"
176 | msgstr ""
177 |
178 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:8
179 | msgctxt "Taxonomy singular name"
180 | msgid "Genre"
181 | msgstr ""
182 |
183 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:9
184 | msgid "Search Genres"
185 | msgstr ""
186 |
187 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:10
188 | msgid "All Genres"
189 | msgstr ""
190 |
191 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:11
192 | msgid "Parent Genre"
193 | msgstr ""
194 |
195 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:12
196 | msgid "Parent Genre:"
197 | msgstr ""
198 |
199 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:13
200 | msgid "Edit Genre"
201 | msgstr ""
202 |
203 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:14
204 | msgid "Update Genre"
205 | msgstr ""
206 |
207 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:15
208 | msgid "Add New Genre"
209 | msgstr ""
210 |
211 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:16
212 | msgid "New Genre Name"
213 | msgstr ""
214 |
215 | #: vendor/suomato/luna/src/templates/custom-taxonomy.php:17
216 | msgid "Genre"
217 | msgstr ""
218 |
219 | #: vendor/timber/timber/lib/Archives.php:160
220 | msgid "%1$s %2$d"
221 | msgstr ""
222 |
223 | #: vendor/timber/timber/lib/Archives.php:162
224 | msgid "%1$s"
225 | msgstr ""
226 |
227 | #: vendor/timber/timber/lib/Pagination.php:115
228 | msgid "« Previous"
229 | msgstr ""
230 |
231 | #: vendor/timber/timber/lib/Pagination.php:116
232 | msgid "Next »"
233 | msgstr ""
234 |
235 | #: vendor/timber/timber/lib/Pagination.php:179
236 | #: vendor/timber/timber/lib/TextHelper.php:26
237 | #: vendor/timber/timber/lib/TextHelper.php:44
238 | msgid "…"
239 | msgstr ""
240 |
241 | #. translators: If your word count is based on single characters (East Asian
242 | #. characters), enter 'characters'. Otherwise, enter 'words'. Do not translate
243 | #. into your own language.
244 | #: vendor/timber/timber/lib/TextHelper.php:53
245 | msgctxt "word count: words or characters?"
246 | msgid "words"
247 | msgstr ""
248 |
249 | #: vendor/timber/timber/tests/test-timber-gettext.php:8
250 | #: vendor/timber/timber/tests/test-timber-gettext.php:21
251 | msgid "my_boo"
252 | msgstr ""
253 |
254 | #: vendor/timber/timber/tests/test-timber-gettext.php:29
255 | #: vendor/timber/timber/tests/test-timber-gettext.php:31
256 | msgid "foo"
257 | msgid_plural "foos"
258 | msgstr[0] ""
259 | msgstr[1] ""
260 |
261 | #: vendor/timber/timber/tests/test-timber-gettext.php:37
262 | #: vendor/timber/timber/tests/test-timber-gettext.php:44
263 | #: vendor/timber/timber/tests/test-timber-gettext.php:52
264 | #: vendor/timber/timber/tests/test-timber-gettext.php:54
265 | msgctxt "my"
266 | msgid "boo"
267 | msgstr ""
268 |
269 | #: vendor/timber/timber/tests/test-timber-menu.php:512
270 | #: vendor/timber/timber/tests/test-timber-menu.php:513
271 | msgid "Gallery"
272 | msgstr ""
273 |
274 | #. translators: 1: audio track title, 2: album title, 3: artist name
275 | #: vendor/timber/timber/tests/wp-overrides.php:40
276 | msgid "\"%1$s\" from %2$s by %3$s."
277 | msgstr ""
278 |
279 | #. translators: 1: audio track title, 2: album title
280 | #: vendor/timber/timber/tests/wp-overrides.php:43
281 | msgid "\"%1$s\" from %2$s."
282 | msgstr ""
283 |
284 | #. translators: 1: audio track title, 2: artist name
285 | #: vendor/timber/timber/tests/wp-overrides.php:46
286 | msgid "\"%1$s\" by %2$s."
287 | msgstr ""
288 |
289 | #: vendor/timber/timber/tests/wp-overrides.php:48
290 | msgid "\"%s\"."
291 | msgstr ""
292 |
293 | #. translators: 1: audio album title, 2: artist name
294 | #: vendor/timber/timber/tests/wp-overrides.php:55
295 | msgid "%1$s by %2$s."
296 | msgstr ""
297 |
298 | #: vendor/timber/timber/tests/wp-overrides.php:67
299 | msgid "Released: %d."
300 | msgstr ""
301 |
302 | #: vendor/timber/timber/tests/wp-overrides.php:72
303 | msgid "Track %1$s of %2$s."
304 | msgstr ""
305 |
306 | #: vendor/timber/timber/tests/wp-overrides.php:74
307 | msgid "Track %1$s."
308 | msgstr ""
309 |
310 | #: vendor/timber/timber/tests/wp-overrides.php:78
311 | msgid "Genre: %s."
312 | msgstr ""
313 |
314 | #: vendor/timber/timber/tests/wp-overrides.php:143
315 | msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
316 | msgstr ""
317 |
318 | #: vendor/timber/timber/tests/wp-overrides.php:144
319 | msgid ""
320 | "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
321 | "the HTML form."
322 | msgstr ""
323 |
324 | #: vendor/timber/timber/tests/wp-overrides.php:145
325 | msgid "The uploaded file was only partially uploaded."
326 | msgstr ""
327 |
328 | #: vendor/timber/timber/tests/wp-overrides.php:146
329 | msgid "No file was uploaded."
330 | msgstr ""
331 |
332 | #: vendor/timber/timber/tests/wp-overrides.php:148
333 | msgid "Missing a temporary folder."
334 | msgstr ""
335 |
336 | #: vendor/timber/timber/tests/wp-overrides.php:149
337 | msgid "Failed to write file to disk."
338 | msgstr ""
339 |
340 | #: vendor/timber/timber/tests/wp-overrides.php:150
341 | msgid "File upload stopped by extension."
342 | msgstr ""
343 |
344 | #: vendor/timber/timber/tests/wp-overrides.php:167
345 | msgid "Invalid form submission."
346 | msgstr ""
347 |
348 | #: vendor/timber/timber/tests/wp-overrides.php:177
349 | msgid "File is empty. Please upload something more substantial."
350 | msgstr ""
351 |
352 | #: vendor/timber/timber/tests/wp-overrides.php:179
353 | msgid ""
354 | "File is empty. Please upload something more substantial. This error could "
355 | "also be caused by uploads being disabled in your php.ini or by post_max_size "
356 | "being defined as smaller than upload_max_filesize in php.ini."
357 | msgstr ""
358 |
359 | #: vendor/timber/timber/tests/wp-overrides.php:185
360 | msgid "Specified file failed upload test."
361 | msgstr ""
362 |
363 | #: vendor/timber/timber/tests/wp-overrides.php:198
364 | msgid "Sorry, this file type is not permitted for security reasons."
365 | msgstr ""
366 |
367 | #: vendor/timber/timber/tests/wp-overrides.php:223
368 | msgid "The uploaded file could not be moved to %s."
369 | msgstr ""
370 |
371 | #. Theme Name of the plugin/theme
372 | msgid "Base camp"
373 | msgstr ""
374 |
375 | #. Theme URI of the plugin/theme
376 | msgid "https://github.com/suomato/base-camp"
377 | msgstr ""
378 |
379 | #. Description of the plugin/theme
380 | msgid ""
381 | "Awesome WordPress starter theme with own CLI for developers based on modern "
382 | "web technologies."
383 | msgstr ""
384 |
385 | #. Author of the plugin/theme
386 | msgid "Toni Suomalainen"
387 | msgstr ""
388 |
389 | #. Author URI of the plugin/theme
390 | msgid "https://github.com/suomato"
391 | msgstr ""
392 |
--------------------------------------------------------------------------------
/resources/languages/messages.php:
--------------------------------------------------------------------------------
1 | [
8 | 'title' => __('404 - Page not found.', 'base-camp'),
9 | 'body' => __('The page you have looked for does not exist.', 'base-camp'),
10 | 'link_text' => __('Back to home page', 'base-camp'),
11 | ],
12 |
13 | // Article Component
14 | 'article' => [
15 | 'edit' => __('Edit', 'base-camp'),
16 | ],
17 |
18 | // Base Page
19 | 'base' => [
20 | 'no_content' => __('Sorry, no content', 'base-camp'),
21 | ],
22 |
23 | // Comment Form Page
24 | 'comment_form' => [
25 | 'name' => __('Name', 'base-camp'),
26 | 'email' => __('Email', 'base-camp'),
27 | 'website' => __('Website', 'base-camp'),
28 | 'comment' => __('Comment', 'base-camp'),
29 | 'comment_placeholder' => __('Enter your comment here...', 'base-camp'),
30 | 'post_comment' => __('Post Comment', 'base-camp'),
31 | 'reset' => __('Reset', 'base-camp'),
32 | ],
33 |
34 | // Comment Page
35 | 'comment' => [
36 | 'reply' => __('Reply', 'base-camp'),
37 | ],
38 |
39 | // Search Page
40 | 'search' => [
41 | 'no_results' => __('Sorry, No Results. Try your search again.', 'base-camp'),
42 | ],
43 |
44 | // Search Form Page
45 | 'search_form' => [
46 | 'search' => __('Search', 'base-camp'),
47 | ],
48 |
49 | // Single Password Page
50 | 'single_password' => [
51 | 'password' => __('Password', 'base-camp'),
52 | 'submit' => __('Submit', 'base-camp'),
53 | ],
54 |
55 | // Single Page
56 | 'single' => [
57 | 'edit' => __('Edit', 'base-camp'),
58 | 'comments' => __('Comments', 'base-camp'),
59 | ],
60 | ];
61 | }
62 |
--------------------------------------------------------------------------------
/resources/views/404.twig:
--------------------------------------------------------------------------------
1 | {% extends "base.twig" %}
2 |
3 | {% block content %}
4 |
5 | {{ messages.404.title }}
6 |
7 | {{ messages.404.body }} {{ messages.404.link_text }}.
8 | {% endblock %}
9 |
--------------------------------------------------------------------------------
/resources/views/archive.twig:
--------------------------------------------------------------------------------
1 | {% extends "base.twig" %}
2 |
3 | {% block content %}
4 | {{ title }}
5 | {% for post in posts %}
6 | {% include 'components/article.twig' %}
7 |
8 | {% endfor %}
9 |
10 | {% if posts.pagination.pages %}
11 | {% include 'components/pagination.twig' %}
12 | {% endif %}
13 |
14 | {% endblock %}
15 |
--------------------------------------------------------------------------------
/resources/views/author.twig:
--------------------------------------------------------------------------------
1 | {% extends "base.twig" %}
2 |
3 | {% block content %}
4 | {{ author }}
5 | {% for post in posts %}
6 | {% include 'components/article.twig' %}
7 |
8 | {% endfor %}
9 |
10 | {% if posts.pagination.pages %}
11 | {% include 'components/pagination.twig' %}
12 | {% endif %}
13 |
14 | {% endblock %}
15 |
--------------------------------------------------------------------------------
/resources/views/base.twig:
--------------------------------------------------------------------------------
1 | {% include 'header/index.twig' %}
2 |
3 |
4 |
5 |
6 |
7 |
8 | {% block content %}
9 | {{ messages.base.no_content }}
10 | {% endblock %}
11 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 | {% include 'footer/index.twig' %}
22 |
23 |
24 |
--------------------------------------------------------------------------------
/resources/views/comment-form.twig:
--------------------------------------------------------------------------------
1 |
72 |
--------------------------------------------------------------------------------
/resources/views/comment.twig:
--------------------------------------------------------------------------------
1 |
40 |
--------------------------------------------------------------------------------
/resources/views/components/article.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 | {{ post.content }}
19 |
20 | {# Tags #}
21 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/resources/views/components/navbar/_navbar-brand.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/components/navbar/_navbar-end.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/components/navbar/_navbar-menu.twig:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/resources/views/components/navbar/_navbar-start.twig:
--------------------------------------------------------------------------------
1 |
2 | {% for item in menu.get_items %}
3 | {% if item.get_children %}
4 |
5 |
6 |
7 | {{ item.title }}
8 |
9 |
10 | {# Second level menu #}
11 |
12 | {% for child in item.get_children %}
13 | -
14 |
15 | {{ child.title }}
16 |
17 | {% if child.get_children %}
18 |
19 | {# Third level menu #}
20 |
27 |
28 | {% endif %}
29 |
30 | {% endfor %}
31 |
32 |
33 |
34 | {% else %}
35 |
36 | {{ item.title }}
37 |
38 | {% endif %}
39 | {% endfor %}
40 |
41 |
--------------------------------------------------------------------------------
/resources/views/components/navbar/index.twig:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/resources/views/components/pagination.twig:
--------------------------------------------------------------------------------
1 |
37 |
--------------------------------------------------------------------------------
/resources/views/components/social-media.twig:
--------------------------------------------------------------------------------
1 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/resources/views/footer/index.twig:
--------------------------------------------------------------------------------
1 |
11 |
12 | {# end #}
13 |
14 | {{ function('wp_footer') }}
15 |