diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..aee76d4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +Dockerfile +docker-compose.yml +.git +.gitignore +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8b0541b..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -sudo: false - -language: php - -php: - - 5.3 - - 5.4 - - 5.5 - -env: - - WP_VERSION=latest WP_MULTISITE=0 - - WP_VERSION=latest WP_MULTISITE=1 - -before_script: - - bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION - - composer install --dev - -script: - - phpunit \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5232b16 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM wordpress:php7.1-fpm-alpine +LABEL Maintainer="butlerx " +RUN apk --update --no-cache add curl && \ + rm /var/cache/apk/* && \ + curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer +COPY [".", "/usr/src/wordpress/wp-content/themes/cd-theme"] +WORKDIR /usr/src/wordpress/wp-content/themes/cd-theme +RUN composer install && \ + chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins/ /usr/src/wordpress/wp-content/themes/ +WORKDIR /var/www/html diff --git a/README.md b/README.md index 2436055..af30f7a 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,48 @@ +# CD-theme -## !! Changes made to this Theme -See [docs/riot.md](/docs/riot.md) for specific instructions around customisations in this Theme - -# The Timber Starter Theme - -The "_s" for Timber: a dead-simple theme that you can build from. The primary purpose of this theme is to provide a file structure rather than a framework for markup or styles. Configure your Sass, scripts, and task runners however you would like! - -[![Build Status](https://travis-ci.org/timber/starter-theme.svg)](https://travis-ci.org/timber/starter-theme) +See [docs/riot.md](/docs/riot.md) for specific instructions around +customisations in this Theme ## Installing the Theme -Install this theme as you would any other, and be sure the Timber plugin is activated. But hey, let's break it down into some bullets: +1. Download the zip for this theme (or clone it) and move it to `wp-content/themes` + in your WordPress installation. +1. Run `composer install` to set up the theme and plugins +1. Activate the theme in Appearance > Themes. +1. Activate all the plugins +1. Do your thing! And read [the docs](https://github.com/jarednova/timber/wiki). -1. Make sure you have installed the plugin for the [Timber Library](https://wordpress.org/plugins/timber-library/) (and Advanced Custom Fields - they [play quite nicely](https://github.com/jarednova/timber/wiki/ACF-Cookbook) together). -2. Download the zip for this theme (or clone it) and move it to `wp-content/themes` in your WordPress installation. -3. Rename the folder to something that makes sense for your website (generally no spaces and all lowercase). You could keep the name `timber-starter-theme` but the point of a starter theme is to make it your own! -4. Activate the theme in Appearance > Themes. -5. Do your thing! And read [the docs](https://github.com/jarednova/timber/wiki). +## What's here -## What's here? +`static/` is where you can keep your static front-end scripts, styles, or images. +In other words, your Sass files, JS files, fonts, and SVGs would live here. -`static/` is where you can keep your static front-end scripts, styles, or images. In other words, your Sass files, JS files, fonts, and SVGs would live here. +`templates/` contains all of your Twig templates. These pretty much correspond 1 +to 1 with the PHP files that respond to the WordPress template hierarchy. At the +end of each PHP template, you'll notice a `Timber::render()` function whose first +parameter is the Twig file where that data (or `$context`) will be used. +Just an FYI. -`templates/` contains all of your Twig templates. These pretty much correspond 1 to 1 with the PHP files that respond to the WordPress template hierarchy. At the end of each PHP template, you'll notice a `Timber::render()` function whose first parameter is the Twig file where that data (or `$context`) will be used. Just an FYI. +`bin/` and `tests/` ... basically don't worry about (or remove) these unless you +know what they are and want to. -`bin/` and `tests/` ... basically don't worry about (or remove) these unless you know what they are and want to. +## Development + +Development is done with docker. To start the wordpress run +`docker-compose up -d` and open `localhost:8008` ## Other Resources -The [main Timber Wiki](https://github.com/jarednova/timber/wiki) is super great, so reference those often. Also, check out these articles and projects for more info: +The [main Timber Wiki](https://github.com/jarednova/timber/wiki) is super great, +so reference those often. Also, check out these articles and projects for more info: -* [This branch](https://github.com/laras126/timber-starter-theme/tree/tackle-box) of the starter theme has some more example code with ACF and a slightly different set up. +* [This branch](https://github.com/laras126/timber-starter-theme/tree/tackle-box) + of the starter theme has some more example code with ACF and a slightly + different set up. * [Twig for Timber Cheatsheet](http://notlaura.com/the-twig-for-timber-cheatsheet/) -* [Timber and Twig Reignited My Love for WordPress](https://css-tricks.com/timber-and-twig-reignited-my-love-for-wordpress/) on CSS-Tricks +* [Timber and Twig Reignited My Love for WordPress](https://css-tricks.com/timber-and-twig-reignited-my-love-for-wordpress/) + on CSS-Tricks * [A real live Timber theme](https://github.com/laras126/yuling-theme). -* [Timber Video Tutorials](https://github.com/jarednova/timber/wiki/Video-Tutorials) and [an incomplete set of screencasts](https://www.youtube.com/playlist?list=PLuIlodXmVQ6pkqWyR6mtQ5gQZ6BrnuFx-) for building a Timber theme from scratch. - +* [Timber Video Tutorials](https://github.com/jarednova/timber/wiki/Video-Tutorials) + and [an incomplete set of screencasts](https://www.youtube.com/playlist?list=PLuIlodXmVQ6pkqWyR6mtQ5gQZ6BrnuFx-) + for building a Timber theme from scratch. diff --git a/composer.json b/composer.json index 4e61fa7..1bba538 100644 --- a/composer.json +++ b/composer.json @@ -1,13 +1,13 @@ { - "name": "upstatement/timber-starter-theme", - "description": "Starter theme to build a Timber theme", - "type":"wordpress-theme", - "minimum-stability" : "stable", + "name": "cd-theme", + "description": "CoderDojo theme for wordpress", + "type": "wordpress-theme", + "minimum-stability": "stable", "authors": [ - { - "name": "jarednova", - "email": "jared@upstatement.com" - } + { + "name": "CoderDojo Foundation", + "email": "info@coderdojo.org" + } ], "repositories": [ { @@ -16,14 +16,25 @@ } ], "extra": { - "installer-paths": { - "../../plugins/{$name}/": [ - "wpackagist-plugin/*", - "type:wordpress-plugin" - ] - } - }, + "installer-paths": { + "./plugins/{$name}/": ["wpackagist-plugin/*", "type:wordpress-plugin"] + } + }, "require": { - "wpackagist-plugin/timber-library": "0.22.*" + "wpackagist-plugin/amazon-s3-and-cloudfront": "1.2", + "wpackagist-plugin/antispam-bee": "2.7.1", + "wpackagist-plugin/caldera-forms": "1.5.6.2", + "wpackagist-plugin/cloudflare": "3.3.1", + "wpackagist-plugin/custom-share-buttons-with-floating-sidebar": "3.3", + "wpackagist-plugin/google-captcha": "1.32", + "wpackagist-plugin/optimizely": "3.7.8", + "wpackagist-plugin/pods": "2.6.11", + "wpackagist-plugin/redirection": "2.8", + "wpackagist-plugin/sucuri-scanner": "1.8.11", + "wpackagist-plugin/tablepress": "1.8.1", + "wpackagist-plugin/timber-library": "1.5.2", + "wpackagist-plugin/wonderm00ns-simple-facebook-open-graph-tags": "2.1.3", + "wpackagist-plugin/wordpress-importer": "0.6.3", + "wpackagist-plugin/wp-mail-smtp": "0.10.1" } } diff --git a/composer.lock b/composer.lock index 137fdc5..792982b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "03c15e6c57468a60aa7ddc84134dfb24", - "content-hash": "ddbdaaec9f3f849d39a5aa1525e75c79", + "content-hash": "26ba22336551b1fa55fa4c985ea2f177", "packages": [ { "name": "composer/installers", - "version": "v1.0.25", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "36e5b5843203d7f1cf6ffb0305a97e014387bd8e" + "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/36e5b5843203d7f1cf6ffb0305a97e014387bd8e", - "reference": "36e5b5843203d7f1cf6ffb0305a97e014387bd8e", + "url": "https://api.github.com/repos/composer/installers/zipball/9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b", + "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b", "shasum": "" }, "require": { @@ -60,64 +59,301 @@ "keywords": [ "Craft", "Dolibarr", + "Eliasis", "Hurad", "ImageCMS", + "Kanboard", + "Lan Management System", "MODX Evo", "Mautic", + "Maya", "OXID", + "Plentymarkets", + "Porto", + "RadPHP", "SMF", "Thelia", "WolfCMS", "agl", "aimeos", "annotatecms", + "attogram", "bitrix", "cakephp", "chef", + "cockpit", "codeigniter", "concrete5", "croogo", "dokuwiki", "drupal", + "eZ Platform", "elgg", + "expressionengine", "fuelphp", "grav", "installer", + "itop", "joomla", "kohana", "laravel", + "lavalite", "lithium", "magento", "mako", "mediawiki", "modulework", "moodle", + "osclass", "phpbb", "piwik", "ppi", "puppet", + "reindex", "roundcube", "shopware", "silverstripe", + "sydes", "symfony", "typo3", "wordpress", + "yawik", "zend", "zikula" ], - "time": "2016-04-13 19:46:30" + "time": "2017-08-09T07:53:48+00:00" + }, + { + "name": "wpackagist-plugin/amazon-s3-and-cloudfront", + "version": "1.2", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/amazon-s3-and-cloudfront/", + "reference": "tags/1.2" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.1.2.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/amazon-s3-and-cloudfront/" + }, + { + "name": "wpackagist-plugin/antispam-bee", + "version": "2.7.1", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/antispam-bee/", + "reference": "tags/2.7.1" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/antispam-bee.2.7.1.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/antispam-bee/" + }, + { + "name": "wpackagist-plugin/caldera-forms", + "version": "1.5.6.2", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/caldera-forms/", + "reference": "tags/1.5.6.2" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/caldera-forms.1.5.6.2.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/caldera-forms/" + }, + { + "name": "wpackagist-plugin/cloudflare", + "version": "3.3.1", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/cloudflare/", + "reference": "tags/3.3.1" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/cloudflare.3.3.1.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/cloudflare/" + }, + { + "name": "wpackagist-plugin/custom-share-buttons-with-floating-sidebar", + "version": "3.3", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/custom-share-buttons-with-floating-sidebar/", + "reference": "tags/3.3" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/custom-share-buttons-with-floating-sidebar.3.3.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/custom-share-buttons-with-floating-sidebar/" + }, + { + "name": "wpackagist-plugin/google-captcha", + "version": "1.32", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/google-captcha/", + "reference": "tags/1.32" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/google-captcha.1.32.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/google-captcha/" + }, + { + "name": "wpackagist-plugin/optimizely", + "version": "3.7.8", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/optimizely/", + "reference": "tags/3.7.8" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/optimizely.3.7.8.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/optimizely/" + }, + { + "name": "wpackagist-plugin/pods", + "version": "2.6.11", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/pods/", + "reference": "tags/2.6.11" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/pods.2.6.11.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/pods/" + }, + { + "name": "wpackagist-plugin/redirection", + "version": "2.8", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/redirection/", + "reference": "tags/2.8" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/redirection.2.8.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/redirection/" + }, + { + "name": "wpackagist-plugin/sucuri-scanner", + "version": "1.8.11", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/sucuri-scanner/", + "reference": "tags/1.8.11" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/sucuri-scanner.1.8.11.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/sucuri-scanner/" + }, + { + "name": "wpackagist-plugin/tablepress", + "version": "1.8.1", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/tablepress/", + "reference": "tags/1.8.1" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/tablepress.1.8.1.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/tablepress/" }, { "name": "wpackagist-plugin/timber-library", - "version": "0.22.5", + "version": "1.5.2", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/timber-library/", - "reference": "tags/0.22.5" + "reference": "tags/1.5.2" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/timber-library.0.22.5.zip", + "url": "https://downloads.wordpress.org/plugin/timber-library.1.5.2.zip", "reference": null, "shasum": null }, @@ -126,6 +362,66 @@ }, "type": "wordpress-plugin", "homepage": "https://wordpress.org/plugins/timber-library/" + }, + { + "name": "wpackagist-plugin/wonderm00ns-simple-facebook-open-graph-tags", + "version": "2.1.3", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/wonderm00ns-simple-facebook-open-graph-tags/", + "reference": "tags/2.1.3" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/wonderm00ns-simple-facebook-open-graph-tags.2.1.3.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/wonderm00ns-simple-facebook-open-graph-tags/" + }, + { + "name": "wpackagist-plugin/wordpress-importer", + "version": "0.6.3", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/wordpress-importer/", + "reference": "tags/0.6.3" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/wordpress-importer.0.6.3.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/wordpress-importer/" + }, + { + "name": "wpackagist-plugin/wp-mail-smtp", + "version": "0.10.1", + "source": { + "type": "svn", + "url": "https://plugins.svn.wordpress.org/wp-mail-smtp/", + "reference": "tags/0.10.1" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/plugin/wp-mail-smtp.0.10.1.zip", + "reference": null, + "shasum": null + }, + "require": { + "composer/installers": "~1.0" + }, + "type": "wordpress-plugin", + "homepage": "https://wordpress.org/plugins/wp-mail-smtp/" } ], "packages-dev": [], diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bb96ba7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3' +services: + db: + image: mysql:5.7 + volumes: + - db_data:/var/lib/mysql + restart: always + environment: + MYSQL_ROOT_PASSWORD: somewordpress + MYSQL_DATABASE: wordpress + MYSQL_USER: wordpress + MYSQL_PASSWORD: wordpress + wordpress: + depends_on: + - db + image: cd-theme + build: . + restart: always + volumes: + - wp_data:/var/www/html + environment: + WORDPRESS_DB_HOST: db:3306 + WORDPRESS_DB_USER: wordpress + WORDPRESS_DB_PASSWORD: wordpress + web: + build: ./nginx + depends_on: + - wordpress + ports: + - "8443:80" + volumes: + - wp_data:/var/www/html + - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro +volumes: + db_data: + wp_data: diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..722cbdd --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:alpine +RUN addgroup -g 82 -S www-data && \ + adduser -u 82 -D -S -G www-data www-data && \ + mkdir -p /var/www/html && \ + chown -R www-data:www-data /var/www diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..4598e1e --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,92 @@ +user www-data; + +events { + worker_connections 2048; + multi_accept on; + use epoll; +} + +http { + client_max_body_size 64m; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 15; + + upstream wp { + server wordpress:9000; + } + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + gzip on; + gzip_vary on; + gzip_min_length 10240; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml application/javascript application/x-javascript application/xml; + gzip_disable "MSIE [1-6]\."; + + server { + listen 80 default_server; + listen [::]:80 default_server ipv6only=on; + + root /var/www/html; + index index.php index.html index.htm; + + location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { + access_log off; + log_not_found off; + expires 30d; + } + + open_file_cache max=2000 inactive=20s; + open_file_cache_valid 60s; + open_file_cache_min_uses 5; + open_file_cache_errors off; + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location / { + try_files $uri $uri/ /index.php?q=$uri&$args; + } + + if (!-d $request_filename) { + rewrite ^/(.+)/$ /$1 permanent; + } + + location ~ \.php$ { + fastcgi_param GATEWAY_INTERFACE CGI/1.1; + fastcgi_param SERVER_SOFTWARE nginx; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param REQUEST_METHOD $request_method; + fastcgi_param CONTENT_TYPE $content_type; + fastcgi_param CONTENT_LENGTH $content_length; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SCRIPT_NAME $fastcgi_script_name; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param DOCUMENT_URI $document_uri; + fastcgi_param DOCUMENT_ROOT $document_root; + fastcgi_param SERVER_PROTOCOL $server_protocol; + fastcgi_param REMOTE_ADDR $remote_addr; + fastcgi_param REMOTE_PORT $remote_port; + fastcgi_param SERVER_ADDR $server_addr; + fastcgi_param SERVER_PORT $server_port; + fastcgi_param SERVER_NAME $server_name; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_intercept_errors on; + fastcgi_pass wp; + fastcgi_index index.php; + include fastcgi_params; + } + } +} diff --git a/screenshot.png b/screenshot.png old mode 100755 new mode 100644 index f6e706e..3ae94b3 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/style.css b/style.css index 3531636..0121c2b 100644 --- a/style.css +++ b/style.css @@ -1,8 +1,10 @@ -/*Apparently this file is needed or WordPress considers the theme "incomplete"*/ +/* + * This File is needed for meta data about the theme for wordpress + */ /* -Theme Name: CoderDojo -Theme URI: http://github.com/adhorrig/cd-theme +Theme Name: cd-theme +Theme URI: http://github.com/cd-theme/cd-theme Author: CoderDojo Foundation Author URI: http://coderdojo.com Description: The new theme for http://coderdojo.com. The theme (or variation) will be used on the three CoderDojo sites - coderdojo.com/ zen.coderdojo.com/ kata.coderdojo.com. @@ -10,5 +12,5 @@ Version: 1.0 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: coderdojo, website, responsize, bootstrap, modern. -Text Domain: coderdojo +Text Domain: cd-theme */