├── .gitignore ├── README.md ├── _config.yml ├── _includes ├── sidebar-about.html ├── sidebar-event.html └── sidebar-social.html ├── _layouts ├── framework.html ├── post.html ├── secret.html └── site.html ├── _plugins └── jekyll_sort.rb ├── _posts ├── 2013-05-25-welcome.md ├── 2013-05-31-akqa-anoraks.md ├── 2013-06-03-filters.md ├── 2013-06-14-60000.md ├── 2013-06-21-london-web.md ├── 2013-06-30-the-future-of-dev-tools-opera-next.md └── 2013-07-12-london-ajax.md ├── _watch.sh ├── about └── index.md ├── assets ├── css │ ├── styles.min.css │ └── styles.min.css.map ├── fonts │ ├── icomoon.dev.svg │ ├── icomoon.eot │ ├── icomoon.svg │ ├── icomoon.ttf │ └── icomoon.woff ├── img │ ├── about │ │ ├── andi-large.jpg │ │ └── andi-small.jpg │ ├── chrome-canary.jpg │ ├── firefox-aurora.jpg │ ├── placeholder.gif │ ├── safari-webkit.jpg │ ├── secrets │ │ ├── chrome-active-hover-focus-visited.png │ │ ├── chrome-breadcrumbs.png │ │ ├── chrome-checking-domcontentloaded-and-loadevent.png │ │ ├── chrome-general-dock-the-developer-tools-to-aid-responsive-design.png │ │ ├── chrome-mobile-using-developer-tools-on-android-adb.png │ │ ├── chrome-mobile-using-developer-tools-on-android-browser-settings.png │ │ ├── chrome-mobile-using-developer-tools-on-android-inspect.png │ │ ├── chrome-mobile-using-developer-tools-on-android-phone-settings.png │ │ ├── chrome-mobile-using-developer-tools-on-android-result.png │ │ ├── chrome-mobile-using-developer-tools-on-android-settings.png │ │ ├── chrome-performance-measure-rendering-performance-and-fps-timeline-bars.png │ │ ├── chrome-performance-measure-rendering-performance-and-fps-timeline-key.png │ │ ├── chrome-table-basic.png │ │ ├── chrome-table-custom-headings.png │ │ ├── firebug-active-hover-focus-visited.png │ │ ├── firebug-inspect-fonts.png │ │ ├── firebug-timestamp.png │ │ ├── firefox-active-hover-focus-visited.png │ │ ├── firefox-breadcrumbs.png │ │ ├── firefox-inspect-fonts.gif │ │ ├── firefox-inspect-search-for-dom-nodes-large.png │ │ ├── firefox-inspect-search-for-dom-nodes-small.png │ │ ├── internet-explorer-debugging-minified-javascript.png │ │ ├── opera-active-hover-focus-visited.png │ │ └── safari-active-hover-focus-visited.png │ ├── site-icon-plain-twitter.png │ ├── site-icon-plain.png │ └── site-icon.png ├── js │ ├── common.js │ ├── common.js.map │ ├── common.min.js │ ├── lib │ │ ├── jquery-1.10.1.js │ │ ├── jquery-1.10.1.min.js │ │ └── jquery-1.10.1.min.map │ └── post-list.js └── scss │ ├── _helpers.scss │ ├── _icons.scss │ ├── _normalize.scss │ ├── _vars.scss │ └── styles.scss ├── contribute └── index.md ├── favicon.ico ├── index.html ├── rakefile └── secret ├── console-assert.md ├── console-changing-frame-focus.md ├── console-last-evaluated-expression.md ├── console-log-info-warn-error.md ├── console-open-the-console-from-any-tab.md ├── console-output-data-as-a-table.md ├── console-persistent-console.md ├── console-referencing-the-current-and-previous-element.md ├── console-rerun-command.md ├── console-using-a-time-stamp-to-mark-the-timeline.md ├── console-using-the-console-timer.md ├── debugging-a-canvas-element.md ├── debugging-conditional-breakpoints.md ├── debugging-debugging-minified-javascript.md ├── debugging-debugging-with-debugger.md ├── debugging-dom-breakpoints.md ├── debugging-emulate-a-touch-device.md ├── debugging-emulate-a-user-agent.md ├── debugging-inspect-scope-during-a-breakpoint.md ├── debugging-override-device-orientation.md ├── debugging-override-geolocation.md ├── debugging-running-code-snippets.md ├── debugging-use-javascript-source-maps.md ├── debugging-watching-values.md ├── debugging-xhr-breakpoints.md ├── editing-drag-and-drop-to-rearrange-elements.md ├── editing-incrementing-css-values.md ├── editing-styling-active-hover-focus-visited-states.md ├── editing-use-sass-source-maps.md ├── extensions-override-geolocation.md ├── general-dock-the-developer-tools-to-aid-responsive-design.md ├── general-finding-the-development-tools.md ├── general-learn-the-keyboard-shortcuts.md ├── general-undocking-and-moving-the-developer-tools.md ├── general-use-the-latest-developer-release.md ├── inspect-inspect-fonts.md ├── inspect-navigating-the-dom-with-breadcrumbs.md ├── inspect-search-for-dom-nodes.md ├── inspect-the-box-model.md ├── inspect-viewing-your-site-as-responsive.md ├── inspect-viewing-your-site-in-3d.md ├── mobile-using-developer-tools-on-android.md ├── mobile-using-developer-tools-on-ios.md ├── performance-checking-domcontentloaded-and-loadevent.md ├── performance-disable-the-browser-cache.md ├── performance-export-the-network-timeline-as-har.md ├── performance-measure-rendering-performance-and-fps.md ├── performance-replay-a-xhr-network-request.md └── performance-sort-the-network-timeline.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .allow-devtools-edit 3 | .sass-cache/ 4 | _site/ 5 | _temp/ 6 | assets/js/compiler.jar 7 | demos/ 8 | CNAME -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Secrets of the Browser Developer Tools 2 | ====================================== 3 | 4 | A site providing a list of Browser Developer Tool 'secrets' for Chrome, Firebug, Firefox, Internet Explorer, Opera and Safari. 5 | 6 | http://www.devtoolsecrets.com/ 7 | 8 | How to Run SotBDT Locally 9 | ------------------------- 10 | 11 | At the heart of *Secrets* is Jekyll, a static site publisher. 12 | 13 | To run the site: 14 | 15 | * Go to your usual Workspace/Projects folder 16 | * git clone https://github.com/stubben/dev-tool-secrets.git 17 | * You'll need to install Jekyll: 18 | 19 | gem install jekyll 20 | 21 | * You'll also need rdiscount, if Jekyll does not download it as a dependency: 22 | 23 | gem install rdiscount 24 | 25 | * Jekyll can be run with the following command from the cloned directory: 26 | 27 | jekyll serve -w 28 | 29 | * The site should load at http://localhost:4000 -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # _config.yml 2 | 3 | # (c)2013 Andi Smith 4 | # @andismith 5 | # http://www.andismith.com 6 | 7 | # more info: https://github.com/mojombo/jekyll/wiki/Configuration 8 | # !! changes require a restart of jekyll serve 9 | 10 | # options as per github pages (for compatibility locally) 11 | lsi: false # no index for related posts 12 | pygments: true # syntax highlighting 13 | safe: false # no plugins 14 | 15 | # source/destination for local development 16 | source: . 17 | destination: ./_site 18 | markdown: rdiscount 19 | 20 | # blog 21 | permalink: /news/:year/:month/:title 22 | 23 | paginate: 1000 24 | paginate_path: "/page/:num" 25 | 26 | # site data 27 | title: Secrets of the Browser Developer Tools 28 | url: http://www.devtoolsecrets.com 29 | encoded_url: http%3A%2F%2Fwww.devtoolsecrets.com 30 | asset_path: /assets/img/posts/ 31 | comments_post_url: https://github.com/andismith/andismith.github.com/issues/ 32 | comments_get_url: https://api.github.com/repos/andismith/andismith.github.com/issues/ 33 | asset_url: http://www.andismith.com/assets/img/posts/ 34 | #feed_url: http://www.andismith.com/feed/index.xml 35 | 36 | # personal data 37 | me: 38 | name: Andi Smith 39 | fullname: Andrew Smith 40 | location: London, England 41 | job: Presentation Technical Architect 42 | twitter: andismith 43 | twitter_url: http://www.twitter.com/andismith/ 44 | company: AKQA 45 | company_url: http://www.akqa.com 46 | image: /assets/img/about/andi-small.jpg 47 | 48 | # social media data 49 | social: 50 | github: https://github.com/andismith/dev-tool-secrets 51 | twitter: devtoolsecrets 52 | twitter_url: http://www.twitter.com/devtoolsecrets/ 53 | 54 | jekyll_sort: 55 | - src: pages 56 | by: order 57 | direction: up 58 | dest: posts_sorted_by_order -------------------------------------------------------------------------------- /_includes/sidebar-about.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Get the most of your developer tools in Chrome, Firebug, Firefox, Internet Explorer, Opera and Safari.

4 | 5 |

With {{ site.me.name }}, a {{ site.me.job }} in {{ site.me.location }}.

6 | 7 |
-------------------------------------------------------------------------------- /_includes/sidebar-event.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Events

4 |
5 | 12 |
13 | 14 |
-------------------------------------------------------------------------------- /_includes/sidebar-social.html: -------------------------------------------------------------------------------- 1 |
2 |

Stay Social

3 | 43 |
-------------------------------------------------------------------------------- /_layouts/framework.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ site.title }} - {{ page.title }} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 | {{ content }} 42 |
43 | 44 | 45 | 46 | 47 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: site 3 | section: about 4 | --- 5 | 6 |
7 |
8 |

{{ page.title }}

9 |
10 | 11 |
12 | 13 | 14 | {{ page.content }} 15 |
16 | 17 | 52 |
-------------------------------------------------------------------------------- /_layouts/secret.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: site 3 | section: secrets 4 | sidebar: none 5 | --- 6 |
9 |
10 |

{{ page.title }}

11 |
12 | 13 |
14 | 18 | 19 | {{ page.content }} 20 | 21 | 56 |
57 |
-------------------------------------------------------------------------------- /_layouts/site.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: framework 3 | --- 4 | 5 | 8 | 9 |
10 |
11 | 19 | 20 |
21 | 22 | {{ content }} 23 | 24 |
25 | 26 |
27 | 28 | {% if page.sidebar != 'none' %} 29 | 47 | {% endif %} 48 |
49 | -------------------------------------------------------------------------------- /_plugins/jekyll_sort.rb: -------------------------------------------------------------------------------- 1 | module Jekyll 2 | 3 | class DataSorter < Jekyll::Generator 4 | safe true 5 | priority :lowest 6 | 7 | def initialize(config) 8 | end 9 | 10 | def generate(site) 11 | config = site.config 12 | 13 | if !config['jekyll_sort'] 14 | return 15 | end 16 | 17 | if !config['posts'] 18 | postData = [] 19 | site.posts.each { |post| 20 | postHash = post.data 21 | postHash['url'] ||= post.url 22 | postHash['content'] ||= post.content 23 | postHash['date'] ||= post.date 24 | postHash['tags'] ||= post.data.has_key?('tags') ? post.data['tags'] : [] 25 | postHash['sort'] ||= post.data.has_key?('sort') ? post.data['sort'] : 0 26 | postData.push(postHash) 27 | } 28 | config['posts'] = postData 29 | end 30 | 31 | if !config['pages'] 32 | pageData = [] 33 | site.site_payload["site"]["pages"].each { |page| 34 | pageHash = page.data 35 | pageHash['url'] ||= page.url 36 | pageHash['content'] ||= page.content 37 | pageHash['tags'] ||= page.data.has_key?('tags') ? page.data['tags'] : [] 38 | pageHash['sort'] ||= page.data.has_key?('sort') ? page.data['sort'] : 0 39 | pageData.push(pageHash) 40 | } 41 | config['pages'] = pageData 42 | end 43 | 44 | sort_jobs = config['jekyll_sort'] 45 | ans = [] 46 | sort_jobs.each do |job| 47 | 48 | # Filter by tags if necessary, use raw src if not 49 | if job.has_key?('include_tags') 50 | data = filter_by_tag(config[job['src']], job['include_tags']) 51 | else 52 | data = config[job['src']] 53 | end 54 | 55 | # Sort the desired collection 56 | if job['by'] 57 | ans = data.sort {|a,b| a[job['by']] <=> b[job['by']] } 58 | else 59 | ans = data.sort 60 | end 61 | 62 | case job['direction'] 63 | when "down" 64 | ans.reverse! 65 | end 66 | 67 | config[job['dest']] = ans 68 | end 69 | end 70 | 71 | # Filter content collection by the "include_tags" attribute on the config 72 | # +content_collection+ an array of hashes 73 | # +tags+ an array of tags to filter by 74 | # 75 | # Returns a filtered collection by tag 76 | def filter_by_tag(content_collection, tags) 77 | filtered = [] 78 | content_collection.each { |item| 79 | tags.each do |tag| 80 | if item["tags"].include?(tag) || item["tags"].include?(tag.capitalize) 81 | filtered.push(item) 82 | next 83 | end 84 | end 85 | } 86 | filtered 87 | end 88 | end 89 | 90 | end -------------------------------------------------------------------------------- /_posts/2013-05-25-welcome.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-05-29 18:00:00 3 | layout: post 4 | published: true 5 | 6 | title: Welcome 7 | --- 8 | 9 |

Welcome to "Secrets of the Browser Developer Tools"!

10 | 11 |

Over the last few years there has been one tool that has helped out every web developer more than any other – the browser developer tools. Working in harmony with the web browser, the developer tools allow us to manipulate DOM elements; gauge performance and debug JavaScript from within the browser window in real time.

12 | 13 |

There are many features hidden away in the browser development tools and this site aims to help you find them. We're not expecting every one of these to be unknown to you, but hopefully some of these will help you to become an even better web developer. We will not just be showing you in Chrome (as so many articles do) - we need our sites to work in every browser, so where ever possible we'll give you the instructions on how to use each browser. Each browser has its own web developer tools with its own capabilities, and we aim to cover that here.

14 | 15 |

This is by no means an exhaustive list, we're still adding secrets to the site - you can expect regular updates with new secrets over the coming days, weeks and months.

16 | 17 |

I don't know them every secret myself, so if you have more to share, why not contribute?

18 | 19 |

Happy Developing!

20 | 21 |

Andi Smith

-------------------------------------------------------------------------------- /_posts/2013-05-31-akqa-anoraks.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-05-31 19:00:00 3 | layout: post 4 | published: true 5 | 6 | title: AKQA Anoraks 7 | --- 8 | 9 |

Last night I presented my first session on "Secrets of the Browser Developer Tools" at AKQA Anoraks, and I also took the opportunity to publicly announce the availability of the site.

10 | 11 |

I've spoken at AKQA Anoraks a few times before, and it's great to see an audience so receptive to the talk I was giving. Hopefully everybody came away with at least 1 new way of working within the Developer Tools. At the start of the talk I asked how many people were using each of the Browser Developer Tools as their primary development tool. The rough results of the survey, bearing in mind I was counting fast, were as follows:

12 | 13 | 21 | 22 |

Chrome Developer Tools have by far the best feature set, and it appears developers are aware of this with their strong alliance with the browser. Or, could it be that the number of presentations, talks and videos on Chrome Dev Tools far outweighs any of the competition?

23 | 24 |

Regardless, here are the slides for last nights talk. If you'd like me to talk at your event - whether it's a meetup, conference or learning session - please get in contact!

25 | 26 |

Happy Anoraking!

27 | 28 |

Andi Smith.

-------------------------------------------------------------------------------- /_posts/2013-06-03-filters.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 23:20:00 3 | layout: post 4 | published: true 5 | 6 | title: Filters 7 | --- 8 | 9 |

Firstly, a BIG thank you to everyone who has visited, tweeted, shared and contributed to the site in its first week. The response has been overwhelming, and I'm pleased to say this is just the beginning! Please keep spreading the word about the site, and I'll keep adding new secrets and features!

10 | 11 |

This week I've added a number of new secrets, but I've also see some changes to the way the site works. Looking at initial analytics data, it seemed a lot of users were visiting the homepage, seeing the filters and interacting without reading any secrets.

12 | 13 |

So I've re-vamped filters from a full page panel to a single line. The left side drop down switches between all and favorites (with date to come soon); while the right side toggles each of the browsers. I've removed the category feature altogether for the meantime - but I'd be interested in knowing whether this is something there is a demand for.

14 | 15 |

The new feature bar is still a work in progress - there's additional features to be added such as sorting by date - but it should mean you can access the content of the site much quicker. The code needs some tidying too.

16 | 17 |

I'm keen to make changes and see the reaction rather than wait days to perfect an idea, and I'd love to know your feedback on the site whether you think it is good or bad, if you have any comments or ideas - please submit them here, or message me on Twitter.

18 | 19 |

Also, if you have any secrets you'd like to share, please contribute!

20 | 21 |

Finally, please ensure you follow @devtoolsecrets for all the latest news.

22 | 23 |

Happy filtering!

24 | 25 |

Andi Smith.

-------------------------------------------------------------------------------- /_posts/2013-06-14-60000.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-14 12:30:00 3 | layout: post 4 | published: true 5 | 6 | title: 60,000 7 | --- 8 | 9 |

This last week has been a bit of a blur for me.

10 | 11 |

At the start of the week, the Can I Use Web Widget which I wrote late last year went viral, and I had so much positive feedback on the idea, thank you to everyone who has shared and tweeted about it. Sara Soueidan has implemented it in to her site now - any other sightings in the wild?

12 | 13 |

Later in the week, "Secrets of the Browser Developer Tools" went viral too with a massive increase in traffic. Since launch, the secrets on these pages have been read almost 60,000 times. That's incredible. If even a quarter of those secrets read were new discoveries, then there are a lot of developers with more knowledge about their tools than they were last week!

14 | 15 |

The traffic is likely to slow down after the initial flood, but let's keep spreading the word about these awesome tools, so keep tweeting, keep telling your friends. I'm speaking at London Web this Thursday (20th June) and I'm hoping to speak at a couple of conferences this year (talk proposals are in!) - so we can spread the word and help more people!

16 | 17 |

So now the aim is to keep adding those secrets so we can keep learning new things. I like to aim high, so we're going to aim for 200 secrets by the end of the year. Are there even 200 secrets? There's only one way to find out!

18 | 19 |

Thank you to everyone who has contributed something to the site. Whether your contribution has been a bug report; a typo fix; adding another browser or a brand new secret, thank you. The support from you all is amazing.

20 | 21 |

