From 623232c280f10a83d682458e70195f4b217b14f0 Mon Sep 17 00:00:00 2001 From: Paulo Eduardo Date: Thu, 24 Mar 2016 14:26:23 -0300 Subject: [PATCH 1/2] Update to New Layout --- CONTRIBUTING.md | 119 ++++++++ Gemfile | 2 + Gemfile.lock | 126 +++++++++ Gruntfile.js | 48 ++++ README.md | 4 +- Vagrantfile | 16 -- _config.yml | 25 +- _layouts/default.html | 135 ++++----- _layouts/page.html | 62 ++-- css/all.css | 2 + images/favicon.png | Bin 262 -> 4113 bytes images/og-image.png | Bin 0 -> 10418 bytes index.html | 16 +- less/all.less | 470 +++++++++++++++++++++++++++++++ package.json | 11 + scripts/fastclick.js | 4 + scripts/setup.js | 90 +----- styles/base/spacing.less | 20 +- styles/site/site-navigation.less | 1 + vagrant.md | 13 - 20 files changed, 946 insertions(+), 218 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Gruntfile.js delete mode 100644 Vagrantfile create mode 100644 css/all.css create mode 100644 images/og-image.png create mode 100644 less/all.less create mode 100644 package.json create mode 100644 scripts/fastclick.js delete mode 100644 vagrant.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..a6168c88c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,119 @@ +# Contributing to PHP The Right Way + +Enjoy [PHP The Right Way](http://phptherightway.com) and want to get +involved? Great! There are plenty of ways you can help out. + +Please take a moment to review this document in order to make the contribution +process easy and effective for everyone involved. + +Following these guidelines helps to communicate that you respect the time of +the developers managing and developing this open source project. In return, +they should reciprocate that respect in addressing your issue or assessing +patches and features. + + +## Using the issue tracker + +The [issue tracker](https://github.com/codeguy/php-the-right-way/issues) is +the preferred channel for changes: spelling mistakes, wording changes, new +content and generally [submitting pull requests](#pull-requests), but please +respect the following restrictions: + +* Please **do not** use the issue tracker for personal support requests (use + [Stack Overflow](http://stackoverflow.com/questions/tagged/php) or IRC). + +* Please **do not** derail or troll issues. Keep the discussion on topic and + respect the opinions of others. + + + +## Pull Requests + +Pull requests are a great way to add new content to PHP The Right Way, as well +as updating any browser issues or other style changes. Pretty much any sort of +change is accepted if seen as constructive. + +Adhering to the following this process is the best way to get your work +included in the project: + +1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, + and configure the remotes: + + ```bash + # Clone your fork of the repo into the current directory + git clone https://github.com//php-the-right-way.git + # Navigate to the newly cloned directory + cd php-the-right-way + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/codeguy/php-the-right-way.git + ``` + +2. If you cloned a while ago, get the latest changes from upstream: + + ```bash + git checkout gh-pages + git pull upstream gh-pages + ``` + +3. Create a new topic branch (off the main project development branch) to + contain your change or fix: + + ```bash + git checkout -b + ``` + +4. Install the [Jekyll](https://github.com/jekyll/jekyll/) gem and dependencies to preview locally: + + ```bash + # Install the needed gems through Bundler + bundle install + # Run the local server + bundle execute jekyll s + ``` + +5. Commit your changes in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your content is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. + +6. Locally merge (or rebase) the upstream development branch into your topic branch: + + ```bash + git pull [--rebase] upstream gh-pages + ``` + +7. Push your topic branch up to your fork: + + ```bash + git push origin + ``` + +8. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) + with a clear title and description. + + +## Contribution Agreement and Usage + +By submitting a pull request to this repository, you agree to allow the project +owners to license your work under the the terms of the [Creative Commons Attribution-NonCommercial-ShareAlike +3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/). + +The same content and license will be used for all PHP The Right Way publications, +including - but not limited to: + +* [phptherightway.com](http://phptherightway.com) +* Translations of phptherightway.com +* [LeanPub: PHP The Right Way](https://leanpub.com/phptherightway/) +* Translations of "LeanPub: PHP The Right Way" + +All content is completely free now, and always will be. + +## Contributor Style Guide + +1. Use American English spelling (*primary English repo only*) +2. Use four (4) spaces to indent text; do not use tabs +3. Wrap all text to 120 characters +4. Code samples should adhere to PSR-1 or higher +5. Use [GitHub Flavored Markdown](http://github.github.com/github-flavored-markdown/) for all content +6. Use language agnostic urls when referring to external websites such as the [php.net](http://php.net/urlhowto.php) manual diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..053c27dc3 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'github-pages' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..c68e4ec98 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,126 @@ +GEM + remote: https://rubygems.org/ + specs: + RedCloth (4.2.9) + activesupport (4.2.5.1) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.3.8) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.10.0) + colorator (0.1) + ethon (0.8.1) + ffi (>= 1.3.0) + execjs (2.6.0) + faraday (0.9.2) + multipart-post (>= 1.2, < 3) + ffi (1.9.10) + gemoji (2.1.0) + github-pages (48) + RedCloth (= 4.2.9) + github-pages-health-check (= 0.6.1) + jekyll (= 3.0.3) + jekyll-coffeescript (= 1.0.1) + jekyll-feed (= 0.3.1) + jekyll-gist (= 1.4.0) + jekyll-mentions (= 1.0.0) + jekyll-paginate (= 1.1.0) + jekyll-redirect-from (= 0.9.1) + jekyll-sass-converter (= 1.3.0) + jekyll-seo-tag (= 1.0.0) + jekyll-sitemap (= 0.10.0) + jekyll-textile-converter (= 0.1.0) + jemoji (= 0.5.1) + kramdown (= 1.9.0) + liquid (= 3.0.6) + mercenary (~> 0.3) + rdiscount (= 2.1.8) + redcarpet (= 3.3.3) + rouge (= 1.10.1) + terminal-table (~> 1.4) + github-pages-health-check (0.6.1) + addressable (~> 2.3) + net-dns (~> 0.8) + public_suffix (~> 1.4) + typhoeus (~> 0.7) + html-pipeline (2.3.0) + activesupport (>= 2, < 5) + nokogiri (>= 1.4) + i18n (0.7.0) + jekyll (3.0.3) + colorator (~> 0.1) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 1.1) + kramdown (~> 1.3) + liquid (~> 3.0) + mercenary (~> 0.3.3) + rouge (~> 1.7) + safe_yaml (~> 1.0) + jekyll-coffeescript (1.0.1) + coffee-script (~> 2.2) + jekyll-feed (0.3.1) + jekyll-gist (1.4.0) + octokit (~> 4.2) + jekyll-mentions (1.0.0) + html-pipeline (~> 2.2) + jekyll (~> 3.0) + jekyll-paginate (1.1.0) + jekyll-redirect-from (0.9.1) + jekyll (>= 2.0) + jekyll-sass-converter (1.3.0) + sass (~> 3.2) + jekyll-seo-tag (1.0.0) + jekyll (>= 2.0) + jekyll-sitemap (0.10.0) + jekyll-textile-converter (0.1.0) + RedCloth (~> 4.0) + jekyll-watch (1.3.1) + listen (~> 3.0) + jemoji (0.5.1) + gemoji (~> 2.0) + html-pipeline (~> 2.2) + jekyll (>= 2.0) + json (1.8.3) + kramdown (1.9.0) + liquid (3.0.6) + listen (3.0.6) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9.7) + mercenary (0.3.5) + mini_portile2 (2.0.0) + minitest (5.8.4) + multipart-post (2.0.0) + net-dns (0.8.0) + nokogiri (1.6.7.2) + mini_portile2 (~> 2.0.0.rc2) + octokit (4.2.0) + sawyer (~> 0.6.0, >= 0.5.3) + public_suffix (1.5.3) + rb-fsevent (0.9.7) + rb-inotify (0.9.7) + ffi (>= 0.5.0) + rdiscount (2.1.8) + redcarpet (3.3.3) + rouge (1.10.1) + safe_yaml (1.0.4) + sass (3.4.21) + sawyer (0.6.0) + addressable (~> 2.3.5) + faraday (~> 0.8, < 0.10) + terminal-table (1.5.2) + thread_safe (0.3.5) + typhoeus (0.8.0) + ethon (>= 0.8.0) + tzinfo (1.2.2) + thread_safe (~> 0.1) + +PLATFORMS + ruby + +DEPENDENCIES + github-pages diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 000000000..a9d3d91c3 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,48 @@ +module.exports = function(grunt) { + // Project configuration + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + less: { + dist: { + options: { + cleancss: true, + compress: true, + ieCompat: true + }, + files: { + "css/all.css": "less/all.less" + } + } + }, + postcss: { + options: { + map: true, + processors: [ + require('autoprefixer')({ + browsers: ['last 2 versions', 'ie 9'] + }) + ] + }, + dist: { + src: 'css/all.css' + } + }, + watch: { + less: { + files: ['less/**/*.less'], + tasks: ['less:dist', 'postcss:dist'], + options: { + spawn: false + } + } + } + }); + + // Load plugins + grunt.loadNpmTasks('grunt-contrib-less'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-postcss'); + + // Default task(s) + grunt.registerTask('default', ['less', 'postcss:dist']); +}; diff --git a/README.md b/README.md index 628f8ef35..3d8ea577e 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ _PHP: Do Jeito Certo_ possui banners que você pode usar em seu site. Para mostr ## Guia de Estilo para o Contribuidor 1. Use a ortografia do Português do Brasil neste repositório. -2. Use quatro (4) espaços para indentar o texto; não use TAB. +2. Use quatro (4) espaços para identar o texto; não use TAB. 3. Limite o texto em 120 caracteres. 4. Os exemplos de código devem seguir a [PSR-1](http://www.php-fig.org/psr/psr-1/) ou superior. @@ -56,6 +56,8 @@ _PHP: Do Jeito Certo_ possui banners que você pode usar em seu site. Para mostr * [Turco](http://hkulekci.github.io/php-the-right-way/) * [Ucraniano](http://iflista.github.com/php-the-right-way) +Se você estiver interessado em traduzir o PHP Do Jeito Certo, fork esse repositório no GitHub e publique sua versão localizada na sua própria página do GitHub. Nos iremos referenciar a sua tradução a partir da documentação principal + ## Traduções diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 3585025f6..000000000 --- a/Vagrantfile +++ /dev/null @@ -1,16 +0,0 @@ -Vagrant.configure("2") do |config| - config.vm.box = "precise32" - config.vm.box_url = "http://files.vagrantup.com/precise32.box" - config.vm.network :forwarded_port, guest: 4000, host: 4000 - - $script = < + + + + -
- - - Faça fork no GitHub - - +
{{ content }} -
- - - + + + diff --git a/_layouts/page.html b/_layouts/page.html index c552773e7..01f896b3f 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -5,45 +5,59 @@ {% if page.title %}{{ page.title }} - {% endif %}PHP: Do Jeito Certo - + + + - - - + + + + + + +
+ {{ content }} +
+ + - - -
- -
Do Jeito Certo.
- Voltar ao início - - Faça fork no GitHub - -
-
-
Você está lendo conteúdo extra sobre…
- {{ content }} - -
diff --git a/css/all.css b/css/all.css new file mode 100644 index 000000000..2e8e86613 --- /dev/null +++ b/css/all.css @@ -0,0 +1,2 @@ +*{box-sizing:border-box}body{font-size:24px;line-height:32px;text-rendering:optimizeLegibility}h1,h2,h3,h4{font-family:georgia,serif}h1,.alpha{position:relative;font-size:48px;font-weight:normal;line-height:50px;text-align:center}h2,.beta{font-size:32px;font-weight:normal;line-height:36px}h3,.gamma{font-size:24px;font-weight:bold;line-height:30px}blockquote{border-left:3px solid #ccc;padding-left:20px;color:#777;font-style:italic;word-wrap:break-word}a{color:#4f5b93}a:hover{color:#8892bf}.back-to-top{text-align:center}.back-to-top a{background:#4f5b93;border-radius:3px;display:inline-block;height:40px;padding:0 20px;transition:all .1s ease;color:white;font-family:verdana,sans-serif;font-size:13px;line-height:40px;text-decoration:none;text-transform:uppercase}.back-to-top a:hover{background:#8892bf}img{max-width:100%}pre,code{color:#444;font-family:"Source Code Pro",Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:90%}a pre,a code{color:inherit}pre{background:#f7f7f7;border:1px solid #eee;border-radius:3px;display:block;overflow:auto;padding:20px;width:100%}@media (max-width:767px){body{font-size:18px;line-height:24px}h1,.alpha{font-size:36px;line-height:38px}h2,.beta{font-size:24px;line-height:28px}h3,.gamma{font-size:18px;line-height:23px}blockquote{margin-left:0}ul,ol{padding-left:1em}pre{padding:5px 10px}}@media (max-width:360px){body{font-size:16px;line-height:21px}h1,.alpha{font-size:28px;line-height:30px}h2,.beta{font-size:20px;line-height:23px}h3,.gamma{font-size:16px;line-height:20px}}.site-header{padding-top:40px;margin-bottom:40px;text-align:center}.site-header h1{margin:0;font-size:72px;line-height:60px}.site-header h1 em{display:block;font-size:34px;font-style:normal}.site-header h1 a{color:#333;text-decoration:none}.site-header h1 a:hover{color:#8892bf}.site-header .build-date{margin-bottom:10px;color:#999;font-family:verdana,sans-serif;font-size:11px;text-transform:uppercase}.site-header .btn-share{background:#8892bf;border-radius:3px;display:inline-block;height:30px;padding:0 20px;vertical-align:baseline;color:white;font-family:verdana,sans-serif;font-size:12px;line-height:30px;text-decoration:none;text-transform:uppercase}.site-header .fork-me{background-image:url(data:image/png;base64,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);background-position:top right;background-repeat:no-repeat;background-size:contain;height:100px;width:100px;position:absolute;top:0;right:0;z-index:100;width:120px}.site-navigation,.site-content,.site-footer{margin:0 auto;max-width:840px;width:92%}.site-navigation{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:40px;-moz-column-gap:40px;column-gap:40px}.site-navigation input[type="checkbox"],.site-navigation label{display:none}.site-navigation ul{list-style:none;margin:0;padding:0}.site-navigation ul li{margin-bottom:20px;font-size:22px;line-height:23px}.site-navigation ul li a{display:block;color:#444;font-weight:700;text-decoration:none}.site-navigation ul li a:hover{color:#8892bf}.site-navigation ul li ul{padding-top:8px}.site-navigation ul li li{margin-bottom:6px;font-size:18px}.site-navigation ul li li a{border:none;color:#777;font-weight:normal}.site-navigation li{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}@media (max-width:820px){.site-navigation{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:560px){.site-navigation{-webkit-columns:1;-moz-columns:1;columns:1}}@media (max-width:375px){.site-navigation{background:rgba(255,255,255,0.95);-webkit-columns:1;-moz-columns:1;columns:1;max-height:100vh;position:fixed;bottom:0;left:0;z-index:100}.site-navigation label{background:#4f5b93;box-sizing:border-box;display:block;height:40px;padding:0 10px;width:100vh;position:absolute;bottom:0;left:0;color:white;font-family:verdana,sans-serif;font-size:13px;line-height:40px;text-transform:uppercase;z-index:2}.site-navigation>ul{background:rgba(255,255,255,0.96);border-top:3px solid #8892bf;box-shadow:rgba(0,0,0,0.25) 0 -5px 10px;box-sizing:border-box;padding:20px;overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;left:0;bottom:40px;height:50vh;width:100vh;-webkit-transform:translate(0, 100vh);-ms-transform:translate(0, 100vh);transform:translate(0, 100vh);transition:all .2s ease;z-index:1}.site-navigation input[type="checkbox"]:checked~ul{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.site-content h1{padding-top:40px;position:relative}.site-content h1:after{border:1px solid #ddd;border-bottom:none;content:"";display:block;height:8px;position:absolute;left:0;top:0;width:100%}.site-content.chapters{counter-reset:chapter}.site-content.chapters h1{counter-increment:chapter;padding-top:60px}.site-content.chapters h1:before{display:inline-block;content:"Chapter " counter(chapter) ".";position:absolute;top:30px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#999;font-size:12px;letter-spacing:1px;line-height:20px;text-transform:uppercase;text-align:center}.site-content #welcome ul{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:30px;-moz-column-gap:30px;column-gap:30px;list-style-position:inside}.site-content .back-to-top{margin-bottom:60px}@media (max-width:870px){.site-content #welcome ul{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:600px){.site-content #welcome ul{-webkit-columns:1;-moz-columns:1;columns:1}}.site-footer{border-top:1px solid #ccc;margin:60px auto 0 auto;padding:40px 20px;font-family:verdana,sans-serif;font-size:16px;text-align:center}.site-footer .cc-badge{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAw1BMVEX///8AAAAAAACrsar///8oKSjR1NAODg4jHyDLz8pAPz/f399wcHBQUFBgYGDJzcjEyMN5fHkwMDC9wry4vbeAgIDw8PDBxcDO0c3M0MyUmJPGysW6v7q/v7+fn5/T1tKvtK61urSxt7C/w76zuLKhpKDk5OSRk5F2c3RQUVAbGxuts6yEhoR9fnxDREMgICDW1dXJyMirq6qvr68wLS3Pz8+Rj4+Pj4+LioqEgYJaV1i6ubmbl5meoJ1dXl06NjcZGRmWw6QEAAAAAnRSTlMMANomgjQAAAMCSURBVHjatZYJc6JAEIWznWFmOAQDguAdjUqMd0yi5vz/v2q7GTmkNusWW3kxNfJkPts3TMPVFfyIfiH3ttHwRs1623F0PYp03XHa9ebI6zRu74aDwcPDdQUBXCG3440Qq4ec91GchzqhM/J1FSEYuVguYudLASixnBM6JVPJNxqgtJts2mWHwMh1Ij6dQabZlEeKfDccDlo4xbAsA6e11KzLDoG9EXHvqVbb73Z9m+q+r4dEppLHAmomQ5k1EMmsi44CY74JV/gBU+ohWqtjzSMMY6iBjR4AfQAaTVLO87HkTDabiXIUuNnWieuaLFPgYs1cb1PJC6itUzCrwQ2mCe4bcr9EPEkdOmcsUa+Jo8B1J5wiF8s9J0/DpGQNCt9ogkbladKwwZ/DNnNMtpGfdizlMzkKjAXPQDyxMwUCZqpkMOjYBrBpNADnGDESZDxZ5w4L3uQec5A7chTYCecAPiupBzDHkr0OWHQIKBotwqCzidGI17kTSKlhzFJOyFFgvgSBQXRrhuGr4QUnCFhyzOIbMDLinZTH18y523UTsJmBdS7ARiCQjEcg2fTjBdfrzc6foqCsemwtUUbqvI43jG2lxHMyMACW6MLK7K56Lrjm46qXZNGnkE+LB5AvHjlHudtBvF3MUqcn5eGgybd88aI+AP4KlbMaSF0ERwj2ocZKlxs5k8OXeA6KzkGirICcfwI3ChvEKm6Q/bHkbLbbtXLKUQRPKx+joCGPorGttKXzxTutWrZ41mnxGrdjDcC1LTdvOZcddbndg2DZ5fZoJANbqcuNGtygWttMdvTLtxsE+1uFXp9vafO7LV0ZTE3o/S9NqBqXwLDQ+QeSC23IVG1zDtVFYLD0s0Yf+ALgk0cL+F8wLCL+Ubo18agFqdT+oDeZo/7RL53EzsGUxnvpZtoqzDm9WO6o49JXKaMIpjRCPk1v/1Me6sUc0rZZcE5/BaXtpAQGd4Bozul5BbEDAwoqB6GcrOLcLFesZOw99Yjl7Ql7oeIUXjynBP4h/djT5m+nuF33PcPucwAAAABJRU5ErkJggg==);background-position:top left;background-repeat:no-repeat;background-size:contain;display:inline-block;height:31px;width:88px}.site-footer h2{font-size:24px;font-weight:bold;line-height:30px;margin-bottom:10px}.site-footer ul{list-style:none;margin:0 0 20px 0;padding:0}.site-footer .license{color:#777;font-size:13px} +/*# sourceMappingURL=data:application/json;base64,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WUFBWSxZQUFZLFlBQVksc0NBQThCLEFBQTlCLGtDQUE4QixBQUE5Qiw4QkFBOEIsd0JBQXdCLFNBQVMsQ0FBQyxtREFBbUQsa0NBQXlCLEFBQXpCLDhCQUF5QixBQUF6Qix5QkFBeUIsQ0FBQyxDQUFDLGlCQUFpQixpQkFBaUIsaUJBQWlCLENBQUMsdUJBQXVCLHNCQUFzQixtQkFBbUIsV0FBVyxjQUFjLFdBQVcsa0JBQWtCLE9BQU8sTUFBTSxVQUFVLENBQUMsdUJBQXVCLHFCQUFxQixDQUFDLDBCQUEwQiwwQkFBMEIsZ0JBQWdCLENBQUMsaUNBQWlDLHFCQUFxQix3Q0FBd0Msa0JBQWtCLFNBQVMsU0FBUyxtQ0FBMkIsQUFBM0IsK0JBQTJCLEFBQTNCLDJCQUEyQixXQUFXLGVBQWUsbUJBQW1CLGlCQUFpQix5QkFBeUIsaUJBQWlCLENBQUMsMEJBQTBCLGtCQUFVLEFBQVYsZUFBVSxBQUFWLFVBQVUsd0JBQWdCLEFBQWhCLHFCQUFnQixBQUFoQixnQkFBZ0IsMEJBQTBCLENBQUMsMkJBQTJCLGtCQUFrQixDQUFDLHlCQUF5QiwwQkFBMEIsa0JBQVMsQUFBVCxlQUFTLEFBQVQsU0FBUyxDQUFDLENBQUMseUJBQXlCLDBCQUEwQixrQkFBUyxBQUFULGVBQVMsQUFBVCxTQUFTLENBQUMsQ0FBQyxhQUFhLDBCQUEwQix3QkFBd0Isa0JBQWtCLCtCQUErQixlQUFlLGlCQUFpQixDQUFDLHVCQUF1QixxNkNBQXE2Qyw2QkFBNkIsNEJBQTRCLHdCQUF3QixxQkFBcUIsWUFBWSxVQUFVLENBQUMsZ0JBQWdCLGVBQWUsaUJBQWlCLGlCQUFpQixrQkFBa0IsQ0FBQyxnQkFBZ0IsZ0JBQWdCLGtCQUFrQixTQUFTLENBQUMsc0JBQXNCLFdBQVcsY0FBYyxDQUFDIiwiZmlsZSI6ImFsbC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIqe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OjMycHg7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fWgxLGgyLGgzLGg0e2ZvbnQtZmFtaWx5Omdlb3JnaWEsc2VyaWZ9aDEsLmFscGhhe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo0OHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDo1MHB4O3RleHQtYWxpZ246Y2VudGVyfWgyLC5iZXRhe2ZvbnQtc2l6ZTozMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDozNnB4fWgzLC5nYW1tYXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjMwcHh9YmxvY2txdW90ZXtib3JkZXItbGVmdDozcHggc29saWQgI2NjYztwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojNzc3O2ZvbnQtc3R5bGU6aXRhbGljO3dvcmQtd3JhcDpicmVhay13b3JkfWF7Y29sb3I6IzRmNWI5M31hOmhvdmVye2NvbG9yOiM4ODkyYmZ9LmJhY2stdG8tdG9we3RleHQtYWxpZ246Y2VudGVyfS5iYWNrLXRvLXRvcCBhe2JhY2tncm91bmQ6IzRmNWI5Mztib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMjBweDt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmJhY2stdG8tdG9wIGE6aG92ZXJ7YmFja2dyb3VuZDojODg5MmJmfWltZ3ttYXgtd2lkdGg6MTAwJX1wcmUsY29kZXtjb2xvcjojNDQ0O2ZvbnQtZmFtaWx5OlwiU291cmNlIENvZGUgUHJvXCIsQ29uc29sYXMsXCJBbmRhbGUgTW9ubyBXVFwiLFwiQW5kYWxlIE1vbm9cIixcIkx1Y2lkYSBDb25zb2xlXCIsXCJMdWNpZGEgU2FucyBUeXBld3JpdGVyXCIsXCJEZWphVnUgU2FucyBNb25vXCIsXCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm9cIixcIkxpYmVyYXRpb24gTW9ub1wiLFwiTmltYnVzIE1vbm8gTFwiLE1vbmFjbyxcIkNvdXJpZXIgTmV3XCIsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjkwJX1hIHByZSxhIGNvZGV7Y29sb3I6aW5oZXJpdH1wcmV7YmFja2dyb3VuZDojZjdmN2Y3O2JvcmRlcjoxcHggc29saWQgI2VlZTtib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmF1dG87cGFkZGluZzoyMHB4O3dpZHRoOjEwMCV9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpe2JvZHl7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjRweH1oMSwuYWxwaGF7Zm9udC1zaXplOjM2cHg7bGluZS1oZWlnaHQ6MzhweH1oMiwuYmV0YXtmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDoyOHB4fWgzLC5nYW1tYXtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyM3B4fWJsb2NrcXVvdGV7bWFyZ2luLWxlZnQ6MH11bCxvbHtwYWRkaW5nLWxlZnQ6MWVtfXByZXtwYWRkaW5nOjVweCAxMHB4fX1AbWVkaWEgKG1heC13aWR0aDozNjBweCl7Ym9keXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMXB4fWgxLC5hbHBoYXtmb250LXNpemU6MjhweDtsaW5lLWhlaWdodDozMHB4fWgyLC5iZXRhe2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjIzcHh9aDMsLmdhbW1he2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjIwcHh9fS5zaXRlLWhlYWRlcntwYWRkaW5nLXRvcDo0MHB4O21hcmdpbi1ib3R0b206NDBweDt0ZXh0LWFsaWduOmNlbnRlcn0uc2l0ZS1oZWFkZXIgaDF7bWFyZ2luOjA7Zm9udC1zaXplOjcycHg7bGluZS1oZWlnaHQ6NjBweH0uc2l0ZS1oZWFkZXIgaDEgZW17ZGlzcGxheTpibG9jaztmb250LXNpemU6MzRweDtmb250LXN0eWxlOm5vcm1hbH0uc2l0ZS1oZWFkZXIgaDEgYXtjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS5zaXRlLWhlYWRlciBoMSBhOmhvdmVye2NvbG9yOiM4ODkyYmZ9LnNpdGUtaGVhZGVyIC5idWlsZC1kYXRle21hcmdpbi1ib3R0b206MTBweDtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnNpdGUtaGVhZGVyIC5idG4tc2hhcmV7YmFja2dyb3VuZDojODg5MmJmO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDozMHB4O3BhZGRpbmc6MCAyMHB4O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2NvbG9yOndoaXRlO2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDozMHB4O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uc2l0ZS1oZWFkZXIgLmZvcmstbWV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKVUFBQUNWQ0FNQUFBQm1mRWg5QUFBQU1GQk1WRVhyNit3U0ZpSC8vLy9VMU5UMDlQU1JrNWh1Y0hiNStmbE1UMWY4L1B5K3Y4RXRNRHBYV1dFOFAwaGdZMnJnNE9ENW1JRzhBQUFGb0VsRVFWUjRBYlNiMFc0c0tReEV5eGZNZEF5Ry8vL2IxYkN0M01TWjFDS3RoNGNvajBmVlZwMEdldkRuYzMxOFBPcWo5Y3ZsdjFlZmw5dGFDNmoxOGZqNCtKTzdBbFd0clk5TER0Ymxib1ZnNVZLaDlYa2RwVFVJVmpJVnNKcWNQVVNTVmk3Vm93SjRwaldPSHVLVmlVV29kbGpsY09SOVhOMUtDVmhwVk9FUlBySEdPQno1Z0pWSkZjTjZZcDJOZkhpSWlWUXhySTBsMXhGV1hscUU2dk1abHRPQ0dDR3RiS3FJZFZnUUk2U1ZSTVhTNm05dGVVSkZzSTZkR05MS3BncFlNZzVIdm9lMGNxaENQeno0eUdlbVJhZ1NSajZrbFVzVjB6cDJZa2dyZytyL2o3elBLNlNWU3hYVG1yL0xwMm1pRXdNVlRZczVjUUthNVVSQ0ZkUGlJOStBQWcwRkVkSktwb290UDE0bDFjVFE4cDBZcVhoYUVjcEV1dmJ2cWc1cHBWUEYyUnJmb1NvS05NZUpuSXIzMXZEdk05WEU0RWt0ejZtNEUvM3phVG4yUEUxcExkbUpuSW83OGFhNUZ1cnlLSjhSMDhxbTRrNzBoVGFYU3NTS3M1Vk54WjI0YTZHc04reDhPQlYzNGpJUmhZcEhKOGFXVDZXS2FjWFh3RktHWW9rdjI4bDlnWXN0bjAwVjAvSXZXTDRBOC8xWHhLRDhhQ1NUaXJkOEczdmsxYnBWRmVGT3pLVGlUdHhRRXBMYUt6b3htWXFQZk1HOG9YcHMrZWpFWktxQU5mdTRQaEY4UTFVc0xPZE9US2ZpVGhTRFZXM1RVNXpJcWM1YlhoK3E2SW43UkU1RjB2SXZJOStibUVVaTdzUThLcEpXaDk1VGx1RkVUblh1eEc1KzE0Um1PSkZUblJkRXY2RlFXc1pwSUtjNmQrSU5wWVlac0tJVGs2bTRFMFc4WUVxclpaNm5sVVJGbk5nWHB2aGFCUnF4Umtncm5ZcWNuYlltdmpBRVM0UTdNWmtxcGhXY2VEM2p1bXJJaWpneGo0cWNRVFRzdUx5M0lkeUpxVlF4cllqbDl3WURzQU1ucGxMRnRPTElEMEFIRHZhSnlWU2s1ZHVVQWlzTjdhY1RRMXI1Vk1TSkF1MkcxZVVGVmtncm5ZcThOSy9TeGViQkRWaytGWEhpUlBHekc3SjhLdUxFb1hjMDdZcFl3WW5aVkFjM1pBcFVQYmdoUzZFaVRneFFOaFIrY0VPV1RNVnV5QzVZbDRrbU1jTDRkcHBQUlp6WTZpNzZyaGk4NWZPcHlBMVpnNDZGcG9CRktZYVd6NmNpcDRFSzFLYlYya0tQYVkyUVZqWVZhWGx2WGF1SnRIb2RPREdYaWpoUkdxeUxGSFNKS3pveG40cnRxa1ZrSHlIRjVjR0p5VlF4clhoZDBBMmZUYStET3pGU0phWVZqa1owM1ZBR0FOcTVFeU5WWGxyaHE1RjJRNkhvTUg1REZxbVMwL0lmVHJScXo1aXNNQ2ZtVTNFbk52eUxNeWQxWWo0VmM2S3N2NVdsU3B5WVQ4WDJpYkMvL3hiaXhId3E0a1NwUmFRWEYzRnBrem94bjRvNGNaa0NUU1pVdUJQenFVakw2OEtHV3E2bTNJbjVWTVNKTnFWaGVjTVdrRHB4WWpZVjJmbjRUa3Fzd3Jvb0NuZGlwTXBNYTM1MW9tTjVOK2hVMFNjZmNXSTZGVG14bVM2MnJYaERPWEZpT2hWcCtXdlpoc0srWlZuK3F4UHpxY2htMzFGY0ZHdnRBVnYrdXhQenFVaGEwL2JqODdVc2pGYjRhaVNmaWpxeDdZZ2M0RGRrK1ZUY2llYlBQNENKazMxaVBoVjM0aWFyYSs1cC83WGw4Nm00RTNkU3U3bU0vTG9nVXIzZmlkM1dicTR1KzU1VDI0dTAza1pGbk9qU2x1M2pOeEdGL2Z4MXdkdW8rRmNqQmJLOStJVHE4dE9KNzZMaVgxSmFiZTJHZWxVUTc2UWlUdXlHdXFGZzgwVkJ2SmVLT05FMjFLc1RtK0c5dkpXS09GRTIxT2VKVFRnYWVUTVZTYXNCbDBqSTZuWWlwOHFmclc5TzFBWTArYm5lVE1XL0dyRUtxTHhZUForS3BCV1BSbWI3cDMwN1NFRW9Cb0lvcUJBbElPajlieXQvOXJVVDN5YWVvR2hoR2ttTC8yVlk5WmRPdkJjcWRHS3RRaWZXS25SaXJjSUxXYTNDYWlSWCtjcjNLbmRpcXZJdm4xVGxKV1dxY2lkYVZWLzVRSVVsNWJhcVR5dFh1Uk90S2pxeFZxRVRheFU2c1ZhaEUxdVZOemF4Q3AwWXFueTMzanRWZVVtWnFuemxVNVd2ZktweVdxbkthYVVxcjBaU2xWY2pxY3Fya1ZxRlRzeFZlQ0ZyVkU3ck01MW9WWlRXc0xaVlJWcmp1cjVFcTRLMHhuWHRjYUVLV2JmMWZFRlZzY2ExSGxCRnJIRXR2S1dHcklGQmxiSEdoZVZBNlpvUFZLMnJWLzE4ZFg5VVIzVlVSM1ZVWDhVejk0TTZ4eWVMQUFBQUFFbEZUa1N1UW1DQyk7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHQ7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2hlaWdodDoxMDBweDt3aWR0aDoxMDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3otaW5kZXg6MTAwO3dpZHRoOjEyMHB4fS5zaXRlLW5hdmlnYXRpb24sLnNpdGUtY29udGVudCwuc2l0ZS1mb290ZXJ7bWFyZ2luOjAgYXV0bzttYXgtd2lkdGg6ODQwcHg7d2lkdGg6OTIlfS5zaXRlLW5hdmlnYXRpb257Y29sdW1uczozO2NvbHVtbi1nYXA6NDBweH0uc2l0ZS1uYXZpZ2F0aW9uIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwuc2l0ZS1uYXZpZ2F0aW9uIGxhYmVse2Rpc3BsYXk6bm9uZX0uc2l0ZS1uYXZpZ2F0aW9uIHVse2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaXttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zaXplOjIycHg7bGluZS1oZWlnaHQ6MjNweH0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpIGF7ZGlzcGxheTpibG9jaztjb2xvcjojNDQ0O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWRlY29yYXRpb246bm9uZX0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpIGE6aG92ZXJ7Y29sb3I6Izg4OTJiZn0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpIHVse3BhZGRpbmctdG9wOjhweH0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpIGxpe21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxOHB4fS5zaXRlLW5hdmlnYXRpb24gdWwgbGkgbGkgYXtib3JkZXI6bm9uZTtjb2xvcjojNzc3O2ZvbnQtd2VpZ2h0Om5vcm1hbH0uc2l0ZS1uYXZpZ2F0aW9uIGxpe2JyZWFrLWluc2lkZTphdm9pZH1AbWVkaWEgKG1heC13aWR0aDo4MjBweCl7LnNpdGUtbmF2aWdhdGlvbntjb2x1bW5zOjJ9fUBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsuc2l0ZS1uYXZpZ2F0aW9ue2NvbHVtbnM6MX19QG1lZGlhIChtYXgtd2lkdGg6Mzc1cHgpey5zaXRlLW5hdmlnYXRpb257YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpO2NvbHVtbnM6MTttYXgtaGVpZ2h0OjEwMHZoO3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwMH0uc2l0ZS1uYXZpZ2F0aW9uIGxhYmVse2JhY2tncm91bmQ6IzRmNWI5Mztib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jaztoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMTBweDt3aWR0aDoxMDB2aDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7Y29sb3I6d2hpdGU7Zm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3otaW5kZXg6Mn0uc2l0ZS1uYXZpZ2F0aW9uPnVse2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjk2KTtib3JkZXItdG9wOjNweCBzb2xpZCAjODg5MmJmO2JveC1zaGFkb3c6cmdiYSgwLDAsMCwwLjI1KSAwIC01cHggMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoyMHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo0MHB4O2hlaWdodDo1MHZoO3dpZHRoOjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgMTAwdmgpO3RyYW5zaXRpb246YWxsIC4ycyBlYXNlO3otaW5kZXg6MX0uc2l0ZS1uYXZpZ2F0aW9uIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkfnVse3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgMCl9fS5zaXRlLWNvbnRlbnQgaDF7cGFkZGluZy10b3A6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uc2l0ZS1jb250ZW50IGgxOmFmdGVye2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tOm5vbmU7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJX0uc2l0ZS1jb250ZW50LmNoYXB0ZXJze2NvdW50ZXItcmVzZXQ6Y2hhcHRlcn0uc2l0ZS1jb250ZW50LmNoYXB0ZXJzIGgxe2NvdW50ZXItaW5jcmVtZW50OmNoYXB0ZXI7cGFkZGluZy10b3A6NjBweH0uc2l0ZS1jb250ZW50LmNoYXB0ZXJzIGgxOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OlwiQ2hhcHRlciBcIiBjb3VudGVyKGNoYXB0ZXIpIFwiLlwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDozMHB4O2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6MXB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtYWxpZ246Y2VudGVyfS5zaXRlLWNvbnRlbnQgI3dlbGNvbWUgdWx7Y29sdW1uczozO2NvbHVtbi1nYXA6MzBweDtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZX0uc2l0ZS1jb250ZW50IC5iYWNrLXRvLXRvcHttYXJnaW4tYm90dG9tOjYwcHh9QG1lZGlhIChtYXgtd2lkdGg6ODcwcHgpey5zaXRlLWNvbnRlbnQgI3dlbGNvbWUgdWx7Y29sdW1uczoyfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7LnNpdGUtY29udGVudCAjd2VsY29tZSB1bHtjb2x1bW5zOjF9fS5zaXRlLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO21hcmdpbjo2MHB4IGF1dG8gMCBhdXRvO3BhZGRpbmc6NDBweCAyMHB4O2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn0uc2l0ZS1mb290ZXIgLmNjLWJhZGdle2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRmdBQUFBZkNBTUFBQUJVRnZyU0FBQUF3MUJNVkVYLy8vOEFBQUFBQUFDcnNhci8vLzhvS1NqUjFOQU9EZzRqSHlETHo4cEFQei9mMzk5d2NIQlFVRkJnWUdESnpjakV5TU41Zkhrd01EQzl3cnk0dmJlQWdJRHc4UERCeGNETzBjM00wTXlVbUpQR3lzVzZ2N3EvdjcrZm41L1QxdEt2dEs2MXVyU3h0N0Mvdzc2enVMS2hwS0RrNU9TUms1RjJjM1JRVVZBYkd4dXRzNnlFaG9SOWZueERSRU1nSUNEVzFkWEp5TWlycTZxdnI2OHdMUzNQejgrUmo0K1BqNCtMaW9xRWdZSmFWMWk2dWJtYmw1bWVvSjFkWGwwNk5qY1pHUm1XdzZRRUFBQUFBblJTVGxNTUFOb21nalFBQUFNQ1NVUkJWSGphdFpZSmM2SkFFSVd6bldGbU9BUURndUFkalVxTWQweWk1dnovdjJxN0dUbWtOdXNXVzNreE5mSmtQdHMzVE1QVkZmeUlmaUgzdHRId1JzMTYyM0YwUFlwMDNYSGE5ZWJJNnpSdTc0YUR3Y1BEZFFVQlhDRzM0NDBRcTRlYzkxR2NoenFoTS9KMUZTRVl1Vmd1WXVkTEFTaXhuQk02SlZQSk54cWd0SnRzMm1XSHdNaDFJajZkUWFiWmxFZUtmRGNjRGxvNHhiQXNBNmUxMUt6TERvRzlFWEh2cVZiYjczWjltK3ErcjRkRXBwTEhBbW9tUTVrMUVNbXNpNDRDWTc0SlYvZ0JVK29oV3F0anpTTU1ZNmlCalI0QWZRQWFUVkxPODdIa1REYWJpWElVdU5uV2lldWFMRlBnWXMxY2IxUEpDNml0VXpDcndRMm1DZTRiY3I5RVBFa2RPbWNzVWErSm84QjFKNXdpRjhzOUowL0RwR1FOQ3Q5b2drYmxhZEt3d1ovRE5uTk10cEdmZGl6bE16a0tqQVhQUUR5eE13VUNacXBrTU9qWUJyQnBOQURuR0RFU1pEeFo1dzRMM3VRZWM1QTdjaFRZQ2VjQVBpdXBCekRIa3IwT1dIUUlLQm90d3FDemlkR0kxN2tUU0tsaHpGSk95RkZndmdTQlFYUnJodUdyNFFVbkNGaHl6T0liTURMaW5aVEgxOHk1MjNVVHNKbUJkUzdBUmlDUWpFY2cyZlRqQmRmcnpjNmZvcUNzZW13dFVVYnF2STQzakcybHhITXlNQUNXNk1MSzdLNTZMcmptNDZxWFpOR25rRStMQjVBdkhqbEh1ZHRCdkYzTVVxY241ZUdneWJkODhhSStBUDRLbGJNYVNGMEVSd2oyb2NaS2x4czVrOE9YZUE2S3prR2lySUNjZndJM0NodkVLbTZRL2JIa2JMYmJ0WExLVVFSUEt4K2pvQ0dQb3JHdHRLWHp4VHV0V3JaNDFtbnhHcmRqRGNDMUxUZHZPWmNkZGJuZGcyRFo1ZlpvSkFOYnFjdU5HdHlnV3R0TWR2VEx0eHNFKzF1RlhwOXZhZk83TFYwWlRFM28vUzlOcUJxWHdMRFErUWVTQzIzSVZHMXpEdFZGWUxEMHMwWWYrQUxnazBjTCtGOHdMQ0wrVWJvMThhZ0ZxZFQrb0RlWm8vN1JMNTNFenNHVXhudnBadG9xekRtOVdPNm80OUpYS2FNSXBqUkNQazF2LzFNZTZzVWMwclpaY0U1L0JhWHRwQVFHZDRCb3p1bDVCYkVEQXdvcUI2R2NyT0xjTEZlc1pPdzk5WWpsN1FsN29lSVVYanluQlA0aC9kalQ1bStudUYzM1BjUHVjd0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgbGVmdDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjMxcHg7d2lkdGg6ODhweH0uc2l0ZS1mb290ZXIgaDJ7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1ib3R0b206MTBweH0uc2l0ZS1mb290ZXIgdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowIDAgMjBweCAwO3BhZGRpbmc6MH0uc2l0ZS1mb290ZXIgLmxpY2Vuc2V7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweH0iXX0= */ \ No newline at end of file diff --git a/images/favicon.png b/images/favicon.png index cacdef657e98ff337214d01782f9bd7675bb7bcb..13d87260b15bfabec99aa5eb8a6222575fe46720 100644 GIT binary patch literal 4113 zcmb_ecT`i^*1rj%i438LAZlVz5ru?62wf6M0!SGJqzj=03=k5M&|4^@41x%#V4*k^ zaZo@|1QiG+BinPcWeV<4d0fF!?<2c{@W7hl1dS~6W&OZC>{oCd2eb@f^h`puk zrfr)50Fbq|A~^s61SBDVlmxhWvMU0>O_fV_epQQDy#_3sEI8pn@KXL0GwP~--pk1sQvYlZ?n{T2d)WoP#na46@`M1d*8MES5V zShNm?!PtoF4`~k9f%e~S{H-*{DVjyYIM6uEaJC=#9s%m#mBHNodqW$7pf|=pvgzQX z_=J#{e&GySDA$@~h5~QU{&at19bH2(iv~Cy16>`wAr@<>t4pMi@kAr61;v19VDKH| z?{rDTLxwntfsQ^Ir-#Lo^@&6yoDo)6NAD1sXhFddzw26ua=1RBezfm)>7dH7bFvW5Yj!EBVrzm&^&7FdHDlCI+87Z^*~x26Zs;ZXSF5&R{~xT`-Cu6=0v>* z)!PEze3#V06D%M(Z7{{`MPT^oOT|dUZddF&IT&*j#}P00#glKmY)# zjXwes0AK(Q_|Gx_mw<#4(@c@fr{=f`^qJEI3)n{CwC9a18bX63TB(KsA-g)~XV<>w zpXZH53l`nu!&cpz(Z>Uz1QSS+*xI#VNQ-8X6O+vgmWoYNC2q01U=sVDIC{f0US6v9+Ph9IWV+0-D6T27iMJ zWp2f5Ic|djRbfYx{UQY|A4+ZM&mz2=3*bP;R~L2BEaAo4{T%XQf_BmlDB%ESY8!C| zn<>a1bQ$6VMzk^?q@AP*p(@T#Uh3@^UswMKf$=1>kk>`?3)cmSpPi@_pkX@gvRL9ML2$FL zhh9a-kCka;5Ee{ZTyGGR|?eYVBH4cl6iD zegWNjIatzrG5=N{l?aG!TbN9bjqMuQvh41DbgA`b;~@>fL&}<2-nf^7D?Z9z-xW^q zJo)0W%!G=Rps*ytoAH3RjbQQ4$^5Vyv;Xkv2)8GIua0(!NUL-CeWNhpG@|BYoiX$* zWZ0?{KWh5%!-vUU@%5&Pg@G?(klSll({4vy^O%g7>KnQ2ewl-FiNlFEj2|mr=7``s z$|Vq*;=fSr0;9o(+zR_`v?4Lbmpd08Je>7tx@5p694{T+Ki;lV3GAi4%6jo6&oY+W z+%vMc?TR8n?P*tqxh$({M8SD}wdcr0b5YgH^}Rx~aul`HY{}8#-4IUlx|ey!eP>LU zt1i!q@gO~JsByjHd_u&|wXLutOc3yKW#`=;_YN_&FEtlgDD%D2=WP?Sm6q$btm=C+ z4>H52%>5y@j#uzr!$hy^A}+yT)zC^%-F3=um%XIg>ZzMe zkQ1G%{7OQJ$n^D?lH&|B&vQYpZk{!;nYt((0v$PB+Ig4p#bG39{aSS5y_i(BlPrwn zamj@G6{hCn@q*KHNrqdBQshKhi-FqcB~@FAnjb`N=`SD0Ui$c8)i>mJP0sww=FQKO z%`sZ@Rew$=s-3C+r)8nD=xxrj!YHN|iOhVGNOmPveo&LL-U3#3~W)Ur0 zg!Dqs-M%VdUj6xZ^o<3xXmIa`P>T_5b=UxusE)@K6iH*FK{r zEn3^<{ z*8-Erl!}?}Cw{*usJ0JXDcqExO7MQi>+SuVhbAjtUr!R`K|T}jdM-8!m?!;OF=GD^ zBR7A^FN--|T>VmNk)cuoI9q2|3mX$}whCAoTjMeudFriWyI&qINi;z2hN?(vXg&*W z%Mh(SUBO6EJwKJHbZ2&uGGk|BJ`D=;i=f<|y+=otO+O2!P1NsOjXtc9uXt)=?rclU ze$l%np}c9kl)!tCZ`vN++6mt?tWoJ-83Aob3U$oc$K0|rJ#M8ixhZT=THx`{*@@gH zDjhPQBtjcrc9vQ-#D8tBm*Ie?=~bs}R&1O%5kT@{1I6Y`tqfrY8(@r0R8{`7^wimG z(cOK#Rp0i7>^vbQ>R_dn%GT~?k3#5;J!gmX=KF>|K+46_Q?ouW^LRjLmxR}i^(7Pm zuVVx9e1r;cem{xjRh#q@0NvD7pul-=dh`oDy}V8uJ|D?ra;OC`>$~%~_xm&rN6s&r ziEd<0tu^c{l`6KBwmtl7JY2wa5k8DSH=mM$yy}*4kD|RQIH*pBy}t)5mZ-UUy4e-c z+x6gnwDPvmO%ZpnD;USgQ;ts9YdJ<+r6pq{Fxh$pHT8gwlsQ zUXo;(u{04-^FLoTI;XfxEx)|dzOAk_7Y?hL4M83<2|JvgisaoqtH;|n`DlaGmM<$X z+(SMD=l9hntvMiE#SOhTPRg#Ol^WvJVpk?`njn0Aj_h`cE(s+N+oMZ@&7kfScy@U1 zzM>@ko=lzY4qI-Y{c(9cP&nO_`eh{Qqe7f}{fgy1_n_ezRyes$>!tyHpgWWE+j`EF zv*bljnXe!yP9ctJ?w@K76-f9~i02 z?l{DZaU?y)Tb+|f|FoQ@$Uk121ct3CFg1{TYrV&(aCfFNjAeN*!gpnb;q0t&zIRt! zE&_TYH8kw#If-BTu4x6z7IdTnEEi=>dy}xrD>x-?ePu+ubr0a#E%CU|K1BToD1Yl9FTxkj?{q8el_dd?44j%ujLB>pV=oYQ zxh$mEI8hM@%B@R6NZ^A+s_#r)U_9r8X%;~mXB1p*pah%EV1`u*{_@YV0m>Cw5>q3z zNrsKBms5s3k}2+-e3XbwNSKxaZYnkwEIoM3@hX>}`UeTPRhN`D`RH0^VgF@pLYfpZ z0S~`fuw<9=;a-TVEsW>k2J4bArr&w=*45k)rt=^K+4Z^XynJLKWw_iHs4)82hrUOX z-;uez7Y+mkX!RaAj9edHyEO)b@>TY*yb`9wAppawxcU+SeXbe43ggx9u4xhSJX>)y-8%f9D&Ek}C-&zY^s37-gsWtBia^glm8|I1ANf1c6_+9C`eh*av;8IZIY P1i)oYwkK5`q9*?n*5<4A literal 262 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 IhbDpl0fl5PmjD0& literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 9eed3ffdc..689effed1 100644 --- a/index.html +++ b/index.html @@ -1,18 +1,18 @@ --- layout: default description: "Uma referência rápida de melhores práticas de PHP, renomados padrões de código e links para tutoriais competentes pela Web" +sitemap: true --- {% capture welcome_content %}{% include welcome.md %}{% endcapture %} -{{ welcome_content|markdownify }} +
+ {{ welcome_content|markdownify }} +
-{% capture backtotop %}[Voltar ao topo](#top){:.top}{% endcapture %} +{% capture backtotop %}[Back to Top](#top){:.top}{% endcapture %} {% for post in site.posts reversed %} - {% if post.isChild != true and loop.first != true %} - {{ backtotop|markdownify }} - {% endif %} -
+{% if post.isChild != true and loop.first != true %}
{{ backtotop|markdownify }}
{% endif %} +
{{ post.content }} -
+ {% endfor %} -{{ backtotop|markdownify }} diff --git a/less/all.less b/less/all.less new file mode 100644 index 000000000..4ecc4c81e --- /dev/null +++ b/less/all.less @@ -0,0 +1,470 @@ +/****************************************************************************** + * Variables + *****************************************************************************/ + +@serif: georgia, serif; +@sans: verdana, sans-serif; +@phpPurple: #8892BF; +@phpPurpleDark: #4F5B93; + +/****************************************************************************** + * Basics + *****************************************************************************/ + +*{ + box-sizing: border-box; +} + +body{ + font-size: 24px; + line-height: 32px; + text-rendering: optimizeLegibility; +} + +h1, h2, h3, h4{ + font-family: @serif; +} + +h1, .alpha{ + position: relative; + font-size: 48px; + font-weight: normal; + line-height: 50px; + text-align: center; +} + +h2, .beta{ + font-size: 32px; + font-weight: normal; + line-height: 36px; +} + +h3, .gamma{ + font-size: 24px; + font-weight: bold; + line-height: 30px; +} + +blockquote{ + border-left: 3px solid #CCC; + padding-left: 20px; + color: #777; + font-style: italic; + word-wrap: break-word; +} + +a{ + color: @phpPurpleDark; + + &:hover{ + color: @phpPurple; + } +} + +.back-to-top{ + text-align: center; + + a{ + background: @phpPurpleDark; + border-radius: 3px; + display: inline-block; + height: 40px; + padding: 0 20px; + transition: all 0.1s ease; + color: white; + font-family: @sans; + font-size: 13px; + line-height: 40px; + text-decoration: none; + text-transform: uppercase; + + &:hover{ + background: @phpPurple; + } + } +} + +img{ + max-width: 100%; +} + +pre, code{ + color: #444; + font-family: "Source Code Pro", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; + font-size: 90%; +} +a{ + pre, code{ + color: inherit; + } +} + +pre{ + background: #f7f7f7; + border: 1px solid #EEE; + border-radius: 3px; + display: block; + overflow: auto; + padding: 20px; + width: 100%; +} + +@media (max-width: 767px) { + body{ + font-size: 18px; + line-height: 24px; + } + h1, .alpha{ + font-size: 36px; + line-height: 38px; + } + + h2, .beta{ + font-size: 24px; + line-height: 28px; + } + + h3, .gamma{ + font-size: 18px; + line-height: 23px; + } + + blockquote{ + margin-left: 0; + } + + ul, ol{ + padding-left: 1em; + } + + pre{ + padding: 5px 10px; + } +} + +@media (max-width: 360px) { + body{ + font-size: 16px; + line-height: 21px; + } + + h1, .alpha{ + font-size: 28px; + line-height: 30px; + } + + h2, .beta{ + font-size: 20px; + line-height: 23px; + } + + h3, .gamma{ + font-size: 16px; + line-height: 20px; + } +} + +/****************************************************************************** + * Header + *****************************************************************************/ + +.site-header{ + padding-top: 40px; + margin-bottom: 40px; + text-align: center; + + h1{ + margin: 0; + font-size: 72px; + line-height: 60px; + + em{ + display: block; + font-size: 34px; + font-style: normal; + } + + a{ + color: #333; + text-decoration: none; + + &:hover{ + color: @phpPurple; + } + } + } + + .build-date{ + margin-bottom: 10px; + color: #999; + font-family: @sans; + font-size: 11px; + text-transform: uppercase; + } + + .btn-share{ + background: @phpPurple; + border-radius: 3px; + display: inline-block; + height: 30px; + padding: 0 20px; + vertical-align: baseline; + color: white; + font-family: @sans; + font-size: 12px; + line-height: 30px; + text-decoration: none; + text-transform: uppercase; + } + + .fork-me{ + background-image: url(data:image/png;base64,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); + background-position: top right; + background-repeat: no-repeat; + background-size: contain; + height: 100px; + width: 100px; + position: absolute; + top: 0; + right: 0; + z-index: 100; + width: 120px; + } +} + +/****************************************************************************** + * Navigation + *****************************************************************************/ + +.site-navigation, +.site-content, +.site-footer{ + margin: 0 auto; + max-width: 840px; + width: 92%; +} + +.site-navigation{ + columns: 3; + column-gap: 40px; + + input[type="checkbox"], + label{ + display: none; + } + + ul{ + list-style: none; + margin: 0; + padding: 0; + + li{ + margin-bottom: 20px; + font-size: 22px; + line-height: 23px; + + a{ + display: block; + color: #444; + font-weight: 700; + text-decoration: none; + + &:hover{ + color: @phpPurple; + } + } + + ul{ + padding-top: 8px; + } + + li{ + margin-bottom: 6px; + font-size: 18px; + + a{ + border: none; + color: #777; + font-weight: normal; + } + } + } + } + li{ + break-inside: avoid; + } +} + +@media (max-width: 820px) { + .site-navigation{ + columns: 2; + } +} + +@media (max-width: 560px) { + .site-navigation{ + columns: 1; + } +} + +@media (max-width: 375px) { + .site-navigation{ + background: fade(white, 95%); + columns: 1; + max-height: 100vh; + position: fixed; + bottom: 0; + left: 0; + z-index: 100; + + label{ + background: @phpPurpleDark; + box-sizing: border-box; + display: block; + height: 40px; + padding: 0 10px; + width: 100vh; + position: absolute; + bottom: 0; + left: 0; + color: white; + font-family: @sans; + font-size: 13px; + line-height: 40px; + text-transform: uppercase; + z-index: 2; + } + + > ul{ + background: fade(white, 96%); + border-top: 3px solid @phpPurple; + box-shadow: fade(black, 25%) 0 -5px 10px; + box-sizing: border-box; + padding: 20px; + overflow: auto; + -webkit-overflow-scrolling: touch; + position: absolute; + left: 0; + bottom: 40px; + height: 50vh; + width: 100vh; + transform: translate(0,100vh); + transition: all 0.2s ease; + z-index: 1; + } + + input[type="checkbox"]:checked ~ ul { + transform: translate(0,0); + } + } +} + +/****************************************************************************** + * Content + *****************************************************************************/ + +.site-content{ + h1{ + padding-top: 40px; + position: relative; + + &:after{ + border: 1px solid #DDD; + border-bottom: none; + content: ""; + display: block; + height: 8px; + position: absolute; + left: 0; + top: 0; + width: 100%; + } + } + + &.chapters{ + counter-reset: chapter; + + h1{ + counter-increment: chapter; + padding-top: 60px; + + &:before{ + display: inline-block; + content: "Chapter " counter(chapter) "."; + position: absolute; + top: 30px; + left: 50%; + transform: translateX(-50%); + color: #999; + font-size: 12px; + letter-spacing: 1px; + line-height: 20px; + text-transform: uppercase; + text-align: center; + } + } + } + + #welcome{ + ul{ + columns: 3; + column-gap: 30px; + list-style-position: inside; + } + } + + .back-to-top{ + margin-bottom: 60px; + } +} + +@media (max-width: 870px) { + .site-content #welcome ul{ + columns: 2; + } +} + +@media (max-width: 600px) { + .site-content #welcome ul{ + columns: 1; + } +} + +/****************************************************************************** + * Footer + *****************************************************************************/ + +.site-footer{ + border-top: 1px solid #CCC; + margin: 60px auto 0 auto; + padding: 40px 20px; + font-family: @sans; + font-size: 16px; + text-align: center; + + .cc-badge{ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAw1BMVEX///8AAAAAAACrsar///8oKSjR1NAODg4jHyDLz8pAPz/f399wcHBQUFBgYGDJzcjEyMN5fHkwMDC9wry4vbeAgIDw8PDBxcDO0c3M0MyUmJPGysW6v7q/v7+fn5/T1tKvtK61urSxt7C/w76zuLKhpKDk5OSRk5F2c3RQUVAbGxuts6yEhoR9fnxDREMgICDW1dXJyMirq6qvr68wLS3Pz8+Rj4+Pj4+LioqEgYJaV1i6ubmbl5meoJ1dXl06NjcZGRmWw6QEAAAAAnRSTlMMANomgjQAAAMCSURBVHjatZYJc6JAEIWznWFmOAQDguAdjUqMd0yi5vz/v2q7GTmkNusWW3kxNfJkPts3TMPVFfyIfiH3ttHwRs1623F0PYp03XHa9ebI6zRu74aDwcPDdQUBXCG3440Qq4ec91GchzqhM/J1FSEYuVguYudLASixnBM6JVPJNxqgtJts2mWHwMh1Ij6dQabZlEeKfDccDlo4xbAsA6e11KzLDoG9EXHvqVbb73Z9m+q+r4dEppLHAmomQ5k1EMmsi44CY74JV/gBU+ohWqtjzSMMY6iBjR4AfQAaTVLO87HkTDabiXIUuNnWieuaLFPgYs1cb1PJC6itUzCrwQ2mCe4bcr9EPEkdOmcsUa+Jo8B1J5wiF8s9J0/DpGQNCt9ogkbladKwwZ/DNnNMtpGfdizlMzkKjAXPQDyxMwUCZqpkMOjYBrBpNADnGDESZDxZ5w4L3uQec5A7chTYCecAPiupBzDHkr0OWHQIKBotwqCzidGI17kTSKlhzFJOyFFgvgSBQXRrhuGr4QUnCFhyzOIbMDLinZTH18y523UTsJmBdS7ARiCQjEcg2fTjBdfrzc6foqCsemwtUUbqvI43jG2lxHMyMACW6MLK7K56Lrjm46qXZNGnkE+LB5AvHjlHudtBvF3MUqcn5eGgybd88aI+AP4KlbMaSF0ERwj2ocZKlxs5k8OXeA6KzkGirICcfwI3ChvEKm6Q/bHkbLbbtXLKUQRPKx+joCGPorGttKXzxTutWrZ41mnxGrdjDcC1LTdvOZcddbndg2DZ5fZoJANbqcuNGtygWttMdvTLtxsE+1uFXp9vafO7LV0ZTE3o/S9NqBqXwLDQ+QeSC23IVG1zDtVFYLD0s0Yf+ALgk0cL+F8wLCL+Ubo18agFqdT+oDeZo/7RL53EzsGUxnvpZtoqzDm9WO6o49JXKaMIpjRCPk1v/1Me6sUc0rZZcE5/BaXtpAQGd4Bozul5BbEDAwoqB6GcrOLcLFesZOw99Yjl7Ql7oeIUXjynBP4h/djT5m+nuF33PcPucwAAAABJRU5ErkJggg==); + background-position: top left; + background-repeat: no-repeat; + background-size: contain; + display: inline-block; + height: 31px; + width: 88px; + } + + h2{ + .gamma; + margin-bottom: 10px; + } + + ul{ + list-style: none; + margin: 0 0 20px 0; + padding: 0; + } + + .license{ + color: #777; + font-size: 13px; + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..18b79f578 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "php-the-right-way", + "version": "2.0.0", + "devDependencies": { + "grunt": "~0.4.5", + "grunt-contrib-less": "~1.0.1", + "grunt-contrib-watch": "~0.6.1", + "grunt-postcss": "^0.6.0", + "autoprefixer": "^6.0.3" + } +} diff --git a/scripts/fastclick.js b/scripts/fastclick.js new file mode 100644 index 000000000..6fefca20d --- /dev/null +++ b/scripts/fastclick.js @@ -0,0 +1,4 @@ +/** Shrinkwrap URL: + * /v2/bundles/js?modules=fastclick%401.0.6%2Co-autoinit%401.0.1&shrinkwrap= + */ +!function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return t[o].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";n(1),window.Origami={fastclick:n(2),"o-autoinit":n(4)}},function(t,e){t.exports={name:"__MAIN__",dependencies:{fastclick:"fastclick#*","o-autoinit":"o-autoinit#^1.0.0"}}},function(t,e,n){t.exports=n(3)},function(t,e){"use strict";var n=!1;!function(){function e(t,n){function o(t,e){return function(){return t.apply(e,arguments)}}var r;if(n=n||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=n.touchBoundary||10,this.layer=t,this.tapDelay=n.tapDelay||200,this.tapTimeout=n.tapTimeout||700,!e.notNeeded(t)){for(var a=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],c=this,s=0,u=a.length;u>s;s++)c[a[s]]=o(c[a[s]],c);i&&(t.addEventListener("mouseover",this.onMouse,!0),t.addEventListener("mousedown",this.onMouse,!0),t.addEventListener("mouseup",this.onMouse,!0)),t.addEventListener("click",this.onClick,!0),t.addEventListener("touchstart",this.onTouchStart,!1),t.addEventListener("touchmove",this.onTouchMove,!1),t.addEventListener("touchend",this.onTouchEnd,!1),t.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(t.removeEventListener=function(e,n,o){var i=Node.prototype.removeEventListener;"click"===e?i.call(t,e,n.hijacked||n,o):i.call(t,e,n,o)},t.addEventListener=function(e,n,o){var i=Node.prototype.addEventListener;"click"===e?i.call(t,e,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(t,e,n,o)}),"function"==typeof t.onclick&&(r=t.onclick,t.addEventListener("click",function(t){r(t)},!1),t.onclick=null)}}var o=navigator.userAgent.indexOf("Windows Phone")>=0,i=navigator.userAgent.indexOf("Android")>0&&!o,r=/iP(ad|hone|od)/.test(navigator.userAgent)&&!o,a=r&&/OS 4_\d(_\d)?/.test(navigator.userAgent),c=r&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;e.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(r&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},e.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!i;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},e.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},e.prototype.determineEventType=function(t){return i&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},e.prototype.focus=function(t){var e;r&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},e.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},e.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},e.prototype.onTouchStart=function(t){var e,n,o;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],r){if(o=window.getSelection(),o.rangeCount&&!o.isCollapsed)return!0;if(!a){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},e.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},e.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},e.prototype.onTouchEnd=function(t){var e,n,o,s,u,l=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,c&&(u=t.changedTouches[0],l=document.elementFromPoint(u.pageX-window.pageXOffset,u.pageY-window.pageYOffset)||l,l.fastClickScrollParent=this.targetElement.fastClickScrollParent),o=l.tagName.toLowerCase(),"label"===o){if(e=this.findControl(l)){if(this.focus(l),i)return!1;l=e}}else if(this.needsFocus(l))return t.timeStamp-n>100||r&&window.top!==window&&"input"===o?(this.targetElement=null,!1):(this.focus(l),this.sendClick(l,t),r&&"select"===o||(this.targetElement=null,t.preventDefault()),!1);return r&&!a&&(s=l.fastClickScrollParent,s&&s.fastClickLastScrollTop!==s.scrollTop)?!0:(this.needsClick(l)||(t.preventDefault(),this.sendClick(l,t)),!1)},e.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},e.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},e.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},e.prototype.destroy=function(){var t=this.layer;i&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},e.notNeeded=function(t){var e,n,o,r;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!i)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(o=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),o[1]>=10&&o[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},e.attach=function(t,n){return new e(t,n)},"function"==typeof n&&"object"==typeof n.amd&&n.amd?n(function(){return e}):"undefined"!=typeof t&&t.exports?(t.exports=e.attach,t.exports.FastClick=e):window.FastClick=e}()},function(t,e,n){t.exports=n(5)},function(t,e){"use strict";function n(t){t in o||(o[t]=!0,document.dispatchEvent(new CustomEvent("o."+t)))}var o={};window.addEventListener("load",n.bind(null,"load")),window.addEventListener("load",n.bind(null,"DOMContentLoaded")),document.addEventListener("DOMContentLoaded",n.bind(null,"DOMContentLoaded")),"complete"===document.readyState?(n("load"),n("DOMContentLoaded")):"interactive"===document.readyState&&n("DOMContentLoaded")}]); diff --git a/scripts/setup.js b/scripts/setup.js index 262160a84..9b258e20c 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -1,80 +1,18 @@ (function ($) { - // Load contributors - var $contributors = $('#contributors'); - var repo_user = 'PHPSP'; - if ( $contributors.length ) { - var fail = function () { - $contributors.html('

Este projeto não seria possível sem a ajuda de nossos contribuintes no GitHub.

'); - }; - $.ajax({ - cache: false, - dataType: 'jsonp', - timeout: 3000, - type: 'GET', - url: 'https://api.github.com/repos/' + repo_user + '/php-the-right-way/contributors' - }).done(function (data) { - if ( data.data && data.data.length ) { - var $ul = $('
    '), dataLength = data.data.length; - for ( var i = 0; i < dataLength; i++ ) { - $ul.append(['
  • ', data.data[i].login, '
  • '].join('')); - } - $contributors.html($ul); - } else { - fail(); - } - }).fail(fail); - } -})(jQuery); - -(function ($) { - //Add current view's highlighting to the navigation - - /** helper for highlighting */ - function highlightNav(navLinks,id) - { - navLinks.filter('[href="/#'+id+'"]').addClass("active"); - } - - $(window).scroll(function() { - //console.log("They see me scrollin, they hatin"); - - //clear highlighting - var navLinks = $('.site-navigation a'); - navLinks.removeClass("active"); + // Attach FastClick + var attachFastClick = Origami.fastclick; + attachFastClick(document.body); - //calc current viewport - var viewTop = $(window).scrollTop(); - var viewBottom = viewTop + $(window).height(); - - //for all h1 and h2 elements, check if they are visible - //performance tweak: stop each() after the first element is found to be behind view - var previous = ""; - var foundOne = false; - var fallback = ""; - $('h1, h2').each(function(i,e) { - //get element position; - var eTop = $(e).offset().top; - var eBottom = eTop + $(e).height(); - var id=e.id; - id = id.replace("_title", ""); - - if (eTop >= viewTop) { - //if we are passed the view and no heading was highlighted yet, store previous one as fallback - if (! foundOne) { - fallback=previous; - } - if (eBottom <= viewBottom) { - highlightNav(navLinks, id); - foundOne = true; - } else { - return false; //break the each(), the rest is below - } - } - previous=id; - }); - //no h1/h2 is in the viewport, so highlight the last one above - if (! foundOne) { - highlightNav(navLinks, fallback); + // Mobile TOC menu + var $window = $(window), + $nav = $('.site-navigation'); + $nav.click(function (e) { + var $target = $(e.target); + if ($target.is($nav) && $window.width() <= 375) { + $nav.toggleClass('open'); + } + if ($target.is('a')) { + $nav.removeClass('open'); } }); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/styles/base/spacing.less b/styles/base/spacing.less index 9ebff3cef..59c164e6c 100644 --- a/styles/base/spacing.less +++ b/styles/base/spacing.less @@ -22,7 +22,7 @@ */ .ptn, .pvn, .pan{ - padding-top: 0px !important + padding-top: 0 !important } .pth, .pvh, .pah{ padding-top: @baseline / 2 !important @@ -34,7 +34,7 @@ padding-top: @baseline * 2 !important } .prn, .phn, .pan{ - padding-right: 0px !important + padding-right: 0 !important } .prh, .phh, .pah{ padding-right: @baseline / 2 !important @@ -46,7 +46,7 @@ padding-right: @baseline * 2 !important } .pbn, .pvn, .pan{ - padding-bottom: 0px !important + padding-bottom: 0 !important } .pbh, .pvh, .pah{ padding-bottom: @baseline / 2 !important @@ -58,7 +58,7 @@ padding-bottom: @baseline * 2 !important } .pln, .phn, .pan{ - padding-left: 0px !important + padding-left: 0 !important } .plh, .phh, .pah{ padding-left: @baseline / 2 !important @@ -70,7 +70,7 @@ padding-left: @baseline * 2 !important } .mtn, .mvn, .man{ - margin-top: 0px !important + margin-top: 0 !important } .mth, .mvh, .mah{ margin-top: @baseline / 2 !important @@ -82,7 +82,7 @@ margin-top: @baseline * 2 !important } .mrn, .mhn, .man{ - margin-right: 0px !important + margin-right: 0 !important } .mrh, .mhh, .mah{ margin-right: @baseline / 2 !important @@ -94,7 +94,7 @@ margin-right: @baseline * 2 !important } .mbn, .mvn, .man{ - margin-bottom: 0px !important + margin-bottom: 0 !important } .mbh, .mvh, .mah{ margin-bottom: @baseline / 2 !important @@ -106,7 +106,7 @@ margin-bottom: @baseline * 2 !important } .mln, .mhn, .man{ - margin-left: 0px !important + margin-left: 0 !important } .mlh, .mhh, .mah{ margin-left: @baseline / 2 !important @@ -127,5 +127,5 @@ line-height: @baseline * 2 !important; } .lhn { - line-height: 0px !important; -} \ No newline at end of file + line-height: 0 !important; +} diff --git a/styles/site/site-navigation.less b/styles/site/site-navigation.less index 4f5917990..5c9e80f77 100644 --- a/styles/site/site-navigation.less +++ b/styles/site/site-navigation.less @@ -19,6 +19,7 @@ .pan; .no-list; font-size: 16px; + margin-bottom: 10px; } .site-navigation > ul > li{ margin-bottom: 10px; diff --git a/vagrant.md b/vagrant.md deleted file mode 100644 index 8ed1216e9..000000000 --- a/vagrant.md +++ /dev/null @@ -1,13 +0,0 @@ -# Contribuir com o projeto utilizando o Vagrant - -### Instalar o vagrant -* Instale [Vagrant](http://www.vagrantup.com/) e [VirtualBox](https://www.virtualbox.org/) -* Execute o comando `vagrant up` no diretório do projeto - -### Gerar o build do projeto e visualizar localmente -* Realize as alterações -* Para criar o build: - * Execute `vagrant ssh -c 'cd /vagrant && jekyll build'` -* Para visualizar as alterações: - * Execute `vagrant ssh -c 'cd /vagrant && jekyll serve'` - * Acesse [visualize localmente](http://localhost:4000) \ No newline at end of file From 238aaa53b52ec44ce072d6ed8018a99a16d95d17 Mon Sep 17 00:00:00 2001 From: Paulo Eduardo Date: Thu, 24 Mar 2016 14:32:38 -0300 Subject: [PATCH 2/2] Fix Duplication --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 3d8ea577e..ec7a88fcb 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,6 @@ _PHP: Do Jeito Certo_ possui banners que você pode usar em seu site. Para mostr * [Turco](http://hkulekci.github.io/php-the-right-way/) * [Ucraniano](http://iflista.github.com/php-the-right-way) -Se você estiver interessado em traduzir o PHP Do Jeito Certo, fork esse repositório no GitHub e publique sua versão localizada na sua própria página do GitHub. Nos iremos referenciar a sua tradução a partir da documentação principal - - ## Traduções Se você tem interesse em traduzir _PHP: The Right Way_, faça o fork do repo no GitHub e publique seu fork para sua