Move project-x to www
This commit is contained in:
18
www/.editorconfig
Normal file
18
www/.editorconfig
Normal file
@@ -0,0 +1,18 @@
|
||||
# editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.json,.bowerrc]
|
||||
insert_final_newline = false
|
||||
|
||||
[{.htaccess,.bowerrc,bower.json,package.json,component.json}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
115
www/.htaccess
Normal file
115
www/.htaccess
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
<FilesMatch "\.(ttf|otf|eot|woff|font.css)$">
|
||||
<IfModule mod_headers.c>
|
||||
Header set Access-Control-Allow-Origin "*"
|
||||
</IfModule>
|
||||
</FilesMatch>
|
||||
|
||||
|
||||
|
||||
<IfModule mod_deflate.c>
|
||||
|
||||
<IfModule mod_setenvif.c>
|
||||
<IfModule mod_headers.c>
|
||||
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s,?\s(gzip|deflate)?|X{4,13}|~{4,13}|-{4,13})$ HAVE_Accept-Encoding
|
||||
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
<IfModule !mod_filter.c>
|
||||
# Legacy versions of Apache
|
||||
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
|
||||
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
|
||||
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
|
||||
</IfModule>
|
||||
|
||||
<FilesMatch "\.(ttf|otf|eot|svg|woff)$" >
|
||||
SetOutputFilter DEFLATE
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive on
|
||||
|
||||
ExpiresDefault "access plus 1 month"
|
||||
ExpiresByType text/cache-manifest "access plus 0 seconds"
|
||||
ExpiresByType text/html "access plus 0 seconds"
|
||||
|
||||
ExpiresByType text/xml "access plus 0 seconds"
|
||||
ExpiresByType application/xml "access plus 0 seconds"
|
||||
ExpiresByType application/json "access plus 1 day"
|
||||
|
||||
ExpiresByType application/rss+xml "access plus 1 hour"
|
||||
|
||||
ExpiresByType image/x-icon "access plus 1 week"
|
||||
|
||||
ExpiresByType image/gif "access plus 1 month"
|
||||
ExpiresByType image/png "access plus 1 month"
|
||||
ExpiresByType image/jpg "access plus 1 month"
|
||||
ExpiresByType image/jpeg "access plus 1 month"
|
||||
ExpiresByType video/ogg "access plus 1 month"
|
||||
ExpiresByType audio/ogg "access plus 1 month"
|
||||
ExpiresByType video/mp4 "access plus 1 month"
|
||||
ExpiresByType video/webm "access plus 1 month"
|
||||
ExpiresByType audio/webm "access plus 1 month"
|
||||
|
||||
ExpiresByType text/x-component "access plus 1 month"
|
||||
|
||||
ExpiresByType font/truetype "access plus 1 month"
|
||||
ExpiresByType font/opentype "access plus 1 month"
|
||||
ExpiresByType application/x-font-woff "access plus 1 month"
|
||||
ExpiresByType image/svg+xml "access plus 1 month"
|
||||
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
|
||||
|
||||
ExpiresByType text/css "access plus 1 year"
|
||||
ExpiresByType application/javascript "access plus 1 year"
|
||||
ExpiresByType text/javascript "access plus 1 year"
|
||||
|
||||
<IfModule mod_headers.c>
|
||||
Header append Cache-Control "public"
|
||||
</IfModule>
|
||||
|
||||
</IfModule>
|
||||
|
||||
|
||||
<IfModule mod_headers.c>
|
||||
Header unset ETag
|
||||
</IfModule>
|
||||
|
||||
FileETag None
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteRule get-asset-(\w*) admin/assets?t=$1&%{QUERY_STRING} [L,NC]
|
||||
Options +FollowSymlinks
|
||||
RewriteEngine On
|
||||
</IfModule>
|
||||
|
||||
|
||||
Options -MultiViews
|
||||
|
||||
ErrorDocument 400 /400.php
|
||||
ErrorDocument 401 /401.php
|
||||
ErrorDocument 402 /402.php
|
||||
ErrorDocument 403 /403.php
|
||||
ErrorDocument 404 /404.php
|
||||
|
||||
AddDefaultCharset utf-8
|
||||
AddCharset utf-8 .html .css .js .xml .json .rss
|
||||
|
||||
Options -Indexes
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteRule "(^|/)\." - [F]
|
||||
|
||||
# Sections
|
||||
RewriteRule ^.*-([a-zA-Z]{2})-([0-9]+) index.php?%{query_string}&s=$2&lang=$1
|
||||
|
||||
# Charcoal
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^(.*)$ charcoal.php?action=$1&%{QUERY_STRING} [PT,L]
|
||||
|
||||
</IfModule>
|
||||
|
||||
16
www/charcoal.php
Normal file
16
www/charcoal.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* Default front-end section controller
|
||||
* Simply delegates initiation to the Boilerplate Module.
|
||||
*/
|
||||
|
||||
// Project configuration and Charcoal instanciation
|
||||
include 'config/config.php';
|
||||
|
||||
// Charcoal init
|
||||
Charcoal::init();
|
||||
|
||||
// Project init (front-page controller)
|
||||
$opts = [];
|
||||
Boilerplate_Module::init($opts);
|
||||
|
||||
0
www/config/.htaccess
Normal file
0
www/config/.htaccess
Normal file
44
www/config/config.json
Normal file
44
www/config/config.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"project_name": "Boilerplate",
|
||||
"databases": {
|
||||
"local": {
|
||||
"database": "gdfg",
|
||||
"username": "root",
|
||||
"password": ""
|
||||
},
|
||||
"lab": {
|
||||
"database": "",
|
||||
"username": "",
|
||||
"password": ""
|
||||
},
|
||||
"live": {
|
||||
"database": "",
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
},
|
||||
"default_database": "local",
|
||||
"languages": {
|
||||
"fr": {
|
||||
"active": true
|
||||
},
|
||||
"en": {
|
||||
"active": true
|
||||
}
|
||||
},
|
||||
"default_language": "fr",
|
||||
"modules": {
|
||||
"admin": [],
|
||||
"cms": [],
|
||||
"newsletter": [],
|
||||
"boilerplate": []
|
||||
},
|
||||
"objects": [],
|
||||
"apis": [],
|
||||
"url_options": {
|
||||
"use_rewrite": true
|
||||
},
|
||||
"debug":{
|
||||
"active":false
|
||||
}
|
||||
}
|
||||
5
www/config/config.local.json
Normal file
5
www/config/config.local.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"debug":{
|
||||
"active":true
|
||||
}
|
||||
}
|
||||
33
www/config/config.php
Normal file
33
www/config/config.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* config.php
|
||||
*/
|
||||
|
||||
// Error reporting
|
||||
error_reporting(E_ALL & ~E_STRICT);
|
||||
ini_set('display_errors', true);
|
||||
|
||||
|
||||
|
||||
// Main Charcoal include. This is where the Charcoal autoloader is defined.
|
||||
include __DIR__.'/../charcoal/charcoal.php';
|
||||
|
||||
// JSON Configuration
|
||||
Charcoal::add_config(__DIR__.'/config.json');
|
||||
$application_env = Charcoal::application_env();
|
||||
if(file_exists(__DIR__ . '/config.'.$application_env.'.json')) {
|
||||
Charcoal::add_config(__DIR__ . '/config.'.$application_env.'.json');
|
||||
}
|
||||
|
||||
// Environment defaults
|
||||
date_default_timezone_set('America/Montreal');
|
||||
|
||||
// Configuration overwrite
|
||||
Charcoal::$config['ROOT'] = realpath(__DIR__).'/../';
|
||||
if(isset($_SERVER['HTTP_HOST'])) {
|
||||
Charcoal::$config['URL'] = 'http://'.$_SERVER['HTTP_HOST'].'/';
|
||||
}
|
||||
else {
|
||||
Charcoal::$config['URL'] = 'http://localhost/';
|
||||
}
|
||||
|
||||
24
www/index.html
Normal file
24
www/index.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="theme-color" content="#f2f2f2">
|
||||
<title>Project-x</title>
|
||||
|
||||
<link rel="icon" type="image/png" href="modules/boilerplate/assets/images/favicon-16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="modules/boilerplate/assets/images/favicon-32.png" sizes="32x32">
|
||||
<link rel="apple-touch-icon-precomposed" href="modules/boilerplate/assets/images/favicon-152.png">
|
||||
<!--[if IE]><link rel="shortcut icon" href="modules/boilerplate/assets/images/favicon-32.ico"><![endif]-->
|
||||
|
||||
<link rel="stylesheet" href="modules/boilerplate/assets/styles/dist/main.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||
<script>window.jQuery || document.write('<script src="modules/boilerplate/assets/scripts/src/vendors/jquery-1.11.2.min.js"><\/script>')</script>
|
||||
<script src="modules/boilerplate/assets/scripts/dist/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
18
www/index.php
Normal file
18
www/index.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
/**
|
||||
* Default front-end section controller
|
||||
* Simply delegates initiation to the Boilerplate Module.
|
||||
*/
|
||||
|
||||
// Project configuration and Charcoal instanciation
|
||||
include 'config/config.php';
|
||||
|
||||
// Charcoal init
|
||||
Charcoal::init();
|
||||
|
||||
// Project init (front-page controller)
|
||||
$opts = [
|
||||
'default_section' => Boilerplate_Config::get_latest()->default_section
|
||||
];
|
||||
Boilerplate_Module::init($opts);
|
||||
|
||||
323
www/modules/boilerplate/.csscomb.json
Normal file
323
www/modules/boilerplate/.csscomb.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"always-semicolon": true,
|
||||
"color-case": "lower",
|
||||
"block-indent": "\t",
|
||||
"color-shorthand": false,
|
||||
"eof-newline": true,
|
||||
"leading-zero": true,
|
||||
"quotes": "double",
|
||||
"space-before-colon": "",
|
||||
"space-after-colon": " ",
|
||||
"space-before-combinator": " ",
|
||||
"space-after-combinator": " ",
|
||||
"space-between-declarations": "\n",
|
||||
"space-before-opening-brace": " ",
|
||||
"space-after-opening-brace": "\n",
|
||||
"space-before-selector-delimiter": "",
|
||||
"space-before-closing-brace": "\n",
|
||||
"strip-spaces": true,
|
||||
"unitless-zero": true,
|
||||
"vendor-prefix-align": true,
|
||||
"sort-order": [
|
||||
[ "$include" ],
|
||||
[ "$variable" ],
|
||||
[
|
||||
"font",
|
||||
"font-family",
|
||||
"font-size",
|
||||
"font-weight",
|
||||
"font-style",
|
||||
"font-variant",
|
||||
"font-size-adjust",
|
||||
"font-stretch",
|
||||
"font-effect",
|
||||
"font-emphasize",
|
||||
"font-emphasize-position",
|
||||
"font-emphasize-style",
|
||||
"font-smooth",
|
||||
"line-height"
|
||||
],
|
||||
[
|
||||
"position",
|
||||
"z-index",
|
||||
"top",
|
||||
"right",
|
||||
"bottom",
|
||||
"left"
|
||||
],
|
||||
[
|
||||
"display",
|
||||
"visibility",
|
||||
"float",
|
||||
"clear",
|
||||
"overflow",
|
||||
"overflow-x",
|
||||
"overflow-y",
|
||||
"-ms-overflow-x",
|
||||
"-ms-overflow-y",
|
||||
"clip",
|
||||
"zoom",
|
||||
"flex-direction",
|
||||
"flex-order",
|
||||
"flex-pack",
|
||||
"flex-align"
|
||||
],
|
||||
[
|
||||
"-webkit-box-sizing",
|
||||
"-moz-box-sizing",
|
||||
"box-sizing",
|
||||
"width",
|
||||
"min-width",
|
||||
"max-width",
|
||||
"height",
|
||||
"min-height",
|
||||
"max-height",
|
||||
"margin",
|
||||
"margin-top",
|
||||
"margin-right",
|
||||
"margin-bottom",
|
||||
"margin-left",
|
||||
"padding",
|
||||
"padding-top",
|
||||
"padding-right",
|
||||
"padding-bottom",
|
||||
"padding-left"
|
||||
],
|
||||
[
|
||||
"table-layout",
|
||||
"empty-cells",
|
||||
"caption-side",
|
||||
"border-spacing",
|
||||
"border-collapse",
|
||||
"list-style",
|
||||
"list-style-position",
|
||||
"list-style-type",
|
||||
"list-style-image"
|
||||
],
|
||||
[
|
||||
"content",
|
||||
"quotes",
|
||||
"counter-reset",
|
||||
"counter-increment",
|
||||
"resize",
|
||||
"cursor",
|
||||
"-webkit-user-select",
|
||||
"-moz-user-select",
|
||||
"-ms-user-select",
|
||||
"user-select",
|
||||
"nav-index",
|
||||
"nav-up",
|
||||
"nav-right",
|
||||
"nav-down",
|
||||
"nav-left",
|
||||
"-webkit-transition",
|
||||
"-moz-transition",
|
||||
"-ms-transition",
|
||||
"-o-transition",
|
||||
"transition",
|
||||
"-webkit-transition-delay",
|
||||
"-moz-transition-delay",
|
||||
"-ms-transition-delay",
|
||||
"-o-transition-delay",
|
||||
"transition-delay",
|
||||
"-webkit-transition-timing-function",
|
||||
"-moz-transition-timing-function",
|
||||
"-ms-transition-timing-function",
|
||||
"-o-transition-timing-function",
|
||||
"transition-timing-function",
|
||||
"-webkit-transition-duration",
|
||||
"-moz-transition-duration",
|
||||
"-ms-transition-duration",
|
||||
"-o-transition-duration",
|
||||
"transition-duration",
|
||||
"-webkit-transition-property",
|
||||
"-moz-transition-property",
|
||||
"-ms-transition-property",
|
||||
"-o-transition-property",
|
||||
"transition-property",
|
||||
"-webkit-transform",
|
||||
"-moz-transform",
|
||||
"-ms-transform",
|
||||
"-o-transform",
|
||||
"transform",
|
||||
"-webkit-transform-origin",
|
||||
"-moz-transform-origin",
|
||||
"-ms-transform-origin",
|
||||
"-o-transform-origin",
|
||||
"transform-origin",
|
||||
"-webkit-animation",
|
||||
"-moz-animation",
|
||||
"-ms-animation",
|
||||
"-o-animation",
|
||||
"animation",
|
||||
"-webkit-animation-name",
|
||||
"-moz-animation-name",
|
||||
"-ms-animation-name",
|
||||
"-o-animation-name",
|
||||
"animation-name",
|
||||
"-webkit-animation-duration",
|
||||
"-moz-animation-duration",
|
||||
"-ms-animation-duration",
|
||||
"-o-animation-duration",
|
||||
"animation-duration",
|
||||
"-webkit-animation-play-state",
|
||||
"-moz-animation-play-state",
|
||||
"-ms-animation-play-state",
|
||||
"-o-animation-play-state",
|
||||
"animation-play-state",
|
||||
"-webkit-animation-timing-function",
|
||||
"-moz-animation-timing-function",
|
||||
"-ms-animation-timing-function",
|
||||
"-o-animation-timing-function",
|
||||
"animation-timing-function",
|
||||
"-webkit-animation-delay",
|
||||
"-moz-animation-delay",
|
||||
"-ms-animation-delay",
|
||||
"-o-animation-delay",
|
||||
"animation-delay",
|
||||
"-webkit-animation-iteration-count",
|
||||
"-moz-animation-iteration-count",
|
||||
"-ms-animation-iteration-count",
|
||||
"-o-animation-iteration-count",
|
||||
"animation-iteration-count",
|
||||
"-webkit-animation-direction",
|
||||
"-moz-animation-direction",
|
||||
"-ms-animation-direction",
|
||||
"-o-animation-direction",
|
||||
"animation-direction",
|
||||
"text-align",
|
||||
"-webkit-text-align-last",
|
||||
"-moz-text-align-last",
|
||||
"-ms-text-align-last",
|
||||
"text-align-last",
|
||||
"vertical-align",
|
||||
"white-space",
|
||||
"text-decoration",
|
||||
"text-emphasis",
|
||||
"text-emphasis-color",
|
||||
"text-emphasis-style",
|
||||
"text-emphasis-position",
|
||||
"text-indent",
|
||||
"-ms-text-justify",
|
||||
"text-justify",
|
||||
"letter-spacing",
|
||||
"word-spacing",
|
||||
"-ms-writing-mode",
|
||||
"text-outline",
|
||||
"text-transform",
|
||||
"text-wrap",
|
||||
"text-overflow",
|
||||
"-ms-text-overflow",
|
||||
"text-overflow-ellipsis",
|
||||
"text-overflow-mode",
|
||||
"-ms-word-wrap",
|
||||
"word-wrap",
|
||||
"word-break",
|
||||
"-ms-word-break",
|
||||
"-moz-tab-size",
|
||||
"-o-tab-size",
|
||||
"tab-size",
|
||||
"-webkit-hyphens",
|
||||
"-moz-hyphens",
|
||||
"hyphens",
|
||||
"pointer-events"
|
||||
],
|
||||
[
|
||||
"opacity",
|
||||
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
|
||||
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
|
||||
"-ms-interpolation-mode",
|
||||
"color",
|
||||
"border",
|
||||
"border-width",
|
||||
"border-style",
|
||||
"border-color",
|
||||
"border-top",
|
||||
"border-top-width",
|
||||
"border-top-style",
|
||||
"border-top-color",
|
||||
"border-right",
|
||||
"border-right-width",
|
||||
"border-right-style",
|
||||
"border-right-color",
|
||||
"border-bottom",
|
||||
"border-bottom-width",
|
||||
"border-bottom-style",
|
||||
"border-bottom-color",
|
||||
"border-left",
|
||||
"border-left-width",
|
||||
"border-left-style",
|
||||
"border-left-color",
|
||||
"-webkit-border-radius",
|
||||
"-moz-border-radius",
|
||||
"border-radius",
|
||||
"-webkit-border-top-left-radius",
|
||||
"-moz-border-radius-topleft",
|
||||
"border-top-left-radius",
|
||||
"-webkit-border-top-right-radius",
|
||||
"-moz-border-radius-topright",
|
||||
"border-top-right-radius",
|
||||
"-webkit-border-bottom-right-radius",
|
||||
"-moz-border-radius-bottomright",
|
||||
"border-bottom-right-radius",
|
||||
"-webkit-border-bottom-left-radius",
|
||||
"-moz-border-radius-bottomleft",
|
||||
"border-bottom-left-radius",
|
||||
"-webkit-border-image",
|
||||
"-moz-border-image",
|
||||
"-o-border-image",
|
||||
"border-image",
|
||||
"-webkit-border-image-source",
|
||||
"-moz-border-image-source",
|
||||
"-o-border-image-source",
|
||||
"border-image-source",
|
||||
"-webkit-border-image-slice",
|
||||
"-moz-border-image-slice",
|
||||
"-o-border-image-slice",
|
||||
"border-image-slice",
|
||||
"-webkit-border-image-width",
|
||||
"-moz-border-image-width",
|
||||
"-o-border-image-width",
|
||||
"border-image-width",
|
||||
"-webkit-border-image-outset",
|
||||
"-moz-border-image-outset",
|
||||
"-o-border-image-outset",
|
||||
"border-image-outset",
|
||||
"-webkit-border-image-repeat",
|
||||
"-moz-border-image-repeat",
|
||||
"-o-border-image-repeat",
|
||||
"border-image-repeat",
|
||||
"outline",
|
||||
"outline-width",
|
||||
"outline-style",
|
||||
"outline-color",
|
||||
"outline-offset",
|
||||
"background",
|
||||
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
|
||||
"background-color",
|
||||
"background-image",
|
||||
"background-repeat",
|
||||
"background-attachment",
|
||||
"background-position",
|
||||
"background-position-x",
|
||||
"-ms-background-position-x",
|
||||
"background-position-y",
|
||||
"-ms-background-position-y",
|
||||
"-webkit-background-clip",
|
||||
"-moz-background-clip",
|
||||
"background-clip",
|
||||
"background-origin",
|
||||
"-webkit-background-size",
|
||||
"-moz-background-size",
|
||||
"-o-background-size",
|
||||
"background-size",
|
||||
"box-decoration-break",
|
||||
"-webkit-box-shadow",
|
||||
"-moz-box-shadow",
|
||||
"box-shadow",
|
||||
"filter:progid:DXImageTransform.Microsoft.gradient",
|
||||
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
|
||||
"text-shadow"
|
||||
]
|
||||
]
|
||||
}
|
||||
273
www/modules/boilerplate/Gruntfile.js
Normal file
273
www/modules/boilerplate/Gruntfile.js
Normal file
@@ -0,0 +1,273 @@
|
||||
module.exports = function(grunt) {
|
||||
|
||||
grunt.initConfig({
|
||||
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
|
||||
|
||||
|
||||
// sass: Compile Sass to CSS
|
||||
sass: require('./grunt_tasks/sass'),
|
||||
|
||||
// svgstore: Merge svgs from a folder
|
||||
svgstore: require('./grunt_tasks/svgstore'),
|
||||
|
||||
// concat: Concatenate files.
|
||||
concat: require('./grunt_tasks/concat'),
|
||||
|
||||
// autoprefixer: Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website
|
||||
autoprefixer: {
|
||||
build: {
|
||||
options: {
|
||||
browsers: ['last 2 versions', '> 1%', 'ie >= 8']
|
||||
},
|
||||
files: [
|
||||
{
|
||||
src : ['assets/styles/dist/*.css'],
|
||||
dest : 'assets/styles/dist/',
|
||||
expand : true,
|
||||
flatten : true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// watch: Run tasks whenever watched files change.
|
||||
watch: {
|
||||
concat: {
|
||||
files: ['assets/scripts/src/**/*.js'],
|
||||
tasks: ['concat', 'notify:concat']
|
||||
},
|
||||
sass: {
|
||||
files: ['assets/styles/src/**/*.scss'],
|
||||
tasks: ['sass', 'autoprefixer', 'notify:sass'],
|
||||
options: {
|
||||
spawn: false,
|
||||
livereload: true
|
||||
}
|
||||
},
|
||||
svgstore: {
|
||||
files: ['assets/images/**/*.svg'],
|
||||
tasks: ['svgstore', 'notify:svg']
|
||||
},
|
||||
tasks: {
|
||||
files: ['grunt_tasks/*.js'],
|
||||
options: {
|
||||
reload: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// notify: Automatic Notifications when Grunt tasks fail (or succeed)
|
||||
notify: {
|
||||
watch: {
|
||||
options: {
|
||||
// title: '<%= pkg.title %>',
|
||||
message: 'Keeping an eye out, Chief!'
|
||||
}
|
||||
},
|
||||
sass: {
|
||||
options: {
|
||||
// title: '<%= pkg.title %>',
|
||||
message: 'Sass compiled to CSS.'
|
||||
}
|
||||
},
|
||||
concat: {
|
||||
options: {
|
||||
// title: '<%= pkg.title %>',
|
||||
message: 'JavaScript is now concatenated'
|
||||
}
|
||||
},
|
||||
svg: {
|
||||
options: {
|
||||
// title: '<%= pkg.title %>',
|
||||
message: 'SVG is now concatenated'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// csscomb: Sort CSS properties in specific order.
|
||||
csscomb: {
|
||||
options: {
|
||||
config: '.csscomb.json'
|
||||
},
|
||||
build: {
|
||||
expand: true,
|
||||
cwd: 'assets/styles/src/',
|
||||
src: ['**/*.scss'],
|
||||
dest: 'assets/styles/src/'
|
||||
}
|
||||
},
|
||||
|
||||
// uglify: Minify (javascript)files with UglifyJS
|
||||
uglify: {
|
||||
target: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'assets/scripts/dist/',
|
||||
src: '**/*.js',
|
||||
dest: 'assets/scripts/dist/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
// cssmin: Compress CSS files
|
||||
cssmin: {
|
||||
combine: {
|
||||
files: {
|
||||
'assets/styles/dist/': ['assets/scripts/dist/*.css']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// svgmin: Minify SVG
|
||||
svgmin: {
|
||||
options: {
|
||||
plugins: [
|
||||
{ removeViewBox: false },
|
||||
{ cleanupIDs: false },
|
||||
{ convertPathData: false },
|
||||
{ mergePaths: false },
|
||||
{ convertShapeToPath: false },
|
||||
{ cleanupNumericValues: false },
|
||||
{ convertTransform: false },
|
||||
{ removeUselessStrokeAndFill: false }
|
||||
]
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'assets/images/dist/': 'assets/images/dist/*.svg'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// imagemin: Minify PNG and JPEG images.
|
||||
imagemin: {
|
||||
dynamic: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'assets/images/',
|
||||
src: ['*.{png,jpg,gif}'],
|
||||
dest: 'assets/images/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
// jsonlint: Validate JSON files
|
||||
jsonlint:{
|
||||
project:{
|
||||
src:[
|
||||
'*.json',
|
||||
'config/*.json',
|
||||
'config/**/*.json',
|
||||
'modules/**/config/*.json',
|
||||
'modules/**/config/**/*.json'
|
||||
]
|
||||
},
|
||||
charcoal:{
|
||||
src:[
|
||||
'charcoal/*.json',
|
||||
'charcoal/core/config/*.json',
|
||||
'charcoal/core/config/**/*.json',
|
||||
'charcoal/modules/**/config/*.json',
|
||||
'charcoal/modules/**/config/**/*.json'
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// jshint: Validate javascript files with JSHint
|
||||
jshint:{
|
||||
gruntfile:{
|
||||
src:[
|
||||
// Self-test
|
||||
'Gruntfile.js'
|
||||
]
|
||||
},
|
||||
project:{
|
||||
src:[
|
||||
'modules/**/assets/scripts/src/*.js',
|
||||
'modules/**/assets/scripts/src/**/*.js'
|
||||
]
|
||||
},
|
||||
charcoal:{
|
||||
src:[
|
||||
'charcoal/core/assets/scripts/src/*.js',
|
||||
'charcoal/core/assets/scripts/src/**/*.js',
|
||||
'charcoal/modules/**/assets/scripts/src/*.js',
|
||||
'charcoal/modules/**/assets/scripts/src/**/*.js'
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// phplint: A simple wrapper around the php -l <filename> command.
|
||||
phplint:{
|
||||
options: {
|
||||
swapPath: '/tmp',
|
||||
phpArgs : {
|
||||
// add -f for fatal errors
|
||||
'-lf': null
|
||||
}
|
||||
},
|
||||
|
||||
project: [
|
||||
'modules/**/code/*.php',
|
||||
'modules/**/code/**/*.php',
|
||||
'modules/**/assets/templates/*.php',
|
||||
'modules/**/assets/templates/**/*.php'
|
||||
],
|
||||
charcoal: [
|
||||
'charcoal/core/code/*.php',
|
||||
'charcoal/core/code/**/*.php',
|
||||
'charcoal/modules/**/code/*.php',
|
||||
'charcoal/modules/**/code/**/*.php'
|
||||
]
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Load tasks
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-sass');
|
||||
grunt.loadNpmTasks('grunt-svgstore');
|
||||
grunt.loadNpmTasks('grunt-autoprefixer');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-notify');
|
||||
grunt.loadNpmTasks('grunt-csscomb');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||||
grunt.loadNpmTasks('grunt-svgmin');
|
||||
grunt.loadNpmTasks('grunt-contrib-imagemin');
|
||||
grunt.loadNpmTasks('grunt-jsonlint');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks("grunt-phplint");
|
||||
|
||||
|
||||
// Register tasks
|
||||
grunt.registerTask('default', ['watch', 'notify:watch']);
|
||||
grunt.registerTask('build', [
|
||||
'concat',
|
||||
'sass',
|
||||
'svgstore',
|
||||
'autoprefixer',
|
||||
'uglify',
|
||||
'cssmin',
|
||||
'svgmin',
|
||||
'imagemin'
|
||||
]);
|
||||
grunt.registerTask('c', [
|
||||
'csscomb'
|
||||
]);
|
||||
grunt.registerTask('wlint', [
|
||||
// Javasript
|
||||
'jshint',
|
||||
'jsonlint',
|
||||
'concat',
|
||||
|
||||
// PHP
|
||||
'phplint',
|
||||
|
||||
// Utilities
|
||||
'watch'
|
||||
]);
|
||||
|
||||
};
|
||||
0
www/modules/boilerplate/assets/emails/.gitkeep
Normal file
0
www/modules/boilerplate/assets/emails/.gitkeep
Normal file
0
www/modules/boilerplate/assets/fonts/.gitkeep
Normal file
0
www/modules/boilerplate/assets/fonts/.gitkeep
Normal file
0
www/modules/boilerplate/assets/images/dist/.gitkeep
vendored
Normal file
0
www/modules/boilerplate/assets/images/dist/.gitkeep
vendored
Normal file
BIN
www/modules/boilerplate/assets/images/favicon-152.png
Normal file
BIN
www/modules/boilerplate/assets/images/favicon-152.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
BIN
www/modules/boilerplate/assets/images/favicon-16.png
Normal file
BIN
www/modules/boilerplate/assets/images/favicon-16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
www/modules/boilerplate/assets/images/favicon-32.ico
Normal file
BIN
www/modules/boilerplate/assets/images/favicon-32.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
BIN
www/modules/boilerplate/assets/images/favicon-32.png
Normal file
BIN
www/modules/boilerplate/assets/images/favicon-32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
0
www/modules/boilerplate/assets/images/svgs/.gitkeep
Normal file
0
www/modules/boilerplate/assets/images/svgs/.gitkeep
Normal file
0
www/modules/boilerplate/assets/scripts/dist/main.js
vendored
Normal file
0
www/modules/boilerplate/assets/scripts/dist/main.js
vendored
Normal file
3
www/modules/boilerplate/assets/scripts/src/main.js
Normal file
3
www/modules/boilerplate/assets/scripts/src/main.js
Normal file
@@ -0,0 +1,3 @@
|
||||
/* ==========================================================================
|
||||
Main
|
||||
========================================================================== */
|
||||
4
www/modules/boilerplate/assets/scripts/src/vendors/jquery-1.11.2.min.js
vendored
Normal file
4
www/modules/boilerplate/assets/scripts/src/vendors/jquery-1.11.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
632
www/modules/boilerplate/assets/styles/dist/main.css
vendored
Normal file
632
www/modules/boilerplate/assets/styles/dist/main.css
vendored
Normal file
@@ -0,0 +1,632 @@
|
||||
/* ==========================================================================
|
||||
Main
|
||||
========================================================================== */
|
||||
/* ==========================================================================
|
||||
Imports
|
||||
========================================================================== */
|
||||
/* ==========================================================================
|
||||
Settings
|
||||
========================================================================== */
|
||||
/* Typography
|
||||
========================================================================== */
|
||||
/* Colors
|
||||
========================================================================== */
|
||||
/* Container
|
||||
========================================================================== */
|
||||
/* Spacings
|
||||
========================================================================== */
|
||||
/* Screen widths
|
||||
========================================================================== */
|
||||
/* Transitions
|
||||
========================================================================== */
|
||||
/* ==========================================================================
|
||||
Tools
|
||||
========================================================================== */
|
||||
/* Functions
|
||||
========================================================================== */
|
||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
/* 1 */
|
||||
-ms-text-size-adjust: 100%;
|
||||
/* 2 */
|
||||
-webkit-text-size-adjust: 100%;
|
||||
/* 2 */ }
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
body {
|
||||
margin: 0; }
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {
|
||||
display: block; }
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
audio, canvas, progress, video {
|
||||
display: inline-block;
|
||||
/* 1 */
|
||||
vertical-align: baseline;
|
||||
/* 2 */ }
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0; }
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
[hidden], template {
|
||||
display: none; }
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
a {
|
||||
background-color: transparent; }
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
a:active, a:hover {
|
||||
outline: 0; }
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted; }
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
b, strong {
|
||||
font-weight: bold; }
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
dfn {
|
||||
font-style: italic; }
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0; }
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
mark {
|
||||
color: #000000;
|
||||
background: #ffff00; }
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
small {
|
||||
font-size: 80%; }
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
sub, sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline; }
|
||||
|
||||
sup {
|
||||
top: -0.5em; }
|
||||
|
||||
sub {
|
||||
bottom: -0.25em; }
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
img {
|
||||
border: 0; }
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
svg:not(:root) {
|
||||
overflow: hidden; }
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
figure {
|
||||
margin: 1em 40px; }
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0; }
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
pre {
|
||||
overflow: auto; }
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
code, kbd, pre, samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em; }
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
button, input, optgroup, select, textarea {
|
||||
font: inherit;
|
||||
/* 2 */
|
||||
margin: 0;
|
||||
/* 3 */
|
||||
color: inherit;
|
||||
/* 1 */ }
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
button {
|
||||
overflow: visible; }
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
button, select {
|
||||
text-transform: none; }
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
button, html input[type="button"], input[type="reset"], input[type="submit"] {
|
||||
cursor: pointer;
|
||||
/* 3 */
|
||||
-webkit-appearance: button;
|
||||
/* 2 */ }
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
button[disabled], html input[disabled] {
|
||||
cursor: default; }
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
button::-moz-focus-inner, input::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0; }
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
input {
|
||||
line-height: normal; }
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
input[type="checkbox"], input[type="radio"] {
|
||||
box-sizing: border-box;
|
||||
/* 1 */
|
||||
padding: 0;
|
||||
/* 2 */ }
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto; }
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
input[type="search"] {
|
||||
/* 2 */
|
||||
box-sizing: content-box;
|
||||
-webkit-appearance: textfield;
|
||||
/* 1 */ }
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none; }
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
fieldset {
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
border: 1px solid #c0c0c0; }
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
legend {
|
||||
padding: 0;
|
||||
/* 2 */
|
||||
border: 0;
|
||||
/* 1 */ }
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
textarea {
|
||||
overflow: auto; }
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
optgroup {
|
||||
font-weight: bold; }
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse; }
|
||||
|
||||
td, th {
|
||||
padding: 0; }
|
||||
|
||||
/* ==========================================================================
|
||||
Generic Resets
|
||||
========================================================================== */
|
||||
html {
|
||||
box-sizing: border-box; }
|
||||
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit; }
|
||||
|
||||
audio, canvas, iframe, img, svg, video {
|
||||
vertical-align: middle; }
|
||||
|
||||
fieldset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0; }
|
||||
|
||||
textarea {
|
||||
resize: vertical; }
|
||||
|
||||
button {
|
||||
border: none;
|
||||
outline: none;
|
||||
background-color: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
Fonts
|
||||
========================================================================== */
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
font-size: 16px;
|
||||
line-height: 1.4;
|
||||
color: #222222; }
|
||||
|
||||
::-moz-selection {
|
||||
background: #3297fd;
|
||||
text-shadow: none; }
|
||||
|
||||
::selection {
|
||||
background: #3297fd;
|
||||
text-shadow: none; }
|
||||
|
||||
hr {
|
||||
display: block;
|
||||
height: 1px;
|
||||
margin: 1em 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border-top: 1px solid #cccccc; }
|
||||
|
||||
img, svg {
|
||||
max-width: 100%; }
|
||||
|
||||
a {
|
||||
color: #1a0dab; }
|
||||
a:hover {
|
||||
color: #13097c; }
|
||||
|
||||
/* ==========================================================================
|
||||
Headings
|
||||
========================================================================== */
|
||||
h1, .h1, .alpha {
|
||||
font-size: 32px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
h2, .h2, .beta {
|
||||
font-size: 24px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
h3, .h3, .gamma {
|
||||
font-size: 19px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
h4, .h4, .delta {
|
||||
font-size: 16px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
h5, .h5, .epsilon {
|
||||
font-size: 13px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
h6, .h6, .zeta {
|
||||
font-size: 11px;
|
||||
line-height: 1.2;
|
||||
margin-top: 0; }
|
||||
|
||||
/* ==========================================================================
|
||||
Forms | http://codepen.io/AntoineBoulanger/pen/uBJmi
|
||||
========================================================================== */
|
||||
/* Input
|
||||
========================================================================== */
|
||||
.input, .select__input, .checkbox__check {
|
||||
display: block;
|
||||
width: 100%;
|
||||
color: #000000;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
outline: none;
|
||||
background-color: #cccccc;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none; }
|
||||
|
||||
/* Select
|
||||
========================================================================== */
|
||||
.select {
|
||||
position: relative;
|
||||
display: block; }
|
||||
.select:after {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: block;
|
||||
width: 30px;
|
||||
height: 100%;
|
||||
content: "";
|
||||
pointer-events: none;
|
||||
background-color: #cccccc;
|
||||
background-image: url("../../images/select-arrow.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center; }
|
||||
|
||||
.select__input {
|
||||
padding-right: 30px; }
|
||||
.select__input::-ms-expand {
|
||||
display: none; }
|
||||
|
||||
/* Checkbox
|
||||
========================================================================== */
|
||||
.checkbox {
|
||||
display: inline-block; }
|
||||
|
||||
.checkbox__input {
|
||||
display: none; }
|
||||
.checkbox__input:checked + .checkbox__check:after {
|
||||
visibility: visible; }
|
||||
|
||||
.checkbox__check {
|
||||
display: inline-block;
|
||||
width: 25px;
|
||||
height: 25px; }
|
||||
.checkbox__check:after {
|
||||
display: block;
|
||||
visibility: hidden;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
content: "";
|
||||
background-image: url("../../images/check.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center; }
|
||||
|
||||
/* ==========================================================================
|
||||
Container
|
||||
========================================================================== */
|
||||
.container {
|
||||
position: relative;
|
||||
max-width: none0;
|
||||
margin: 0 auto;
|
||||
padding-right: 0;
|
||||
padding-left: 0; }
|
||||
|
||||
/* ==========================================================================
|
||||
Grid
|
||||
========================================================================== */
|
||||
.grid {
|
||||
font-size: 0;
|
||||
margin-left: -20px;
|
||||
letter-spacing: normal; }
|
||||
.grid.-full {
|
||||
margin-left: 0; }
|
||||
.grid.-list {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
list-style: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
Helpers
|
||||
========================================================================== */
|
||||
.vertical-center {
|
||||
height: 100%;
|
||||
text-align: center; }
|
||||
.vertical-center:before {
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
content: "";
|
||||
vertical-align: middle; }
|
||||
.vertical-center > * {
|
||||
display: inline-block;
|
||||
vertical-align: middle; }
|
||||
|
||||
/*
|
||||
* Hide visually and from screen readers:
|
||||
* http://juicystudio.com/article/screen-readers-display-none.php
|
||||
*/
|
||||
.hidden {
|
||||
display: none !important;
|
||||
visibility: hidden; }
|
||||
|
||||
/*
|
||||
* Hide only visually, but have it available for screen readers:
|
||||
* http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
|
||||
*/
|
||||
.visuallyhidden {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px; }
|
||||
|
||||
/*
|
||||
* Extends the .visuallyhidden class to allow the element
|
||||
* to be focusable when navigated to via the keyboard:
|
||||
* https://www.drupal.org/node/897638
|
||||
*/
|
||||
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus {
|
||||
clip: auto;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
position: static;
|
||||
width: auto; }
|
||||
|
||||
/*
|
||||
* Hide visually and from screen readers, but maintain layout
|
||||
*/
|
||||
.invisible {
|
||||
visibility: hidden; }
|
||||
|
||||
/*
|
||||
* Clearfix: contain floats
|
||||
*
|
||||
* For modern browsers
|
||||
* 1. The space content is one way to avoid an Opera bug when the
|
||||
* `contenteditable` attribute is included anywhere else in the document.
|
||||
* Otherwise it causes space to appear at the top and bottom of elements
|
||||
* that receive the `clearfix` class.
|
||||
* 2. The use of `table` rather than `block` is only necessary if using
|
||||
* `:before` to contain the top-margins of child elements.
|
||||
*/
|
||||
.clearfix:before, .clearfix:after {
|
||||
content: " ";
|
||||
/* 1 */
|
||||
display: table;
|
||||
/* 2 */ }
|
||||
|
||||
.clearfix:after {
|
||||
clear: both; }
|
||||
|
||||
/* ==========================================================================
|
||||
Trumps
|
||||
========================================================================== */
|
||||
.left {
|
||||
float: left !important; }
|
||||
|
||||
.right {
|
||||
float: right !important; }
|
||||
|
||||
.align-left {
|
||||
text-align: left !important; }
|
||||
|
||||
.align-right {
|
||||
text-align: right !important; }
|
||||
|
||||
.align-center {
|
||||
text-align: center !important; }
|
||||
|
||||
/* States
|
||||
========================================================================== */
|
||||
.is-visible {
|
||||
visibility: visible !important;
|
||||
opacity: 1 !important; }
|
||||
|
||||
.is-hidden {
|
||||
visibility: hidden !important;
|
||||
opacity: 0 !important; }
|
||||
48
www/modules/boilerplate/assets/styles/src/_imports.scss
Normal file
48
www/modules/boilerplate/assets/styles/src/_imports.scss
Normal file
@@ -0,0 +1,48 @@
|
||||
/* ==========================================================================
|
||||
Imports
|
||||
========================================================================== */
|
||||
|
||||
@import
|
||||
/* Settings
|
||||
========================================================================== */
|
||||
"settings/settings"
|
||||
|
||||
/* Tools
|
||||
========================================================================== */
|
||||
, "tools/jacket"
|
||||
, "tools/tools"
|
||||
|
||||
/* Generic
|
||||
========================================================================== */
|
||||
, "generic/normalize"
|
||||
, "generic/generic"
|
||||
|
||||
/* Base
|
||||
========================================================================== */
|
||||
, "base/fonts"
|
||||
, "base/base"
|
||||
, "base/headings"
|
||||
, "base/forms" //*
|
||||
|
||||
/* Objects
|
||||
========================================================================== */
|
||||
, "objects/container"
|
||||
, "objects/grid"
|
||||
|
||||
/* Vendors
|
||||
========================================================================== */
|
||||
// , "vendors/slick"
|
||||
|
||||
/* Components
|
||||
========================================================================== */
|
||||
// , "components/main-nav"
|
||||
|
||||
/* Templates
|
||||
========================================================================== */
|
||||
// , "templates/home"
|
||||
|
||||
/* Trumps
|
||||
========================================================================== */
|
||||
, "trumps/helpers"
|
||||
, "trumps/trumps"
|
||||
;
|
||||
40
www/modules/boilerplate/assets/styles/src/base/_base.scss
Normal file
40
www/modules/boilerplate/assets/styles/src/base/_base.scss
Normal file
@@ -0,0 +1,40 @@
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
html {
|
||||
font-family: $font-family;
|
||||
font-size: $font-size;
|
||||
line-height: $line-height;
|
||||
|
||||
color: $color;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: $selection;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
hr {
|
||||
display: block;
|
||||
|
||||
height: 1px;
|
||||
margin: 1em 0;
|
||||
padding: 0;
|
||||
|
||||
border: 0;
|
||||
border-top: 1px solid #cccccc;
|
||||
}
|
||||
|
||||
img, svg {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $link;
|
||||
|
||||
&:hover {
|
||||
color: $link-hover;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/* ==========================================================================
|
||||
Fonts
|
||||
========================================================================== */
|
||||
102
www/modules/boilerplate/assets/styles/src/base/_forms.scss
Normal file
102
www/modules/boilerplate/assets/styles/src/base/_forms.scss
Normal file
@@ -0,0 +1,102 @@
|
||||
/* ==========================================================================
|
||||
Forms | http://codepen.io/AntoineBoulanger/pen/uBJmi
|
||||
========================================================================== */
|
||||
|
||||
/* Input
|
||||
========================================================================== */
|
||||
.input {
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
|
||||
color: $black;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
outline: none;
|
||||
background-color: #cccccc;
|
||||
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
/* Select
|
||||
========================================================================== */
|
||||
// Wrapper
|
||||
.select {
|
||||
position: relative;
|
||||
|
||||
display: block;
|
||||
// Select arrow
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 30px;
|
||||
height: 100%;
|
||||
|
||||
content: "";
|
||||
pointer-events: none;
|
||||
|
||||
background-color: #cccccc;
|
||||
background-image: url("../../images/select-arrow.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
// Select
|
||||
.select__input {
|
||||
padding-right: 30px;
|
||||
|
||||
@extend .input;
|
||||
|
||||
&::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Checkbox
|
||||
========================================================================== */
|
||||
// Wrapper
|
||||
.checkbox {
|
||||
display: inline-block;
|
||||
}
|
||||
// Real input hidden
|
||||
.checkbox__input {
|
||||
display: none;
|
||||
|
||||
&:checked {
|
||||
+ .checkbox__check {
|
||||
&:after {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Fake input visible
|
||||
.checkbox__check {
|
||||
display: inline-block;
|
||||
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
|
||||
@extend .input;
|
||||
|
||||
&:after {
|
||||
display: block;
|
||||
visibility: hidden;
|
||||
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
|
||||
content: "";
|
||||
|
||||
background-image: url("../../images/check.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/* ==========================================================================
|
||||
Headings
|
||||
========================================================================== */
|
||||
h1, .h1, .alpha {
|
||||
font-size: $heading1;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2, .h2, .beta {
|
||||
font-size: $heading2;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h3, .h3, .gamma {
|
||||
font-size: $heading3;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h4, .h4, .delta {
|
||||
font-size: $heading4;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h5, .h5, .epsilon {
|
||||
font-size: $heading5;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h6, .h6, .zeta {
|
||||
font-size: $heading6;
|
||||
line-height: $heading-line-height;
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/* ==========================================================================
|
||||
Generic Resets
|
||||
========================================================================== */
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
iframe,
|
||||
img,
|
||||
svg,
|
||||
video {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
border: 0;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
button {
|
||||
border: none;
|
||||
outline: none;
|
||||
background-color: none;
|
||||
}
|
||||
@@ -0,0 +1,440 @@
|
||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
color: #000000;
|
||||
background: #ffff00;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
|
||||
position: relative;
|
||||
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font: inherit; /* 2 */
|
||||
|
||||
margin: 0; /* 3 */
|
||||
|
||||
color: inherit; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
cursor: pointer; /* 3 */
|
||||
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
padding: 0;
|
||||
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
|
||||
border: 1px solid #c0c0c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
padding: 0; /* 2 */
|
||||
|
||||
border: 0; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
6
www/modules/boilerplate/assets/styles/src/main.scss
Normal file
6
www/modules/boilerplate/assets/styles/src/main.scss
Normal file
@@ -0,0 +1,6 @@
|
||||
/* ==========================================================================
|
||||
Main
|
||||
========================================================================== */
|
||||
$jacket: vanilla;
|
||||
|
||||
@import "_imports.scss";
|
||||
@@ -0,0 +1,11 @@
|
||||
/* ==========================================================================
|
||||
Container
|
||||
========================================================================== */
|
||||
.container {
|
||||
position: relative;
|
||||
|
||||
max-width: $max-width + ($padding * 2);
|
||||
margin: 0 auto;
|
||||
padding-right: $padding;
|
||||
padding-left: $padding;
|
||||
}
|
||||
150
www/modules/boilerplate/assets/styles/src/objects/_grid.scss
Normal file
150
www/modules/boilerplate/assets/styles/src/objects/_grid.scss
Normal file
@@ -0,0 +1,150 @@
|
||||
/* ==========================================================================
|
||||
Grid
|
||||
========================================================================== */
|
||||
.grid, %grid {
|
||||
font-size: 0;
|
||||
|
||||
margin-left: -$gutter;
|
||||
|
||||
letter-spacing: normal;
|
||||
|
||||
&.-full, &%-full {
|
||||
margin-left: 0;
|
||||
|
||||
> %grid__item {
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.-list, &%-list {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
|
||||
list-style: none;
|
||||
}
|
||||
}
|
||||
|
||||
%grid__item {
|
||||
font-size: $font-size;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
width: 100%;
|
||||
margin-bottom: $gutter;
|
||||
padding-left: $gutter;
|
||||
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
%whole {
|
||||
width: 100%;
|
||||
|
||||
@extend %grid__item;
|
||||
}
|
||||
|
||||
%half {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-small) {
|
||||
width: span(1/2);
|
||||
}
|
||||
}
|
||||
|
||||
%third {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-medium) {
|
||||
width: span(1/3);
|
||||
}
|
||||
}
|
||||
|
||||
%two-thirds {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-medium) {
|
||||
width: span(2/3);
|
||||
}
|
||||
}
|
||||
|
||||
%quarter {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-medium) {
|
||||
width: span(1/4);
|
||||
}
|
||||
}
|
||||
|
||||
%two-quarters {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-medium) {
|
||||
width: span(2/4);
|
||||
}
|
||||
}
|
||||
|
||||
%three-quarters {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-medium) {
|
||||
width: span(3/4);
|
||||
}
|
||||
}
|
||||
|
||||
%fifth {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-large) {
|
||||
width: span(1/5);
|
||||
}
|
||||
}
|
||||
|
||||
%two-fifths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-large) {
|
||||
width: span(2/5);
|
||||
}
|
||||
}
|
||||
|
||||
%three-fifths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-large) {
|
||||
width: span(3/5);
|
||||
}
|
||||
}
|
||||
|
||||
%four-fifths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-large) {
|
||||
width: span(4/5);
|
||||
}
|
||||
}
|
||||
|
||||
%sixth {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-huge) {
|
||||
width: span(1/6);
|
||||
}
|
||||
}
|
||||
|
||||
%two-sixths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-huge) {
|
||||
width: span(2/6);
|
||||
}
|
||||
}
|
||||
|
||||
%three-sixths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-huge) {
|
||||
width: span(3/6);
|
||||
}
|
||||
}
|
||||
|
||||
%four-sixths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-huge) {
|
||||
width: span(4/6);
|
||||
}
|
||||
}
|
||||
|
||||
%five-sixths {
|
||||
@extend %grid__item;
|
||||
@media (min-width: $from-huge) {
|
||||
width: span(5/6);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/* ==========================================================================
|
||||
Settings
|
||||
========================================================================== */
|
||||
|
||||
/* Typography
|
||||
========================================================================== */
|
||||
// Base
|
||||
$font-size: 16px;
|
||||
$line-height: 1.4;
|
||||
$font-family: sans-serif;
|
||||
$color: #222222;
|
||||
// Headings
|
||||
$heading1: 32px; // .alpha
|
||||
$heading2: 24px; // .beta
|
||||
$heading3: 19px; // .gamma
|
||||
$heading4: 16px; // .delta
|
||||
$heading5: 13px; // .epsilon
|
||||
$heading6: 11px; // .zeta
|
||||
$heading-line-height: 1.2;
|
||||
// Weights
|
||||
$light: 300;
|
||||
$normal: 400;
|
||||
$medium: 500;
|
||||
$bold: 700;
|
||||
|
||||
/* Colors
|
||||
========================================================================== */
|
||||
// Generic
|
||||
$black: #000000;
|
||||
$white: #ffffff;
|
||||
// Specific
|
||||
$selection: #3297fd;
|
||||
$link: #1a0dab;
|
||||
$link-hover: darken(#1a0dab, 10%);
|
||||
|
||||
/* Container
|
||||
========================================================================== */
|
||||
$max-width: none;
|
||||
$padding: 0;
|
||||
|
||||
/* Spacings
|
||||
========================================================================== */
|
||||
$gutter: 20px;
|
||||
$margin: 40px;
|
||||
|
||||
/* Screen widths
|
||||
========================================================================== */
|
||||
$from-tiny: 414px;
|
||||
$to-tiny: $from-tiny - 1;
|
||||
$from-small: 768px;
|
||||
$to-small: $from-small - 1;
|
||||
$from-medium: 1024px;
|
||||
$to-medium: $from-medium - 1;
|
||||
$from-large: 1280px;
|
||||
$to-large: $from-large - 1;
|
||||
$from-huge: 1680px;
|
||||
$to-huge: $from-huge - 1;
|
||||
|
||||
/* Transitions
|
||||
========================================================================== */
|
||||
$speed: 0.3s;
|
||||
$easing: linear;
|
||||
112
www/modules/boilerplate/assets/styles/src/tools/_jacket.scss
Normal file
112
www/modules/boilerplate/assets/styles/src/tools/_jacket.scss
Normal file
@@ -0,0 +1,112 @@
|
||||
///////////////////////////////////////////////////////////
|
||||
// Jacket
|
||||
// Conditional Styles with Sass. Dress you CSS appropriately.
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// Jacket is a Compass component that prints and hides styles based on
|
||||
// context variables you set in your stylesheet. Write and maintain a master
|
||||
// stylesheet, then output custom tailored stylesheets for modern and legacy
|
||||
// browsers, site and app builds, or any other context you can think of.
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Settings variables
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// Default list of jacket contexts.
|
||||
$jacket: null !default;
|
||||
|
||||
// Private variable used by jacket-context().
|
||||
$jckt-context: null;
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Jacket mixin
|
||||
// Takes a list of jacket contexts.
|
||||
// Outputs a block of styles if a context is set.
|
||||
///////////////////////////////////////////////////////////
|
||||
@mixin jacket($contexts...) {
|
||||
|
||||
$naked: false;
|
||||
$selectors: ();
|
||||
$filtered: ();
|
||||
$selector-string: '';
|
||||
|
||||
// Set the global context variable.
|
||||
$jckt-context: $contexts;
|
||||
|
||||
// If jacket is a single context and selector list, encapsulate.
|
||||
@if list-separator($jacket) == 'space' {
|
||||
$jacket: $jacket, null;
|
||||
}
|
||||
|
||||
// Test if a jacket context and jacket value match.
|
||||
@each $item in $jacket {
|
||||
@each $context in $contexts {
|
||||
@if index($context, nth($item, 1)) {
|
||||
|
||||
// Gather wrapping selectors.
|
||||
@if length($item) == 1 {
|
||||
$naked: true;
|
||||
}
|
||||
@if length($item) == 2 {
|
||||
$selectors: append($selectors, nth($item, 2) + ' &');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Filter out duplicate selectors.
|
||||
// If reject() is added to Sass we can remove the $filtered holder variable.
|
||||
@each $selector in $selectors {
|
||||
@if index($filtered, $selector) == false {
|
||||
$filtered: append($filtered, $selector);
|
||||
}
|
||||
}
|
||||
|
||||
// Build the selector string.
|
||||
@each $selector in $filtered {
|
||||
@if $selector-string != '' {
|
||||
$selector-string: $selector-string + ", ";
|
||||
}
|
||||
$selector-string: $selector-string + $selector;
|
||||
}
|
||||
|
||||
// If the weather is right, output that jacketed code!
|
||||
@if $naked {
|
||||
@content;
|
||||
}
|
||||
@if $selector-string != '' {
|
||||
#{$selector-string} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Jacket function
|
||||
// Takes a list of jacket contexts.
|
||||
// Outputs a value if a context is set.
|
||||
///////////////////////////////////////////////////////////
|
||||
@function jacket($value, $contexts...) {
|
||||
|
||||
@each $item in $jacket {
|
||||
@each $context in $contexts {
|
||||
@if index($context, nth($item, 1)) {
|
||||
// If the weather is right, return the value!
|
||||
@return $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Else return null. If null is the only value for a selector, the selector
|
||||
// will not be printed.
|
||||
@return null;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Jacket Context function
|
||||
// Takes a jacket context value. Use when code inside a jacket
|
||||
// needs to know if a specific jacket context is set.
|
||||
///////////////////////////////////////////////////////////
|
||||
@function jacket-context($context) {
|
||||
@return if(index($jckt-context, $context), true, false);
|
||||
}
|
||||
17
www/modules/boilerplate/assets/styles/src/tools/_tools.scss
Normal file
17
www/modules/boilerplate/assets/styles/src/tools/_tools.scss
Normal file
@@ -0,0 +1,17 @@
|
||||
/* ==========================================================================
|
||||
Tools
|
||||
========================================================================== */
|
||||
|
||||
/* Functions
|
||||
========================================================================== */
|
||||
@function em($px, $base: $font-size) {
|
||||
@return ($px / $base) * 1em;
|
||||
}
|
||||
|
||||
@function rem($px, $base: $font-size) {
|
||||
@return ($px / $base) * 1rem;
|
||||
}
|
||||
|
||||
@function span($fraction) {
|
||||
@return $fraction * 100%;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
/* ==========================================================================
|
||||
Helpers
|
||||
========================================================================== */
|
||||
.vertical-center {
|
||||
height: 100%;
|
||||
|
||||
text-align: center;
|
||||
|
||||
&:before {
|
||||
display: inline-block;
|
||||
|
||||
height: 100%;
|
||||
|
||||
content: "";
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
> * {
|
||||
display: inline-block;
|
||||
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide visually and from screen readers:
|
||||
* http://juicystudio.com/article/screen-readers-display-none.php
|
||||
*/
|
||||
|
||||
.hidden {
|
||||
display: none !important;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide only visually, but have it available for screen readers:
|
||||
* http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
|
||||
*/
|
||||
|
||||
.visuallyhidden {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extends the .visuallyhidden class to allow the element
|
||||
* to be focusable when navigated to via the keyboard:
|
||||
* https://www.drupal.org/node/897638
|
||||
*/
|
||||
|
||||
.visuallyhidden.focusable:active,
|
||||
.visuallyhidden.focusable:focus {
|
||||
clip: auto;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
position: static;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide visually and from screen readers, but maintain layout
|
||||
*/
|
||||
|
||||
.invisible {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clearfix: contain floats
|
||||
*
|
||||
* For modern browsers
|
||||
* 1. The space content is one way to avoid an Opera bug when the
|
||||
* `contenteditable` attribute is included anywhere else in the document.
|
||||
* Otherwise it causes space to appear at the top and bottom of elements
|
||||
* that receive the `clearfix` class.
|
||||
* 2. The use of `table` rather than `block` is only necessary if using
|
||||
* `:before` to contain the top-margins of child elements.
|
||||
*/
|
||||
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " "; /* 1 */
|
||||
display: table; /* 2 */
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/* ==========================================================================
|
||||
Trumps
|
||||
========================================================================== */
|
||||
.left {
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right !important;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
/* States
|
||||
========================================================================== */
|
||||
.is-visible {
|
||||
visibility: visible !important;
|
||||
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.is-hidden {
|
||||
visibility: hidden !important;
|
||||
|
||||
opacity: 0 !important;
|
||||
}
|
||||
0
www/modules/boilerplate/assets/styles/src/vendors/.gitkeep
vendored
Normal file
0
www/modules/boilerplate/assets/styles/src/vendors/.gitkeep
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
/**
|
||||
* Boilerplate Action - Contact
|
||||
*
|
||||
* This action handles the "contact" form from the contact template
|
||||
*
|
||||
* It validates a CSRF token and create a CMS_Contact object from the POST data.
|
||||
*
|
||||
* ## Expected POST values:
|
||||
* - csrf-token, string - A CSRF token (Charcoal::token() with ident "boilerplate.contact")
|
||||
* - lastname
|
||||
* - firstname
|
||||
* - phone
|
||||
* - email
|
||||
* - subject
|
||||
* - message
|
||||
* - lang
|
||||
*
|
||||
* ## Optional POST values
|
||||
* - referer, string - The URL to go back to
|
||||
*
|
||||
* ## CMS_Contact
|
||||
* Contacts can be seen in the charcoal backend at url:
|
||||
* [/admin/object-list-dashboard?obj_type=CMS_Contact]
|
||||
*
|
||||
* ## CMS_Contact_Category
|
||||
* This action is bound to the CMS_Contact_Category object with id=1. This category:
|
||||
* - Send confirmation email automatically
|
||||
* - With email template boilerplate.contact-confirmation
|
||||
* - May have CC and BCC to administratotors
|
||||
*
|
||||
* This object can be seen int he charcoal backend at url:
|
||||
* [/admin/object-edit-dashboard?obj_type=CMS_Contact_Category&obj_id=1]
|
||||
*
|
||||
* ## TODOs
|
||||
* - Support ajax request / json response
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Action
|
||||
* @subpackage Actions
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2012-08-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-07-01
|
||||
*/
|
||||
|
||||
|
||||
// Get referer
|
||||
$referer = '';
|
||||
if(isset($_POST['referer'])) {
|
||||
$referer = filter_input(INPUT_POST, 'referer', FILTER_SANITIZE_STRING);
|
||||
}
|
||||
else if(isset($_SERVER['HTTP_REFERER'])) {
|
||||
$referer = $_SERVER['HTTP_REFERER'];
|
||||
}
|
||||
else {
|
||||
// None set: Use contact form
|
||||
$referer = Charcoal::obj('CMS_Section')->load_from('ident', 'contact')->url();
|
||||
}
|
||||
|
||||
function _header_error($msg='')
|
||||
{
|
||||
global $referer;
|
||||
|
||||
if(headers_sent()) {
|
||||
// Error, cant send headers. Should never happened
|
||||
die();
|
||||
}
|
||||
header('Location: '.$referer.'?contact-success=0&msg='.urlencode($msg));
|
||||
die();
|
||||
|
||||
}
|
||||
|
||||
function _header_success($msg='')
|
||||
{
|
||||
global $referer;
|
||||
|
||||
if(headers_sent()) {
|
||||
// Error, cant send headers. Should never happened
|
||||
die();
|
||||
}
|
||||
header('Location: '.$referer.'?contact-success=1&msg='.urlencode($msg));
|
||||
die();
|
||||
die();
|
||||
}
|
||||
|
||||
// Validate CSRF token
|
||||
$csrf_token = filter_input(INPUT_POST, 'csrf-token', FILTER_SANITIZE_STRING);
|
||||
if(!Charcoal::token_validate($csrf_token, 'boilerplate.contact')) {
|
||||
Charcoal::feedback('error', 'send_contact', _t("Your session has expired. Please try again"));
|
||||
_headers_error();
|
||||
}
|
||||
|
||||
// Create and save the Contact object
|
||||
$contact = Charcoal::obj('CMS_Contact');
|
||||
$contact->from_flat_data($_POST);
|
||||
// Hardcoded to the general contact category
|
||||
$contact->category = 1;
|
||||
|
||||
$validations = $contact->validate();
|
||||
if(!$validations){
|
||||
//pre($contact);
|
||||
// Saving the contact sends the email confirmatino automatically, according to the category
|
||||
$contact_id = $contact->save();
|
||||
if($contact_id) {
|
||||
_header_success()_t("Successful.");
|
||||
}
|
||||
else {
|
||||
_headers_error(_t("Error saving contact"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
$msg = '';
|
||||
foreach($validations as $property=>$messages){
|
||||
foreach($messages as $m){
|
||||
$msg .= $m.'<br />';
|
||||
}
|
||||
}
|
||||
|
||||
_headers_error($msg);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Contact form section
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Templates
|
||||
* @subpackage Templates
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
?>
|
||||
{{>boilerplate.inc.header}}
|
||||
|
||||
<section class="contact {{section.ident}}">
|
||||
|
||||
<h1>{{section.p.title}}</h1>
|
||||
<h2>{{section.p.subtitle}}</h2>
|
||||
|
||||
<div class="section-summary">
|
||||
{{section.p.summary.display}}
|
||||
</div>
|
||||
|
||||
<div class="section-description">
|
||||
{{section.p.content.display}}
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
|
||||
</form>
|
||||
|
||||
</section>
|
||||
|
||||
{{>boilerplate.inc.footer}}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Templates
|
||||
* @subpackage Templates
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
?>
|
||||
{{>boilerplate.inc.header}}
|
||||
|
||||
<section class="content {{section.ident}}">
|
||||
|
||||
<h1>{{section.p.title}}</h1>
|
||||
<h2>{{section.p.subtitle}}</h2>
|
||||
|
||||
<div class="section-summary">
|
||||
{{section.p.summary.display}}
|
||||
</div>
|
||||
|
||||
<div class="section-description">
|
||||
{{section.p.content.display}}
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
{{>boilerplate.inc.footer}}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Templates
|
||||
* @subpackage Templates
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
?>
|
||||
{{>boilerplate.inc.header}}
|
||||
|
||||
<section class="home {{section.ident}}">
|
||||
|
||||
<h1>{{section.p.title}}</h1>
|
||||
|
||||
</section>
|
||||
|
||||
{{>boilerplate.inc.footer}}
|
||||
@@ -0,0 +1,5 @@
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||
<script>window.jQuery || document.write('<script src="modules/{{module}}/assets/scripts/src/vendors/jquery-1.11.2.min.js"><\/script>')</script>
|
||||
<!--<script src="modules/{{module}}/assets/scripts/dist/main.js"></script>-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,38 @@
|
||||
<!doctype html>
|
||||
<html lang="{{lang}}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base href="{{URL}}">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="theme-color" content="#f2f2f2">
|
||||
<title>{{meta_title}}</title>
|
||||
|
||||
<link rel="icon" type="image/png" href="{{#assets.images}}favicon-16.png{{/assets.images}}" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="{{#assets.images}}favicon-32.png{{/assets.images}}" sizes="32x32">
|
||||
<link rel="apple-touch-icon-precomposed" href="{{#assets.images}}favicon-152.png{{/assets.images}}">
|
||||
<!--[if IE]><link rel="shortcut icon" href="assets/images/favicon-32.ico"><![endif]-->
|
||||
|
||||
<link rel="stylesheet" href="modules/{{module}}/assets/styles/dist/main.css">
|
||||
|
||||
<meta name="description" content="{{meta_description}}">
|
||||
{{opengraph_tags}}
|
||||
|
||||
{{! Only include analytics if it is set in the configuration}}
|
||||
{{#cfg.google_analytics}}
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', '{{cfg.google_analytics}}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
{{/cfg.google_analytics}}
|
||||
|
||||
{{!A final chance to have custom headers tags (like styles or scripts) in the controllers}}
|
||||
{{extra_header_content}}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
181
www/modules/boilerplate/code/boilerplate.config.php
Normal file
181
www/modules/boilerplate/code/boilerplate.config.php
Normal file
@@ -0,0 +1,181 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Boilerplate configuration
|
||||
*
|
||||
* The latest (current) object can always be used by calling:
|
||||
* ```php
|
||||
* $cfg = \Boilerplate\Config::get_latest();
|
||||
* ```
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Boilerplate_Config extends \Charcoal_Object
|
||||
{
|
||||
/**
|
||||
* Google Analytics code
|
||||
* @var string $google_analytics
|
||||
* @see Property_String
|
||||
*/
|
||||
public $google_analytics;
|
||||
|
||||
/**
|
||||
* Default section
|
||||
* The section to load when reaching the default base URL.
|
||||
* Also, usually the section to load when clicking on the main link / logo
|
||||
* @var mixed $default_section
|
||||
* @see Property_Object
|
||||
* @see CMS_Section
|
||||
*/
|
||||
public $default_section;
|
||||
/**
|
||||
* Default lang
|
||||
* @var string $default_lang
|
||||
* @see Property_Lang
|
||||
*/
|
||||
public $default_lang;
|
||||
|
||||
/**
|
||||
* URL of the related facebook page
|
||||
* @var string $social_facebook_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_facebook_url;
|
||||
/**
|
||||
* URL of the related twitter account
|
||||
* @var string $social_twitter_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_twitter_url;
|
||||
/**
|
||||
* URL of the related google+ page
|
||||
* @var string $social_facebook_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_google_url;
|
||||
/**
|
||||
* URL of the related instagram page
|
||||
* @var string $social_instagram_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_instagram_url;
|
||||
/**
|
||||
* URL of the related flickr page
|
||||
* @var string $social_flickr_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_flickr_url;
|
||||
/**
|
||||
* URL of the related youtube page
|
||||
* @var string $social_youtube_url
|
||||
* @see Property_Url
|
||||
*/
|
||||
public $social_youtube_url;
|
||||
|
||||
/**
|
||||
* Default title, if none is specified
|
||||
* - l10n: true
|
||||
* @var mixed $meta_default_title
|
||||
* @see Property_String
|
||||
*/
|
||||
public $meta_default_title;
|
||||
/**
|
||||
* Default title, if none is specified
|
||||
* - l10n: true
|
||||
* @var mixed $meta_default_prefix
|
||||
* @see Property_String
|
||||
*/
|
||||
public $meta_title_prefix;
|
||||
/**
|
||||
* Default title, if none is specified
|
||||
* - l10n: true
|
||||
* @var mixed $meta_default_suffix
|
||||
* @see Property_String
|
||||
*/
|
||||
public $meta_title_suffix;
|
||||
/**
|
||||
* Default title, if none is specified
|
||||
* - l10n: true
|
||||
* @var mixed $meta_default_description
|
||||
* @see Property_Text
|
||||
*/
|
||||
public $meta_default_description;
|
||||
/**
|
||||
* Default title, if none is specified
|
||||
* - l10n: true
|
||||
* - upload_path: "uploads/config/meta_image/"
|
||||
* @var mixed $meta_default_image
|
||||
* @see Property_Image
|
||||
*/
|
||||
public $meta_default_image;
|
||||
/**
|
||||
* Default meta-keywords, if none is specified
|
||||
* - l10n: true
|
||||
* - multiple: true
|
||||
* @var mixed $meta_default_keywords
|
||||
* @see Property_String
|
||||
*/
|
||||
public $meta_default_keywords;
|
||||
|
||||
/**
|
||||
* Static getter of the latest config
|
||||
*
|
||||
* This is the preferred way of loading the Configuration object.
|
||||
*
|
||||
* It will only be loaded 1 time from the configuration, otherwie, it will be stored
|
||||
* in a static variable.
|
||||
*
|
||||
* @return static Corim_Config
|
||||
* @todo Use APC instead of static, if available
|
||||
*/
|
||||
static public function get_latest()
|
||||
{
|
||||
static $_cached;
|
||||
|
||||
$cache_key = 'latest_boilerplate_config';
|
||||
|
||||
if($_cached instanceof self) {
|
||||
// Load from static if possible
|
||||
return $_cached;
|
||||
}
|
||||
else {
|
||||
// Load from DB otherwise
|
||||
$_cached = Charcoal::obj( __CLASS__ );
|
||||
$_cached->load_latest();
|
||||
return $_cached;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Corim_Config
|
||||
*/
|
||||
public function load_latest()
|
||||
{
|
||||
// Hardcoded to ID 1
|
||||
$this->load_key('id', 1);
|
||||
|
||||
// Chainable
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
87
www/modules/boilerplate/code/boilerplate.module.php
Normal file
87
www/modules/boilerplate/code/boilerplate.module.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* The Boilerplate Module class
|
||||
*
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Boilerplate_Module extends Charcoal_Module
|
||||
{
|
||||
/**
|
||||
* Module initialisation
|
||||
*
|
||||
* This function should act as both the initialization of the module and the front-page main controller.
|
||||
*
|
||||
* ## Options
|
||||
* - default_action
|
||||
* - default_section
|
||||
* - default_lang
|
||||
*
|
||||
* @param array $opts
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
static public function init($opts=null)
|
||||
{
|
||||
// Make sure a session is started at all time. For tokens, some cache, user data, etc.
|
||||
if (!session_id()) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// Get the latest configuration
|
||||
$default_action = isset($opts['default_action']) ? $opts['default_action'] : '';
|
||||
$default_section_id = isset($opts['default_section']) ? $opts['default_section'] : 0;
|
||||
$default_lang = isset($opts['default_lang']) ? $opts['default_lang'] : 'fr';
|
||||
|
||||
// Load the action or section from the $_GET
|
||||
$action = isset($_GET['action']) ? filter_input(INPUT_GET, 'action', FILTER_SANITIZE_STRING) : $default_action;
|
||||
$section_id = isset($_GET['s']) ? filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING) : $default_section_id;
|
||||
|
||||
// Set up the language and the required CSV file
|
||||
$lang = isset($_GET['lang']) ? filter_input(INPUT_GET, 'lang', FILTER_SANITIZE_STRING) : $default_lang;
|
||||
$l = Charcoal_L10n::get();
|
||||
$l->set_lang($lang);
|
||||
$l->add_resource_csv('boilerplate', $lang);
|
||||
|
||||
if($section_id) {
|
||||
// By section
|
||||
$section_loader = new Charcoal\Object_Loader('CMS_Section');
|
||||
|
||||
$section = $section_loader->{$section_id};
|
||||
pre($section);
|
||||
if($section->template) {
|
||||
// What to do?
|
||||
}
|
||||
|
||||
echo Charcoal_Template::get($section->template)->render();
|
||||
}
|
||||
else if($action) {
|
||||
// By action
|
||||
\Charcoal::exec($action, $_REQUEST);
|
||||
}
|
||||
else {
|
||||
// By nothing (404 page not found). This should never happen
|
||||
die('404');
|
||||
}
|
||||
}
|
||||
}
|
||||
211
www/modules/boilerplate/code/boilerplate.template.controller.php
Normal file
211
www/modules/boilerplate/code/boilerplate.template.controller.php
Normal file
@@ -0,0 +1,211 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Objects
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Boilerplate_Template_Controller extends Charcoal\Template_Controller
|
||||
{
|
||||
/**
|
||||
* Keep a copy of the current section
|
||||
*/
|
||||
private $_section;
|
||||
/**
|
||||
* Keep a copy of the Section Object loader
|
||||
* @var \Charcoal\Object_Loader
|
||||
*/
|
||||
private $_sections_loader;
|
||||
/**
|
||||
* Keep a copy of the Template loader
|
||||
* @var \Charcoal\Template_Loader
|
||||
*/
|
||||
private $_templates_loader;
|
||||
/**
|
||||
* Keep a copy of the Widget Loader
|
||||
* @var \Charcoal\Widget_Loader
|
||||
*/
|
||||
private $_widgets_loader;
|
||||
|
||||
/**
|
||||
* Get the current project's main module
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function module()
|
||||
{
|
||||
return 'boilerplate';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current
|
||||
* (Previously, this would have been `Charcoal::$vars['section']`)
|
||||
*
|
||||
* @return CMS_Section
|
||||
*/
|
||||
public function section()
|
||||
{
|
||||
if(isset($this->_section)) {
|
||||
return $this->_section;
|
||||
}
|
||||
|
||||
$section_id = isset($_GET['s']) ? filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING) : '';
|
||||
$section = \Charcoal::obj('CMS_Section');
|
||||
if($section_id) {
|
||||
$section->load($section_id);
|
||||
}
|
||||
$this->_section = $section;
|
||||
return $section;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a `CMS_Section` Object Loader
|
||||
*
|
||||
* - Use "ident" as a key, so it can be called with {{sections.ident}}
|
||||
* - Cache the result, so this almost never touches the DB.
|
||||
*
|
||||
* ## The `\Charcoal\Object_Loader` object
|
||||
* Read the documentation on `\Charcoal\Object_Loader` for more details.
|
||||
* In short, it allows to call the objects with `->texts()->ident;` // `{{sections.ident}}` to return (and load on-the-fly, if required)
|
||||
* the `CMS_Text` object with the `ident` "ident".
|
||||
*
|
||||
* @return \Charcoal\Object_Loader
|
||||
* @see CMS_Section
|
||||
*/
|
||||
public function sections()
|
||||
{
|
||||
if(!$this->_sections_loader) {
|
||||
// Load the object, if it was not.
|
||||
$this->_sections_loader = new \Charcoal\Object_Loader('CMS_Section', 'ident', 'cache');
|
||||
}
|
||||
|
||||
return $this->_sections_loader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a "CMS_Text" Object Loader
|
||||
* - Use "ident" as a key, so it can be called with {{sections.ident}}
|
||||
* - Cache the result, so this almost never touches the DB.
|
||||
*
|
||||
* ## The `\Charcoal\Object_Loader` object
|
||||
* Read the documentation on `\Charcoal\Object_Loader` for more details.
|
||||
* In short, it allows to call the objects with `->sections()->ident;` to return (and load on-the-fly, if required)
|
||||
* the `CMS_Section` object with the `ident` "ident".
|
||||
*
|
||||
* @return \Charcoal\Object_Loader
|
||||
* @see CMS_Text
|
||||
*/
|
||||
public function texts()
|
||||
{
|
||||
if(!$this->_texts_loader) {
|
||||
// Load the (text loader) object, if it was not.
|
||||
$this->_texts_loader = new \Charcoal\Object_Loader('CMS_Text', 'ident', 'cache');
|
||||
}
|
||||
|
||||
return $this->_texts_loader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest Config instance from DB / cache
|
||||
*
|
||||
* @return Config
|
||||
*/
|
||||
public function cfg()
|
||||
{
|
||||
return Config::get_latest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the base URL
|
||||
* Previously, this would have been `Charcoal::$config['URL']` (which still works)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function URL()
|
||||
{
|
||||
return \Charcoal::$config['URL'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test templating.
|
||||
*
|
||||
* Allow to hide content under dev_mode
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function dev_mode()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current language (2-character / ISO-639-1)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function lang()
|
||||
{
|
||||
return _l();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assets getters
|
||||
*
|
||||
* This method returns an array of lambda functions, which in turn takes the argument
|
||||
*
|
||||
* ## Using with mustache
|
||||
* In short, this allows to get an asset with the following mustache tag:
|
||||
* - `{{#assets.images}}test.png{{/assets.images}}
|
||||
*
|
||||
* ## Asset types
|
||||
* - images
|
||||
* - styles
|
||||
* - scripts
|
||||
* - fonts
|
||||
* - files
|
||||
* Read the documentation on \Charcoal\Asset for more details on how assets are loaded relative to the filesystem.
|
||||
*
|
||||
* @return array
|
||||
* @see \Charcoal\Asset
|
||||
*/
|
||||
public function assets($asset_mode='url')
|
||||
{
|
||||
$ret = [
|
||||
'images' => function($txt) use ($asset_mode) {
|
||||
return new \Charcoal\Asset('images', $txt, $asset_mode);
|
||||
},
|
||||
'styles' => function($txt) use ($asset_mode) {
|
||||
return new \Charcoal\Asset('styles', $txt, $asset_mode);
|
||||
},
|
||||
'scripts' => function($txt) use ($asset_mode) {
|
||||
return new \Charcoal\Asset('scripts', $txt, $asset_mode);
|
||||
},
|
||||
'fonts' => function($txt) use ($asset_mode) {
|
||||
return new \Charcoal\Asset('fonts', $txt, $asset_mode);
|
||||
},
|
||||
'files' => function($txt) use ($asset_mode) {
|
||||
return new \Charcoal\Asset('files', $txt, $asset_mode);
|
||||
}
|
||||
];
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Template_Controller_Boilerplate_Contact extends Boilerplate_Template_Controller
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Template_Controller_Boilerplate_Content extends Boilerplate_Template_Controller
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Boilerplate
|
||||
* @package Boilerplate.Objects
|
||||
* @subpackage Controllers
|
||||
*
|
||||
* @author Mathieu Ducharme <mat@locomotive.ca>
|
||||
* @copyright 2014 Locomotive
|
||||
* @version 2014-10-01
|
||||
* @link http://locomotive.ca
|
||||
* @since Version 2014-10-01
|
||||
*/
|
||||
class Template_Controller_Boilerplate_Home extends Boilerplate_Template_Controller
|
||||
{
|
||||
|
||||
}
|
||||
3
www/modules/boilerplate/config/boilerplate.config.json
Normal file
3
www/modules/boilerplate/config/boilerplate.config.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
3
www/modules/boilerplate/config/cms.contact.json
Normal file
3
www/modules/boilerplate/config/cms.contact.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
5
www/modules/boilerplate/config/cms.section.json
Normal file
5
www/modules/boilerplate/config/cms.section.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"url_options":{
|
||||
"use_rewrite":true
|
||||
}
|
||||
}
|
||||
3
www/modules/boilerplate/config/newsletter.campaign.json
Normal file
3
www/modules/boilerplate/config/newsletter.campaign.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
||||
10
www/modules/boilerplate/grunt_tasks/concat.js
Normal file
10
www/modules/boilerplate/grunt_tasks/concat.js
Normal file
@@ -0,0 +1,10 @@
|
||||
module.exports = {
|
||||
|
||||
main: {
|
||||
src: [
|
||||
'assets/scripts/src/main.js'
|
||||
],
|
||||
dest: 'assets/scripts/dist/main.js',
|
||||
}
|
||||
|
||||
}
|
||||
12
www/modules/boilerplate/grunt_tasks/sass.js
Normal file
12
www/modules/boilerplate/grunt_tasks/sass.js
Normal file
@@ -0,0 +1,12 @@
|
||||
module.exports = {
|
||||
|
||||
options: {
|
||||
sourceMap: false
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'assets/styles/dist/main.css': 'assets/styles/src/main.scss'
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
12
www/modules/boilerplate/grunt_tasks/svgstore.js
Normal file
12
www/modules/boilerplate/grunt_tasks/svgstore.js
Normal file
@@ -0,0 +1,12 @@
|
||||
module.exports = {
|
||||
|
||||
options: {
|
||||
|
||||
},
|
||||
default : {
|
||||
files: {
|
||||
'assets/images/dist/svgs.svg': ['assets/images/svgs/*.svg'],
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
26
www/modules/boilerplate/package.json
Normal file
26
www/modules/boilerplate/package.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "projet-x",
|
||||
"version": "1.0.0",
|
||||
"author": "Locomotive <info@locomotive.ca>",
|
||||
"contributors": [
|
||||
"Stephen Bégay <stephen@locomotive.ca>",
|
||||
"Antoine Boulanger <antoine@locomotive.ca>"
|
||||
],
|
||||
"devDependencies": {
|
||||
"grunt": "0.0.0",
|
||||
"grunt-autoprefixer": "0.0.0",
|
||||
"grunt-contrib-concat": "0.0.0",
|
||||
"grunt-contrib-cssmin": "0.0.0",
|
||||
"grunt-contrib-imagemin": "0.0.0",
|
||||
"grunt-contrib-jshint": "0.0.0",
|
||||
"grunt-contrib-uglify": "0.0.0",
|
||||
"grunt-contrib-watch": "0.0.0",
|
||||
"grunt-csscomb": "0.0.0",
|
||||
"grunt-jsonlint": "0.0.0",
|
||||
"grunt-notify": "0.0.0",
|
||||
"grunt-phplint": "0.0.0",
|
||||
"grunt-sass": "0.0.0",
|
||||
"grunt-svgmin": "0.0.0",
|
||||
"grunt-svgstore": "0.0.0"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user