Make sure you follow @devtoolsecrets for all the latest news.

22 | 23 |

Finally, I'd love to have some developer quotes about this site for use in a top of the page teaser. If you'd like to be quoted, please send a tweet @devtoolsecrets. I'll use the best ones :)

24 | 25 |

Happy Discoveries!

26 | 27 |

Andi Smith.

-------------------------------------------------------------------------------- /_posts/2013-06-21-london-web.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-21 00:35:00 3 | layout: post 4 | published: true 5 | 6 | title: London Web 7 | --- 8 | 9 |

I've just got back from presenting at this months' 10 | London Web. Thank you to everyone who turned up, I hope you had as much fun as I did - from those I spoke to it seemed as though everyone got a lot out of it.

11 | 12 |

Congratulations to Nathan O'Hanlon, the organiser of London Web, for becoming a father today (technically, yesterday now). Obviously he couldn't make the meetup today - which made things interesting as I found myself introducing myself!

13 | 14 |

As I have done previously, I asked the audience (of around 50 people) what Dev Tools they were using as their primary development tool and the answers were (roughly) as follows:

15 | 16 | 24 | 25 |

It's interesting to see the continued usage for Firebug despite it not receiving updates as frequently as the others. I hope the tools for Firefox, Opera and Safari are being used (even if not as primary tools) as they are all great resources. As I mention in my talks, we are not building sites for just one browser, so it is important to know the features and benefits of each.

26 | 27 |

Here are the slides for my London Web talk. If you'd like me to talk at your event, drop me a message. I've signed up to speak at a few conferences, so I'm hoping to get to share the Dev Tools love around the world; but in the meantime I should be able to announce my next London talking appearance in the next few days so stay tuned.

28 | 29 |

Night London!

30 | 31 |

Andi Smith.

-------------------------------------------------------------------------------- /_posts/2013-06-30-the-future-of-dev-tools-opera-next.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-30 11:15:00 3 | layout: post 4 | published: true 5 | 6 | title: The Future of Dev Tools - Opera Next 7 | --- 8 | 9 |

I thought I'd try something a little different today, by creating a (very) short video blog introducing Opera Next's Developer Tools, which are changing significantly from what was previously available in Opera (Dragonfly) now Opera are using the Chromium browser.

10 | 11 |
12 | 13 |

When I started making the video, I don't think I appreciated how long it would take to do, so don't expect too many video blogs. However, it would be nice to run more video blogs in the future - firstly, one on IE11 where we take a look around the new developer tools there; and then perhaps run the videos with a bit more structure with "latest developments", "questions and answers" and perhaps even a couple of interviews with the people that make these tools possible?

14 | 15 |

Let me know your thoughts over on Twitter.

16 | 17 |

It's a Wrap!

18 | 19 |

Andi Smith.

-------------------------------------------------------------------------------- /_posts/2013-07-12-london-ajax.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-07-12 00:35:00 3 | layout: post 4 | published: true 5 | 6 | title: London Ajax 7 | --- 8 | 9 |

This week I got to present at 10 | London Ajax, thank you to the organisers for the opportunity and to everyone who came. Here are the slides from my talk - they're mostly new secrets, so make sure you take a look!

11 | 12 |

Again I asked the audience what Dev Tools they were using as their primary development tool and the answers were (roughly) as follows:

13 | 14 | 22 | 23 |

If you're a Firebug fan, you may be please to hear that Steven Roussey, one of the contributors to Firebug, has created a massive update of Firebug secrets. So please join me in giving a big thank you to him!

24 | 25 |

Sorry that I haven't been posting many secrets recently. All my spare time has been spent working on something else (related to Developer Tools), that I will be able to announce at a later date. Needless to say, I myself will be back to posting secrets in the coming days.

26 | 27 |

Until Then!

28 | 29 |

Andi Smith.

