diff --git a/.travis.yml b/.travis.yml index 512d222..05421d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,31 @@ language: php php: - '7.1' +branches: + only: + - master + cache: directories: - $HOME/.composer/cache + - $HOME/.npm + +before_install: + - nvm install 8 install: - composer update --prefer-dist --no-interaction --prefer-stable --no-suggest + - npm update script: + - php apprentice build + - npm run prod - vendor/bin/phpunit + +deploy: + provider: pages + skip-cleanup: true + local-dir: .build + target-branch: gh-pages + on: + branch: master diff --git a/assets/css/site.css b/assets/css/site.css index fca5648..18ac72d 100644 --- a/assets/css/site.css +++ b/assets/css/site.css @@ -56,6 +56,9 @@ button { button:hover { color: $primary-color-dark; } +button:focus { + outline: 0; +} button .icon { vertical-align: middle; } @@ -124,7 +127,7 @@ button:hover .icon svg { .grid-toc { display: grid; grid-template-columns: 2fr 1fr; - grid-column-gap: 3em; + grid-column-gap: 1em; } .navigate-links { margin: 1em 0; @@ -215,3 +218,22 @@ button:hover .icon svg { from {left: -300px; opacity: 0} to {left: 0; opacity: 1} } +.logo-404 { + max-width: 200px; + max-height: 200px; + margin: 0 auto; + display: block; +} +.logo-404 svg { + max-width: 200px; + max-height: 200px; +} +.toc-404 { + max-width: 250px; + margin: 0 auto; +} +.message-404 { + font-size: 2em; + margin: 0 auto; + text-align: center; +} diff --git a/assets/templates/404.phtml b/assets/templates/404.phtml new file mode 100644 index 0000000..737b62d --- /dev/null +++ b/assets/templates/404.phtml @@ -0,0 +1,11 @@ + 'PHP Apprentice']) ?> + +
+ +

Whoops! The page could not be found.

+
+ +
+
+ + diff --git a/code/classes-visibility.php b/code/classes-visibility.php index e69de29..24e1d90 100644 --- a/code/classes-visibility.php +++ b/code/classes-visibility.php @@ -0,0 +1,43 @@ +number = $number; + } +} + +// We cannot set the number using "$phone->number = '123-456-7890'". +// Instead, we can use the public method. +$phone = new Phone(); +$phone->setNumber('123-456-7890'); + +// Making an attribute or function private, gives you more control over the data in the object. +// For example, we could prevent a number being set if it starts with a 7. +class Phone2 +{ + private $number; + + public function setNumber($number) + { + if (substr($number, 0, 1) !== '7') { + $this->number = $number; + } + } +} + +// The "protected" and "private" keywords work a little differently, but we +// will learn more about "protected" when we discuss inheritance. +// However, they both prevent functions and properties from being accessed outside an object. +class Phone3 +{ + private $number; + protected $caller; +} diff --git a/code/classes.php b/code/classes.php index f568ce5..c3e6a19 100644 --- a/code/classes.php +++ b/code/classes.php @@ -24,9 +24,15 @@ $bike = new Bicycle(); $bike->color = 'Blue'; echo $bike->color . "\n"; +// An instance of a class is called an object. Congratulations! +// You are now performing object-oriented development. +$redBike = new Bicycle(); +$redBike->color = 'Red'; +echo $redBike->color . " Bike Object\n"; + // A method is a function attached to the class. You can add a method // to a class by using the "public" keyword followed by the function. A method -// can access the attributes and methods of the instance using the "$this" variable. +// can access the attributes and methods of an object instance using the "$this" variable. class Tricycle { public $color; diff --git a/config.php b/config.php index a71f8d7..b77d917 100644 --- a/config.php +++ b/config.php @@ -10,6 +10,7 @@ return [ 'pages' => [ Page::create('index', 'index.phtml'), Page::create('credits', 'credits.phtml'), + Page::create('404', '404.phtml'), Page::create('basics', null, 'basics.php', [ 'title' => 'Basics', 'subtitle' => 'Getting started', diff --git a/src/Build.php b/src/Build.php index efe3fcb..50b8d5e 100644 --- a/src/Build.php +++ b/src/Build.php @@ -76,6 +76,10 @@ class Build } $output = $this->getOutput($template, $page->variables); + if (!file_exists(config('output_dir'))) { + mkdir(config('output_dir')); + } + file_put_contents(config('output_dir') . '/' . $page->name . '.html', $output); return $output;