-------------------------------------------------------------------------------- /_watch.sh: -------------------------------------------------------------------------------- 1 | # _watch.sh 2 | 3 | sass --watch assets/scss/styles.scss:assets/css/styles.min.css --style compressed --sourcemap 4 | #sass --watch assets/scss/styles.scss:assets/css/styles.css --style expanded 5 | 6 | exit 0 7 | 8 | -------------------------------------------------------------------------------- /about/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | date: 2013-01-01 00:00:00 4 | layout: site 5 | section: about 6 | order: none 7 | --- 8 | 9 | # About # 10 | 11 | ## Welcome ## 12 | 13 | Welcome to "Secrets of the Browser Developer Tools"! Over the last few years there has been one tool that has helped out every web developer more than any other – the browser developer tools. Working in harmony with the web browser, the developer tools allow us to manipulate DOM elements; gauge performance and debug JavaScript from within the browser window in real time. 14 | 15 | Happy Developing! 16 | 17 | {{ site.me.name }} 18 | 19 |
20 | 21 | ## What are Developer Tools? ## 22 | 23 | Nowadays it seems hard to imagine ever building a website without one of these handy tools, which are normally accessible by either pressing "F12" in Windows or "Cmd" ⌘, "Option" ⌥ and "I" on the Mac, or by right clicking on the page and selecting “Inspect Element”. 24 | 25 | Browser|Development Toolset|Type|Documentation 26 | :----|:----|:----|:---- 27 | Chrome|Developer Tools|Integrated|[Documentation](http://code.google.com/chrome/devtools/docs/overview.html) 28 | Firefox|Firebug|[Add-on](http://www.getfirebug.com)|[Documentation](http://getfirebug.com/wiki/index.php/Main_Page) 29 | Firefox|Developer Tools|Integrated|[Documentation](https://developer.mozilla.org/en-US/docs/Tools) 30 | Internet Explorer|Developer Toolbar|Integrated|[Documentation](http://msdn.microsoft.com/en-us/library/gg589507\(v=VS.85\).aspx) 31 | Opera|Dragonfly|Integrated|[Documentation](http://www.opera.com/dragonfly/documentation/) 32 | Safari|Developer Tools|Integrated ([Default off](http://developer.apple.com/library/safari/#documentation/appleapplications/Conceptual/Safari_Developer_Guide/2SafariDeveloperTools/SafariDeveloperTools.html#//apple_ref/doc/uid/TP40007874-CH3-SW7))|[Overview](http://developer.apple.com/library/safari/#documentation/appleapplications/Conceptual/Safari_Developer_Guide/2SafariDeveloperTools/SafariDeveloperTools.html) 33 | 34 | ## The Ideal Developer Tool Environment? ## 35 | 36 | Historically developers have used Firefox's Firebug add-on to develop and debug their websites, but in recent years Chrome's Developer Tools have pulled away from the others offering superior functionality. 37 | -------------------------------------------------------------------------------- /assets/css/styles.min.css: -------------------------------------------------------------------------------- 1 | /* normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace, serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.svg#icomoon") format("svg"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype");font-weight:normal;font-style:normal}[data-icon]:before{font-family:'icomoon';content:attr(data-icon);speak:none;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased}.icon-quill:before,.icon-folder:before,.icon-book:before,.icon-briefcase:before,.icon-arrow-right:before,.icon-arrow-left:before,.icon-arrow-up:before,.icon-github:before,.icon-facebook:before,.icon-twitter:before,.icon-google-plus:before,.icon-feed:before,.icon-linkedin:before,.icon-stackoverflow:before,.icon-chrome:before,.icon-firefox:before,.icon-IE:before,.icon-opera:before,.icon-safari:before,.icon-apple:before,.icon-android:before,.icon-windows:before,.icon-zoom-in:before,.icon-zoom-out:before,.icon-search:before,.icon-bubble:before,.icon-file-xml:before,.icon-envelop:before,.icon-calendar:before,.icon-location:before,.icon-lanyrd:before,.icon-instagram:before,.icon-bug:before,.icon-reddit:before,.icon-stumbleupon:before{font-family:'icomoon';speak:none;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased}.icon-quill:before{content:"\e000"}.icon-folder:before{content:"\e002"}.icon-book:before{content:"\e003"}.icon-briefcase:before{content:"\e004"}.icon-arrow-right:before{content:"\e005"}.icon-arrow-left:before{content:"\e006"}.icon-arrow-up:before{content:"\e007"}.icon-github:before{content:"\e008"}.icon-facebook:before{content:"\e009"}.icon-twitter:before{content:"\e00a"}.icon-google-plus:before{content:"\e00b"}.icon-feed:before{content:"\e00c"}.icon-linkedin:before{content:"\e00d"}.icon-stackoverflow:before{content:"\e00e"}.icon-chrome:before{content:"\e00f"}.icon-firefox:before{content:"\e010"}.icon-IE:before{content:"\e011"}.icon-opera:before{content:"\e012"}.icon-safari:before{content:"\e013"}.icon-apple:before{content:"\e014"}.icon-android:before{content:"\e015"}.icon-windows:before{content:"\e016"}.icon-zoom-in:before{content:"\e017"}.icon-zoom-out:before{content:"\e018"}.icon-search:before{content:"\e019"}.icon-bubble:before{content:"\e001"}.icon-file-xml:before{content:"\e01b"}.icon-envelop:before{content:"\e01c"}.icon-calendar:before{content:"\e01a"}.icon-location:before{content:"\e01d"}.icon-lanyrd:before{content:"\e01e"}.icon-instagram:before{content:"\e01f"}.icon-bug:before{content:"\e020"}.icon-reddit:before{content:"\e021"}.icon-stumbleupon:before{content:"\e022"}html{background:#535a6c}body{color:#333;font:300 100%/1.5 'Source Sans Pro', sans-serif;margin:8px}body *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}::selection{background-color:#535a6c;color:#fff}h1,h2,h3,h4,h5,h6{color:#333;font-weight:300;text-shadow:1px 1px 0 #fff}h1{font-size:1.5em;margin:10px 0 5px}h1 a{color:#535a6c}h1 a:hover{color:#333}h2{font-size:1.3em;margin:10px 0 5px}h3,h4,h5,h6{margin:10px 0}h3{font-size:1.2em}h4{font-size:1.1em}h5{font-size:1em}@media screen and (min-width: 340px){h1{font-size:2.2em;margin:20px 0 5px}h2{font-size:2em;margin:10px 0 5px}h3,h4,h5,h6{margin:10px 0}h3{font-size:1.8em}h4{font-size:1.6em}h5{font-size:1.4em}}a{color:#535a6c;outline:0;text-decoration:none}a:hover{color:#4a6ec9}a:focus{outline:0}p{font-size:1em;margin:10px 0;text-align:left}p a{font-weight:400}strong{font-weight:400}pre,code{background:#fff;color:#535a6c;font-family:'Source Code Pro', 'Courier New', courier, sans-serif}pre{margin:0 20px;padding:0 10px}hr{border:none;border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px}img{border:solid 1px #ededed;display:block;margin:0 auto;padding:2px}img.avatar{margin:10px 0}label{display:block;outline:0}label.required:after{color:red;content:'*'}input[type=text],input[type=email],textarea{background:#fafafa;border:1px solid #535a6c;box-shadow:inset 0 1px 0 #fff,0 1px 0 #fff;color:#333;font-family:'Source Sans Pro', sans-serif;padding:5px;width:80%}table{border:1px solid #4a6ec9;border-collapse:collapse;margin:20px auto}table th,table td{padding:0 5px;vertical-align:top}table th{background:#ededed}table tbody tr:nth-child(2n) td{background:#fff}.hidden{display:none}@media screen and (min-width: 600px){p{font-size:1.1em}}.site-wrapper{background:rgba(250,250,250,0.99);overflow:hidden;width:auto;max-width:1024px;padding:20px}@media screen and (min-width: 800px){.site-content{float:left;margin-right:2%;width:78.75%}.site-content.fill{float:right;margin-right:0;width:100%;float:none;width:auto}.site-sidebar{float:right;margin-right:0;width:19.25%;-moz-transition:opacity 100ms ease-in-out;-ms-transition:opacity 100ms ease-in-out;-o-transition:opacity 100ms ease-in-out;-webkit-transition:opacity 100ms ease-in-out;transition:opacity 100ms ease-in-out}}.site-header{border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px;overflow:hidden;width:auto;padding-bottom:10px}.site-logo{font-size:1.6em;line-height:1.2;margin-top:0}.site-categories{list-style-type:none;margin:0;overflow:hidden;padding:0;width:auto;margin-top:12px}.site-categories li{float:left;margin-right:0.5em}.site-categories li:last-child{margin-right:0}.site-categories li{font-size:1.1em}.site-categories a{background:#ededed;border:1px solid #ededed;border-radius:8px;color:#4a6ec9;display:block;padding:2px 5px}.site-categories a:hover{background:#fff;color:#535a6c}.content-wrapper{overflow:hidden;width:auto}.site-sidebar{margin-top:16px}.site-sidebar h1{font-size:1.6em}.site-footer{margin:10px 20px}.site-footer p,.site-footer a{color:#fafafa}.site-footer .icon-bug:before{padding-right:10px}@media screen and (min-width: 340px){.site-logo{font-size:2em}}@media screen and (min-width: 600px){.site-logo{float:left;font-size:2.9em}.site-categories{float:right}.site-categories li{font-size:1.1em}.site-categories li a{padding:2px 10px}}.site-nav{position:relative}.site-nav ul{list-style-type:none;margin:0;overflow:hidden;padding:0;width:auto;border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff}.site-nav ul li{float:left;margin-right:0.5em}.site-nav ul li:last-child{margin-right:0}.site-nav li{font-size:1em}.site-nav li.top{float:right;opacity:0;-moz-transition:opacity 500ms 200ms;-ms-transition:opacity 500ms 200ms;-o-transition:opacity 500ms 200ms;-webkit-transition:opacity 500ms 200ms;transition:opacity 500ms 200ms}.site-nav li.top a,.site-nav li.top a span{display:none}.site-nav.fixed ul{background:#fafafa;-moz-box-shadow:"0 1px 0 0 $line-highlight-color, 0 10px 5px $background";-webkit-box-shadow:"0 1px 0 0 $line-highlight-color, 0 10px 5px $background";box-shadow:"0 1px 0 0 $line-highlight-color, 0 10px 5px $background";position:fixed;top:0}.site-nav.fixed li.top{opacity:1}.site-nav.fixed li.top a{display:block}.site-nav.fixed li.top a:before{color:#535a6c;content:"\e007";font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none}.site-nav.fixed li.top a:hover:before{color:#4a6ec9}.site-nav a{color:#4a6ec9;display:block;padding:5px 5px 5px 0}.site-nav a.selected,.site-nav a:hover{color:#535a6c}@media screen and (min-width: 600px){.site-nav li{font-size:1.4em}.site-nav li a{padding:10px 10px 10px 0}}.cta:before{content:"\e005";font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;font-size:0.75em;padding-right:4px}.button{background:#535a6c;border:1px solid #fff;color:#ededed;padding:5px 20px}.button:hover{border:1px solid #333;color:#333}.controller h2{border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px;margin-top:0}.controller>section{margin-top:40px}.controller>section:first-child{margin-top:0}.controller>section .meta{font-size:0.8em}.post{border-bottom:1px solid #ededed;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px}.post .post-header h3{margin-bottom:0}.post p{margin-bottom:10px;margin-top:10px}.post img,.post .video{margin:10px auto;text-align:center;width:inherit;max-width:100%}.post .video iframe{border:solid 1px #ededed;margin:0 auto}.post hr{border-bottom:1px solid #ededed;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px}.post .post-info{background-color:#ededed;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;margin:0;padding:5px 15px}.post .post-info .icon-favorite{float:right;font-weight:300;margin-right:0}.post .post-content,.post .post-footer{max-height:10000px;opacity:1;overflow:hidden;position:relative;-moz-transition:all 500ms ease-in-out;-ms-transition:all 500ms ease-in-out;-o-transition:all 500ms ease-in-out;-webkit-transition:all 500ms ease-in-out;transition:all 500ms ease-in-out;z-index:1}.post .post-content:before{font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;color:rgba(125,125,125,0.02);font-size:14em;left:20px;position:absolute;top:50px;z-index:-1}.post.small .post-content,.post.small .post-footer{max-height:0;opacity:0;overflow:hidden}.post.error{color:red}.small .post-header a{display:block}.favorite .post-header h3{text-shadow:1px 1px 0 #fff, 0 0 3px #fdcdcd}.favorite .post-header h3 a:after{text-shadow:1px 1px 0 #fff}.favorite .post-header h3 a:hover{color:#c94a4a}.post-footer{overflow:hidden;width:auto;border-top:1px solid #ededed;-moz-box-shadow:inset 0 1px 0 0 #fff;-webkit-box-shadow:inset 0 1px 0 0 #fff;box-shadow:inset 0 1px 0 0 #fff}@media screen and (min-width: 340px){.small .post-header a:hover:after{color:#ededed;display:inline-block;font-size:1.4rem;content:"\e024";font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;padding-left:20px}}.filter-bar{background:#ededed;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;list-style-type:none;padding:10px}.filter-bar>li.sort{text-align:left}.filter-bar .options{display:inline-block}.filter-bar .options>a{color:#4a6ec9;display:inline-block;padding:0 10px}.filter-bar .options>a:after{content:"\e024";font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;font-size:0.6em;padding-left:5px}.filter-bar .options ul{overflow:auto;padding:0;position:relative}.filter-bar .options li{display:none}.filter-bar .options.show ul{border-bottom:solid 1px #ededed;-moz-box-shadow:2px 2px 2px #b4bac9;-webkit-box-shadow:2px 2px 2px #b4bac9;box-shadow:2px 2px 2px #b4bac9;position:absolute}.filter-bar .options.show li{background:#fafafa;border:solid 1px #ededed;border-bottom:none;-moz-box-shadow:inset 0 1px 0 0 #fff;-webkit-box-shadow:inset 0 1px 0 0 #fff;box-shadow:inset 0 1px 0 0 #fff;display:block;padding:10px;min-width:100px}.filter-bar .browsers p{font-size:1.4em;line-height:1;margin:10px 0 0;text-align:right}.filter-bar .browsers a{font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;color:#bbb;display:inline-block;padding:5px}.filter-bar .browsers a span{display:none}.filter-bar .browsers a.selected{color:#5db140}@media screen and (min-width: 340px){.filter-bar{overflow:hidden;width:auto}.filter-bar>li{float:left;margin-right:2.53968%;width:56.8254%}.filter-bar>li:last-child{margin-right:0}.filter-bar>li.sort{float:left;margin-right:2.53968%;width:40.63492%}.filter-bar>li.sort:last-child{margin-right:0}.filter-bar .browsers p{font-size:1em;margin:0}}.filter-overlay{display:none;overflow:auto;position:absolute}.filter-overlay.show{display:block}.filter{border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px;overflow:hidden;width:auto;list-style-type:none;padding:0 0 20px}.filter li{float:left;margin-right:2%;width:49%}.filter .selected:before{color:#4a6ec9}@media screen and (min-width: 600px){.filter li{float:left;margin-right:2%;width:23.5%}.filter li:nth-child(4n){float:right;margin-right:0;width:23.5%}}.meta{color:#6d7589;margin:0 10px 0 0;text-transform:capitalize}.meta:before,.meta:after{color:#535a6c;font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none}.meta:before{padding-right:5px}.meta:after{padding-left:5px}.meta.split{border-right:solid 1px #6d7589;padding-right:10px}.meta span{display:inline-block;max-width:0;opacity:0;overflow:hidden;-moz-transition:all 100ms ease-in-out;-ms-transition:all 100ms ease-in-out;-o-transition:all 100ms ease-in-out;-webkit-transition:all 100ms ease-in-out;transition:all 100ms ease-in-out;width:0;white-space:nowrap}.meta:hover span{max-width:1000px;opacity:1;width:auto}.meta-date:before{content:"\e01a"}.meta-location:before{content:"\e01d"}.type-writing:before,.type-editing:before{content:"\e000"}.type-speaking:before{content:"\e001"}.type-open-source:before{content:"\e002"}.type-personal-site:before{content:"\e01b"}.type-client-work:before,.type-storage:before{content:"\e004"}.type-book:before{content:"\e003"}.type-console:before{content:"\e02b"}.type-interview:before{content:"\e023"}.type-general:before{content:"\e026"}.type-performance:before{content:"\e025"}.type-inspecting:before{content:"\e019"}.type-debugging:before{content:"\e020"}.type-mobile:before{content:"\e02a"}.type-extensions:before{content:"\e02c"}.icon-favorite:after{content:"\e027"}.favorite .icon-favorite:after{color:#c24b4d}.browser-chrome:before{content:"\e00f"}.browser-firefox:before{content:"\e010"}.browser-firebug:before{content:"\e020"}.browser-IE:before,.browser-internet-explorer:before{content:"\e011"}.browser-opera:before{content:"\e012"}.browser-safari:before{content:"\e013"}.hero ul{overflow:hidden;width:auto;list-style-type:none;margin:20px 0;padding:0}.hero ul>li{margin-bottom:10px}.hero.un>li{float:left;margin-right:2%;width:100%}.hero.dos>li{float:left;margin-right:2%;width:49%}.hero.dos>li:last-child{float:right;margin-right:0;width:49%}.hero.tres>li{float:left;margin-right:2%;width:32%}.hero.tres>li:last-child{float:right;margin-right:0;width:32%}.hero h1,.hero p{text-align:center;text-shadow:none}.hero h1{margin:0 10px 10px;border-bottom:1px solid #ededed;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff}.hero span{display:block}.hero .config-1,.hero .config-2,.hero .config-3,.hero .whole-button{border:solid 1px #ededed;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-bottom:1px solid #ededed;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;display:block;padding:10px}.hero .whole-button:hover{border-color:#bbb;-moz-box-shadow:inset 0 0 250px 0 rgba(255,255,255,0.3);-webkit-box-shadow:inset 0 0 250px 0 rgba(255,255,255,0.3);box-shadow:inset 0 0 250px 0 rgba(255,255,255,0.3)}.config-1{background:#ededed;border-color:#b4bac9}.config-2{background:#535a6c}.config-2 h1,.config-2 p,.config-2 a{color:#fafafa}.config-3{background:#b4bac9;border-color:#b4bac9}.site-sidebar section{border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px}.profile{border:solid 1px #535a6c;display:block;margin:0 auto 10px;max-width:120px;padding:2px;width:50%}.list{padding-left:20px}.selections{padding-bottom:10px;border-bottom:1px solid #b4bac9;-moz-box-shadow:0 1px 0 0 #fff;-webkit-box-shadow:0 1px 0 0 #fff;box-shadow:0 1px 0 0 #fff;padding-bottom:10px}.selections .item{background-color:#fbb3bc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;cursor:pointer;display:block;padding:10px 0;position:relative;z-index:1}.selections .item:after{content:"\e029";font-family:'icomoon';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;speak:none;color:rgba(0,0,0,0.1);font-size:2em;position:absolute;right:10px;top:10px;z-index:-1}.selections .item:hover{-moz-box-shadow:inset 0 0 50px rgba(255,255,255,0.1);-webkit-box-shadow:inset 0 0 50px rgba(255,255,255,0.1);box-shadow:inset 0 0 50px rgba(255,255,255,0.1)}.selections.no-split{border-bottom:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.selections .checked{background-color:#c6dbc6}.selections .checked:after{content:"\e028"}.selections h2,.selections p{padding:0 10px;text-align:left}.selections h2{font-size:1.4em;text-shadow:none}.selections p{display:none}.selections label{cursor:pointer;display:inline}.selections input{display:none}p.selections{border-bottom:0;box-shadow:none}.hero .selections{padding-bottom:10px}.secret-count{text-align:center}.secret-count span{display:inline-block;font-weight:bold;padding:0 5px}@media screen and (min-width: 480px){.selections{overflow:hidden;width:auto}.selections li{float:left;margin-right:2%;width:49%}.selections li:nth-child(2n){float:right;margin-right:0;width:49%}.selections .browser-IE{font-size:1em;line-height:2}.selections .browser-IE:before{font-size:1.4em;line-height:1.4}}@media screen and (min-width: 600px){.selections .item:after{font-size:3em}.selections p{display:block;font-size:0.8em;margin:0}.selections .browser-IE{font-size:1.4em;line-height:33px}.selections .browser-IE:before{font-size:1em;line-height:1}}@media screen and (min-width: 1000px){.selections li,.selections li:nth-child(2n){float:left;margin-right:2%;width:32%}.selections li:nth-child(3n),.selections li:nth-child(2n):nth-child(3n){float:right;margin-right:0;width:32%}}.pages{overflow:auto;margin:20px auto;text-align:center;width:auto}.pages li{display:inline-block}.pages a,.pages span{display:block;padding:2px 5px}.pages .current{border-radius:20px;background:#ededed;display:block}.pages .previous,.pages .next{width:80px}.social{list-style-type:none;padding:0}.social p{margin-bottom:10px}.social a{display:block}.social a:before{font-size:1.3em;padding-right:10px}.icons-only{float:right;overflow:hidden;width:auto;margin:0}.icons-only li{float:left}.icons-only span{display:none}.social a:before{text-shadow:1px 1px 0 #eee}.rss a:before{color:#ff6b17}.twitter a:before{color:#2697f7}.linked-in a:before{color:#4284df}.google-plus a:before{color:#c32528}.lanyrd a:before{color:#3c80ca}.facebook a:before{color:#3b5998}.github a:before{color:#333}.instagram a:before{color:#ac5524}.reddit a:before{color:#666}.stumble-upon a:before{color:#ea3135}.contact a:before{color:#aaa}.social a:hover:before{color:#4a6ec9}.gist{border:1px solid #ddd !important;margin:20px 0 10px;max-width:700px}.gist table{border:none;margin:0;width:100%}.gist .gist-file{border:none !important;margin:0 !important}.gist .gist-data{font-family:"Source Code Pro","Courier New",courier,sans-serif !important}.gist .line-numbers{background:#ededed !important;font-size:0.8em !important;width:25px !important}.gist .line-data{background:none !important;font-size:0.8em !important}.gist .gist-meta{background:#fff !important;font-size:0.5em !important}.gist .gist-meta a{color:#535a6c !important}.gist .gist-meta a:hover{color:#4a6ec9 !important}.comment{overflow:auto;margin-bottom:5px;padding:5px}.comment.author{border:solid 1px #535a6c;padding:4px}.comment .avatar{float:left;height:80px;width:80px}.comment .comment-body{margin-left:100px}.comment .comment-name{margin:0}.comment:nth-child(2n){background:#fff}.comments-reply{font-size:1.1em}.comments-info{color:#4a6ec9}.comments-box{height:120px;margin:10px auto}.comments{text-align:right}.permalink,.tags{float:left}.share .label{font-weight:400;padding-right:10px}.controller .post .chrome,.controller .post .firebug,.controller .post .firefox,.controller .post .internet-explorer,.controller .post .opera,.controller .post .safari{display:none}.controller.chrome .post .chrome,.controller.firebug .post .firebug,.controller.firefox .post .firefox,.controller.internet-explorer .post .internet-explorer,.controller.opera .post .opera,.controller.safari .post .safari{display:block} 2 | /*@ sourceMappingURL=styles.min.css.map */ -------------------------------------------------------------------------------- /assets/css/styles.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "mappings": "2DAUA,qFAWQ,CACJ,OAAO,CAAE,KAAK,CAOlB,kBAEM,CACF,OAAO,CAAE,YAAY,CAQzB,qBAAsB,CAClB,OAAO,CAAE,IAAI,CACb,MAAM,CAAE,CAAC,CAOb,QAAS,CACL,OAAO,CAAE,IAAI,CAajB,IAAK,CACD,WAAW,CAAE,UAAU,CACvB,wBAAwB,CAAE,IAAI,CAC9B,oBAAoB,CAAE,IAAI,CAO9B,IAAK,CACD,MAAM,CAAE,CAAC,CAWb,OAAQ,CACJ,OAAO,CAAE,WAAW,CAOxB,gBACQ,CACJ,OAAO,CAAE,CAAC,CAYd,EAAG,CACC,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,QAAQ,CAOpB,WAAY,CACR,aAAa,CAAE,UAAU,CAO7B,QACO,CACH,WAAW,CAAE,IAAI,CAOrB,GAAI,CACA,UAAU,CAAE,MAAM,CAOtB,EAAG,CACC,eAAe,CAAE,WAAW,CAC5B,UAAU,CAAE,WAAW,CACvB,MAAM,CAAE,CAAC,CAOb,IAAK,CACD,UAAU,CAAE,IAAI,CAChB,KAAK,CAAE,IAAI,CAOf,iBAGK,CACD,WAAW,CAAE,gBAAgB,CAC7B,SAAS,CAAE,GAAG,CAOlB,GAAI,CACA,WAAW,CAAE,QAAQ,CAOzB,CAAE,CACE,MAAM,CAAE,+BAA+B,CAO3C,KAAM,CACF,SAAS,CAAE,GAAG,CAOlB,OACI,CACA,SAAS,CAAE,GAAG,CACd,WAAW,CAAE,CAAC,CACd,QAAQ,CAAE,QAAQ,CAClB,cAAc,CAAE,QAAQ,CAG5B,GAAI,CACA,GAAG,CAAE,MAAM,CAGf,GAAI,CACA,MAAM,CAAE,OAAO,CAWnB,GAAI,CACA,MAAM,CAAE,CAAC,CAOb,cAAe,CACX,QAAQ,CAAE,MAAM,CAWpB,MAAO,CACH,MAAM,CAAE,CAAC,CAWb,QAAS,CACL,MAAM,CAAE,iBAAiB,CACzB,MAAM,CAAE,KAAK,CACb,OAAO,CAAE,qBAAqB,CAQlC,MAAO,CACH,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CASd,4BAGS,CACL,WAAW,CAAE,OAAO,CACpB,SAAS,CAAE,IAAI,CACf,MAAM,CAAE,CAAC,CAQb,YACM,CACF,WAAW,CAAE,MAAM,CAUvB,aACO,CACH,cAAc,CAAE,IAAI,CAWxB,yEAGqB,CACjB,kBAAkB,CAAE,MAAM,CAC1B,MAAM,CAAE,OAAO,CAOnB,qCACqB,CACjB,MAAM,CAAE,OAAO,CAQnB,0CACoB,CAChB,UAAU,CAAE,UAAU,CACtB,OAAO,CAAE,CAAC,CASd,oBAAqB,CACjB,kBAAkB,CAAE,SAAS,CAC7B,eAAe,CAAE,WAAW,CAC5B,kBAAkB,CAAE,WAAW,CAC/B,UAAU,CAAE,WAAW,CAQ3B,kGACgD,CAC5C,kBAAkB,CAAE,IAAI,CAO5B,gDACwB,CACpB,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CAQd,QAAS,CACL,QAAQ,CAAE,IAAI,CACd,cAAc,CAAE,GAAG,CAWvB,KAAM,CACF,eAAe,CAAE,QAAQ,CACzB,cAAc,CAAE,CAAC,CC1YrB,UASC,CARG,WAAW,CAAE,SAAS,CACtB,GAAG,CAAC,2BAA2B,CAC/B,GAAG,CAAC,2MAG8C,CAClD,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAItB,kBAAmB,CACf,WAAW,CAAE,SAAS,CACtB,OAAO,CAAE,eAAe,CACxB,KAAK,CAAE,IAAI,CACX,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,sBAAsB,CAAE,WAAW,CAqBvC,iuBAAowB,CAChwB,WAAW,CAAE,SAAS,CACtB,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,sBAAsB,CAAE,WAAW,CAEvC,kBAAmB,CACf,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,iBAAkB,CACd,OAAO,CAAE,OAAO,CAEpB,sBAAuB,CACnB,OAAO,CAAE,OAAO,CAEpB,wBAAyB,CACrB,OAAO,CAAE,OAAO,CAEpB,uBAAwB,CACpB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,wBAAyB,CACrB,OAAO,CAAE,OAAO,CAEpB,iBAAkB,CACd,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,0BAA2B,CACvB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,eAAgB,CACZ,OAAO,CAAE,OAAO,CAEpB,kBAAmB,CACf,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,kBAAmB,CACf,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,sBAAuB,CACnB,OAAO,CAAE,OAAO,CAEpB,gBAAiB,CACb,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,wBAAyB,CACrB,OAAO,CAAE,OAAO,CCnHpB,IAAK,CACD,UAAU,CC9BD,OAAe,CDiC5B,IAAK,CACD,KAAK,CCnCI,IAAI,CDoCb,IAAI,CAAE,0CAA0C,CAChD,MAAM,CAAE,GAAG,CAEX,MAAE,CACE,eAAe,CAAE,UAAU,CAC3B,kBAAkB,CAAE,UAAU,CAC9B,UAAU,CAAE,UAAU,CAI9B,WAAY,CACR,gBAAgB,CC9CP,OAAe,CD+CxB,KAAK,CAAE,IAAI,CAIf,iBAAuB,CACnB,KAAK,CCrDI,IAAI,CDsDb,WAAW,CAAE,GAAG,CAChB,WAAW,CAAE,cAA+B,CAGhD,EAAG,CACC,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,UAAU,CAElB,IAAE,CACE,KAAK,CC9DA,OAAe,CDgEpB,UAAQ,CACJ,KAAK,CClEJ,IAAI,CDuEjB,EAAG,CACC,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,UAAU,CAGtB,WAAe,CACX,MAAM,CAAE,MAAM,CAGlB,EAAG,CACC,SAAS,CAAE,KAAK,CAGpB,EAAG,CACC,SAAS,CAAE,KAAK,CAGpB,EAAG,CACC,SAAS,CAAE,GAAG,CAGlB,oCAAqC,CACjC,EAAG,CACC,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,UAAU,CAGtB,EAAG,CACC,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,UAAU,CAGtB,WAAe,CACX,MAAM,CAAE,MAAM,CAGlB,EAAG,CACC,SAAS,CAAE,KAAK,CAGpB,EAAG,CACC,SAAS,CAAE,KAAK,CAGpB,EAAG,CACC,SAAS,CAAE,KAAK,EAKxB,CAAE,CACE,KAAK,CCzHI,OAAe,CD0HxB,OAAO,CAAE,CAAC,CACV,eAAe,CAAE,IAAI,CAErB,OAAQ,CACJ,KAAK,CC7HG,OAAO,CDgInB,OAAQ,CACJ,OAAO,CAAE,CAAC,CAIlB,CAAE,CACE,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,MAAM,CACd,UAAU,CAAE,IAAI,CAEhB,GAAE,CACE,WAAW,CAAE,GAAG,CAKxB,MAAO,CACH,WAAW,CAAE,GAAG,CAGpB,QAAU,CACN,UAAU,CC/II,IAAI,CDgJlB,KAAK,CC/II,OAAO,CDgJhB,WAAW,CAAE,qDAAqD,CAGtE,GAAI,CACA,MAAM,CAAE,MAAM,CACd,OAAO,CAAE,MAAM,CAGnB,EAAG,CACC,MAAM,CAAE,IAAI,CEvEJ,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CFmEhC,GAAI,CACA,MAAM,CAAE,iBAAqB,CAC7B,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,MAAM,CACd,OAAO,CAAE,GAAG,CAEZ,UAAS,CACL,MAAM,CAAE,MAAM,CAItB,KAAM,CACF,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,CAAC,CAEV,oBAAiB,CACb,KAAK,CAAE,GAAG,CACV,OAAO,CAAE,GAAG,CAIpB,2CAES,CACL,UAAU,CCjMD,OAAO,CDkMhB,MAAM,CAAE,iBAAwB,CAChC,UAAU,CAAE,+BAAkE,CAC9E,KAAK,CCjMI,IAAI,CDkMb,WAAW,CAAE,6BAA6B,CAC1C,OAAO,CAAE,GAAG,CACZ,KAAK,CAAE,GAAG,CAGd,KAAM,CACF,MAAM,CAAE,iBAAwB,CAChC,eAAe,CAAE,QAAQ,CACzB,MAAM,CAAE,SAAS,CAEjB,iBAAO,CACH,OAAO,CAAE,KAAK,CACd,cAAc,CAAE,GAAG,CAGvB,QAAG,CACC,UAAU,CC/ML,OAAO,CDkNhB,+BAA0B,CACtB,UAAU,CClMK,IAAI,CDsM3B,OAAQ,CACJ,OAAO,CAAE,IAAI,CAGjB,oCAAqC,CAEjC,CAAE,CACE,SAAS,CAAE,KAAK,EASxB,aAAc,CACV,UAAU,CC7OG,sBAAsB,CCQnC,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFsOX,SAAS,CAAE,MAAM,CACjB,OAAO,CAAE,IAAI,CAGjB,oCAAqC,CAEjC,aAAc,CEnOV,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,MAA0C,CFkO7C,kBAAO,CEzOP,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,IAA0C,CFoOzC,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,CAKnB,aAAc,CEjPV,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,MAA0C,CA4BjD,eAAe,CAAE,yBAAO,CACxB,cAAc,CAAE,yBAAO,CACvB,aAAa,CAAE,yBAAO,CACtB,kBAAkB,CAAE,yBAAO,CAC3B,UAAU,CAAE,yBAAO,EFoNvB,YAAa,CE7KD,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CA7F5B,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFoQX,cAAc,CAAE,IAAI,CAGxB,UAAW,CACP,SAAS,CAAE,KAAK,CAChB,WAAW,CAAE,GAAG,CAChB,UAAU,CAAE,CAAC,CAGjB,gBAAiB,CEzKb,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,CAAC,CACT,QAAQ,CAAE,MAAM,CAChB,OAAO,CAAE,CAAC,CACV,KAAK,CAAE,IAAI,CFuKX,UAAU,CAAE,IAAI,CErKhB,mBAAG,CACC,KAAK,CAAE,IAAI,CACX,YAAY,CATa,KAAI,CAW7B,8BAAa,CACT,YAAY,CAAE,CAAC,CFkKvB,mBAAG,CACC,SAAS,CAAE,KAAK,CAGpB,kBAAE,CACE,UAAU,CC1RL,OAAO,CD2RZ,MAAM,CAAE,iBAAqB,CAC7B,aAAa,CAAE,GAAG,CAClB,KAAK,CC9RG,OAAO,CD+Rf,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,OAAO,CAEhB,wBAAQ,CACJ,UAAU,CCjRC,IAAI,CDkRf,KAAK,CCrSJ,OAAe,CD0S5B,gBAAiB,CErSb,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFwSf,aAAc,CACV,UAAU,CAAE,IAAI,CAEhB,gBAAG,CACC,SAAS,CAAE,KAAK,CAIxB,YAAa,CACT,MAAM,CAAE,SAAS,CAEjB,6BAAK,CACD,KAAK,CC9TA,OAAO,CDkUhB,6BAAiB,CACb,aAAa,CAAE,IAAI,CAI3B,oCAAqC,CACjC,UAAW,CACP,SAAS,CAAE,GAAG,EAItB,oCAAqC,CAEjC,UAAW,CACP,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,CAGpB,gBAAiB,CACb,KAAK,CAAE,KAAK,CAEZ,mBAAG,CACC,SAAS,CAAE,KAAK,CAEhB,qBAAE,CACE,OAAO,CAAE,QAAQ,EASjC,SAAU,CACN,QAAQ,CAAE,QAAQ,CAElB,YAAG,CEzPH,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,CAAC,CACT,QAAQ,CAAE,MAAM,CAChB,OAAO,CAAE,CAAC,CACV,KAAK,CAAE,IAAI,CApBH,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA2EnB,eAAG,CACC,KAAK,CAAE,IAAI,CACX,YAAY,CATa,KAAI,CAW7B,0BAAa,CACT,YAAY,CAAE,CAAC,CFmPvB,YAAG,CACC,SAAS,CAAE,GAAG,CAEd,gBAAM,CACF,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,CAAC,CE9TlB,eAAe,CAAE,mBAAO,CACxB,cAAc,CAAE,mBAAO,CACvB,aAAa,CAAE,mBAAO,CACtB,kBAAkB,CAAE,mBAAO,CAC3B,UAAU,CAAE,mBAAO,CF6TX,0CAAU,CACN,OAAO,CAAE,IAAI,CAOrB,kBAAG,CACC,UAAU,CC7XT,OAAO,CCuChB,eAAe,CFwVa,yDAAyD,CEvVrF,kBAAkB,CFuVU,yDAAyD,CEtVrF,UAAU,CFsVkB,yDAAyD,CAC7E,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,CAAC,CAGV,sBAAO,CACH,OAAO,CAAE,CAAC,CAEV,wBAAE,CACE,OAAO,CAAE,KAAK,CAEd,+BAAS,CACL,KAAK,CC5XP,OAAO,CFMjB,OAAO,CCuXmB,OAAO,CDrXrC,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCmXC,qCAAe,CACX,KAAK,CC3YT,OAAO,CDiZnB,WAAE,CACE,KAAK,CClZG,OAAO,CDmZf,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,aAAa,CAEtB,sCACQ,CACJ,KAAK,CCzZJ,OAAe,CD8Z5B,oCAAqC,CACjC,YAAa,CACT,SAAS,CAAE,KAAK,CAEhB,cAAE,CACE,OAAO,CAAE,gBAAgB,EAUrC,WAAY,CD5ZJ,OAAO,CC6ZG,OAAO,CD3ZrB,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCuZX,SAAS,CAAE,MAAM,CACjB,aAAa,CAAE,GAAG,CAItB,OAAQ,CACJ,UAAU,CCrbD,OAAe,CDsbxB,MAAM,CAAE,cAA+B,CACvC,KAAK,CCrbI,OAAO,CDsbhB,OAAO,CAAE,QAAQ,CAEjB,aAAQ,CACJ,MAAM,CAAE,cAAqB,CAC7B,KAAK,CC7bA,IAAI,CDscb,cAAG,CE3WK,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CFqWxB,UAAU,CAAE,CAAC,CAGjB,mBAAU,CACN,UAAU,CAAE,IAAI,CAEhB,+BAAc,CACV,UAAU,CAAE,CAAC,CAGjB,yBAAM,CACF,SAAS,CAAE,KAAK,CAK5B,KAAM,CE3XM,aAAa,CAAE,iBAA2B,CAzDlD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CFwX5B,qBAAgB,CACZ,aAAa,CAAE,CAAC,CAGpB,OAAE,CACE,aAAa,CAAE,IAAI,CACnB,UAAU,CAAE,IAAI,CAGpB,sBACO,CACH,MAAM,CAAE,SAAS,CACjB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,OAAO,CACd,SAAS,CAAE,IAAI,CAGnB,mBAAc,CACV,MAAM,CAAE,iBAA2B,CACnC,MAAM,CAAE,MAAM,CAGlB,QAAG,CEpZK,aAAa,CAAE,iBAA2B,CAzDlD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CFkZ5B,gBAAW,CACP,gBAAgB,CCjfD,OAAO,CCqC1B,kBAAkB,CF6cS,GAAG,CE5c9B,qBAAqB,CF4cM,GAAG,CE3c9B,aAAa,CF2cc,GAAG,CAC1B,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,QAAQ,CAEjB,+BAAe,CACX,KAAK,CAAE,KAAK,CACZ,WAAW,CAAE,GAAG,CAChB,YAAY,CAAE,CAAC,CAIvB,sCACa,CACT,UAAU,CAAE,OAAO,CACnB,OAAO,CAAE,CAAC,CACV,QAAQ,CAAE,MAAM,CAChB,QAAQ,CAAE,QAAQ,CEvdtB,eAAe,CAAE,qBAAO,CACxB,cAAc,CAAE,qBAAO,CACvB,aAAa,CAAE,qBAAO,CACtB,kBAAkB,CAAE,qBAAO,CAC3B,UAAU,CAAE,qBAAO,CFqdf,OAAO,CAAE,CAAC,CAGd,0BAAqB,CDxfrB,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCqfP,KAAK,CAAE,sBAAwB,CAC/B,SAAS,CAAE,IAAI,CACf,IAAI,CAAE,IAAI,CACV,QAAQ,CAAE,QAAQ,CAClB,GAAG,CAAE,IAAI,CACT,OAAO,CAAE,EAAE,CAIX,kDACa,CACT,UAAU,CAAE,CAAC,CACb,OAAO,CAAE,CAAC,CACV,QAAQ,CAAE,MAAM,CAIxB,WAAQ,CACJ,KAAK,CAAE,GAAG,CAMd,qBAAE,CACE,OAAO,CAAE,KAAK,CAItB,yBAA0B,CACtB,WAAW,CAAE,+BAA+B,CAE5C,iCAAQ,CACJ,WAAW,CAAE,cAAc,CAG/B,iCAAQ,CACJ,KAAK,CC3hBO,OAAO,CD+hB3B,YAAa,CEjjBT,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CAwEH,UAAU,CAAE,iBAA2B,CA3C/C,eAAe,CAAE,oBAAO,CACxB,kBAAkB,CAAE,oBAAO,CAC3B,UAAU,CAAE,oBAAO,CFshBvB,oCAAqC,CAEjC,iCAAkC,CAC9B,KAAK,CCzjBK,OAAO,CD0jBjB,OAAO,CAAE,YAAY,CACrB,SAAS,CAAE,MAAM,CD/iBjB,OAAO,CCgjBO,OAAO,CD9iBzB,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CC0iBP,YAAY,CAAE,IAAI,EAO1B,WAAY,CACR,UAAU,CC5iBK,OAAO,CCWtB,kBAAkB,CFkiBK,GAAG,CEjiB1B,qBAAqB,CFiiBE,GAAG,CEhiB1B,aAAa,CFgiBU,GAAG,CAC1B,eAAe,CAAE,IAAI,CACrB,OAAO,CAAE,IAAI,CAIT,mBAAO,CACH,UAAU,CAAE,IAAI,CAIxB,oBAAS,CAEL,OAAO,CAAE,YAAY,CAErB,sBAAI,CACA,KAAK,CC1lBD,OAAO,CD2lBX,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,MAAM,CAEf,4BAAQ,CD9kBZ,OAAO,CC+kBe,OAAO,CD7kBjC,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCykBC,SAAS,CAAE,KAAK,CAChB,YAAY,CAAE,GAAG,CAIzB,uBAAG,CACC,QAAQ,CAAE,IAAI,CACd,OAAO,CAAE,CAAC,CACV,QAAQ,CAAE,QAAQ,CAGtB,uBAAG,CACC,OAAO,CAAE,IAAI,CAIb,4BAAG,CACC,aAAa,CAAE,iBAA2B,CE/kBtD,eAAe,CAAE,mBAAO,CACxB,kBAAkB,CAAE,mBAAO,CAC3B,UAAU,CAAE,mBAAO,CF+kBP,QAAQ,CAAE,QAAQ,CAGtB,4BAAG,CACC,UAAU,CC5nBb,OAAO,CD6nBJ,MAAM,CAAE,iBAA2B,CACnC,aAAa,CAAE,IAAI,CEvlB/B,eAAe,CAAE,oBAAO,CACxB,kBAAkB,CAAE,oBAAO,CAC3B,UAAU,CAAE,oBAAO,CFulBP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,IAAI,CACb,SAAS,CAAE,KAAK,CAMxB,uBAAE,CACE,SAAS,CAAE,KAAK,CAChB,WAAW,CAAE,CAAC,CACd,MAAM,CAAE,QAAQ,CAChB,UAAU,CAAE,KAAK,CAErB,uBAAE,CDvnBN,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CConBH,KAAK,CC1mBE,IAAI,CD2mBX,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,GAAG,CAEZ,4BAAK,CACD,OAAO,CAAE,IAAI,CAGjB,gCAAW,CACP,KAAK,CCrnBJ,OAAO,CD2nBxB,oCAAqC,CACjC,WAAY,CEvpBZ,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFypBP,cAAK,CEtoBT,KAAK,CAAE,IAAI,CACX,YAAY,CAAE,QAA+B,CAC7C,KAAK,CAAE,QAAmC,CAE1C,yBAAa,CACT,YAAY,CAAE,CAAC,CFooBX,mBAAO,CEzoBf,KAAK,CAAE,IAAI,CACX,YAAY,CAAE,QAA+B,CAC7C,KAAK,CAAE,SAAmC,CAE1C,8BAAa,CACT,YAAY,CAAE,CAAC,CFyoBf,uBAAY,CACR,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,CAAC,EAKrB,eAAgB,CACZ,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,IAAI,CACd,QAAQ,CAAE,QAAQ,CAElB,oBAAO,CACH,OAAO,CAAE,KAAK,CAItB,OAAQ,CE9lBI,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CA7F5B,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFqrBX,eAAe,CAAE,IAAI,CACrB,OAAO,CAAE,QAAQ,CAEjB,UAAG,CE/qBC,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,GAA0C,CF+qBjD,wBAAiB,CACb,KAAK,CClsBG,OAAO,CDssBvB,oCAAqC,CAEjC,UAAW,CE1rBP,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,KAA0C,CFyrB7C,wBAAgB,CEhsBhB,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,KAA0C,EFksBrD,KAAM,CACF,KAAK,CC5sBS,OAAO,CD6sBrB,MAAM,CAAE,UAAU,CAClB,cAAc,CAAE,UAAU,CAE1B,wBACQ,CACJ,KAAK,CCjtBK,OAAO,CFQrB,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCwsBX,YAAS,CACL,aAAa,CAAE,GAAG,CAEtB,WAAQ,CACJ,YAAY,CAAE,GAAG,CAGrB,WAAQ,CACJ,YAAY,CAAE,iBAA0B,CACxC,aAAa,CAAE,IAAI,CAGvB,UAAK,CACD,OAAO,CAAE,YAAY,CACrB,SAAS,CAAE,CAAC,CACZ,OAAO,CAAE,CAAC,CACV,QAAQ,CAAE,MAAM,CEjsBpB,eAAe,CAAE,qBAAO,CACxB,cAAc,CAAE,qBAAO,CACvB,aAAa,CAAE,qBAAO,CACtB,kBAAkB,CAAE,qBAAO,CAC3B,UAAU,CAAE,qBAAO,CF+rBf,KAAK,CAAE,CAAC,CACR,WAAW,CAAE,MAAM,CAInB,gBAAK,CACD,SAAS,CAAE,MAAM,CACjB,OAAO,CAAE,CAAC,CACV,KAAK,CAAE,IAAI,CAKvB,iBAAkB,CACd,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,yCACqB,CACjB,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAClB,OAAO,CAAE,OAAO,CAEpB,wBAAyB,CACrB,OAAO,CAAE,OAAO,CAEpB,0BAA2B,CACvB,OAAO,CAAE,OAAO,CAEpB,6CACqB,CACjB,OAAO,CAAE,OAAO,CAEpB,iBAAkB,CACd,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,sBAAuB,CACnB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,wBAAyB,CACrB,OAAO,CAAE,OAAO,CAEpB,uBAAwB,CACpB,OAAO,CAAE,OAAO,CAEpB,sBAAuB,CACnB,OAAO,CAAE,OAAO,CAEpB,mBAAoB,CAChB,OAAO,CAAE,OAAO,CAEpB,uBAAwB,CACpB,OAAO,CAAE,OAAO,CAEpB,oBAAqB,CACjB,OAAO,CAAE,OAAO,CAEpB,8BAA+B,CAC3B,KAAK,CCxyBW,OAAO,CD2yB3B,sBAAuB,CAEnB,OAAO,CAAE,OAAO,CAEpB,uBAAwB,CAEpB,OAAO,CAAE,OAAO,CAEpB,uBAAwB,CACpB,OAAO,CAAE,OAAO,CAEpB,oDACkC,CAE9B,OAAO,CAAE,OAAO,CAEpB,qBAAsB,CAElB,OAAO,CAAE,OAAO,CAEpB,sBAAuB,CAEnB,OAAO,CAAE,OAAO,CAQhB,QAAG,CEj1BH,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFk1BP,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,MAAM,CACd,OAAO,CAAE,CAAC,CAEV,WAAK,CACD,aAAa,CAAE,IAAI,CAI3B,WAAU,CEl1BN,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,IAA0C,CFk1BjD,YAAW,CEt1BP,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,GAA0C,CFq1B7C,uBAAa,CE51Bb,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,GAA0C,CF01BjD,aAAY,CE91BR,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,GAA0C,CF61B7C,wBAAa,CEp2Bb,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,GAA0C,CFk2BjD,gBAAM,CACF,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,IAAI,CAGrB,QAAG,CACC,MAAM,CAAE,WAAW,CE/xBf,aAAa,CAAE,iBAA2B,CAzDlD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CF01BnB,UAAK,CACD,OAAO,CAAE,KAAK,CAGlB,mEAA+C,CAC3C,MAAM,CAAE,iBAA2B,CE31BvC,kBAAkB,CF41BS,GAAG,CE31B9B,qBAAqB,CF21BM,GAAG,CE11B9B,aAAa,CF01Bc,GAAG,CEzyBtB,aAAa,CAAE,iBAA2B,CAzDlD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CFk2Bf,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,IAAI,CAGjB,yBAAoB,CAChB,YAAY,CCn3BW,IAAI,CCU/B,eAAe,CAAE,uCAAO,CACxB,kBAAkB,CAAE,uCAAO,CAC3B,UAAU,CAAE,uCAAO,CF42BvB,SAAU,CACN,UAAU,CCj4BK,OAAO,CDk4BtB,YAAY,CCj4BE,OAAO,CDo4BzB,SAAU,CACN,UAAU,CCv5BD,OAAe,CDy5BxB,oCAAS,CACL,KAAK,CC95BA,OAAO,CDk6BpB,SAAU,CACN,UAAU,CC74BI,OAAO,CD84BrB,YAAY,CC94BE,OAAO,CDq5BzB,qBAAsB,CE70BV,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CFy0BhC,QAAS,CACL,MAAM,CAAE,iBAAwB,CAChC,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,WAAW,CACnB,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,GAAG,CACZ,KAAK,CAAE,GAAG,CAGd,KAAM,CACF,YAAY,CAAE,IAAI,CAOtB,WAAY,CAER,cAAc,CAAE,IAAI,CEp2BZ,aAAa,CAAE,iBAA0B,CAvDjD,eAAe,CAAE,cAAO,CACxB,kBAAkB,CAAE,cAAO,CAC3B,UAAU,CAAE,cAAO,CA6DX,cAAc,CAAE,IAAI,CF+1B5B,iBAAM,CACF,gBAAgB,CAAE,OAAO,CEz5B7B,kBAAkB,CF05BS,GAAG,CEz5B9B,qBAAqB,CFy5BM,GAAG,CEx5B9B,aAAa,CFw5Bc,GAAG,CAC1B,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,MAAM,CACf,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,CAAC,CAEV,uBAAQ,CDz7BR,OAAO,CC07BW,OAAO,CDx7B7B,WAAW,CAAE,SAAS,CACtB,sBAAsB,CAAE,WAAW,CACnC,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,KAAK,CAAE,IAAI,CCo7BH,KAAK,CAAE,eAAkB,CACzB,SAAS,CAAE,GAAG,CACd,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,IAAI,CACX,GAAG,CAAE,IAAI,CACT,OAAO,CAAE,EAAE,CAGf,uBAAQ,CEj7BZ,eAAe,CAAE,oCAAO,CACxB,kBAAkB,CAAE,oCAAO,CAC3B,UAAU,CAAE,oCAAO,CFo7BnB,oBAAW,CACP,aAAa,CAAE,IAAI,CEv7BvB,eAAe,CFw7BS,IAAI,CEv7B5B,kBAAkB,CFu7BM,IAAI,CEt7B5B,UAAU,CFs7Bc,IAAI,CAG5B,oBAAS,CACL,gBAAgB,CAAE,OAAO,CAEzB,0BAAQ,CACJ,OAAO,CAAE,OAAO,CAIxB,4BAAM,CACF,OAAO,CAAE,MAAM,CACf,UAAU,CAAE,IAAI,CAGpB,cAAG,CACC,SAAS,CAAE,KAAK,CAChB,WAAW,CAAE,IAAI,CAGrB,aAAE,CACE,OAAO,CAAE,IAAI,CAGjB,iBAAM,CACF,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,MAAM,CAGnB,iBAAM,CACF,OAAO,CAAE,IAAI,CAIrB,YAAa,CACT,aAAa,CAAE,CAAC,CAChB,UAAU,CAAE,IAAI,CAGpB,iBAAkB,CACd,cAAc,CAAE,IAAI,CAGxB,aAAc,CACV,UAAU,CAAE,MAAM,CAElB,kBAAK,CACD,OAAO,CAAE,YAAY,CACrB,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,KAAK,CAItB,oCAAqC,CACjC,WAAY,CE7gCZ,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CF+gCP,cAAG,CEtgCH,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,GAA0C,CFqgCzC,4BAAgB,CE5gCpB,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,GAA0C,CF0gC7C,uBAAY,CACR,SAAS,CAAE,GAAG,CACd,WAAW,CAAE,CAAC,CAEd,8BAAS,CACL,SAAS,CAAE,KAAK,CAChB,WAAW,CAAE,GAAG,EAMhC,oCAAqC,CAG7B,uBAAY,CACR,SAAS,CAAE,GAAG,CAGlB,aAAE,CACE,OAAO,CAAE,KAAK,CACd,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,CAAC,CAGb,uBAAY,CACR,SAAS,CAAE,KAAK,CAChB,WAAW,CAAE,IAAI,CAEjB,8BAAS,CACL,SAAS,CAAE,GAAG,CACd,WAAW,CAAE,CAAC,EAM9B,qCAAsC,CAE9B,2CACiB,CEtjCjB,KAAK,CAAE,IAAI,CACX,YAAY,CApBX,EAAE,CAuBP,KAAK,CAAE,GAA0C,CFqjCzC,uEAAgB,CE5jCpB,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,CAAC,CAMnB,KAAK,CAAE,GAA0C,EFgkCrD,MAAO,CACH,QAAQ,CAAE,IAAI,CACd,MAAM,CAAE,SAAS,CACjB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,IAAI,CAEX,SAAG,CACC,OAAO,CAAE,YAAY,CAGzB,oBACK,CACD,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,OAAO,CAGpB,eAAS,CACL,aAAa,CAAE,IAAI,CACnB,UAAU,CCnmCL,OAAO,CDomCZ,OAAO,CAAE,KAAK,CAGlB,6BACM,CACF,KAAK,CAAE,IAAI,CAQnB,OAAQ,CACJ,eAAe,CAAE,IAAI,CACrB,OAAO,CAAE,CAAC,CAEV,SAAE,CACE,aAAa,CAAE,IAAI,CAGvB,SAAE,CACE,OAAO,CAAE,KAAK,CAEd,gBAAS,CACL,SAAS,CAAE,KAAK,CAChB,aAAa,CAAE,IAAI,CAK/B,WAAY,CACR,KAAK,CAAE,KAAK,CEjoCZ,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,IAAI,CFkoCX,MAAM,CAAE,CAAC,CAET,cAAG,CACC,KAAK,CAAE,IAAI,CAGf,gBAAK,CACD,OAAO,CAAE,IAAI,CAIrB,gBAAiB,CACb,WAAW,CAAE,cAAc,CAE/B,aAAc,CACV,KAAK,CAAE,OAAO,CAElB,iBAAkB,CACd,KAAK,CAAE,OAAO,CAElB,mBAAoB,CAChB,KAAK,CAAE,OAAO,CAElB,qBAAsB,CAClB,KAAK,CAAE,OAAO,CAElB,gBAAiB,CACb,KAAK,CAAE,OAAO,CAElB,kBAAmB,CACf,KAAK,CAAE,OAAO,CAElB,gBAAiB,CACb,KAAK,CAAE,IAAI,CAEf,mBAAoB,CAChB,KAAK,CAAE,OAAO,CAElB,gBAAiB,CACb,KAAK,CAAE,IAAI,CAEf,sBAAuB,CACnB,KAAK,CAAE,OAAO,CAElB,iBAAkB,CACd,KAAK,CAAE,IAAI,CAEf,sBAAuB,CACnB,KAAK,CCvrCO,OAAO,CD8rCvB,KAAM,CACF,MAAM,CAAE,yBAAwB,CAChC,MAAM,CAAE,WAAW,CACnB,SAAS,CAAE,KAAK,CAEhB,WAAM,CACF,MAAM,CAAE,IAAI,CACZ,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,IAAI,CAGf,gBAAW,CACP,MAAM,CAAE,eAAc,CACtB,MAAM,CAAE,YAAW,CAGvB,gBAAW,CACP,WAAW,CAAE,6DAA+D,CAGhF,mBAAc,CACV,UAAU,CAAE,kBAAqB,CACjC,SAAS,CAAE,gBAAe,CAC1B,KAAK,CAAE,eAAc,CAGzB,gBAAW,CACP,UAAU,CAAE,eAAc,CAC1B,SAAS,CAAE,gBAAe,CAG9B,gBAAW,CACP,UAAU,CAAE,eAA+B,CAC3C,SAAS,CAAE,gBAAe,CAE1B,kBAAE,CACE,KAAK,CAAE,kBAAqB,CAE5B,wBAAQ,CACJ,KAAK,CAAE,kBAAwB,CAiB/C,QAAS,CAEL,QAAQ,CAAE,IAAI,CACd,aAAa,CAAE,GAAG,CAClB,OAAO,CAAE,GAAG,CAEZ,eAAS,CACL,MAAM,CAAE,iBAAwB,CAChC,OAAO,CAAE,GAAG,CAGhB,gBAAQ,CACJ,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CAGf,sBAAc,CACV,WAAW,CAAE,KAAK,CAGtB,sBAAc,CACV,MAAM,CAAE,CAAC,CAGb,sBAAgB,CACZ,UAAU,CC9vCK,IAAI,CDkwC3B,eAAgB,CACZ,SAAS,CAAE,KAAK,CAGpB,cAAe,CACX,KAAK,CCzxCO,OAAO,CD4xCvB,aAAc,CACV,MAAM,CAAE,KAAK,CACb,MAAM,CAAE,SAAS,CAGrB,SAAU,CACN,UAAU,CAAE,KAAK,CAGrB,gBACM,CACF,KAAK,CAAE,IAAI,CAGf,aAAc,CACV,WAAW,CAAE,GAAG,CAChB,aAAa,CAAE,IAAI,CASf,uKAKQ,CACJ,OAAO,CAAE,IAAI,CAIrB,6NAKuB,CACnB,OAAO,CAAE,KAAK", 4 | "sources": ["../scss/_normalize.scss","../scss/_icons.scss","../scss/styles.scss","../scss/_vars.scss","../scss/_helpers.scss"], 5 | "file": "styles.min.css" 6 | } -------------------------------------------------------------------------------- /assets/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/fonts/icomoon.eot -------------------------------------------------------------------------------- /assets/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/fonts/icomoon.ttf -------------------------------------------------------------------------------- /assets/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/fonts/icomoon.woff -------------------------------------------------------------------------------- /assets/img/about/andi-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/about/andi-large.jpg -------------------------------------------------------------------------------- /assets/img/about/andi-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/about/andi-small.jpg -------------------------------------------------------------------------------- /assets/img/chrome-canary.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/chrome-canary.jpg -------------------------------------------------------------------------------- /assets/img/firefox-aurora.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/firefox-aurora.jpg -------------------------------------------------------------------------------- /assets/img/placeholder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/placeholder.gif -------------------------------------------------------------------------------- /assets/img/safari-webkit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/safari-webkit.jpg -------------------------------------------------------------------------------- /assets/img/secrets/chrome-active-hover-focus-visited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-active-hover-focus-visited.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-breadcrumbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-breadcrumbs.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-checking-domcontentloaded-and-loadevent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-checking-domcontentloaded-and-loadevent.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-general-dock-the-developer-tools-to-aid-responsive-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-general-dock-the-developer-tools-to-aid-responsive-design.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-adb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-adb.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-browser-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-browser-settings.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-inspect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-inspect.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-phone-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-phone-settings.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-result.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-mobile-using-developer-tools-on-android-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-mobile-using-developer-tools-on-android-settings.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-performance-measure-rendering-performance-and-fps-timeline-bars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-performance-measure-rendering-performance-and-fps-timeline-bars.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-performance-measure-rendering-performance-and-fps-timeline-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-performance-measure-rendering-performance-and-fps-timeline-key.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-table-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-table-basic.png -------------------------------------------------------------------------------- /assets/img/secrets/chrome-table-custom-headings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/chrome-table-custom-headings.png -------------------------------------------------------------------------------- /assets/img/secrets/firebug-active-hover-focus-visited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firebug-active-hover-focus-visited.png -------------------------------------------------------------------------------- /assets/img/secrets/firebug-inspect-fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firebug-inspect-fonts.png -------------------------------------------------------------------------------- /assets/img/secrets/firebug-timestamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firebug-timestamp.png -------------------------------------------------------------------------------- /assets/img/secrets/firefox-active-hover-focus-visited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firefox-active-hover-focus-visited.png -------------------------------------------------------------------------------- /assets/img/secrets/firefox-breadcrumbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firefox-breadcrumbs.png -------------------------------------------------------------------------------- /assets/img/secrets/firefox-inspect-fonts.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firefox-inspect-fonts.gif -------------------------------------------------------------------------------- /assets/img/secrets/firefox-inspect-search-for-dom-nodes-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firefox-inspect-search-for-dom-nodes-large.png -------------------------------------------------------------------------------- /assets/img/secrets/firefox-inspect-search-for-dom-nodes-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/firefox-inspect-search-for-dom-nodes-small.png -------------------------------------------------------------------------------- /assets/img/secrets/internet-explorer-debugging-minified-javascript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/internet-explorer-debugging-minified-javascript.png -------------------------------------------------------------------------------- /assets/img/secrets/opera-active-hover-focus-visited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/opera-active-hover-focus-visited.png -------------------------------------------------------------------------------- /assets/img/secrets/safari-active-hover-focus-visited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/secrets/safari-active-hover-focus-visited.png -------------------------------------------------------------------------------- /assets/img/site-icon-plain-twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/site-icon-plain-twitter.png -------------------------------------------------------------------------------- /assets/img/site-icon-plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/site-icon-plain.png -------------------------------------------------------------------------------- /assets/img/site-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/assets/img/site-icon.png -------------------------------------------------------------------------------- /assets/js/common.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version":3, 3 | "file":"common.min.js", 4 | "lineCount":14, 5 | "mappings":"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", 6 | "sources":["common.js"], 7 | "names":["devtools","core","init","utilities","checkUrl","filters","overlay","favorites","posts","scroll","storageSupport","window","e","firstVisit","log","utilities.log","console","apply","arguments","load","utilities.load","type","value","localStorage","getItem","save","utilities.save","setItem","utilities.firstVisit","parseInt","utilities.checkUrl","location","href","indexOf","open","$","data","preventDefault","addClass","close","removeClass","$document","document","on","checkScroll","$post","scrollTop","windowHeight","postOffset","filter","length","$window","offset","top","height","loadBatch","onScroll","getLoadState","scrollCheckRunning","setTimeout","TIMEOUT","jQuery","countAvailablePosts","$section","loadPostData","url","requested","loadRunning","ajax","done","content","find","html","showPost","fail","hide","always","togglePost","parent","hasClass","title","text","ga","showMediaContent","$media","each","$item","attr","count","$posts","$filteredPosts","is","MAX_COUNT","$sections","toggleSections","show","loadFavorites","split","getFavorites","favoritesList","join","setFavorite","parents","i","l","splice","push","changeFilters","$favLoading","$favNone","$favButton","toggleFavorites","enabled","filterPosts","updateSecretCount","$elem","setFilters","$filters","$filter","setFilteredOptions","setAllOptions","updateController","addAll","$controller","browserFilters","$secretCount","date","postBrowsers","browserFound","undefined","onOptionClick","$option","$parent","$options","onOptionListClick","onBrowserClick","$browser","$browsers"] 8 | } 9 | -------------------------------------------------------------------------------- /assets/js/common.min.js: -------------------------------------------------------------------------------- 1 | var devtools=devtools||{};(function(a){a.init=function(){devtools.utilities.checkUrl();devtools.filters.init();devtools.overlay.init();devtools.favorites.init();devtools.posts.init();devtools.scroll.init()}})(devtools.core=devtools.core||{}); 2 | (function(a){function b(){try{return"localStorage"in window&&null!==window.localStorage}catch(b){return!1}}var e=-1;a.log=function(){"undefined"!==typeof console&&console.log.apply(console,arguments)};a.load=function(a){var k="";return b()?(k=localStorage.getItem(a))||"":""};a.save=function(a,k){b()&&localStorage.setItem(a,k)};a.firstVisit=function(){-1===e&&(e=a.load("firstVisit")||1,a.save("firstVisit",0));return!!parseInt(e,10)};a.checkUrl=function(){-1a&&devtools.posts.loadBatch())}function g(){!devtools.posts.getLoadState()&&!f&&(f=!0,e(),setTimeout(function(){f=!1},k))}var k=100,l=b(window),f=!1;a.init=function(){b(window).scroll(g)}})(devtools.scroll=devtools.scroll||{},jQuery); 5 | (function(a,b){function e(b){return b.filter(":visible").length}function g(a,d,m){n=!0;b.ajax(d).done(function(d){d=b(d).find(".post-content").html();a.addClass("loaded").find(".post-content").html(d);m&&l(a)}).fail(function(){a.hide()}).always()}function k(a){var d=b(this).parent(".post");a.preventDefault();d.hasClass("small")?l(d):d.addClass("small")}function l(b){var a="",m="",a=b.find(".post-header a").text(),m=b.data("url");ga&&ga("send","pageview",{page:m,title:a});b.hasClass("loaded")?(b.removeClass("small"), 6 | f(b)):g(b,m,!0)}function f(a){a.find(".image img, .video iframe").filter(":not(.loaded)").each(function(){var a=b(this);""!==a.data("src")&&a.addClass("loaded").attr("src",a.data("src"))})}function q(){var a=0;p.filter(":visible:not(.loaded)").each(function(){var d=b(this),m="",m=d.data("url");d.is(":visible")&&(a++,g(d,m));if(4<=a)return n=!1})}var p=b(".controller .post"),r=b(".controller > section"),n=!1;a.toggleSections=function(){r.show();r.each(function(){var a=b(this);0===e(a.find(".post"))&& 7 | a.hide()})};a.countAvailablePosts=e;a.loadBatch=q;a.getLoadState=function(){return n};a.init=function(){p.on("click",".post-header",k);q()}})(devtools.posts=devtools.posts||{},jQuery); 8 | (function(a,b){function e(){var a=devtools.utilities.load("favorites");return a.length?a.split(","):[]}function g(){d=e();p.each(function(){var a=b(this);0<=d.join().indexOf(a.data("url"))&&a.addClass("favorite")})}function k(a){var e=b(this).parents(".post"),f=0,u=0,c="";a.preventDefault();c=e.data("url");if(e.hasClass("favorite")){e.removeClass("favorite");f=0;for(u=d.length;f section'); 6 | 7 | 8 | /* Counts the number of available posts. 9 | 10 | @return count The number of available posts. */ 11 | 12 | function countAvailablePosts($section) { 13 | return $section.filter(':visible').length; 14 | } 15 | 16 | /* Check if a section is empty 17 | 18 | @param $section The section to check. */ 19 | 20 | function isSectionEmpty($section) { 21 | return !!countAvailablePosts($section.find('.post')); 22 | } 23 | 24 | /* Check the param is a valid filter. 25 | 26 | @return valid Whether the filter is valid. */ 27 | 28 | function isValidFilter(filter) { 29 | return (typeof filter !== 'undefined' && 30 | typeof filter.param !== 'undefined' && 31 | typeof filter.value !== 'undefined'); 32 | } 33 | 34 | /* Apply the passed in filter to the $postList. 35 | 36 | @param $postList The list of posts to filter against. 37 | @param filter The filter to apply as an object. 38 | For example, 39 | { 'param': 'date', 40 | 'value': '201301', 41 | 'match': '^=' 42 | } 43 | 44 | @return $postList The filtered $postList. */ 45 | 46 | function applyFilter($postList, filter) { 47 | var i = 0, 48 | l = 0, 49 | filterCriteria = []; 50 | 51 | if (!isValidFilter(filter)) { 52 | return $postList; 53 | } 54 | 55 | filter.value = filter.value.split(' '); 56 | l = filter.value.length; 57 | 58 | if (typeof filter.match === 'undefined') { 59 | filter.match = '='; 60 | } 61 | 62 | for (; iAndiSmith would like to thank the following contributors: 14 | 15 | ### Creators ### 16 | 17 | The people listed here have created new secrets. Thank you! 18 | 19 | 26 | 27 | ### Editors ### 28 | 29 | The people listed here have helped make this site a better place by improving secrets, checking for errors and fixing typos. Thank you! 30 | 31 | 38 | 39 | ## How to Contribute ## 40 | 41 | The Github Repo for this site is available here! 42 | 43 | You can either contribute new tips by: 44 | 45 | * Creating a Markdown (.md) file in the folder 'secret' as described below and sending a pull request (the template is below). 46 | * Or if Github isn't your usual cup of tea - adding an issue to Github issues (marked enhancement). This is a slower route - so please be patient if you submit a tip. 47 | 48 | We are also looking for an experienced proof reader, if you'd be interested in helping out please contact me. 49 | 50 | Regardless of the method you choose to submit, please include the following information: 51 | 52 | * Browsers (Chrome, Firebug, Firefox, Internet Explorer, Opera, Safari) 53 | * Category (General, Console, Inspect, Editing, Debugging, Performance, Storage, Mobile) 54 | * The tip, including any specific browser information. 55 | 56 | Contributors will be acknowledged/credited on this page rather than on individual tips, as well as in the Markdown file. 57 | 58 | If you are creating a Markdown file, here is an example template. Feel free to clone one already in the repo. 59 | 60 | --- 61 | date: {{ site.time | date: "%Y-%M-%d %H:%m:%S" }} 62 | layout: secret 63 | published: true 64 | 65 | title: Title goes here. 66 | authors: 67 | - Andi Smith # Your name. 68 | order: 99-99999 69 | browsers: 70 | - chrome 71 | - firebug 72 | - firefox 73 | - internet-explorer 74 | - opera 75 | - safari 76 | parent: console # must be one of the categories above 77 | categories: 78 | - console # can be multiple 79 | tags: 80 | - secret # do not remove 81 | --- 82 |

Content should go here.

83 |

To provide information for a particular browser, add a class (lowercase, hyphen for internet-explorer).

84 |

// code should be wrapper in these

85 |
86 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andismith/dev-tool-secrets/ce85f14e4f40d84f5bed585aab71b54725079c90/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Secrets 3 | date: 2013-06-04 00:00:00 4 | layout: site 5 | section: secrets 6 | order: none 7 | --- 8 | 9 | {% for post in site.posts do limit:1 %} 10 |

Latest news - {{ post.title }}

11 | {% endfor %} 12 | 13 |

Secrets

14 | 15 | 47 | 48 |

Displaying 0 secrets

49 | 50 |
51 | 52 | {% assign parent = '' %} 53 | {% for post in site.posts_sorted_by_order %} 54 | {% if post.layout == 'secret' and post.published %} 55 | {% if post.parent != parent %} 56 | {% if parent != '' %} 57 | 58 | {% endif %} 59 | {% assign parent = post.parent %} 60 |
61 |

{{ post.parent | capitalize }}

62 | 63 | {% if post.parent == "general" %} 64 |

General hints and tips that don't fall in to any category.

65 | {% elsif post.parent == "console" %} 66 |

Improve your console skills to find out more about your site or app.

67 | {% elsif post.parent == "inspecting" %} 68 |

Inspect and make changes to page HTML and CSS.

69 | {% elsif post.parent == "editing" %} 70 |

Editing your code with the console.

71 | {% elsif post.parent == "debugging" %} 72 |

Place breakpoints and watches to help you debug code as it runs.

73 | {% elsif post.parent == "performance" %} 74 |

Improve the way your site or app performs with these secrets.

75 | {% elsif post.parent == "storage" %} 76 |

Find out what is in memory from your application.

77 | {% elsif post.parent == "mobile" %} 78 |

How to debug your sites on mobile and tablet devices.

79 | {% endif %} 80 | 81 | {% endif %} 82 | 94 | {% endif %} 95 | {% endfor %} 96 | {% if parent != '' %} 97 |
98 | {% endif %} 99 |
-------------------------------------------------------------------------------- /rakefile: -------------------------------------------------------------------------------- 1 | require "jekyll" 2 | require "tmpdir" 3 | 4 | # Change your GitHub reponame 5 | GITHUB_REPONAME = "andismith/dev-tool-secrets" 6 | 7 | 8 | namespace :site do 9 | desc "Generate DevToolSecrets files" 10 | task :generate do 11 | Jekyll::Site.new(Jekyll.configuration({ 12 | "source" => ".", 13 | "destination" => "_site" 14 | })).process 15 | end 16 | 17 | 18 | desc "Generate and publish blog to gh-pages" 19 | task :publish => [:generate] do 20 | Dir.mktmpdir do |tmp| 21 | cp_r "_site/.", tmp 22 | Dir.chdir tmp 23 | system "echo devtoolsecrets.com >> CNAME" 24 | system "git init" 25 | system "git add ." 26 | system "git rm -r assets/js/compiler.jar --cached" 27 | message = "Site updated at #{Time.now.utc}" 28 | system "git commit -m #{message.shellescape}" 29 | system "git remote add origin https://github.com/#{GITHUB_REPONAME}.git" 30 | system "git push origin master:refs/heads/gh-pages --force" 31 | end 32 | end 33 | end -------------------------------------------------------------------------------- /secret/console-assert.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Assert 7 | authors: Andi Smith 8 | order: 05-00150 9 | browsers: 10 | - chrome 11 | - firebug 12 | - internet-explorer 13 | - opera 14 | - safari 15 | categories: 16 | - console 17 | parent: console 18 | tags: 19 | - secret 20 | --- 21 | 22 |

console.assert() can be used to test whether expressions are true or false.

23 | 24 |

It takes two parameters: the expression and the message to display. The message will only be shown in the console if the expression is FALSE.

25 | 26 |

For example, console.assert(!true, 'This is not true'); will output 'This is not true' to the console.While console.assert(true, 'This is not true'); will not output anything to the console.

-------------------------------------------------------------------------------- /secret/console-changing-frame-focus.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-16 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Changing Frame Focus 7 | authors: 8 | - Andi Smith 9 | order: 05-04000 10 | browsers: 11 | - chrome 12 | - firebug 13 | - opera 14 | categories: 15 | - console 16 | parent: console 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Running JavaScript commands from the console command line is incredibly useful, but if you have an iframe to contend with it can be a problem if you don't know how to target your frame.

22 | 23 |

In Firebug, you can use the following command to focus on the frame in question and execute your commands against:

24 | cd(window.frames['frameName']); 25 | 26 |

Chrome allows you to change frame from a dropdown list found at the bottom of the console window.

27 | 28 |

Opera has a dropdown for changing frame which is available from the “Console” and “Documents” tab. The dropdown will only appear on the “Console” tab if there are frames to select.

29 | 30 |

You can also get a list of any iframes on your page by using document.getElementsByTagName("iframe"); in the console.

-------------------------------------------------------------------------------- /secret/console-last-evaluated-expression.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Last Evaluated Expression 7 | order: 05-08100 8 | browsers: 9 | - chrome 10 | - safari 11 | - firebug 12 | categories: 13 | - console 14 | parent: console 15 | tags: 16 | - secret 17 | --- 18 | 19 |

If you need the result of the previous expression for your next console evaluation, you can use the variable $_, which is automatically set to the last expression result for you.

20 | 21 |

Firebug added support for this in 1.12

22 | -------------------------------------------------------------------------------- /secret/console-log-info-warn-error.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Log, Info, Debug, Warn, Error 7 | order: 05-00100 8 | browsers: 9 | - chrome 10 | - firebug 11 | - firefox 12 | - internet-explorer 13 | - opera 14 | - safari 15 | categories: 16 | - console 17 | parent: console 18 | tags: 19 | - secret 20 | --- 21 | 22 |

console.log() is an extremely useful tool for outputting debug without having to use alerts; but there are some other methods that you can use to output information to ease viewing in the console.

23 | 24 |

console.log() will work printf style. So you can do things like this: console.log("%s is %d years old.", "Bob", 42).

25 | 26 |

You can use console.info() to output information messages; console.debug() to output debug messages; console.warn() to output warning messages and console.error() to output error messages.

27 | 28 |

You may also use the %c pattern to use the second argument as a style formatting parameter. For example: console.log("%cThis is green text on a yellow background.", "color:green; background-color:yellow");.

29 | 30 |

Firebug will show different icons for these variations, as well as box the messages in colorful backgrounds.

31 | 32 |

Firefox will show a small grey icon next to info, warn and error messages to signal that they may require further attention. Firefox does not show anything different for debug - according to MDN it has been deprecated in Firefox in favour of console.log()

33 | 34 |

Chrome and Safari (nightly) will not show an icon for info, but will show a blue icon for debug; a yellow icon for warn and a red icon for error.

35 | 36 |

You can output multiple values to any of these logging methods by separating your values with a comma, which can be handy for including objects and arrays on the same line. For example: console.log('Kings: ', kings);.

37 | 38 |
39 | -------------------------------------------------------------------------------- /secret/console-open-the-console-from-any-tab.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Open The Console From Any Tab 7 | authors: 8 | - Andi Smith 9 | order: 05-04000 10 | browsers: 11 | - chrome 12 | - safari 13 | - firefox 14 | categories: 15 | - console 16 | parent: console 17 | tags: 18 | - secret 19 | --- 20 | 21 |

In Chrome despite the console having its own tab, it is possible to open the console from any tab by pressing the escape key, so you don't have to keep switching tabs.

22 | 23 |

In Safari, the console sits at the bottom of the developer tools. The escape key is used to toggle visibility of the console log. Executing a command in to the console command line will also open the console log.

24 | 25 |

In Firefox, you can quickly navigate to the console by pressing either Ctrl, Shift and K on Windows or Cmd ⌘, Option ⌥ and K on Mac.

26 | -------------------------------------------------------------------------------- /secret/console-output-data-as-a-table.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-13 11:12:00 3 | layout: secret 4 | published: true 5 | 6 | title: Output Data as a Table 7 | authors: 8 | - Aptary 9 | order: 05-00125 10 | browsers: 11 | - chrome 12 | - firebug 13 | categories: 14 | - console 15 | parent: console 16 | tags: 17 | - secret 18 | --- 19 | 20 |

console.table() can be used to output data from an array of arrays or a list of objects in a sortable, tabular format.

21 | 22 |

For example, console.table([[10, true, "blue"],[5, false]]) will output the following:

23 | 24 |
25 | 26 |

If the number of elements in each object is not equal, the table will display undefined in cells for which there is no data.

27 | 28 |

To give the table custom column names, property names must be assigned to the elements in the object. Likewise, custom values for the (index) column can be set by naming each set of properties.

29 | 30 |

There is an optional second argument which allows you to explicity specify which columns to output. console.table({"London":{population:8173194, country:"UK", elevation:"24m"},"New York":{population:8336697, country:"USA", elevation:"10m"}},["population", "country"]) will output the following.

31 | 32 |
33 | 34 | -------------------------------------------------------------------------------- /secret/console-persistent-console.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-16 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Persistent Console 7 | authors: 8 | - Andi Smith 9 | order: 05-01000 10 | browsers: 11 | - chrome 12 | - firebug 13 | - firefox 14 | - opera 15 | categories: 16 | - console 17 | parent: console 18 | tags: 19 | - secret 20 | --- 21 | 22 |

Sometimes you need to persist console information between page loads. Sometimes we need this for reference or perhaps to view any logs that occur on click or unload.

23 | 24 |

In Chrome, right click in the console to reveal a menu with "Preserve Log upon Navigation" as an option. Selecting this will keep your console content.

25 | 26 |

Firefox will persist console content by default. You can clear the console log by clicking the 'clear' button in the top right or opening and closing the tools.

27 | 28 |

In Firebug, there’s an obvious button for persisting console content directly above the console.

29 | 30 |

Opera will persist console content by default. You can clear the console log by right clicking and selecting "Clear console" or by opening and closing the tools.

-------------------------------------------------------------------------------- /secret/console-referencing-the-current-and-previous-element.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Referencing the Current and Previous Element 7 | order: 05-08000 8 | browsers: 9 | - chrome 10 | - firebug 11 | - firefox 12 | - opera 13 | - safari 14 | categories: 15 | - console 16 | parent: console 17 | tags: 18 | - secret 19 | --- 20 | 21 |

If you have an element currently selected in your "Elements" tab, you can use the reference $0 to call it within your code. For example, to see the elements' contents you would type $0.innerHTML.

22 | 23 |

In Firebug and Opera, you can select the previous element you had highlighted using $1.

24 | 25 |

In Chrome and Safari, you can select further previous elements you have highlighted using $1 - $4.

26 | 27 |

In Firebug, you can select further previous elements you have highlighted using $n(2) - $n(5).

28 | -------------------------------------------------------------------------------- /secret/console-rerun-command.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Re-run Command 7 | authors: 8 | - Andi Smith 9 | order: 05-03000 10 | browsers: 11 | - chrome 12 | - firebug 13 | - firefox 14 | - internet-explorer 15 | - opera 16 | - safari 17 | categories: 18 | - console 19 | parent: console 20 | tags: 21 | - secret 22 | --- 23 | 24 |

If you've typed a command in to the JavaScript console and you wish to re-run it, simply hit the up key to scroll through a list of previous commands you have called from the console.

-------------------------------------------------------------------------------- /secret/console-using-a-time-stamp-to-mark-the-timeline.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-08-23 15:19:00 3 | layout: secret 4 | published: true 5 | 6 | title: Using a Time Stamp to Mark the Timeline 7 | authors: 8 | - Jan Odvarko 9 | order: 05-00200 10 | browsers: 11 | - firebug 12 | - chrome 13 | categories: 14 | - console 15 | parent: console 16 | tags: 17 | - secret 18 | --- 19 |

A time stamp label can be created by using console.timeStamp(label). A time stamp can be used together with HTTP traffic timing to measure when a certain piece of code was executed.

20 | 21 |
22 | 23 |

You can also add events to Chrome's timeline although it doesn't look quite like the photo in the documentation as it is wrapped in "Function Call (InjectedScript:1)", but they are visible as yellow markers in the timeline at the top of the lower "records" frame that will show the message in a tooltip if you hover over them.

24 | -------------------------------------------------------------------------------- /secret/console-using-the-console-timer.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-18 15:51:00 3 | layout: secret 4 | published: true 5 | 6 | title: Using the Console Timer 7 | authors: 8 | - Aptary 9 | order: 05-00175 10 | browsers: 11 | - chrome 12 | - firebug 13 | - firefox 14 | - opera 15 | - safari 16 | categories: 17 | - console 18 | parent: console 19 | tags: 20 | - secret 21 | --- 22 | 23 |

A timer can be started in the console by using console.time(label). The string label is needed so we have a reference to the timer when we want to stop it. The timer is stopped by calling console.timeEnd(label), which will output to the console the time in milliseconds since the timer (identified by label) was started.

24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /secret/debugging-a-canvas-element.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Debugging a Canvas Element 7 | order: 20-09000 8 | browsers: 9 | - chrome 10 | categories: 11 | - debugging 12 | - performance 13 | parent: debugging 14 | tags: 15 | - secret 16 | --- 17 | 18 |

Chrome allows you to profile and debug canvas elements from the Developer Tools. It can be used for both 2D and WebGL canvas projects.

19 | 20 |

To be able to do this, you need to have enabled the "Experiments" tab. If you haven't already, navigate to chrome://flags and enable the option marked "Enable Developer Tools experiments". You'll need to press "Relaunch Now" button at the bottom of the page to apply your changes. Go to the Settings panel of Chrome Developer Tools by clicking the cog on the bottom right. Click the "Experiments" tab and check the option "Canvas inspection".

21 | 22 |

Now visit the "Profile" tab and you will see an option called "Capture Canvas Frame". The Developer Tools may ask you to Reload the page to use the canvas. Pressing "Start" captures a single frame of the canvas application. Alternatively, you can click the box below to switch to "Consecutive Frames" which allows for capture of multiple frames.

23 | 24 |

Chrome creates a log of each call to canvas, providing a list of each call to the context and a screenshot. You can click one of the log items to replay the frame in the Developer Tools and see which commands were called in the order they were called and from which line.

25 | 26 |
27 | 28 |

Firefox has Canvas and WebGL Shader debugger, giving you features to inspect frames, fps, modify shaders and more.

29 | 30 |

In order to enable these tools, go to Devtools settings (the cog icon in devtools) and check "Canvas" and "Shader Editor".

31 | -------------------------------------------------------------------------------- /secret/debugging-conditional-breakpoints.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Conditional Breakpoints 7 | order: 20-00430 8 | browsers: 9 | - chrome 10 | - firebug 11 | - firefox 12 | - internet-explorer 13 | - opera 14 | - safari 15 | categories: 16 | - debugging 17 | parent: debugging 18 | tags: 19 | - secret 20 | --- 21 | 22 |

Conditional breakpoints are useful for adding breakpoints to the code without having to hit them every time. For example, if you know there is a bug in your code at the last item you can use a conditional comment to check whether it is the last item before activating the debugger. The breakpoint will fire whenever the condition is TRUE.

23 | 24 |

To create a conditional breakpoint in Chrome, create a normal breakpoint and then right click on the breakpoint and select "Edit Breakpoint" to add a condition.

25 | 26 |

In Firebug, conditional breakpoints can be created by first creating a normal breakpoint and then right clicking. A input box will appear allowing you to add a condition.

27 | 28 |

In Firefox, right click on the line of JavaScript you wish to break on and select "Add Conditional Breakpoint".

29 | 30 |

In Internet Explorer, create a normal breakpoint. Right click on the breakpoint and select "Condition...".

31 | 32 |

In Opera, create a normal breakpoint and then right click on the breakpoint before selecting "Add Condition".

33 | 34 |

In Safari, ensure both the script and "Debugger" panel are open. Create a breakpoint by selecting the line of code you wish to debug. Then in the "Debugger" panel, right click on the same breakpoint and choose "Edit Breakpoint".

-------------------------------------------------------------------------------- /secret/debugging-debugging-minified-javascript.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Debugging Minified JavaScript 7 | order: 20-00600 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | categories: 15 | - debugging 16 | parent: debugging 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Placing breakpoints on JavaScript makes debugging much easier, but if your code has already made it to production then it's probably been minified. How can you debug minified code? Helpfully, some of the browsers have an option to un-minify your JavaScript.

22 | 23 |

In Chrome and Safari, simply select the 'Scripts' tab, find the relevant file and then press the "{ }" (pretty print) icon located in the bottom panel.

24 | 25 |

In Internet Explorer, click the tool icon by the script selection drop down to find the option to format the JavaScript.

26 | 27 |

Opera will automatically prettify minified JavaScript.

-------------------------------------------------------------------------------- /secret/debugging-debugging-with-debugger.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Debugging With debugger; 7 | order: 20-00420 8 | browsers: 9 | - chrome 10 | - firebug 11 | - firefox 12 | - internet-explorer 13 | - opera 14 | - safari 15 | categories: 16 | - debugging 17 | parent: debugging 18 | tags: 19 | - secret 20 | --- 21 | 22 |

You can automatically create a breakpoint in your code by adding the following line to your JavaScript: debugger; . This will automatically create a breakpoint in the code when it is run with Developer Tools open.

23 | 24 |

Although useful for quickly adding breakpoints without having to find the line in the Developer Tools, be careful not to send code with debugger; live.

-------------------------------------------------------------------------------- /secret/debugging-dom-breakpoints.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: DOM Breakpoints 7 | order: 20-00440 8 | browsers: 9 | - chrome 10 | - firebug 11 | categories: 12 | - debugging 13 | parent: debugging 14 | tags: 15 | - secret 16 | --- 17 | 18 |

If you know your page is breaking when a certain part of the DOM changes, or you just want to find out what script is responsible for changing an elements attributes or children, Chrome and Firebug both allow you to set a breakpoint on DOM modification allowing you to find the culprit in your code. Simply highlight the element you want to monitor and right click to select the conditions to break on.

19 | -------------------------------------------------------------------------------- /secret/debugging-emulate-a-touch-device.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Emulate a Touch Device 7 | order: 20-00900 8 | browsers: 9 | - chrome 10 | - firefox 11 | categories: 12 | - debugging 13 | beta: true 14 | parent: debugging 15 | tags: 16 | - secret 17 | --- 18 | 19 |

In Chrome, you can pretend to be a device that supports touch and emulate touch events directly within the browser. To do this open the Settings panel (the cog icon in the bottom right of Chrome Developer Tools), select the "Overrides" option and choose "Emulate Touch Events".

20 | 21 |

In Chrome Canary, this will replace the cursor with a circle so you can not only tell which mode you are in, but also how large the surface area for a touch click may be.

22 | 23 |

Firefox's Responsive Design View gives you the option to emulate touch events

24 | -------------------------------------------------------------------------------- /secret/debugging-emulate-a-user-agent.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Emulate a User Agent 7 | order: 20-00850 8 | browsers: 9 | - chrome 10 | - opera 11 | - safari 12 | categories: 13 | - debugging 14 | parent: debugging 15 | tags: 16 | - secret 17 | --- 18 | 19 |

Sometimes it can be useful to pretend to be a different browser or device for debugging, especially if you are working on a site that employs device detection.

20 | 21 |

In Chrome, open the Settings panel (the cog icon in the bottom right) and select the "Overrides" option to find the "User Agent" option. You can either select one of the built in options or select "Other" to write your own. Helpfully, Chrome will resize it's browser to the correct dimensions if you select a mobile or tablet device - this can easily be turned off by unticking "Device Metrics" if this is a problem.

22 | 23 |

In Opera, click the "Panels" arrow at the bottom left of the browser window (above the Developer Tools). Select + and then "Customise". Go to the "Buttons" tab, select "Preferences" and drag the "Identify as Opera" drop down on to the browser toolbar.

24 | 25 |

Safari offers the ability to change "User Agent" in the "Develop" menu bar. Here you will find a list of default devices together with the "Other..." option to add your own.

-------------------------------------------------------------------------------- /secret/debugging-inspect-scope-during-a-breakpoint.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-13-06 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Inspect Scope During a Breakpoint 7 | authors: 8 | - Kaizhi Wei 9 | - Andi Smith 10 | order: 20-00480 11 | browsers: 12 | - chrome 13 | - firebug 14 | categories: 15 | - debugging 16 | parent: debugging 17 | tags: 18 | - secret 19 | --- 20 | 21 |

In Chrome, when your Javascript execution is paused during a breakpoint, you can interact with and inspect all variables and objects in the current scope, either by hovering over to inspect or by using the console.

22 | 23 |

Firebug has the same option, but requires selecting "show closures" in the DOM menu.

24 | 25 |

This powerful feature enables you to easily inspect variables inside closures if you set your breakpoint appropriately.

26 | 27 |

Firebug has the additional feature of not having to be stopped at a breakpoint to access hidden closure variables. Take this example code:

28 | 29 | function Person(name) 30 | { 31 | this.introduce = function() 32 | { 33 | console.log("Hello, my name is %s", name); 34 | } 35 | } 36 | 37 | // create an instance of Person: 38 | var someone = new Person("Arthur"); 39 | 40 | // we call a closure! 41 | someone.introduce(); // prints "Hello, my name is Arthur" 42 | 43 |

44 | The syntax to access the closure variables is as follow: closure.%variable. In the above example, you would access name using this expression: someone.introduce.%name // ==> "Arthur". Note that you can also change values:

45 | someone.introduce.%name = "Trillian"; 46 | someone.introduce(); // prints "Hello, my name is Trillian" 47 | 48 |

49 | The same syntax works everywhere in Firebug where JavaScript is required, such as in the Watch Panel and conditional breakpoints. 50 |

51 | -------------------------------------------------------------------------------- /secret/debugging-override-device-orientation.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Override Device Orientation 7 | order: 20-01000 8 | browsers: 9 | - chrome 10 | categories: 11 | - debugging 12 | parent: debugging 13 | tags: 14 | - secret 15 | --- 16 | 17 |

Device Orientation changes can be emulated in Chrome. Simply go to the "Settings" menu, which can be opened using the cog icon at the bottom right of the Developer Tools and select the "Overrides" tab. Select the "Override Device Orientation" checkbox and enter new values in to the input boxes.

18 | 19 |
    20 |
  • Alpha represents the motion of the device around the z axis from 0 to 360 degrees.
  • 21 |
  • Beta represents the motion of the device around the x axis from -180 to 180 degrees - a front to back motion.
  • 22 |
  • Gamma represents the motion of the device around the y axis from -90 to 90 - a left to right motion.
  • 23 |
24 | 25 |

Changing the values will trigger a deviceorientation event.

-------------------------------------------------------------------------------- /secret/debugging-override-geolocation.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Override Geolocation 7 | order: 20-00950 8 | browsers: 9 | - chrome 10 | categories: 11 | - debugging 12 | parent: debugging 13 | tags: 14 | - secret 15 | --- 16 | 17 |

If you use Geolocation in your application, it may be useful to simulate being in a different location. Chrome allows you to do this by going to the "Settings" menu and selecting the "Overrides" tab. Within this tab it is possible to simulate a different latitude and longitude, and it is possible to simulate a geolocation being unavailable.

18 | 19 |

You can obtain the longitude and latitude of a location from Google Maps by enabling the LatLng tooltip on the Google Maps Labs page.

-------------------------------------------------------------------------------- /secret/debugging-running-code-snippets.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2014-05-22 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Running Code Snippets 7 | order: 20-debugging-10000 8 | browsers: 9 | - chrome 10 | - firefox 11 | categories: 12 | - debugging 13 | beta: true 14 | parent: debugging 15 | tags: 16 | - secret 17 | --- 18 | 19 |

If you find yourself running the same code time and time again, Chrome Canary provides a handy 'Snippets' area where you can store code to run from the console.

20 |

To find 'Snippets', navigate to the 'Source' tab and it will be next to 'Sources' and 'Content Sources'. Right click in the empty area to find the option to create a new snippet, write your code and then whenever you need to run it, right click and select 'Run'.

21 | 22 |

The Scratchpad tool has similar functionality and has been built into Firefox since version 6.

23 | -------------------------------------------------------------------------------- /secret/debugging-use-javascript-source-maps.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-01 09:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Use JavaScript Source Maps 7 | authors: 8 | - Andi Smith 9 | order: 20-00650 10 | browsers: 11 | - chrome 12 | categories: 13 | - debugging 14 | - editing 15 | parent: debugging 16 | tags: 17 | - secret 18 | --- 19 | 20 |

When we deploy code to production, it's advisable to minify our code to reduce load times. Minification removes unnecessary characters such as comments, newlines and whitespace. However, minification makes it difficult for developers to debug code as we can no longer step through and read the code. JavaScript source maps are useful for debugging minified JavaScript files as they provide a map back to the original source.

21 | 22 |

To create a JavaScript source map, download Google Closure Compiler which will build the .map file for you.

23 | 24 |

Run Closure Compiler with Source Map Properties.

25 | java -jar compiler.jar --js common.js --create_source_map ./common.js.map --source_map_format=V3 --js_output_file common.min.js 26 |

Add a sourceMappingURL with the name for a map file to the bottom of your JS minified file.

27 | //@ sourceMappingURL=common.js.map 28 | 29 |

In Chrome Developer Tools, go to the "Settings" menu and within the "General" tab activate "Enable Source Maps".

30 | 31 |

Now when you debug your JavaScript, you can use the unminified version to see what's really going on.

32 | -------------------------------------------------------------------------------- /secret/debugging-watching-values.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Watching Values 7 | order: 20-00500 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | - firebug 15 | categories: 16 | - debugging 17 | parent: debugging 18 | tags: 19 | - secret 20 | --- 21 | 22 |

A common tool with .NET development, 'watch' allows you to monitor a list of variables from one handy area, at the top of the right hand bar on the "scripts" tab. Watching a variable is really easy, just type in the name of the variable and 'watch' will keep its value up to date.

23 | 24 | -------------------------------------------------------------------------------- /secret/debugging-xhr-breakpoints.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: XHR Breakpoints 7 | order: 20-00450 8 | browsers: 9 | - chrome 10 | - firebug 11 | categories: 12 | - debugging 13 | parent: debugging 14 | tags: 15 | - secret 16 | --- 17 | 18 |

Within Chrome, it's possible to place a breakpoint on a XmlHttpRequest allowing you to debug AJAX requests. You can add a breakpoint by going to the "Sources" tab and selecting "XHR Breakpoints". Click the plus icon and type part or all of the URL you wish to add a breakpoint for. The breakpoint will occur once the request has been returned, allowing you to find out what data has been returned and step through what happens next.

19 | 20 |

The breakpoint can be turned off by unchecking the box, or deleted by right clicking and selecting "Delete Breakpoint".

21 | 22 |

Firebug allows breakpoints on XHRs by selecting the "break-on-next" button in the Network tab to break on the next one, or by right-clicking and choosing "Break on XHR". You can optionally choose a breakpoint condition as well.

23 | -------------------------------------------------------------------------------- /secret/editing-drag-and-drop-to-rearrange-elements.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Drag and Drop to Rearrange Elements 7 | order: 15-00600 8 | browsers: 9 | - chrome 10 | - safari 11 | - opera 12 | categories: 13 | - editing 14 | parent: editing 15 | tags: 16 | - secret 17 | --- 18 | 19 |

In the Elements interface of Chrome, Safari and Opera, it is possible to drag and drop elements in to a different order. Simply click and hold on the element you wish to move and drag to where you wish to move it to. A line will appear showing where it will be placed.

20 | 21 |
22 | -------------------------------------------------------------------------------- /secret/editing-incrementing-css-values.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Incrementing CSS Values 7 | order: 15-00500 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | - firebug 15 | categories: 16 | - editing 17 | parent: editing 18 | tags: 19 | - secret 20 | --- 21 | 22 |

If you have an element which you need to modify the margin, padding, width or height for, you can use the cursor keys to increment/decrement the size. Simply use the up and down cursor keys to increment/decrement by a unit of 1.

23 | 24 |

You can increment/decrement by a unit of 10 by holding the "Shift" key whilst pressing the up and down cursor keys; and you can increment/decrement by a unit of 0.1 hold the "Alt" key whilst pressing the up and down cursor keys.

25 | 26 |

You can also increment/decrement by a unit of 100 by holding down the "Shift" key whilst pressing Page-Up and Page-Down.

27 | 28 |

These shortcuts are especially helpful when you are unsure of exactly what the correct size should be.

29 | 30 | -------------------------------------------------------------------------------- /secret/editing-styling-active-hover-focus-visited-states.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Styling :active, :hover, :focus, :visited States 7 | order: 15-00600 8 | browsers: 9 | - chrome 10 | - firebug 11 | - firefox 12 | - opera 13 | - safari 14 | categories: 15 | - editing 16 | parent: editing 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Styling CSS in the Developer Tools is great, but becomes a little more tricky when testing other psuedo-classes such as hover. Thankfully, there is a solution.

22 | 23 |

Chrome has a button built for this purpose. In the “Elements” tab’s right hand column look for the dotted element/cursor icon which allows you to try other states.

24 | 25 |
26 | 27 |

For Firebug, in the right hand column click the arrow menu beside the Style tab and selected your desired state. Firebug does not offer a :visited state option.

28 | 29 |
30 | 31 |

Firefox provides a small drop down next to the DOM element selected when it is clicked in "inspect" mode. Alternatively, you can right click on the element in the DOM. Firefox does not offer a :visited state option.

32 | 33 |
34 | 35 |

In Opera, it’s the icon that looks like a list under “Styles”. In addition, Opera offers a :link and ::selection option. In Opera Next, it is found in the same place as Chrome.

36 | 37 |
38 | 39 |

In Safari, right clicking on an element in the DOM view will show a meny bar where "Force Psuedo-Classes" is an option.

40 | 41 |
42 | -------------------------------------------------------------------------------- /secret/editing-use-sass-source-maps.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Use SASS Source Maps 7 | authors: 8 | - Andi Smith 9 | - Addy Osmani 10 | order: 15-05000 11 | browsers: 12 | - chrome 13 | categories: 14 | - editing 15 | beta: true 16 | parent: editing 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Authoring CSS with a preprocessor comes with a number of advantages, but can be tricky to work with when you want to play with changes in your browser DevTools. For example, changes saved to the compiled CSS in the DevTools can be overwritten when you run Sass again which isn't ideal. With SASS 3.3 and above (which you can currently install using `sass gem install sass --pre`), it's easy to create mappings to your SASS files so you can easily save changes on the fly without needing to worry.

22 | 23 |

Firstly, add the --sourcemap to your SASS watch command. Like so:

24 | 25 | sass --watch scss/devtoolsecrets.scss:css/devtoolsecrets.min.css --style compressed --sourcemap 26 | 27 |

Next, add a sourceMappingURL with the name of map file to the bottom of your SASS file. For example:

28 | 29 | /*@ sourceMappingURL=devtoolsecrets.css.map */ 30 | 31 |

Next, you need to have enabled the "Experiments" tab. If you haven't already, navigate to chrome://flags and enable the option marked "Enable Developer Tools experiments". You'll need to press "Relaunch Now" button at the bottom of the page to apply your changes. Go to the "Settings" panel of Chrome Developer Tools by clicking the cog on the bottom right.

32 | 33 |

Click the "General Tab" and activate "Enable Source Maps". Click the "Experiments" tab and check the option "Support for SASS".

34 | 35 |

After restarting your browser, you will now be able to view the line numbers of the SASS files directly.

36 | 37 |
38 | -------------------------------------------------------------------------------- /secret/extensions-override-geolocation.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-23 7:06:05 3 | layout: secret 4 | published: true 5 | 6 | title: Override Geolocation 7 | authors: 8 | - Thomas Gratier # Your name. 9 | order: 90-50000 10 | browsers: 11 | - firefox 12 | parent: extensions 13 | categories: 14 | - extensions # can be multiple 15 | tags: 16 | - secret # do not remove 17 | --- 18 |

In Firefox, the API location can be overidden like in Chrome. In this case, you have to rely on the Geolocater addon. Install it from the official Mozilla addon website.

19 |

After installation, go to "Tools" menu, "Geolocater", "Manage". From here, you will be able to directly add a "fake" geolocation by browsing a map or searching place. After, you will be able to override geolocation and switch between predefined geolocations. You can confirm the behaviour, going to the html5demos for Geolocation

20 | -------------------------------------------------------------------------------- /secret/general-dock-the-developer-tools-to-aid-responsive-design.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 23:30:00 3 | layout: secret 4 | published: true 5 | 6 | title: Dock the Developer Tools to Aid Responsive Design 7 | authors: 8 | - Ian Crowther 9 | - Andi Smith 10 | order: 00-00610 11 | browsers: 12 | - chrome 13 | - firefox 14 | - opera 15 | - firebug 16 | categories: 17 | - general 18 | parent: general 19 | tags: 20 | - secret 21 | --- 22 | 23 |

When debugging mobile sites, docking to the right makes good use of the space available to you, and allows you to quickly change the space shared between the Developer Tools and the browser view area to try different widths.

24 | 25 |

In Chrome Developer Tools and Opera, the bottom left icon allows you to change the dock settings of your Developer Tools. A single click switches between docking at the bottom and the right.

26 | 27 |
28 | 29 |

In Chrome Developer Tool settings under the "General" tab, you can also change the appearance of the tools so that panels are split vertically.

30 | 31 |

In Opera also you can split the panels vertically under the "General" tab of settings.

32 | 33 |

In Firefox Aurora, you can also dock to right and take advantage of this trick.

34 | 35 |

Firebug was the first to offer this trick.

36 | -------------------------------------------------------------------------------- /secret/general-finding-the-development-tools.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Finding the Developer Tools 7 | order: 00-00100 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | - firebug 15 | categories: 16 | - general 17 | parent: general 18 | tags: 19 | - secret 20 | --- 21 | 22 |

If Developer Tools are a complete secret to you, you may have had difficulty finding them!

23 | 24 |

As well as a menu shortcut, you can access the Developer Tools easily either pressing "F12" in Windows or "Cmd" ⌘, "Option" ⌥ and "I" on the Mac, or by right clicking on the page and selecting “Inspect Element”. 25 | 26 |

In Safari, you will need to enable the Developer Tools by checking the option in Preferences > Advanced > Show Develop Menu first.

27 | 28 |

In Opera, you will need to enable Developer Tools by checking the option in More Tools > Enable developer tools.

29 | 30 |

Since Firebug is an extension for Firefox, you will need to install the add on from http://getfirebug.com/

31 | -------------------------------------------------------------------------------- /secret/general-learn-the-keyboard-shortcuts.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Learn the Keyboard Shortcuts 7 | order: 00-00900 8 | browsers: 9 | - chrome 10 | - internet-explorer 11 | - firefox 12 | - opera 13 | categories: 14 | - general 15 | parent: general 16 | tags: 17 | - secret 18 | --- 19 | 20 |

By learning the keyboard shortcuts, it can be easier to navigate around the Developer Tools.

21 | 22 |

Chrome's keyboard shortcuts are listed in the settings menu, found by clicking the cog icon on the bottom right of the page. Pressing "Cmd" ⌘, Shift and / on Chrome will bring up the keyboard shortcuts list and also doubles up as a quick way to navigate to settings.

23 | 24 |

Internet Explorer's keyboard shortcuts are available online.

25 | 26 |

The shortcuts of the Firefox Developer tools are listed on MDN. 27 | 28 |

Opera's keyboard shortcuts are also found in the settings menu, found by clicking the cog icon on the right side of the docking bar.

29 | -------------------------------------------------------------------------------- /secret/general-undocking-and-moving-the-developer-tools.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Undock and Move the Developer Tools 7 | order: 00-00600 8 | browsers: 9 | - chrome 10 | - firefox 11 | - safari 12 | - firebug 13 | - firefox 14 | categories: 15 | - general 16 | parent: general 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Sometimes we do not wish to dock our tools at the bottom of the screen, as they are in the way. Most of the Developer Tools offer another option for docking.

22 | 23 |

In the Chrome Developer Tools, the bottom left icon allows you to change the dock settings of your Developer Tools. A quick click switches between docking at the bottom and the right. A held click allows you to select your docking option - including docking them in a new window. You can also click and drag an empty area of the tab bar to move the Developer Tools in Chrome.

24 | 25 |

In the Firefox and Safari Developer Tools, the dock option can be found in the top left next to the close button is the option to undock the tools in to a new window.

26 | 27 |

If you dock Safari's Developer Tools in to a new window, you are presented with an option to re-dock against the bottom and the left of the browser window; but at present the Developer Tools need to be undocked before they can be moved.

28 | 29 |

To change the docked position, click the down arrow next to Firebug’s icon in the main toolbar, followed by “Firebug UI Location”. You will have multiple choices for top/bottom/left/right/detached. Firebug also has icons in the upper right corner to quickly change, or to minimize and close.

30 | 31 |

The Firefox DevTools have docking icons in the top left corner of the toolbar for switching between bottom and right, and for expanding into a separate window.

32 | -------------------------------------------------------------------------------- /secret/general-use-the-latest-developer-release.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Use the Latest Developer Release 7 | order: 00-00500 8 | browsers: 9 | - chrome 10 | - firefox 11 | - safari 12 | categories: 13 | - general 14 | parent: general 15 | tags: 16 | - secret 17 | --- 18 | 19 |

The developer tools are constantly being improved and often the pre-release versions of browsers can offer you something extra.

20 | 21 |

Chrome Canary is the experimental version of Chrome. Canary can be run side by side with Chrome so you can check for issues in the current release at the same time.

22 | 23 |

You can further enhance your Chrome Developer Tools by visiting the URL chrome://flags and enabling the option marked "Enable Developer Tools experiments". Don't forget to hit the "Relaunch Now" button at the bottom of the page to apply your changes.

24 | 25 |
26 | 27 |

Firefox Aurora offers a preview of the latest features of Firefox. Unfortunately, Aurora cannot be open at the same time of Firefox.

28 | 29 |
30 | 31 |

Webkit Nightly is a nightly release of Safari. As it's a nightly release, it is less stable than the other browsers. But with Safari's Developer Tools in their current mess in the production release, the nightly release fixes a large proportion of these problems giving you a usable experience. Webkit Nightly can be run side by side with Safari to check for rendering issues.

32 | 33 |
34 | 35 |

Now browser release cycles are as frequent as 12 weeks and browsers auto-update, changes are incremental and less likely to be breaking; and it won't be long (>12 weeks) before your users are using these versions. It's important to test on both the current and developer versions where possible.

-------------------------------------------------------------------------------- /secret/inspect-inspect-fonts.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Inspect Fonts 7 | authors: 8 | - Andi Smith 9 | order: 10-01000 10 | browsers: 11 | - firefox 12 | - firebug 13 | categories: 14 | - inspecting 15 | beta: true 16 | parent: inspecting 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Firefox comes with a built in font inspector, that allows you to see the fonts used on the element you are currently inspecting.

22 | 23 |
24 | 25 |

You can modify the default "Abc" text to try the font with any text you would like. At the bottom of the fonts list is a button to display all fonts on the page, allowing an easy way to see exactly what fonts are being used on the page.

26 | 27 |

Firebug provides an info tips for any font declaration that appears in CSS.

28 | 29 |
-------------------------------------------------------------------------------- /secret/inspect-navigating-the-dom-with-breadcrumbs.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-01 09:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Navigating the DOM with Breadcrumbs 7 | authors: 8 | - Andi Smith 9 | order: 10-00400 10 | browsers: 11 | - chrome 12 | - firefox 13 | - opera 14 | - safari 15 | - firebug 16 | categories: 17 | - inspecting 18 | parent: inspecting 19 | tags: 20 | - secret 21 | --- 22 | 23 |

When you are inspecting nodes in the DOM tree, a breadcrumb list of the nodes' DOM path is displayed within the Developer Tools.

24 | 25 |

In Chrome and Opera, this is displayed at the bottom of the DOM inspector.

26 | 27 |
28 | 29 |

In Firebug, Firefox and Safari, this is displayed at the top of the DOM inspector.

30 | 31 |
32 | 33 |

You can navigate the breadcrumb either directly by clicking on one of the nodes, or by pressing the arrow keys. Pressing the left arrow key will take you to the parent, while pressing the right arrow key will navigate to the first child item. You can move to the next or previous child by pressing the up and down arrow keys. If there are no more children, the up and down arrows will navigate back up to DOM tree.

34 | 35 |

In Firefox, you can right click on a breadcrumb to see a list of all sibling nodes allowing you to quickly navigate to a sibling.

36 | 37 |

In Safari, you can left click on a breadcrumb to see a list of all sibling nodes.

38 | -------------------------------------------------------------------------------- /secret/inspect-search-for-dom-nodes.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 23:45:00 3 | layout: secret 4 | published: true 5 | 6 | title: Search for DOM Nodes 7 | authors: 8 | - Andi Smith 9 | order: 10-00410 10 | browsers: 11 | - chrome 12 | - firefox 13 | - opera 14 | categories: 15 | - inspecting 16 | parent: inspecting 17 | tags: 18 | - secret 19 | --- 20 | 21 |

In Firefox, you can search for a particular DOM node anywhere in a document from within the "Inspector" panel. This feature is available to the right of the DOM breadcrumb navigation and hidden as a small search box.

22 | 23 |
24 | 25 | 26 |

The search box expands when in focus.

27 | 28 |
29 | 30 |

Typing in a matched selector will automatically highlight it in the DOM tree.

31 | 32 |

In Chrome and Opera, you can press Ctrl-F to open the Find dialog. CSS selectors work as expected.

33 | 34 |
35 | -------------------------------------------------------------------------------- /secret/inspect-the-box-model.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: false 5 | 6 | title: The Box Model 7 | order: 10-inspect-0200 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | categories: 15 | - inspecting 16 | parent: inspecting 17 | tags: 18 | - secret 19 | --- 20 | 21 |

Each Browser Developer Tool contains its own box model tool - useful for viewing width, height, margin and padding on any element you select.

22 | 23 | TODO: write more -------------------------------------------------------------------------------- /secret/inspect-viewing-your-site-as-responsive.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Viewing Your Site as Responsive 7 | authors: 8 | - Andi Smith 9 | order: 10-02000 10 | browsers: 11 | - chrome 12 | - firefox 13 | - opera 14 | categories: 15 | - inspecting 16 | parent: inspecting 17 | tags: 18 | - secret 19 | --- 20 | 21 |

In the age of responsive design, it's important to see how our sites will look on devices of any size. Although we can resize the browser, there are some additional tools available to us in the Developer Tools.

22 | 23 |

Within the 'Settings' panel of the Chrome Developer Tools (located by clicking the cog in the bottom right corner of the tools) under 'Overrides' you will find 'Device Metrics' which allows you to specify a width and height, together with a font scale size. You can also dock the Developer Tools to the right of the page and resize them to the size you want to test.

24 | 25 |

In Opera Developer Tools also you can change the width and height using 'Device Metrics' menu under 'Overrides' tab of 'Settings'.

26 | 27 |

The Firefox Developer Tools include a tool to check your site in any dimension. The 'Responsive Design Mode' tool can be found in the top right header of the Developer Tools. Opening it provides you with a number of preset sizes and an option to add additional ones to cater for your needs. Firefox also provides an option to rotate your dimensions so you can test both landscape and portrait.

28 | -------------------------------------------------------------------------------- /secret/inspect-viewing-your-site-in-3d.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Viewing Your Site in 3D 7 | authors: 8 | - Andi Smith 9 | order: 10-05000 10 | browsers: 11 | - firefox 12 | categories: 13 | - inspecting 14 | parent: inspecting 15 | tags: 16 | - secret 17 | --- 18 | 19 |

The Firefox Developer Tools allow you to view your site in 3D, inspecting what elements belong to which parent elements and provided a handy visual representative of how elements are nested. To access it, click the Cube icon on the top right of the developer tools.

-------------------------------------------------------------------------------- /secret/mobile-using-developer-tools-on-android.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 00:20:00 3 | layout: secret 4 | published: true 5 | 6 | title: Using Developer Tools on Android 7 | authors: 8 | - Andi Smith 9 | order: 80-02000 10 | browsers: 11 | - chrome 12 | - firefox 13 | categories: 14 | - mobile 15 | parent: mobile 16 | tags: 17 | - secret 18 | --- 19 | 20 |

You can use Chrome Canary's Developer Tools on your Mac to debug public and locally hosted websites on your Android device, allowing you access on your mobile phone to all of Chrome Developer Tools' extensive feature set.

21 | 22 |

First, you need to install Chrome BETA on your Android device.

23 | 24 |

Next, you will need to download the ADB plugin extension and install it on your Chrome Canary instance. As it has not been downloaded from the Google Play store, you will need to drag the file in to the Extensions page found at chrome://extensions/ within Chrome Canary.

25 | 26 |

Ensure you have "Enable Developer Tools experiments" turned on within chrome://flags.

27 | 28 |

Plug your mobile phone in to the USB port on your machine. Now on your mobile phone go to the "Settings" app. Select "Developer Options" and ensure "USB debugging" is checked. If it is already checked and you have not used USB debugging on this computer before, uncheck it and check it again to ensure it has this computers' MAC address.

29 | 30 |
31 | 32 |

Now go in to Chrome BETA for Android and click the menu icon and "Settings". Under "Developer tools" ensure "Enable USB Web debugging" is enabled. Open a new tab.

33 | 34 |
35 | 36 |

In Chrome Canary, click on the ADB plugin icon and click "Start ADB". You may need to restart your browser for it to work.

37 | 38 |
39 | 40 |

Visit the Inspect page found at chrome://inspect. Find the device (which should be running Chrome Canary 28 or abobe) and find the tab you were looking for. Click the "Inspect" link that appears to the right of the page URL.

41 | 42 |
43 | 44 |

In the window that pops up, go to "Settings", and click the "Experiments" tab. Enable "Reverse Port Forwarding". You may need to restart your Dev Tools by closing the window and re-clicking the "Inspect" link before the "Port Forwarding" tab appears.

45 | 46 |
47 | 48 |

In the Port Forwarding tab, enter the port you wish to forward (e.g. 9000) and the address and port it should map to on your local machine. Now, on your mobile device type in the URL localhost:port (e.g. localhost:9000). Your local site should now load on the device and be available for debugging.

49 | 50 |
51 | 52 |
Firefox's "Connect" lets you inspect pages opened with Firefox for Android using Firefox Desktop.
53 | 54 |
The idea is you listen on a specified port using your device and connect to it from desktop. First enable "Remote Debugging" in Firefox for Android from Settings -> Developer Tools, then do the same thing on desktop, Developer Tools -> Settings -> Enable remote debugging.
55 | 56 |
Next, you'll have to forward a port (6000 by default) to your device, in order to do this, we use the Android Debugging Bridge (a.k.a. adb). First you have to install ADB, then enable Android Debugging for your device, follow [this tutorial](http://www.howtogeek.com/125769/how-to-install-and-use-abd-the-android-debug-bridge-utility/) to setup your Android Device, then enter this command: 57 | 58 |
59 | 
60 | adb forward tcp:6000 tcp:6000
61 | 
62 | 
63 |
64 | 65 |
Then open Tools -> Web Developer -> Connect and press "Connect". Firefox for Android will prompt you to accept / deny the request.
66 | -------------------------------------------------------------------------------- /secret/mobile-using-developer-tools-on-ios.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 00:20:00 3 | layout: secret 4 | published: true 5 | 6 | title: Using Developer Tools on iOS 7 | authors: 8 | - Andi Smith 9 | order: 80-01000 10 | browsers: 11 | - safari 12 | categories: 13 | - mobile 14 | parent: mobile 15 | tags: 16 | - secret 17 | --- 18 | 19 |

Connect your iOS device to an available Mac. Open both Safari on your Mac and iOS device.

20 | 21 |

Go to Safari's "Develop" menu and after the first menu divider should be the name of the iOS device you are trying to access. Within the sub menu, select the page you want to debug.

22 | 23 |

Safari's Developer Tools will appear in a pop up window allowing you to debug the mobile site that appears on the device.

-------------------------------------------------------------------------------- /secret/performance-checking-domcontentloaded-and-loadevent.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Checking DOMContentLoad and Load Event 7 | order: 60-00260 8 | browsers: 9 | - chrome 10 | - firebug 11 | - safari 12 | categories: 13 | - performance 14 | parent: performance 15 | tags: 16 | - secret 17 | --- 18 | 19 |

The network timeline for Chrome and Safari (and Net panel for Firebug) displays information to show how quickly the page has loaded, displaying lines for both when DOMContentLoaded is fired and when the load event is fired.

20 | 21 |
    22 |
  • DOMContentLoaded indicates when the browser has finished parsing the document (but other resources such as images and stylesheets may/may not have been downloaded). It is represented as a blue line.

  • 23 |
  • The load event fired will occur once all the initial resources (images, stylesheets, JavaScript) have been downloaded. It is represented as a red line.

  • 24 |
  • If the two events fire at the same time, the line will be purple.

  • 25 |
26 | 27 |
28 | 29 |

In Safari, the lines are dashed rather than solid.

30 | -------------------------------------------------------------------------------- /secret/performance-disable-the-browser-cache.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Disable the Browser Cache 7 | order: 60-00150 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - opera 13 | - safari 14 | - firebug 15 | categories: 16 | - performance 17 | parent: performance 18 | tags: 19 | - secret 20 | --- 21 | 22 |

Each browser allows you to disable cache of your webpage, ensuring your resources come from the server each and every time.

23 | 24 |

In Chrome, you'll find the option in the settings cog.

25 | 26 |

In Internet Explorer, the option is under "Cache" in the menu bar.

27 | 28 |

In Opera, to clear the cache click the Network tab, select the Network Options secondary tab and choose the first option.

29 | 30 |

In Safari, you can disable your browser cache under the Develop menu in the menu bar.

31 | 32 |

In Firebug, you can disable your browser cache under the menu in the Net tab.

33 | 34 |

To bring up the clear cache (and other data) dialog on any browser press Ctrl, Shift and Delete in Windows, and press Shift, Cmd and Backspace on Mac.

35 | -------------------------------------------------------------------------------- /secret/performance-export-the-network-timeline-as-har.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Export the Network Timeline as HAR File 7 | order: 60-00250 8 | browsers: 9 | - chrome 10 | - firebug 11 | categories: 12 | - performance 13 | parent: performance 14 | tags: 15 | - secret 16 | --- 17 | 18 |

HAR (HTTP Archive) files can be used for a variety of performance analysis techniques, and also for debugging. HAR files can be attached to a bug raised during testing - the developer then can run the HAR data locally to find out what went wrong.

19 | 20 |

We can export our network tab timeline to HAR from the Chrome Developer Tools by right clicking on the network output and seleving "Save as HAR with Content".

21 | 22 |

Firebug requires the installation of another add-on called Net-export, created by the lead Firebug developer and the creator of the HAR format.

23 | 24 |

chromeHAR is an online tool that provides the same timeline interface as Chrome and can be used for this purpose.

25 | -------------------------------------------------------------------------------- /secret/performance-measure-rendering-performance-and-fps.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-06-03 23:20:00 3 | layout: secret 4 | published: true 5 | 6 | title: Measure Rendering Performance and FPS 7 | authors: 8 | - Andi Smith 9 | order: 60-03000 10 | browsers: 11 | - chrome 12 | categories: 13 | - performance 14 | parent: performance 15 | tags: 16 | - secret 17 | --- 18 | 19 |

Chrome provides a frame rate timeline enabling the ability to debug a site on a frame by frame basis.

20 | 21 |

To create a Frames timeline, first open the Chrome Developer Tools and select the "Timeline" tab. At the bottom of the tab are a number of icons including a black circle which represents 'record'. Press this once to enable recording of the timeline and a second time to stop the recording. Whilst recording, you can interact with the page in the usual manner and Frames mode will record all the frames of action.

22 | 23 |
24 | 25 |

Each bar along the timeline graph represents a single frame of animation, and are coloured as follows: blue for loading tasks, yellow for scripting tasks, purple for rendering tasks and green for painting tasks. The white area represents idle time.

26 | 27 |
28 | 29 |

Below the timeline graph is a waterfall diagram of how the page performed. Frames are shown in the header columns, with the number of milliseconds it took to draw the frame in the header cell; while records of the actions taken are shown down the left side.

30 | 31 |

You can drag the two grey mouse sliders to change the number of frames of the timeline you wish to inspect.

32 | 33 |

Hovering the header rows on the timeline reveals the duration of the frame; the FPS count; the CPU time and the aggregated time of actions within the frame.

34 | 35 |

Hovering over records on the left, you can see a breakdown of the duration of each task; together with other useful information. The part of the page should also be highlighted, if relevant. Some tasks are grouped and can be inspected by clicking the arrow within the waterfall diagram.

-------------------------------------------------------------------------------- /secret/performance-replay-a-xhr-network-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Replay a XHR Network Request 7 | order: 60-00400 8 | browsers: 9 | - chrome 10 | - firebug 11 | categories: 12 | - performance 13 | parent: performance 14 | tags: 15 | - secret 16 | --- 17 | 18 |

If you wish to re-run an XHR request without having to reload the page or rerun the event, you can right click on the resource and and select "Replay XHR" ("Resend" in Firebug).

19 | -------------------------------------------------------------------------------- /secret/performance-sort-the-network-timeline.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2013-01-01 00:00:00 3 | layout: secret 4 | published: true 5 | 6 | title: Sort Network Requests to Find Bottlenecks 7 | order: 60-00200 8 | browsers: 9 | - chrome 10 | - firefox 11 | - internet-explorer 12 | - safari 13 | categories: 14 | - performance 15 | parent: performance 16 | tags: 17 | - secret 18 | --- 19 | 20 |

The Network tab shows resources in the order each network request was started, clicking a column within the Network tab, you can reorganise data based the column value.

21 | 22 |

Most of the browsers share common fields in their Network tabs. You can sort by fields such as the filename; domain; the type of resource; the HTTP status; the method and the size of the resource.

23 | 24 |

Filename and Domain are combined in Internet Explorer.

25 | 26 |

Chrome takes this a step further and allows you to click on the "Timeline" header to show an additional range of sorting options.

27 | 28 |
    29 |
  • Start Time is the default option and sorts by the time each network request was started.
  • 30 |
  • Response Time sorts by the time it took to get a response from the network request.
  • 31 |
  • End Time sorts by the time the request was completed.
  • 32 |
  • Duration sorts by the time the request took to complete.
  • 33 |
  • Latency is the amount of time it takes for the browser to receive a response after the initial request. This option allows you to sort by latency to see which resources are taking the longest to respond. Latency can depend on the distance the user is from the server, and can be improved by setting up Content Delivery Networks (CDNs) closer to the user. Using concatenation for CSS and JavaScript files, and image spriting we can reduce the number of resources required, and therefore reducing the total latency.
  • 34 |
35 | 36 | --------------------------------------------------------------------------------