From 798803089ab1f15c0e773a45e324646150c97ce5 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 20:31:17 -0800 Subject: [PATCH 001/135] Added P3P compact policy, updated rules --- App_Data/items.xml | 7 ++++++- Web.config | 1 + index.cshtml | 3 +-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index 3bbd15a..bbca408 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -25,6 +25,10 @@ Don’t Forget the Viewport Meta Tag Make your website mobile friendly + + Input type: Email, Url, Phone + Diving in to HTML5 forms + 6 free mobile emulators Opera Mobile Emulator @@ -70,7 +74,7 @@ Online generator How to properly link a favicon - + How to deply P3P Configure IIS to use P3P @@ -175,6 +179,7 @@ Setup SSL on IIS 7 Setup SSL on Apache + Online SSL checker diff --git a/Web.config b/Web.config index cd196ea..930ed95 100644 --- a/Web.config +++ b/Web.config @@ -40,6 +40,7 @@ + diff --git a/index.cshtml b/index.cshtml index 74d378a..b3d8642 100644 --- a/index.cshtml +++ b/index.cshtml @@ -9,8 +9,6 @@ string data = Server.MapPath("~/app_data/items.xml"); Response.Cache.SetLastModified(File.GetLastWriteTimeUtc(file)); Response.AddFileDependencies(new[] { file, css, js, data }); - - Response.AddHeader("P3P", "CP=\"NOI DSP COR ADMa IVDa OUR NOR\""); } @@ -20,6 +18,7 @@ + From e770838dbd1919b4e246d4c27975433f43549875 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 21:07:46 -0800 Subject: [PATCH 002/135] Supervisor Joost easter egg --- App_Data/items.xml | 2 +- Scripts/script.js | 18 ++++++++++-------- Scripts/script.min.js | 2 +- Web.config | 14 ++------------ index.cshtml | 2 +- 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index bbca408..59a55d8 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -165,7 +165,7 @@ ASP.NET security overview - XSS cheat sheet + XSS cheat sheet DOM based XSS cheat sheet Free XSS scanner diff --git a/Scripts/script.js b/Scripts/script.js index c64af0c..be4adbf 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -48,13 +48,21 @@ function openDetails(e) { if (!e) e = window.event; - var detail = (e.target || e.srcElement); + var detail = (e.target || e.srcElement); var ul = (detail.nextElementSibling || detail.nextSibling); if (ul.style.maxHeight !== '100px') ul.style.maxHeight = '100px'; else ul.style.maxHeight = '0'; + + for (var i = 0; i < details.length; i++) { + + if (details[i] !== detail) { + var d = (details[i].nextElementSibling || details[i].nextSibling); + d.style.maxHeight = "0"; + } + } } function calculateProgress() { @@ -90,17 +98,11 @@ var max = parseInt(progress.max, 10); fallback.style.width = (value * 100 / max) + "%"; } - + function clearAll() { document.getElementById("clearall").onclick = function () { - for (var i = 0; i < details.length; i++) { - - var d = (details[i].nextElementSibling || details[i].nextSibling); - d.style.maxHeight = "0"; - } - for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].checked = false; } diff --git a/Scripts/script.min.js b/Scripts/script.min.js index 83dbe4b..4ba6469 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1 @@ -(function(){function e(){for(var r=document.getElementsByTagName("input"),i=0;i - - - @@ -21,7 +15,7 @@ - + @@ -50,10 +44,6 @@ - - - - @@ -65,4 +55,4 @@ - + \ No newline at end of file diff --git a/index.cshtml b/index.cshtml index b3d8642..86d62a9 100644 --- a/index.cshtml +++ b/index.cshtml @@ -18,7 +18,7 @@ - + From a61ec7ca2013eaaa8957fcd4b8c42bfbb4e866e5 Mon Sep 17 00:00:00 2001 From: Sayed Ibrahim Hashimi Date: Mon, 7 Jan 2013 21:49:02 -0800 Subject: [PATCH 003/135] adding license --- LICENSE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..d3f1c5c --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2013 Mads Kristensen, Sayed Ibrahim Hashimi + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file From 64c4fedae0b0e64e87ca814ec0c84120a653d225 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 21:59:58 -0800 Subject: [PATCH 004/135] Added Friendly URLs rule --- App_Data/items.xml | 7 ++++++- index.cshtml | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index 59a55d8..fc3d85c 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -14,7 +14,12 @@ no-www.org Remove "www" in web.config - + + + 11 best practices for URLs + URL rewriting in IIS + URL rewrite in Apache + diff --git a/index.cshtml b/index.cshtml index 86d62a9..3a5dd1c 100644 --- a/index.cshtml +++ b/index.cshtml @@ -43,5 +43,16 @@ + From fc28cb0ef5da4d0fce4892e22cacffc3814d522b Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 22:27:06 -0800 Subject: [PATCH 005/135] Code clean up --- App_Code/Fingerprint.cs | 6 ------ App_Code/WhitespaceModule.cs | 9 ++------- App_Data/items.xml | 14 +++++++------- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/App_Code/Fingerprint.cs b/App_Code/Fingerprint.cs index fee3bab..082585d 100644 --- a/App_Code/Fingerprint.cs +++ b/App_Code/Fingerprint.cs @@ -1,15 +1,9 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Web; using System.Web.Caching; using System.Web.Hosting; -using System.Web.WebPages.Html; -/// -/// Summary description for Fingerprint -/// public class Fingerprint { public static string Tag(string rootRelativePath) diff --git a/App_Code/WhitespaceModule.cs b/App_Code/WhitespaceModule.cs index 8f2d85f..350caf8 100644 --- a/App_Code/WhitespaceModule.cs +++ b/App_Code/WhitespaceModule.cs @@ -1,14 +1,9 @@ -#region Using - -using System; +using System; using System.IO; -using System.Web; -using System.IO.Compression; using System.Text.RegularExpressions; +using System.Web; using System.Web.WebPages; -#endregion - /// /// Removes whitespace from the webpage. /// diff --git a/App_Data/items.xml b/App_Data/items.xml index fc3d85c..c44d44f 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -14,12 +14,7 @@ no-www.org Remove "www" in web.config - - - 11 best practices for URLs - URL rewriting in IIS - URL rewrite in Apache - + @@ -79,7 +74,12 @@ Online generator How to properly link a favicon - + + + 11 best practices for URLs + URL rewriting in IIS + URL rewrite in Apache + How to deply P3P Configure IIS to use P3P From 9059493ecf646e5f8a67d40739ad405dc6166125 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 22:32:21 -0800 Subject: [PATCH 006/135] Added author info --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e155e8..68ab4a3 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# Web Developer Checklist \ No newline at end of file +# Web Developer Checklist + +Created by: + +**Sayed Ibrahim Hashimi** +@sayedihashimi +http://sedodream.com + +**Mads Kristensen** +@mkristensen +http://madskristensen.net \ No newline at end of file From d79951ac282dbaa4c1f4d35af2229ceeffae7e56 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 7 Jan 2013 22:37:46 -0800 Subject: [PATCH 007/135] Added urls --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 68ab4a3..ded26fd 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ Created by: **Sayed Ibrahim Hashimi** -@sayedihashimi http://sedodream.com +@sayedihashimi **Mads Kristensen** -@mkristensen -http://madskristensen.net \ No newline at end of file +http://madskristensen.net +@mkristensen \ No newline at end of file From d20bfcdcb0648e789e988e6f652b72c7ef1bb59a Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Tue, 8 Jan 2013 06:58:27 -0800 Subject: [PATCH 008/135] Added custom checklists Set a custom path (webdevchecklist.com/MyProject) to maintain multiple checklists. --- App_Code/WhitespaceModule.cs | 1 + App_Data/items.xml | 8 ++++++-- Content/site.css | 14 ++++++++++---- Scripts/script.js | 26 +++++++++++++++----------- Scripts/script.min.js | 2 +- Views/_data.cshtml | 2 +- Web.config | 11 +++++++++-- index.cshtml | 12 ++++++++++-- packages.config | 2 +- website.publishproj | 1 - 10 files changed, 54 insertions(+), 25 deletions(-) diff --git a/App_Code/WhitespaceModule.cs b/App_Code/WhitespaceModule.cs index 350caf8..c8bf6be 100644 --- a/App_Code/WhitespaceModule.cs +++ b/App_Code/WhitespaceModule.cs @@ -29,6 +29,7 @@ void IHttpModule.Init(HttpApplication context) private void context_PreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("ETag"); + HttpContext.Current.Response.Headers.Remove("Server"); } private void context_BeginRequest(object sender, EventArgs e) diff --git a/App_Data/items.xml b/App_Data/items.xml index c44d44f..5f10b54 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -49,7 +49,8 @@ - Online validator + Common problems and solutions + IDI Web Accessibility Checker WAVE accessibility checker @@ -85,6 +86,9 @@ Configure IIS to use P3P P3P validator + + Google Custom Search + @@ -167,7 +171,7 @@ OWASP Top 10 project OWASP Cheat Sheets - ASP.NET security overview + ASafaaWeb security analyzer XSS cheat sheet diff --git a/Content/site.css b/Content/site.css index 2a165f7..c10ac6b 100644 --- a/Content/site.css +++ b/Content/site.css @@ -11,6 +11,12 @@ font-size: 2.5em; } + body > header h2 { + font-size: 2em; + margin-top: -.7em; + height: 1.2em; + } + .ghFork { height:125px; width:125px; @@ -189,6 +195,10 @@ footer progress::-moz-progress-bar { font-size: 1.7em; } + body > header h2 { + font-size: 1.4em; + } + .ghFork { height:0; width:0; @@ -207,10 +217,6 @@ footer progress::-moz-progress-bar { font-size: 1em; } - body > header h1 { - font-size: 1.6em; - } - h2{ font-size: 1.2em; } diff --git a/Scripts/script.js b/Scripts/script.js index be4adbf..7bcb6ef 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -1,9 +1,10 @@ - +/// + (function () { var checkboxes = [], details = [], - progress, bonus, fallback; + progress, bonus, fallback, prefix; function findCheckboxes() { @@ -24,16 +25,20 @@ bonus = document.getElementsByTagName("mark")[0]; progress = document.getElementsByTagName("progress")[0]; fallback = (progress.firstElementChild || progress.firstChild); + prefix = location.pathname.substr(1); var max = 0; for (var i = 0; i < checkboxes.length; i++) { var checkbox = checkboxes[i]; - var value = localStorage.getItem(checkbox.id) === "true"; - checkbox.checked = value; checkbox.onchange = calculateProgress; + if (Modernizr.localstorage) { + var value = localStorage.getItem(prefix + checkbox.id) === "true"; + checkbox.checked = value; + } + if (checkbox.parentNode.className !== "optional") max++; } @@ -48,7 +53,7 @@ function openDetails(e) { if (!e) e = window.event; - var detail = (e.target || e.srcElement); + var detail = (e.target || e.srcElement); var ul = (detail.nextElementSibling || detail.nextSibling); if (ul.style.maxHeight !== '100px') @@ -73,7 +78,7 @@ for (var i = 0; i < checkboxes.length; i++) { var checkbox = checkboxes[i]; - localStorage.setItem(checkbox.id, checkbox.checked); + localStorage && localStorage.setItem(prefix + checkbox.id, checkbox.checked); if (checkbox.parentNode.className !== "optional") { @@ -98,7 +103,7 @@ var max = parseInt(progress.max, 10); fallback.style.width = (value * 100 / max) + "%"; } - + function clearAll() { document.getElementById("clearall").onclick = function () { @@ -107,19 +112,18 @@ checkboxes[i].checked = false; } - localStorage.clear(); + localStorage && localStorage.clear(); calculateProgress(); return false; }; } - if (localStorage) { - + window.onload = function () { findCheckboxes(); initialize(); calculateProgress(); clearAll(); - } + }; })(); \ No newline at end of file diff --git a/Scripts/script.min.js b/Scripts/script.min.js index 4ba6469..90433e1 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1 @@ -(function(){function e(){for(var r=document.getElementsByTagName("input"),i=0;i } -

Optional: 0/@Page.BonusPoints

\ No newline at end of file +

Optional: 0/@Page.BonusPoints

\ No newline at end of file diff --git a/Web.config b/Web.config index 0ae8d8a..58a2c41 100644 --- a/Web.config +++ b/Web.config @@ -3,7 +3,8 @@ - + + @@ -15,7 +16,7 @@ - + @@ -44,6 +45,12 @@
+ + + + + + diff --git a/index.cshtml b/index.cshtml index 3a5dd1c..e133d84 100644 --- a/index.cshtml +++ b/index.cshtml @@ -28,10 +28,18 @@

Web Developer Checklist

+ @if (Request.RawUrl.Length > 1) { +

@Request.RawUrl

+ }
- -
+ + +
@RenderPage("~/views/_data.cshtml", null)
diff --git a/packages.config b/packages.config index ed878af..29cad5d 100644 --- a/packages.config +++ b/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/website.publishproj b/website.publishproj index 32252f3..8be52d0 100644 --- a/website.publishproj +++ b/website.publishproj @@ -1,5 +1,4 @@ - Debug From 66c1356240ad61c90d4dec2377e6866b41dd2d08 Mon Sep 17 00:00:00 2001 From: Nik Molnar Date: Tue, 8 Jan 2013 17:33:49 -0500 Subject: [PATCH 009/135] Added Social category with Humans.txt --- App_Data/items.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/App_Data/items.xml b/App_Data/items.xml index 5f10b54..730c863 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -192,5 +192,11 @@ + + + Humans.txt + + + \ No newline at end of file From 941b18d4a3dea2e20181808eafe9a333bafd458c Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Tue, 8 Jan 2013 17:51:19 -0800 Subject: [PATCH 010/135] Renaming of category and other tweaks --- App_Data/items.xml | 74 +++++++++++++++++++-------------------- Content/site.css | 86 +++++++++++++++++++++++----------------------- index.cshtml | 4 +-- 3 files changed, 82 insertions(+), 82 deletions(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index 730c863..2a3bbd0 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -91,21 +91,31 @@ - - - SenSEO for Firefox + + + W3C HTML validator + Dr. Watson - - Online tester - Getting started + + W3C CSS validator - - robots.txt tutorial - Create robots.txt online + + W3C i18n checker - - Create sitemap online + + Run CSS Lint online + CssCop for VS 2010 + Web Essentials for VS2012 + + + Run JSLint online + Run JSHint online + Web Essentials for VS2012 + @@ -139,33 +149,23 @@ W3C semantic extractor - - - - W3C HTML validator - Dr. Watson - - - W3C CSS validator - - - W3C i18n checker + + + + SenSEO for Firefox - - Run CSS Lint online - CssCop for VS 2010 - Web Essentials for VS2012 + + Online tester + Getting started - - Run JSLint online - Run JSHint online - Web Essentials for VS2012 + + robots.txt tutorial + Create robots.txt online - - W3C feed validator - feedvalidator.org + + Create sitemap online - + @@ -192,9 +192,9 @@ - - - Humans.txt + + + We are humans, not machines! diff --git a/Content/site.css b/Content/site.css index c10ac6b..27c5488 100644 --- a/Content/site.css +++ b/Content/site.css @@ -1,6 +1,6 @@ body { - font: 1.1em/1.2 arial; padding: 0; + font: 1.1em/1.2 arial; } body > header { @@ -12,19 +12,19 @@ } body > header h2 { - font-size: 2em; margin-top: -.7em; height: 1.2em; + font-size: 2em; } .ghFork { - height:125px; - width:125px; - /*/images/forkme_right_white_ffffff-125.png*/ - background-image:url('data:image/gif;base64,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'); - position:absolute; - top:0; - right:0; + position: absolute; + top: 0; + right: 0; + width: 125px; + height: 125px; + background-image: url('data:image/gif;base64,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'); + *background-image: url(/images/forkme_right_white_ffffff-125.png); } a { @@ -32,15 +32,15 @@ a { } #main { + margin: 1em auto; + padding: 0 1em 3em 1em; + font: inherit; -moz-column-width: 350px; -webkit-column-width: 350px; column-width: 350px; -moz-column-gap: 2em; - -webkit-column-gap: 2em; + -webkit-column-gap: 2em; column-gap: 2em; - margin: 1em auto; - font: inherit; - padding: 0 1em 3em 1em; } section { @@ -56,8 +56,8 @@ section { } ul { - list-style: none; padding-left: 1em; + list-style: none; } ul a { @@ -65,16 +65,16 @@ ul { } ul :not(.optional) + .optional:before { - content: 'Optional:'; + display: block; margin: 1em 0 .3em 0; + content: 'Optional:'; font-weight: bold; - display: block; } ul li ul { - max-height: 0; overflow: hidden; padding-left: 2em; + max-height: 0; -moz-transition: max-height .5s ease; -o-transition: max-height .5s ease; -webkit-transition: max-height .5s ease; @@ -87,23 +87,23 @@ ul { .info { display: inline-block; + margin-left: .6em; width: 15px; height: 15px; - text-decoration: none; border-radius: 12px; background: #369aca; color: white; text-align: center; - font-size: .7em; + text-decoration: none; font-weight: bold; font-style: normal; + font-size: .7em; + cursor: pointer; -moz-transform: translate(0, -2px); -ms-transform: translate(0, -2px); -o-transform: translate(0, -2px); -webkit-transform: translate(0, -2px); transform: translate(0, -2px); - margin-left: .6em; - cursor: pointer; } .info + ul li:first-child { @@ -125,52 +125,52 @@ footer { } footer a { - display: inline-block; position: fixed; - bottom: 1.5em; right: 1em; + bottom: 1.5em; + display: inline-block; background: white; } #bonus { position: fixed; - bottom: 0; right: 1em; - margin: 0; + bottom: 0; z-index: 1; + margin: 0; } #bonus mark { background: none; } -footer progress { +progress { position: fixed; - left: 0; bottom: 0; + left: 0; width: 100%; height: 1.2em; - color: #369aca; - background: #eaeaea; border: none; + background: #eaeaea; + color: #369aca; } - footer progress span { + progress span { display: block; background: #369aca; } -progress::-webkit-progress-bar { - background: #eaeaea; -} + progress::-webkit-progress-bar { + background: #eaeaea; + } -progress::-webkit-progress-value { - background: #369aca; -} + progress::-webkit-progress-value { + background: #369aca; + } -footer progress::-moz-progress-bar { - background-color: #369aca; -} + progress::-moz-progress-bar { + background-color: #369aca; + } /*#endregion */ @@ -200,9 +200,9 @@ footer progress::-moz-progress-bar { } .ghFork { - height:0; - width:0; - background-image:none; + width: 0; + height: 0; + background-image: none; } } @@ -217,7 +217,7 @@ footer progress::-moz-progress-bar { font-size: 1em; } - h2{ + h2 { font-size: 1.2em; } } diff --git a/index.cshtml b/index.cshtml index e133d84..b51934d 100644 --- a/index.cshtml +++ b/index.cshtml @@ -1,6 +1,6 @@ @{ Response.Cache.SetValidUntilExpires(true); - Response.Cache.SetExpires(DateTime.Now.AddDays(1)); + Response.Cache.SetExpires(DateTime.UtcNow.AddDays(1)); Response.Cache.SetCacheability(HttpCacheability.Public); string file = Server.MapPath(Request.CurrentExecutionFilePath); @@ -51,7 +51,7 @@ - - - + + +
+

@DataName Developer Checklist

-
-

Web Developer Checklist

- @if (Request.RawUrl.Length > 1) { -

@Request.RawUrl

- } + @if (Subtitle.Length > 1) + { +

@Subtitle

+ } + + Back to main checklist
- +
- @RenderPage("~/views/_data.cshtml", null) + @RenderPage("~/views/_data.cshtml", null)
+ +
Clear all From da505371576656103b49839411c93bb58bd4905a Mon Sep 17 00:00:00 2001 From: Dokuchaev Konstantin Date: Thu, 10 Jan 2013 13:35:22 +0300 Subject: [PATCH 019/135] Added cross-browser testing tools add Spoon.net --- App_Data/items.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/App_Data/items.xml b/App_Data/items.xml index 2234da2..8ef7924 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -10,6 +10,7 @@ Win8 snapped sites BrowserShots.org Browserling.com + Spoon.net no-www.org score of B From 68ed81aead1d51f76b96d1223115d16de309a280 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 12:29:21 -0800 Subject: [PATCH 020/135] Cleaned up checklist items --- App_Data/items.xml | 30 ++++++++++++------------------ Web.config | 4 ++-- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index 2234da2..3a10e47 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -14,7 +14,7 @@ no-www.org score of B Remove "www" in web.config - + @@ -27,7 +27,7 @@ Input type: Email, Url, Phone - Diving in to HTML5 forms + Diving in to HTML5 forms 6 free mobile emulators @@ -51,14 +51,14 @@ Common problems and solutions IDI Web Accessibility Checker - WAVE accessibility checker + Test using a screen reader Check color contrast online - + + Using WAI-ARIA Landmarks Guide to WAI-ARIA - Getting started with accessibility Practical examples @@ -88,7 +88,7 @@ Google Custom Search - Browser Integration with Open Search + Consider 'Open Search' Safari on iOS @@ -131,9 +131,6 @@ Yahoo's YSlow Remove ETags in ASP.NET - - WebPageTest.Org - redbot.org @@ -170,13 +167,13 @@ Create sitemap online - + - + + ASafaaWeb security analyzer OWASP Top 10 project OWASP Cheat Sheets - ASafaaWeb security analyzer XSS cheat sheet @@ -187,23 +184,20 @@ Explanation and walkthrough CSRF cheat sheet - - Prevent HTML form tampering - Setup SSL on IIS 7 Setup SSL on Apache Online SSL checker - + MDN Overview OWASP Overview - + HTML5 Rocks Introduction - Cross-domain policy file specification + Cross-domain policy specification diff --git a/Web.config b/Web.config index 58a2c41..eb98194 100644 --- a/Web.config +++ b/Web.config @@ -41,8 +41,8 @@ - - + + From d4ed8261bc9dada9c3d55d1f16e97ce1be30754e Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 12:37:02 -0800 Subject: [PATCH 021/135] Modified the ASP.NET specific xml --- App_Data/ASP.NET.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index d62f0ff..b2bdc48 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -1,6 +1,7 @@  - + + W3C link checker iWebTool Broken Link Checker @@ -18,7 +19,7 @@ - + W3C mobile checker @@ -126,9 +127,6 @@ Yahoo's YSlow Remove ETags in ASP.NET - - WebPageTest.Org - redbot.org From 47601405f1bfbb70b454ef876a057815229af289 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 12:52:32 -0800 Subject: [PATCH 022/135] Added back button --- Content/site.css | 15 +++++++++++++++ index.cshtml | 15 +++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Content/site.css b/Content/site.css index fddaabf..872f054 100644 --- a/Content/site.css +++ b/Content/site.css @@ -17,6 +17,17 @@ font-size: 2em; } + body > header a { + position: absolute; + top: 0; + left: 1em; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; + *background: url('/Images/back.png') no-repeat; /* For IE 6 and 7 */ + width: 40px; + height: 33px; + text-indent: -5000px; + } + .ghFork { position: absolute; top: 0; @@ -220,4 +231,8 @@ progress { h2 { font-size: 1.2em; } + + body > header a { + display: none; + } } diff --git a/index.cshtml b/index.cshtml index 75d8925..d89bafe 100644 --- a/index.cshtml +++ b/index.cshtml @@ -36,15 +36,18 @@ -
+

@DataName Developer Checklist

@if (Subtitle.Length > 1) {

@Subtitle

- } + } - Back to main checklist + @if (DataName != "Web") + { + Back to main checklist + }
- +
- @RenderPage("~/views/_data.cshtml", null) + @RenderPage("~/views/_data.cshtml", null)
- +
Clear all From 5d770920540590c82173180bbb1b9a92a3f1392e Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 12:54:37 -0800 Subject: [PATCH 023/135] Added image --- Images/back.png | Bin 0 -> 924 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/back.png diff --git a/Images/back.png b/Images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..80cf956c8d04bf9959dadd29fe8b64cf208cb765 GIT binary patch literal 924 zcmV;N17rM&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0009ENklk#@HVG=&MCHOh8bYa!**$!v}u#38KXFkJw87_<5H;%)oetv!qjK03U%7@xo?fqK#KytR zX5$S&*6DGf+U<5=N775(ybJ~dZ?2b@7b7+fP9_s?07zbIsKF^on_ExLq8-#~wTh#D zzwZg%1l9N-&ROJTAvdE|tK|vFD`{xaoMY1Ibeg2awaEF&eRpoc9uaF-NIjH>+wC@P zHk+Q_y|6L4j$DK2M$|i3I3AA!L+#{>K&~Ux4Tpp4O}JbmZmd>L?nOI6`Ks`D5O*!a z-0Gs8)EtzNN^(%vGx=D%Xn9BkcDr4CI-RaY&M)r+T~rYFTCElsx@aevRhsfbyXDTy zeTc|8SNQPo5cFgcS@nVNaNDJBUT9Y3oD}b*!^J6gfY(J%AW3tQNu_QcczfNs=ns%5 zgR)q&5b`Xv&x2c>L|;}Dds!0&8D_|Hil8~kVp;FGi#7-EFk@#WxdW{Xq`{lX4R^8a zQWl59AxJT|-8(C4T@58iD+fhEXk{JdVC?CEXP|vFU1}cgMHXh@^j#g#V6j*v-y+h8 zMzqM2EK-la*2mO zk8Rc_RiO)=iYx_1z$Wq(b5*E8j%YXUS}5S__1a9SuOm@~mmuscl9p2%kB^T@=-mRG y7gd-S{$0mqqO+l(bHcy|Xg2BR@?4~J;^+@o%AM51ggHb20000 Date: Thu, 10 Jan 2013 14:07:45 -0800 Subject: [PATCH 024/135] Changed color scheme --- Content/Themes/aspnet.css | 3 ++- Content/site.css | 10 ++++++---- Images/back.png | Bin 924 -> 748 bytes 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Content/Themes/aspnet.css b/Content/Themes/aspnet.css index 2d0c65b..7733eea 100644 --- a/Content/Themes/aspnet.css +++ b/Content/Themes/aspnet.css @@ -24,5 +24,6 @@ .aspnet .info { - background: #742894; + color: #742894; + border-color: #742894; } diff --git a/Content/site.css b/Content/site.css index 872f054..ed1daf1 100644 --- a/Content/site.css +++ b/Content/site.css @@ -1,6 +1,6 @@ body { padding: 0; - font: 1.1em/1.2 arial; + font: 1.1em/1.2 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; } body > header { @@ -22,7 +22,7 @@ top: 0; left: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; - *background: url('/Images/back.png') no-repeat; /* For IE 6 and 7 */ + *background: url('/Images/back.png') no-repeat; width: 40px; height: 33px; text-indent: -5000px; @@ -101,9 +101,11 @@ ul { margin-left: .6em; width: 15px; height: 15px; + border: 2px solid #369aca; border-radius: 12px; - background: #369aca; - color: white; + /*background: #369aca;*/ + background: #f1f1f1; + color: #369aca; text-align: center; text-decoration: none; font-weight: bold; diff --git a/Images/back.png b/Images/back.png index 80cf956c8d04bf9959dadd29fe8b64cf208cb765..13133932c423cc84dccd6ef14c3bb62a33372db7 100644 GIT binary patch delta 725 zcmV;`0xJES2kZrqBYy(3Nkl2&IaoC+IB z9DpVGcsxX{Rx@5&tybR2NsPy1W50gC&l8-_=b44ohS%#A5`Uum?shw25G)pp+C!B} zMSK&kcDwETKHVFU)CeMsQK!g~9I#j{3>*9XUVI3)S}pC*Mx*gFauVfoS+g@74*v;W zE|xwjecF7SOeUJGdcFQnaJ^m|8zFh4jKNF3JSV|9>U27ZU^E(86ZBW) zY{i1y47%N}wttAcN`r`F^6`f9p?J{YBgVBBH z9*AxLy;B#L%cXGfoDa}_Xu5&0QQim_tyoS@vhX17D)?>0oeMFl+BZp#AdOU*gH+FG zvyRFU01>#|ZsPrZCkC}o>j6`g5%+4fDw1}OIB9YP#(ynZ4*_ycUCih6#!MEc`cex~ z?P*sMc(1*2wm7ai;fv9;76|O>#OL2HUpGJzQg%tuKHOc+!a*b^iUAkB#qY)3EC}W-r24hiEdh|j6fP(^bQFRVsu(oJ;#0Wh$RT% z>c^d!o*v=H(1E@VAeYeiUEYm5WNc_KsZc5K0ZtskMa-RZ2sz?o?1zA#&u8ZxPF#fu zJ2tW96o*o&6oy_E;LHfp&vhs!Og0d7wasDJ#5|XFx{>$;SIV8#(qH?900000NkvXX Hu0mjfG`w83 delta 902 zcmV;119|-H1)K+vBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D02*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0009E zNklk#@HVG=&MCHOhJP7g&ck+TnzU(?rWvC+ zjy*m$CQH=|aoY|<09F&nta!}SY`B=MXc}N6yyIp)b zovudCFMsa?T~rYFTCElsx@aevRhsfbyXDTyeTc|8SNQPo5cFgcS@nVNaNDJBUT9Y3 zoD}b*!^J6gfY(J%AW3tQNu_QcczfNs=ns%5gR)q&5b`Xv&x2c>L|;}Dds!0&8D_|H zil8~kVp;FGi#7-EFk@#WxdW{Xq`{lX4R^8aQhyeQ!y!m9x7|A{YF!N_M=J+KL1<+i z=3wmUfoGt7G+k;Q?nM@6;PhP`&tS1wB;O*^h(@%?ljP)ZM6QD@^|RAL8zc>(Uay;B zU-uTsIW1D;p?3SdKP=iOC~&%52o{kxS+F>fkgo-hcUpf4fxx1DX<4}Olm>0b5)vNA zaDPIZi<8s-@1R&QyPztk4fm=0-P6Bm>2$C$7Q0kp`dfZzy@eG>F4rX cq;%rw4_C^a)Wd{1L;wH)07*qoM6N<$f@w9T6#xJL From dd62e4a0d69391d621ab9053915069a293cde8cc Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 14:44:38 -0800 Subject: [PATCH 025/135] Updated design --- App_Data/ASP.NET.xml | 29 ++++++++++++++++++++--------- App_Data/items.xml | 6 ++++++ Content/site.css | 4 ++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index b2bdc48..34034cd 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -57,9 +57,9 @@ Check color contrast online - + + Using WAI-ARIA Landmarks Guide to WAI-ARIA - Getting started with accessibility Practical examples @@ -89,6 +89,11 @@ Google Custom Search + Consider 'Open Search' + + + Safari on iOS + Internet Explorer on Windows @@ -163,13 +168,13 @@ Create sitemap online - + - + + ASafaaWeb security analyzer OWASP Top 10 project OWASP Cheat Sheets - ASafaaWeb security analyzer XSS cheat sheet @@ -180,14 +185,21 @@ Explanation and walkthrough CSRF cheat sheet - - Prevent HTML form tampering - Setup SSL on IIS 7 Setup SSL on Apache Online SSL checker + + MDN Overview + OWASP Overview + + + HTML5 Rocks Introduction + + + Cross-domain policy specification + @@ -196,5 +208,4 @@ - \ No newline at end of file diff --git a/App_Data/items.xml b/App_Data/items.xml index 3a10e47..50c28fb 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -201,4 +201,10 @@ + + + We are humans, not machines! + + + diff --git a/Content/site.css b/Content/site.css index ed1daf1..3c32928 100644 --- a/Content/site.css +++ b/Content/site.css @@ -99,8 +99,8 @@ ul { .info { display: inline-block; margin-left: .6em; - width: 15px; - height: 15px; + width: 14px; + height: 14px; border: 2px solid #369aca; border-radius: 12px; /*background: #369aca;*/ From eaa5ab3e3d03943d604694d9b3a945351b1571e5 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 18:25:11 -0800 Subject: [PATCH 026/135] Fixed the design --- App_Code/{DataProvider.cs => Checklist.cs} | 16 +++++++----- App_Code/WhitespaceModule.cs | 2 +- App_Data/ASP.NET.xml | 18 +++++-------- App_Data/items.xml | 7 +---- Content/site.css | 14 ++++++---- Views/_data.cshtml | 2 +- index.cshtml | 30 +++++++++++----------- 7 files changed, 42 insertions(+), 47 deletions(-) rename App_Code/{DataProvider.cs => Checklist.cs} (87%) diff --git a/App_Code/DataProvider.cs b/App_Code/Checklist.cs similarity index 87% rename from App_Code/DataProvider.cs rename to App_Code/Checklist.cs index 87e165d..7d49096 100644 --- a/App_Code/DataProvider.cs +++ b/App_Code/Checklist.cs @@ -10,14 +10,14 @@ /// /// Summary description for DataProvider /// -public static class DataProvider +public static class Checklist { public static Dictionary Docs = new Dictionary(); - - private static string folder = HostingEnvironment.MapPath("~/app_data/"); - private const string title = "Web"; + public const string Title = "Web Developer"; + + private static string folder = HostingEnvironment.MapPath("~/app_data/"); - static DataProvider() + static Checklist() { BuildCache(folder); } @@ -66,12 +66,12 @@ public static string PageName(HttpRequestBase request) return result.Key; } - return title; + return Title; } public static string Subtitle(HttpRequestBase request) { - if (PageName(request) != title) + if (PageName(request) != Title) { int index = request.RawUrl.IndexOf('/', 1); @@ -79,6 +79,8 @@ public static string Subtitle(HttpRequestBase request) { return request.RawUrl.Substring(index); } + + return string.Empty; } return request.RawUrl; diff --git a/App_Code/WhitespaceModule.cs b/App_Code/WhitespaceModule.cs index c8bf6be..dc6dd25 100644 --- a/App_Code/WhitespaceModule.cs +++ b/App_Code/WhitespaceModule.cs @@ -123,7 +123,7 @@ public override void Write(byte[] buffer, int offset, int count) html = Regex.Replace(html, @">\s+<", "><"); html = Regex.Replace(html, @"\s+", " "); - byte[] outdata = System.Text.Encoding.Default.GetBytes(html.Trim()); + byte[] outdata = System.Text.Encoding.Default.GetBytes(html); _sink.Write(outdata, 0, outdata.GetLength(0)); } diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index 34034cd..d209799 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -1,7 +1,6 @@  - W3C link checker iWebTool Broken Link Checker @@ -15,11 +14,11 @@ no-www.org score of B Remove "www" in web.config - + - + W3C mobile checker @@ -28,7 +27,7 @@ Input type: Email, Url, Phone - Diving in to HTML5 forms + Diving in to HTML5 forms 6 free mobile emulators @@ -52,7 +51,7 @@ Common problems and solutions IDI Web Accessibility Checker - WAVE accessibility checker + Test using a screen reader Check color contrast online @@ -189,17 +188,12 @@ Setup SSL on IIS 7 Setup SSL on Apache Online SSL checker + Content Security Policy MDN Overview OWASP Overview - - HTML5 Rocks Introduction - - - Cross-domain policy specification - @@ -208,4 +202,4 @@ - \ No newline at end of file + diff --git a/App_Data/items.xml b/App_Data/items.xml index 50c28fb..d209799 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -188,17 +188,12 @@ Setup SSL on IIS 7 Setup SSL on Apache Online SSL checker + Content Security Policy MDN Overview OWASP Overview - - HTML5 Rocks Introduction - - - Cross-domain policy specification - diff --git a/Content/site.css b/Content/site.css index 3c32928..9b406e6 100644 --- a/Content/site.css +++ b/Content/site.css @@ -1,6 +1,6 @@ body { padding: 0; - font: 1.1em/1.2 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; + font: 1em/1.2 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; } body > header { @@ -46,9 +46,9 @@ a { margin: 1em auto; padding: 0 1em 3em 1em; font: inherit; - -moz-column-width: 350px; - -webkit-column-width: 350px; - column-width: 350px; + -moz-column-width: 360px; + -webkit-column-width: 360px; + column-width: 360px; -moz-column-gap: 2em; -webkit-column-gap: 2em; column-gap: 2em; @@ -59,7 +59,7 @@ section { overflow: hidden; margin: 0 auto 1em auto; width: 370px; - column-fill: auto; + column-fill: balance; } section h2 { @@ -221,6 +221,10 @@ progress { /* Win8 snapped */ @media screen and (max-width: 400px) { + @-o-viewport { + width: 470px; + } + @-ms-viewport { width: 470px; } diff --git a/Views/_data.cshtml b/Views/_data.cshtml index 895319d..ab5e2f6 100644 --- a/Views/_data.cshtml +++ b/Views/_data.cshtml @@ -1,6 +1,6 @@ @using System.Xml @{ - XmlDocument doc = DataProvider.GetXmlDocument(Request); + XmlDocument doc = Checklist.GetXmlDocument(Request); Page.BonusPoints = doc.SelectNodes("//rule[@optional]").Count; } diff --git a/index.cshtml b/index.cshtml index d89bafe..6cae13b 100644 --- a/index.cshtml +++ b/index.cshtml @@ -1,17 +1,17 @@ @{ - //Response.Cache.SetValidUntilExpires(true); - //Response.Cache.SetExpires(DateTime.UtcNow.AddDays(1)); - //Response.Cache.SetCacheability(HttpCacheability.Public); + if (!Request.IsLocal) + { + Response.Cache.SetValidUntilExpires(true); + Response.Cache.SetExpires(DateTime.UtcNow.AddDays(1)); + Response.Cache.SetCacheability(HttpCacheability.Public); - //string file = Server.MapPath(Request.CurrentExecutionFilePath); - //string css = Server.MapPath("~/content/all.min.css"); - //string js = Server.MapPath("~/scripts/script.min.js"); - //string data = Server.MapPath("~/app_data/items.xml"); - //Response.Cache.SetLastModified(File.GetLastWriteTimeUtc(file)); - //Response.AddFileDependencies(new[] { file, css, js, data }); + string file = Server.MapPath(Request.CurrentExecutionFilePath); + Response.Cache.SetLastModified(File.GetLastWriteTimeUtc(file)); + Response.AddFileDependency(file); + } - string DataName = DataProvider.PageName(Request); - string Subtitle = DataProvider.Subtitle(Request); + string DataName = Checklist.PageName(Request); + string Subtitle = Checklist.Subtitle(Request); string Section = DataName.Replace(".", string.Empty).ToLowerInvariant(); } @@ -26,7 +26,7 @@ - @if (DataName != "Web") + @if (DataName != Checklist.Title) { } @@ -37,16 +37,16 @@
-

@DataName Developer Checklist

+

@DataName Checklist

@if (Subtitle.Length > 1) {

@Subtitle

} - @if (DataName != "Web") + @if (DataName != Checklist.Title) { - Back to main checklist + Back to main checklist }
From eb29874f24562fd163703a194a7abb07da57d01d Mon Sep 17 00:00:00 2001 From: Santosh Kumar Date: Fri, 11 Jan 2013 08:02:05 +0530 Subject: [PATCH 027/135] Added ::selection ::selection helps change the default text selection color. --- Content/site.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content/site.css b/Content/site.css index 3c32928..ca37d38 100644 --- a/Content/site.css +++ b/Content/site.css @@ -2,6 +2,9 @@ padding: 0; font: 1.1em/1.2 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; } + +*::selection,*::-moz-selection{text-shadow:none;background-color:rgba(65,131,196,0.4)} + body > header { text-align: center; From 99e25341c21978ee00a1cf5cea881576830eecae Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 18:52:44 -0800 Subject: [PATCH 028/135] Minor tweaks --- Content/site.css | 50 +++++++++++++++++++++---------------------- Scripts/script.js | 10 ++++----- Scripts/script.min.js | 2 +- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Content/site.css b/Content/site.css index 9b406e6..79d40a0 100644 --- a/Content/site.css +++ b/Content/site.css @@ -1,32 +1,32 @@ body { padding: 0; - font: 1em/1.2 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; + font: 1em/1.3 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; } - body > header { - text-align: center; - } +body > header { + text-align: center; +} - body > header h1 { - font-size: 2.5em; - } + body > header h1 { + font-size: 2.5em; + } - body > header h2 { - margin-top: -.7em; - height: 1.2em; - font-size: 2em; - } + body > header h2 { + margin-top: -.7em; + height: 1.2em; + font-size: 2em; + } - body > header a { - position: absolute; - top: 0; - left: 1em; - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; - *background: url('/Images/back.png') no-repeat; - width: 40px; - height: 33px; - text-indent: -5000px; - } + body > header a { + position: absolute; + top: 0; + left: 1em; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; + *background: url('/Images/back.png') no-repeat; + width: 40px; + height: 33px; + text-indent: -5000px; + } .ghFork { position: absolute; @@ -45,7 +45,6 @@ a { #main { margin: 1em auto; padding: 0 1em 3em 1em; - font: inherit; -moz-column-width: 360px; -webkit-column-width: 360px; column-width: 360px; @@ -56,6 +55,7 @@ a { section { -webkit-column-break-inside: avoid; + break-inside: avoid-column; overflow: hidden; margin: 0 auto 1em auto; width: 370px; @@ -72,7 +72,7 @@ ul { } ul a { - font-size: .9em; + font-size: .95em; } ul :not(.optional) + .optional:before { @@ -231,7 +231,7 @@ progress { body { overflow-x: hidden; - font-size: 1em; + line-height: 1.4; } h2 { diff --git a/Scripts/script.js b/Scripts/script.js index 7bcb6ef..8fbce37 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -56,11 +56,6 @@ var detail = (e.target || e.srcElement); var ul = (detail.nextElementSibling || detail.nextSibling); - if (ul.style.maxHeight !== '100px') - ul.style.maxHeight = '100px'; - else - ul.style.maxHeight = '0'; - for (var i = 0; i < details.length; i++) { if (details[i] !== detail) { @@ -68,6 +63,11 @@ d.style.maxHeight = "0"; } } + + if (ul.style.maxHeight !== '95px') + ul.style.maxHeight = '95px'; + else + ul.style.maxHeight = '0'; } function calculateProgress() { diff --git a/Scripts/script.min.js b/Scripts/script.min.js index 90433e1..c4484fe 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1 @@ -(function(){function o(){for(var r=document.getElementsByTagName("input"),i=0;i Date: Thu, 10 Jan 2013 19:37:28 -0800 Subject: [PATCH 029/135] Added new info icons --- App_Data/ASP.NET.xml | 2 +- App_Data/items.xml | 1 - Content/Themes/aspnet.css | 2 +- Content/site.css | 78 ++++++++++++++++++++------------------- Scripts/script.js | 11 ++++-- Scripts/script.min.js | 2 +- Views/_data.cshtml | 2 +- 7 files changed, 53 insertions(+), 45 deletions(-) diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index d209799..aa565f4 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -7,9 +7,9 @@ - Win8 snapped sites BrowserShots.org Browserling.com + Spoon.net no-www.org score of B diff --git a/App_Data/items.xml b/App_Data/items.xml index 58520a6..aa565f4 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -7,7 +7,6 @@ - Win8 snapped sites BrowserShots.org Browserling.com Spoon.net diff --git a/Content/Themes/aspnet.css b/Content/Themes/aspnet.css index 7733eea..c2ebaeb 100644 --- a/Content/Themes/aspnet.css +++ b/Content/Themes/aspnet.css @@ -23,7 +23,7 @@ } -.aspnet .info { +.aspnet em { color: #742894; border-color: #742894; } diff --git a/Content/site.css b/Content/site.css index 61808a3..0ce0e52 100644 --- a/Content/site.css +++ b/Content/site.css @@ -2,34 +2,39 @@ padding: 0; font: 1em/1.3 'Century Gothic', futura, 'URW Gothic L', Verdana, sans-serif; } - -*::selection,*::-moz-selection{text-shadow:none;background-color:rgba(65,131,196,0.4)} - -body > header { - text-align: center; -} - - body > header h1 { - font-size: 2.5em; + body > header { + text-align: center; } - body > header h2 { - margin-top: -.7em; - height: 1.2em; - font-size: 2em; - } + body > header h1 { + font-size: 2.5em; + } - body > header a { - position: absolute; - top: 0; - left: 1em; - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; - *background: url('/Images/back.png') no-repeat; - width: 40px; - height: 33px; - text-indent: -5000px; - } + body > header h2 { + margin-top: -.7em; + height: 1.2em; + font-size: 2em; + } + + body > header a { + position: absolute; + top: 0; + left: 1em; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; + *background: url('/Images/back.png') no-repeat; + width: 40px; + height: 33px; + text-indent: -5000px; + } + +::-moz-selection { + background-color: rgba(65,131,196,0.4); +} + +::selection { + background-color: rgba(65,131,196,0.4); +} .ghFork { position: absolute; @@ -99,21 +104,12 @@ ul { margin-bottom: 1em; } -.info { +em { display: inline-block; - margin-left: .6em; - width: 14px; - height: 14px; - border: 2px solid #369aca; - border-radius: 12px; - /*background: #369aca;*/ - background: #f1f1f1; + padding: 0 4px; color: #369aca; - text-align: center; text-decoration: none; - font-weight: bold; - font-style: normal; - font-size: .7em; + font-size: .8em; cursor: pointer; -moz-transform: translate(0, -2px); -ms-transform: translate(0, -2px); @@ -122,7 +118,15 @@ ul { transform: translate(0, -2px); } - .info + ul li:first-child { +em.info:after{ + content: '◄'; +} + +em.open:after{ + content: '▼'; +} + + em + ul li:first-child { margin-top: .5em; } diff --git a/Scripts/script.js b/Scripts/script.js index 8fbce37..265f5fb 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -60,14 +60,19 @@ if (details[i] !== detail) { var d = (details[i].nextElementSibling || details[i].nextSibling); - d.style.maxHeight = "0"; + d.style.maxHeight = "0"; } + + details[i].className = 'info'; } - if (ul.style.maxHeight !== '95px') + if (ul.style.maxHeight !== '95px') { ul.style.maxHeight = '95px'; - else + detail.className = 'open'; + } + else { ul.style.maxHeight = '0'; + } } function calculateProgress() { diff --git a/Scripts/script.min.js b/Scripts/script.min.js index c4484fe..68c6d98 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1 @@ -(function(){function o(){for(var r=document.getElementsByTagName("input"),i=0;i 0) { - i +
    @foreach (XmlNode link in links) { From cad69ac0c37d4417709e7ba03edfd510cc2c0dbf Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 19:49:21 -0800 Subject: [PATCH 030/135] text-shadow test --- App_Data/items.xml | 74 +++++++++++++++++++++++----------------------- Content/site.css | 2 ++ 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/App_Data/items.xml b/App_Data/items.xml index aa565f4..d1dfb88 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -47,22 +47,25 @@ - - - Common problems and solutions - IDI Web Accessibility Checker - Test using a screen reader + + + Google Page Speed - - Check color contrast online + + Yahoo's YSlow + Remove ETags in ASP.NET - - Using WAI-ARIA Landmarks - Guide to WAI-ARIA - Practical examples + + redbot.org + + + SmushIt.com + PunyPNG.com + Image Optimizer for Visual Studio + PNGGauntlet application - + Compat Inspector @@ -123,22 +126,20 @@ --> - - - Google Page Speed + + + SenSEO for Firefox - - Yahoo's YSlow - Remove ETags in ASP.NET + + Online tester + Getting started - - redbot.org + + robots.txt tutorial + Create robots.txt online - - SmushIt.com - PunyPNG.com - Image Optimizer for Visual Studio - PNGGauntlet application + + Create sitemap online @@ -152,20 +153,19 @@ - - - SenSEO for Firefox - - - Online tester - Getting started + + + Common problems and solutions + IDI Web Accessibility Checker + Test using a screen reader - - robots.txt tutorial - Create robots.txt online + + Check color contrast online - - Create sitemap online + + Using WAI-ARIA Landmarks + Guide to WAI-ARIA + Practical examples diff --git a/Content/site.css b/Content/site.css index 0ce0e52..beade6b 100644 --- a/Content/site.css +++ b/Content/site.css @@ -116,6 +116,8 @@ em { -o-transform: translate(0, -2px); -webkit-transform: translate(0, -2px); transform: translate(0, -2px); + -webkit-text-shadow: 2px 2px 2px #c1c1c1; + text-shadow: 2px 2px 2px #c1c1c1; } em.info:after{ From 43e9ccb35976466fbc4dc519741616b886ec9dd2 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 10 Jan 2013 19:58:08 -0800 Subject: [PATCH 031/135] Open first item on first visit --- App_Data/ASP.NET.xml | 72 +++++++++++++++++++++---------------------- Scripts/script.js | 12 ++++++-- Scripts/script.min.js | 2 +- 3 files changed, 46 insertions(+), 40 deletions(-) diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index aa565f4..54cadc6 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -47,19 +47,22 @@ - - - Common problems and solutions - IDI Web Accessibility Checker - Test using a screen reader + + + Google Page Speed - - Check color contrast online + + Yahoo's YSlow + Remove ETags in ASP.NET - - Using WAI-ARIA Landmarks - Guide to WAI-ARIA - Practical examples + + redbot.org + + + SmushIt.com + PunyPNG.com + Image Optimizer for Visual Studio + PNGGauntlet application @@ -123,22 +126,20 @@ --> - - - Google Page Speed + + + SenSEO for Firefox - - Yahoo's YSlow - Remove ETags in ASP.NET + + Online tester + Getting started - - redbot.org + + robots.txt tutorial + Create robots.txt online - - SmushIt.com - PunyPNG.com - Image Optimizer for Visual Studio - PNGGauntlet application + + Create sitemap online @@ -152,20 +153,19 @@ - - - SenSEO for Firefox - - - Online tester - Getting started + + + Common problems and solutions + IDI Web Accessibility Checker + Test using a screen reader - - robots.txt tutorial - Create robots.txt online + + Check color contrast online - - Create sitemap online + + Using WAI-ARIA Landmarks + Guide to WAI-ARIA + Practical examples diff --git a/Scripts/script.js b/Scripts/script.js index 265f5fb..63978e6 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -37,7 +37,7 @@ if (Modernizr.localstorage) { var value = localStorage.getItem(prefix + checkbox.id) === "true"; checkbox.checked = value; - } + } if (checkbox.parentNode.className !== "optional") max++; @@ -60,7 +60,7 @@ if (details[i] !== detail) { var d = (details[i].nextElementSibling || details[i].nextSibling); - d.style.maxHeight = "0"; + d.style.maxHeight = "0"; } details[i].className = 'info'; @@ -83,7 +83,10 @@ for (var i = 0; i < checkboxes.length; i++) { var checkbox = checkboxes[i]; - localStorage && localStorage.setItem(prefix + checkbox.id, checkbox.checked); + if (checkbox.checked) + localStorage && localStorage.setItem(prefix + checkbox.id, checkbox.checked); + else + localStorage && localStorage.removeItem(prefix + checkbox.id); if (checkbox.parentNode.className !== "optional") { @@ -129,6 +132,9 @@ initialize(); calculateProgress(); clearAll(); + + if (localStorage.length === 0) + details[0].click(); }; })(); \ No newline at end of file diff --git a/Scripts/script.min.js b/Scripts/script.min.js index 68c6d98..682a471 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1 @@ -(function(){function o(){for(var r=document.getElementsByTagName("input"),i=0;i Date: Thu, 10 Jan 2013 20:40:15 -0800 Subject: [PATCH 032/135] Added transitions to the open/close icons --- App_Data/ASP.NET.xml | 4 ++-- App_Data/items.xml | 4 ++-- Content/Themes/aspnet.css | 1 - Content/site.css | 28 ++++++++++++++-------------- Views/_data.cshtml | 2 +- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/App_Data/ASP.NET.xml b/App_Data/ASP.NET.xml index 54cadc6..ff503d0 100644 --- a/App_Data/ASP.NET.xml +++ b/App_Data/ASP.NET.xml @@ -12,8 +12,8 @@ Spoon.net - no-www.org score of B - Remove "www" in web.config + no-www.org score of 'B' + Remove 'www' in web.config diff --git a/App_Data/items.xml b/App_Data/items.xml index d1dfb88..bc7b89b 100644 --- a/App_Data/items.xml +++ b/App_Data/items.xml @@ -12,8 +12,8 @@ Spoon.net - no-www.org score of B - Remove "www" in web.config + no-www.org score of 'B' + Remove 'www' in web.config diff --git a/Content/Themes/aspnet.css b/Content/Themes/aspnet.css index c2ebaeb..810f5d2 100644 --- a/Content/Themes/aspnet.css +++ b/Content/Themes/aspnet.css @@ -25,5 +25,4 @@ .aspnet em { color: #742894; - border-color: #742894; } diff --git a/Content/site.css b/Content/site.css index beade6b..d09a29f 100644 --- a/Content/site.css +++ b/Content/site.css @@ -109,24 +109,24 @@ em { padding: 0 4px; color: #369aca; text-decoration: none; + /*-webkit-text-shadow: 2px 2px 2px #c1c1c1; + text-shadow: 2px 2px 2px #c1c1c1;*/ + -webkit-appearance: none; font-size: .8em; cursor: pointer; - -moz-transform: translate(0, -2px); - -ms-transform: translate(0, -2px); - -o-transform: translate(0, -2px); - -webkit-transform: translate(0, -2px); - transform: translate(0, -2px); - -webkit-text-shadow: 2px 2px 2px #c1c1c1; - text-shadow: 2px 2px 2px #c1c1c1; + -moz-transition: -moz-transform .4s ease; + -o-transition: -o-transform .4s ease; + -webkit-transition: transform .4s ease; /* Chrome is having issues with this transition, so it points to the standard transform property */ + transition: transform .4s ease; } -em.info:after{ - content: '◄'; -} - -em.open:after{ - content: '▼'; -} + em.open { + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + } em + ul li:first-child { margin-top: .5em; diff --git a/Views/_data.cshtml b/Views/_data.cshtml index 4191c45..4ed606e 100644 --- a/Views/_data.cshtml +++ b/Views/_data.cshtml @@ -24,7 +24,7 @@ @if (links.Count > 0) { - +
From d621013f38b3e6fa8fd897b60444ef94b5d3e01a Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Sun, 13 Jan 2013 14:35:10 -0800 Subject: [PATCH 040/135] Preparing ASP.NET specific page --- App_Code/Checklist.cs | 2 +- Content/menu.css | 4 ++-- Sections/ASP.NET/index.xml | 24 +++++++++++++++++------- Sections/index.xml | 6 ------ 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/App_Code/Checklist.cs b/App_Code/Checklist.cs index 81e649f..e73f016 100644 --- a/App_Code/Checklist.cs +++ b/App_Code/Checklist.cs @@ -29,7 +29,7 @@ public static XmlDocument GetXmlDocument(HttpRequestBase request) { BuildCache(Folder); - HttpRuntime.Cache.Insert("data", "test", new CacheDependency(Folder)); + // HttpRuntime.Cache.Insert("data", "test", new CacheDependency(Folder)); } var result = Docs.FirstOrDefault(d => d.Key.Equals(name, StringComparison.OrdinalIgnoreCase)); diff --git a/Content/menu.css b/Content/menu.css index cef2894..f345c69 100644 --- a/Content/menu.css +++ b/Content/menu.css @@ -13,8 +13,8 @@ nav:hover, nav.open { - -webkit-box-shadow: rgba(192, 192, 192, 0.47) 5px 5px; - box-shadow: rgba(192, 192, 192, 0.47) 5px 5px; + -webkit-box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; + box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; } nav:hover > ul, diff --git a/Sections/ASP.NET/index.xml b/Sections/ASP.NET/index.xml index ff503d0..872bfc4 100644 --- a/Sections/ASP.NET/index.xml +++ b/Sections/ASP.NET/index.xml @@ -5,7 +5,11 @@ W3C link checker iWebTool Broken Link Checker
- + + HTML Spell Checker for VS2012 + HTML Spell Checker for VS2010 + Spell Checker for VS2010/2012 + BrowserShots.org Browserling.com @@ -28,6 +32,7 @@ Input type: Email, Url, Phone Diving in to HTML5 forms + Input types in ASP.NET WebForms 4.5 6 free mobile emulators @@ -48,6 +53,9 @@
+ + Release Mode and Retail switch + Google Page Speed @@ -82,7 +90,6 @@ 11 best practices for URLs URL rewriting in IIS - URL rewrite in Apache How to deply P3P @@ -129,6 +136,7 @@ SenSEO for Firefox + SEO toolkit for IIS Online tester @@ -137,9 +145,11 @@ robots.txt tutorial Create robots.txt online + Manage it in SEO Toolkit for IIS Create sitemap online + Sitemap.xml using ASP.NET MVC @@ -172,21 +182,21 @@ ASafaaWeb security analyzer - OWASP Top 10 project - OWASP Cheat Sheets + Basic security practices for ASP.NET + Microsoft CAT.NET for ASP.NET - XSS cheat sheet - DOM based XSS cheat sheet + Prevent XSS in ASP.NET WebForms + Microsoft Anti-XSS library Free XSS scanner Explanation and walkthrough CSRF cheat sheet + Prevent CSRF in ASP.NET MVC Setup SSL on IIS 7 - Setup SSL on Apache Online SSL checker Content Security Policy diff --git a/Sections/index.xml b/Sections/index.xml index bc7b89b..367fcfd 100644 --- a/Sections/index.xml +++ b/Sections/index.xml @@ -53,7 +53,6 @@ Yahoo's YSlow - Remove ETags in ASP.NET redbot.org @@ -61,7 +60,6 @@ SmushIt.com PunyPNG.com - Image Optimizer for Visual Studio PNGGauntlet application @@ -73,7 +71,6 @@
A more useful 404 - Custom error pages in ASP.NET Online generator @@ -112,13 +109,10 @@ Run CSS Lint online - CssCop for VS 2010 - Web Essentials for VS2012 Run JSLint online Run JSHint online - Web Essentials for VS2012 + + Remove whitespace in WebForms + Remove whitespace in Razor + - - - SenSEO for Firefox - - - Online tester - Getting started + + + Set expiration in web.config + Set expiration programmatically - - robots.txt tutorial - Create robots.txt online - - - Create sitemap online + + Cache busting in ASP.NET - - - Schema.org reference - Schema-Creator.org - - - W3C semantic extractor + + + Conditional GET explained + Use Last-Modified in ASP.NET WebForms + The WebOptimizer C# class - - - Common problems and solutions - IDI Web Accessibility Checker - Test using a screen reader + + + Image Optimizer for VS2010+ + PNGGauntlet application - - Check color contrast online + + Video: How to embed images + Online base64 converter + Web Essentials for VS2012 - - Using WAI-ARIA Landmarks - Guide to WAI-ARIA - Practical examples + + Request Reduce - - - ASafaaWeb security analyzer - OWASP Top 10 project - OWASP Cheat Sheets - - - XSS cheat sheet - DOM based XSS cheat sheet - Free XSS scanner - - - Explanation and walkthrough - CSRF cheat sheet - - - Setup SSL on IIS 7 - Setup SSL on Apache - Online SSL checker - Content Security Policy - - - MDN Overview - OWASP Overview + + + Remove unnecessary headers - - - - - We are humans, not machines! + + Remove ETags in ASP.NET + + + + Remove the X-AspNet-Version header + + diff --git a/Content/Themes/aspnet.css b/Sections/ASP.NET/section.css similarity index 100% rename from Content/Themes/aspnet.css rename to Sections/ASP.NET/section.css diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index d48814a..46a40ea 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -31,6 +31,7 @@

  • PHP (planned)
  • Rails (planned)
  • NodeJS (planned)
  • +
  • Python (planned)

  • Help needed
  • } diff --git a/index.cshtml b/index.cshtml index a37245a..c36b0f6 100644 --- a/index.cshtml +++ b/index.cshtml @@ -12,7 +12,7 @@ string DataName = Checklist.PageName(Request).Replace("/", " "); string Subtitle = Checklist.Subtitle(Request); - string Section = Checklist.BaseName(Request).Replace(".", string.Empty).ToLowerInvariant(); + string Section = Checklist.BaseName(Request); } @@ -28,7 +28,7 @@ @if (DataName != Checklist.Title) { Web Developer Checklist - @DataName - + } else { Web Developer Checklist @@ -36,7 +36,7 @@ - +

    Web Developer Checklist

    From 5f9a02b8c2e3327ce1b0838b3a7d6abdb4fcd20e Mon Sep 17 00:00:00 2001 From: Sayed Ibrahim Hashimi Date: Sun, 13 Jan 2013 20:48:45 -0800 Subject: [PATCH 043/135] Updating so reset on index doesn't reset all. Resoved #15 --- Scripts/script.js | 13 +++++++++---- Scripts/script.min.js | 3 ++- index.cshtml | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Scripts/script.js b/Scripts/script.js index b54c196..3328c7e 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -138,15 +138,20 @@ fallback.style.width = (value * 100 / max) + "%"; } - function clearAll() { + function reset() { - document.getElementById("clearall").onclick = function () { + document.getElementById("reset").onclick = function () { for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].checked = false; + + if(Modernizr.localstorage) localStorage.removeItem(prefix + checkboxes[i].id); + } + + for (var j = 0; j < details.length; j++) { + if (Modernizr.localstorage) localStorage.removeItem(prefix + details[j].id); } - localStorage && localStorage.clear(); calculateProgress(); return false; @@ -169,7 +174,7 @@ findCheckboxes(); initialize(); calculateProgress(); - clearAll(); + reset(); if (localStorage.length === 0) details[0].click(); diff --git a/Scripts/script.min.js b/Scripts/script.min.js index 42018bb..c56b184 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1 +1,2 @@ -(function(){function c(){for(var r=document.getElementsByTagName("input"),i=0;i - Clear all + Reset   From 42c3cb26dc257635420a999f0358a0faf4eb96aa Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Sun, 13 Jan 2013 21:48:50 -0800 Subject: [PATCH 044/135] Fixed bad menu HTML --- Content/menu.css | 100 ++++++++++++++++++++--------------- Content/site.css | 78 ++++++++++++--------------- Images/menu.png | Bin 128 -> 125 bytes Sections/ASP.NET/section.css | 4 +- Views/_menu.cshtml | 53 ++++++++++--------- 5 files changed, 122 insertions(+), 113 deletions(-) diff --git a/Content/menu.css b/Content/menu.css index 2d79070..15040e0 100644 --- a/Content/menu.css +++ b/Content/menu.css @@ -1,46 +1,62 @@ nav { - min-width: 16px; - position: absolute; - top: 1em; - left: 1em; - background: white; - padding: 0 1.2em 0 0 ; - border-radius: 3px; - cursor: default; - z-index: 2; + min-width: 16px; + position: absolute; + top: 1em; + left: 1em; + background: white; + padding: 0 1.2em 0 0; + border-radius: 3px; + cursor: default; + z-index: 2; } -nav span{ - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAR0lEQVQ4y+3QMQoAIAiFYY0mz+Zx39nealtEIBQ29o0KIr+SDNmYmcohJRnuPgcA5EbPFuvRDID8wOknWm3QpOhH/BGfRCwbes80G6vaaBIAAAAASUVORK5CYII=') no-repeat; - *background: url(/Images/menu.png) no-repeat; /* For IE 6 and 7 */ - padding-left: 20px; - line-height: 16px; - display: inline-block; -} + nav span { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARElEQVQ4y+2QQQoAIBACNfrZvtu32S0iKBa2Y3MVBYe2sUMSWWgbETFXJOXbAPopWEdPSGK/hekLFQcNRb7EL/GJxDIDEGwzw19p5hYAAAAASUVORK5CYII=') no-repeat; + *background: url(/Images/menu.png) no-repeat; /* For IE 6 and 7 */ + padding-left: 20px; + line-height: 16px; + display: inline-block; + } + + .no-touch nav:hover, + nav.open { + -webkit-box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; + box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; + } + + .no-touch nav:hover > ul, + nav.open > ul { + max-height: 300px; + max-width: 200px; + } + + nav ul { + list-style: none; + padding: 0 0 0 .8em; + } + + nav ul li { + padding: 0; + margin: 0; + } + + nav > ul { + padding: 0 0 0 1.2em; + max-height: 0; + max-width: 45px; + margin: 0; + overflow: hidden; + -moz-transition: all .4s ease; + -o-transition: all .4s ease; + -webkit-transition: all .4s ease; + transition: all .4s ease; + } + + nav > ul > li > a { + margin: .8em 0; + display: block; + } - .no-touch nav:hover, - nav.open { - -webkit-box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; - box-shadow: rgba(222, 222, 222, 0.79) 5px 5px; - } - - .no-touch nav:hover > ul, - nav.open > ul { - max-height: 300px; - max-width: 200px; - } - - nav > ul { - padding: 0 0 0 1.2em; - max-height: 0; - max-width: 45px; - overflow: hidden; - -moz-transition: all .4s ease; - -o-transition: all .4s ease; - -webkit-transition: all .4s ease; - transition: all .4s ease; - } - - nav > ul > ul { - margin-top: .7em; - } + nav a + ul > li:last-child { + margin-bottom: .8em; + } diff --git a/Content/site.css b/Content/site.css index d198d13..8b39eb8 100644 --- a/Content/site.css +++ b/Content/site.css @@ -17,18 +17,6 @@ font-size: 2em; } -/*body > header a { - position: absolute; - top: 0; - left: 1em; - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAhCAYAAACr8emlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAwtJREFUWEe1mNtWKjEMQOf/Pw1BQQW5iwICC7kj8Dane84ptmmGGWDOw3ZpmrRpk6YZoziOPT4/P+NSqRSAXOrewn6/j7vdbjB/uVyOZ7OZUfH1vT+Wy2VgCB8fH2bYN7yXNCfZgKt3/uXn5yd+fn4OjL6+vszwr0GRvL+/B+t1Oh0z9Ktz/mU4HAbKRYU1jePxmDgk153P52b4r85ZuVKpeErVavWslIUWrre3NzOk60vk2kTSjiU/CKOrAO4uLnGvczAajYI5vr+/zdA/BxuNhjf4+vqaDGZRhHOWp6cnb55er2fExsHNZuMNQNbpcaHa7XZgR9JL3bwMBgNvrpeXFyM2Dk4mE28ASF5rqMEpSZtbT86iHdRqtYqjfr/vCd0E1fgfzlnkZSE3o1ar5QnJK2lo0Zxj0ul0mqTFtcj5yX13bsIeEWtXSD2UhtvtNm42m57evbAxuY5cg+hG1DtXOB6PA0Pt5IpAriPTDYeD6024XCNurFZO7kU7Qfmq8HcQdy3E3OqindQclJFKclDWM/lYu2h5SAR2u118Op2uRs4v7wNdVBD3Wq0WGLpoJ5lVmvJCu+XOy32IyDlX+PDwEPRkEln1gfBw26VuXmhW5ZwU76TDxSl3gNdFTiBJc5JJpW4eeHvduegPkCeDslizEPIstM+DW5xEX1YTe1kTBRlmyHOKoDnJYlnvuYs2B+8wY2cluQOtDKTBm8kNd7HtUhaHwyFIMbfdOytqXQ0lRysHRUFoZR3mYOzpgWegfTRdah7uRRZm4PRdHc9gsVgk3yLSiEa0yJPk5HBEroMs9bPTQhskDaFer5thX/cWyDktUuShdvu9PyzaJyhwulwIFpE2WbA4kZCvBZB3Wn8IgcCifWlZuPGUBm3HEhIex3BCm4uT0/7lYVGFFj79tB27sDDhp+ngXQdyiYc/j23WJlWhC52KLAVFwCbyFHNVqEGOaDfvWijg6/XaTKmvI1GFlyDsLJKWUxqPj49J6N0CnBdVmBf+XcdlorOhoHPCwAZoNunn8lykdOLoD1fKndTDhDlEAAAAAElFTkSuQmCC') no-repeat; - *background: url('/Images/back.png') no-repeat; - width: 40px; - height: 33px; - text-indent: -5000px; - }*/ - - ::-moz-selection { background-color: rgba(65,131,196,0.4); } @@ -66,47 +54,47 @@ a { column-gap: 2em; } -section { - -webkit-column-break-inside: avoid; - overflow: hidden; - margin: 0 auto 1em auto; - width: 370px; -} - - section h2 { - margin: 0; + #main section { + -webkit-column-break-inside: avoid; + overflow: hidden; + margin: 0 auto 1em auto; + width: 370px; } -ul { - padding-left: 1em; - list-style: none; -} + #main section h2 { + margin: 0; + } - ul a { - font-size: .95em; + #main ul { + padding-left: 1em; + list-style: none; } - ul :not(.optional) + .optional:before { - display: block; - margin: 1em 0 .3em 0; - content: 'Optional:'; - font-weight: bold; - } + #main ul a { + font-size: .95em; + } - ul li ul { - overflow: hidden; - padding-left: 2em; - max-height: 0; - -moz-transition: max-height .4s ease; - -o-transition: max-height .4s ease; - -webkit-transition: max-height .4s ease; - transition: max-height .4s ease; - } + #main ul :not(.optional) + .optional:before { + display: block; + margin: 1em 0 .3em 0; + content: 'Optional:'; + font-weight: bold; + } - ul li ul li:last-child { - margin-bottom: 1em; + #main ul li ul { + overflow: hidden; + padding-left: 2em; + max-height: 0; + -moz-transition: max-height .4s ease; + -o-transition: max-height .4s ease; + -webkit-transition: max-height .4s ease; + transition: max-height .4s ease; } + #main ul li ul li:last-child { + margin-bottom: 1em; + } + em { display: inline-block; padding: 0 4px; @@ -196,4 +184,4 @@ progress { } -/*#endregion */ \ No newline at end of file +/*#endregion */ diff --git a/Images/menu.png b/Images/menu.png index a427fcf8b4b3959e6099a6745af9b565314d0566..45ab310583b054f132c46954789b3d974b57006f 100644 GIT binary patch delta 95 zcmZo*tev0|>Eh|)7-Dhy?F2_I1_c2o(_c6D-QIpvS4l%`TXL}|Yx}m1&O(tH(t?KJ zDo<}S{L+kY_xDKJ-};hUl%3ag-x2+fokxtA1#*lJ$7enhV*mnAS3j3^P6ak__3H znaUw08SXv@0OUr`7VFUrfc(JeCt7XLr07Td5uZdX8+y+)8>`xA5&!@I07*qoM6N<$ Ef(ijCA^-pY diff --git a/Sections/ASP.NET/section.css b/Sections/ASP.NET/section.css index 5919547..7fd999d 100644 --- a/Sections/ASP.NET/section.css +++ b/Sections/ASP.NET/section.css @@ -1,5 +1,5 @@  -/* ASP.NET template */ +/* ASP.NET theme */ .aspnet progress { color: #742894; @@ -20,4 +20,4 @@ .aspnet em { color: #742894; -} +} \ No newline at end of file diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index 46a40ea..8a3c551 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -4,36 +4,41 @@ From a31205aac1ce72ec60bca301a0f4115e4a979402 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Sun, 13 Jan 2013 22:53:34 -0800 Subject: [PATCH 045/135] Updated the menu icon --- Content/menu.css | 14 +++++++------- Images/menu.png | Bin 125 -> 107 bytes 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Content/menu.css b/Content/menu.css index 15040e0..0ab4347 100644 --- a/Content/menu.css +++ b/Content/menu.css @@ -10,13 +10,13 @@ z-index: 2; } - nav span { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARElEQVQ4y+2QQQoAIBACNfrZvtu32S0iKBa2Y3MVBYe2sUMSWWgbETFXJOXbAPopWEdPSGK/hekLFQcNRb7EL/GJxDIDEGwzw19p5hYAAAAASUVORK5CYII=') no-repeat; - *background: url(/Images/menu.png) no-repeat; /* For IE 6 and 7 */ - padding-left: 20px; - line-height: 16px; - display: inline-block; - } + nav span { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVQ4y2P8//8/AyWAEWSAs7Mz3JS9e/cyUsUAZDFcAKSWOi6gOAxGA3E0EId+IAIArFBf4TIqIjsAAAAASUVORK5CYII=') no-repeat; + *background: url(/Images/menu.png) no-repeat; /* For IE 6 and 7 */ + padding-left: 20px; + line-height: 16px; + display: inline-block; + } .no-touch nav:hover, nav.open { diff --git a/Images/menu.png b/Images/menu.png index 45ab310583b054f132c46954789b3d974b57006f..ed5ebacc6228ebc5262369078becee731ec521cc 100644 GIT binary patch delta 76 zcmb=;o}l7xV?Ru6{1-oD!M Date: Mon, 14 Jan 2013 14:09:09 +0000 Subject: [PATCH 046/135] Adding ImageOptim. --- Sections/index.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/Sections/index.xml b/Sections/index.xml index 367fcfd..8f70b7b 100644 --- a/Sections/index.xml +++ b/Sections/index.xml @@ -61,6 +61,7 @@ SmushIt.com PunyPNG.com PNGGauntlet application + Image Optim From dc253bf8b275fe628395aa8fcd66d75f0bc507ff Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 14 Jan 2013 09:16:16 -0800 Subject: [PATCH 047/135] Merged pull request and renamed checklist item --- Sections/index.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sections/index.xml b/Sections/index.xml index 8f70b7b..e72ea72 100644 --- a/Sections/index.xml +++ b/Sections/index.xml @@ -60,8 +60,8 @@ SmushIt.com PunyPNG.com - PNGGauntlet application - Image Optim + PNGGauntlet for Windows + Image Optim for Mac From a19e5d1b05ec8265d31d76895b553dc371f2b7f3 Mon Sep 17 00:00:00 2001 From: Dan Atkinson Date: Mon, 14 Jan 2013 17:36:41 +0000 Subject: [PATCH 048/135] Corrected spelling of 'deploy'. --- Sections/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sections/index.xml b/Sections/index.xml index e72ea72..2221087 100644 --- a/Sections/index.xml +++ b/Sections/index.xml @@ -83,7 +83,7 @@ URL rewrite in Apache - How to deply P3P + How to deploy P3P Configure IIS to use P3P P3P validator From dc85aad73b31f3cf8355a981f3dd6dcb6087fad2 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 14 Jan 2013 21:21:05 -0800 Subject: [PATCH 049/135] Updated favicon --- favicon.ico | Bin 1406 -> 1150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/favicon.ico b/favicon.ico index 7ab60845e728930770fd0a60c8d85aaad8e65f98..1fa6fa6ab8ec89f3ea880cdf8ab5df0ddf94111f 100644 GIT binary patch literal 1150 zcmeH`F$%&!5JkTrSenY((sS%-Y)tRoL98R;KBYWQ-_SYQoR#{+YKE z1{N6cZ5r@9$8rqJ04yk4bRIqfz+8N4t@!J^8Kjh|6z90>x++CK*2lf-#kH&UBR=PR z@9%s0weK%q{lu7GN_pZf7o+iFe9rdD5B2uG)p}lQ`wyGPP<+MOS<2fyJTLDZYiImc a1n+-ehc&RLHdkOvosPhH0$is3I&n7)qWLBO literal 1406 zcmZQzU<5(|0R|x8V8~!)U=RbcG=LZ+qyWT>Kyff&givrclrQE|#vtKR${_As!64>Z z!5{&|(Xp`%aj`KB2{F+ONl8fzX-SC;Q|jXxw)L1XJfF_!>M_;3>RmaF#O-A z$*^^LBE!L1o($KQ2Qge&mdbE+c?pAMdqRnbR0Na;7k(cdTK^=vvFL zZBZk`-nIPp+X`z(+?!|?ja4TiU`pD}#;_?F@Omk$j8{{2Jp*eG)}1V%%Em=O5?|34OGvW!ej zEQ~*1_&WT;B0L~@ zsCq+PLw!MIn7jl~zmAR=pBhwN0%E?X5L7=zUPoOHRUU3WP(2$M7(nckm6ldgP*G4& fm6VnRxeo+5Ioa4CEOZhS1P7Q&$A9b@7(jXf%GrA+ From 742bddf17208490c836e00a47f1e9f3c4af4e88a Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 14 Jan 2013 22:31:27 -0800 Subject: [PATCH 050/135] Cleaned up favicon --- Content/mediaqueries.css | 103 ++++++++++++++++++++------------------- Content/site.css | 8 ++- Views/_menu.cshtml | 6 +-- favicon.ico | Bin 1150 -> 1150 bytes 4 files changed, 61 insertions(+), 56 deletions(-) diff --git a/Content/mediaqueries.css b/Content/mediaqueries.css index c0474c3..672f03d 100644 --- a/Content/mediaqueries.css +++ b/Content/mediaqueries.css @@ -1,54 +1,55 @@ -@media only screen and (max-width: 720px) { - @-o-viewport { - width: 440px; - } - - @-ms-viewport { - width: 440px; - } - - body { - overflow-x: hidden; - } - - section { - line-height: 1.6; - } - - h2 { - font-size: 1.2em; - } - - body > header { - text-align: left; - text-indent: .6em; - } - - body > header h1 { - font-size: 1.7em; - } - - body > header h2 { - font-size: 1.4em; - } - - nav { - display: none; - } - - .ghFork { - width: 0; - height: 0; - background-image: none; - } +@media only screen and (max-width: 720px) { + + @-o-viewport { + width: 440px; + } + + @-ms-viewport { + width: 440px; + } + + body { + overflow-x: hidden; + } + + section { + line-height: 1.6; + } + + h2 { + font-size: 1.2em; + } + + body > header { + text-align: left; + text-indent: .6em; + } + + body > header h1 { + font-size: 1.7em; + } + + body > header h2 { + font-size: 1.4em; + } + + nav { + display: none; + } + + .ghFork { + width: 0; + height: 0; + background-image: none; + } } @media print { - body { - width: 850px; - } - - footer, #bonus { - display: none; - } -} + body { + width: 850px; + } + + footer, #bonus { + display: none; + } +} \ No newline at end of file diff --git a/Content/site.css b/Content/site.css index 8b39eb8..9533a01 100644 --- a/Content/site.css +++ b/Content/site.css @@ -1,4 +1,5 @@ body { + -ms-touch-action: auto; padding: 0; font: 1em/1.3 'Century Gothic', 'URW Gothic L', Verdana, sans-serif; } @@ -43,6 +44,8 @@ a { color: black; } +/*#region Main */ + #main { margin: 1em auto; padding: 0 1em 3em 1em; @@ -130,6 +133,8 @@ input[type="checkbox"] { text-decoration: line-through; } +/*#endregion */ + /*#region Footer */ footer { @@ -183,5 +188,4 @@ progress { background-color: #369aca; } - -/*#endregion */ +/*#endregion */ \ No newline at end of file diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index 8a3c551..7de5a70 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -28,11 +28,11 @@ } - -
  • PHP (planned)
  • -
  • Rails (planned)
  • +
  • NodeJS (planned)
  • +
  • PHP (planned)
  • Python (planned)
  • +
  • Rails (planned)

  • Help needed
  • diff --git a/favicon.ico b/favicon.ico index 1fa6fa6ab8ec89f3ea880cdf8ab5df0ddf94111f..1dd704f460e5dd617d5b3e7f4edd5ab863402598 100644 GIT binary patch delta 91 zcmeyz@sDGJ6BGNanKS=8IXO+9$Rs*Bj!8lo#0LTf7zXkucQR=*gXoVyHF``OldmyJ ZFhliB^y2|b2{KDgp2Q@w*^b$P5deEQC2arz delta 98 zcmeyz@sDGJ6BF~vlP4z^GKo(9$0RUWi-|`V$o~%n3@{9m?_|;htNX|#3Z^eI$+9~+ bIsFI8ePogaiwQDILe Date: Mon, 14 Jan 2013 23:17:26 -0800 Subject: [PATCH 051/135] Fixed media queries --- Content/mediaqueries.css | 119 ++++++++++++++++++++++----------------- Sections/index.xml | 1 + 2 files changed, 68 insertions(+), 52 deletions(-) diff --git a/Content/mediaqueries.css b/Content/mediaqueries.css index 672f03d..bf9edbd 100644 --- a/Content/mediaqueries.css +++ b/Content/mediaqueries.css @@ -1,55 +1,70 @@ -@media only screen and (max-width: 720px) { - - @-o-viewport { - width: 440px; - } - - @-ms-viewport { - width: 440px; - } - - body { - overflow-x: hidden; - } - - section { - line-height: 1.6; - } - - h2 { - font-size: 1.2em; - } - - body > header { - text-align: left; - text-indent: .6em; - } - - body > header h1 { - font-size: 1.7em; - } - - body > header h2 { - font-size: 1.4em; - } - - nav { - display: none; - } - - .ghFork { - width: 0; - height: 0; - background-image: none; - } + +@media screen and (max-width: 720px) { + + @-o-viewport { + width: 380px; + } + + @-ms-viewport { + width: 380px; + } + + section { + line-height: 1.6; + } + + h2 { + font-size: 1.2em; + } + + #main { + -moz-columns: auto; + -webkit-columns: auto; + columns: auto; + } + + body { + width: 380px; + overflow-x: hidden; + } + + body > header { + text-align: left; + text-indent: .6em; + } + + body > header h1 { + font-size: 1.4em; + } + + body > header h2 { + font-size: 1.4em; + } + + nav { + display: none; + } + + .ghFork { + width: 0; + height: 0; + background-image: none; + } } @media print { - body { - width: 850px; - } - - footer, #bonus { - display: none; - } -} \ No newline at end of file + body { + width: 850px; + } + + footer, #bonus { + display: none; + } +} + +/* Win8 snapped view*/ +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 430px; + } +} diff --git a/Sections/index.xml b/Sections/index.xml index 2221087..5fd9b90 100644 --- a/Sections/index.xml +++ b/Sections/index.xml @@ -30,6 +30,7 @@ Diving in to HTML5 forms + Online media query tester 6 free mobile emulators Opera Mobile Emulator From c66310b094652dc655442d7caf36a0119e35ceeb Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Tue, 15 Jan 2013 21:07:21 -0800 Subject: [PATCH 052/135] Added demolist and url rewrite for devchecklist.com --- Content/mediaqueries.css | 5 +- Content/menu.css | 4 +- Sections/DemoList/index.xml | 99 +++++++++++++++++++++++++++++++++++ Sections/DemoList/section.css | 28 ++++++++++ Views/_menu.cshtml | 18 +++---- Web.config | 8 +++ 6 files changed, 148 insertions(+), 14 deletions(-) create mode 100644 Sections/DemoList/index.xml create mode 100644 Sections/DemoList/section.css diff --git a/Content/mediaqueries.css b/Content/mediaqueries.css index bf9edbd..0e99183 100644 --- a/Content/mediaqueries.css +++ b/Content/mediaqueries.css @@ -29,6 +29,7 @@ } body > header { + margin-top: 2.3em; text-align: left; text-indent: .6em; } @@ -41,9 +42,9 @@ font-size: 1.4em; } - nav { + /*nav { display: none; - } + }*/ .ghFork { width: 0; diff --git a/Content/menu.css b/Content/menu.css index 0ab4347..3bb3a62 100644 --- a/Content/menu.css +++ b/Content/menu.css @@ -1,8 +1,8 @@ nav { min-width: 16px; position: absolute; - top: 1em; - left: 1em; + top: .85em; + left: .85em; background: white; padding: 0 1.2em 0 0; border-radius: 3px; diff --git a/Sections/DemoList/index.xml b/Sections/DemoList/index.xml new file mode 100644 index 0000000..697a7d7 --- /dev/null +++ b/Sections/DemoList/index.xml @@ -0,0 +1,99 @@ + + + + + W3C link checker + iWebTool Broken Link Checker + + + + BrowserShots.org + Browserling.com + Spoon.net + + + no-www.org score of 'B' + Remove 'www' in web.config + + + + + + W3C mobile checker + + + Don’t Forget the Viewport Meta Tag + Make your website mobile friendly + + + Input type: Email, Url, Phone + Diving in to HTML5 forms + + + Online media query tester + 6 free mobile emulators + Opera Mobile Emulator + + + + + + Uptime robot + GotSiteMonitor.com + + + Google Analytics + StatCounter + Clicky + + + + + + Google Page Speed + + + Yahoo's YSlow + + + redbot.org + + + SmushIt.com + PunyPNG.com + PNGGauntlet for Windows + Image Optim for Mac + + + + + + W3C HTML validator + Dr. Watson + + + W3C CSS validator + + + W3C i18n checker + + + Run CSS Lint online + + + Run JSLint online + Run JSHint online + + + + + + + We are humans, not machines! + + + + diff --git a/Sections/DemoList/section.css b/Sections/DemoList/section.css new file mode 100644 index 0000000..ef13204 --- /dev/null +++ b/Sections/DemoList/section.css @@ -0,0 +1,28 @@ + +/* + The class name ".demolist" is automatically being assinged to this theme by the website. + If you which to rename this theme, just change the name of the folder and the class name accordingly. + + The class name will always be lower-case and any dots (.) in the name will be removed. +*/ + +.demolist progress { + color: orange; +} + + .demolist progress span { + background: orange; + } + + .demolist progress::-webkit-progress-value { + background: orange; + } + + .demolist progress::-moz-progress-bar { + background-color: orange; + } + + +.demolist em { + color: orange; +} \ No newline at end of file diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index 7de5a70..ff21f44 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -1,9 +1,10 @@ @{ - string[] folders = Directory.GetDirectories(Checklist.Folder); + string[] folders = Directory.GetDirectories(Checklist.Folder).Where(f => !f.EndsWith("DemoList")).ToArray(); } diff --git a/Web.config b/Web.config index eb98194..c6aea9f 100644 --- a/Web.config +++ b/Web.config @@ -58,6 +58,14 @@ + + + + + + + + From 767b1f3944dce50b24964e92c3c838054c2c408a Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Tue, 15 Jan 2013 21:10:20 -0800 Subject: [PATCH 053/135] Fixed validation issue --- Views/_menu.cshtml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index ff21f44..8246b15 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -32,11 +32,11 @@ } -
  • NodeJS (planned)
  • -
  • PHP (planned)
  • -
  • Python (planned)
  • -
  • Rails (planned)
  • -
  • Help needed
  • +
  • NodeJS (planned)
  • +
  • PHP (planned)
  • +
  • Python (planned)
  • +
  • Rails (planned)
  • +
  • Help needed
  • From d68c969f23841c156fbc7b2e0a75fac9ceabbc70 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Tue, 15 Jan 2013 21:28:50 -0800 Subject: [PATCH 054/135] Updated "Help needed" link --- Views/_menu.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index 8246b15..e3ca2b0 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -37,6 +37,6 @@
  • PHP (planned)
  • Python (planned)
  • Rails (planned)
  • -
  • Help needed
  • +
  • Help needed
  • From 33dcd5f844376ea189181d467660d1a70eab1473 Mon Sep 17 00:00:00 2001 From: Sayed Ibrahim Hashimi Date: Thu, 17 Jan 2013 19:20:12 -0800 Subject: [PATCH 055/135] Creating a demo page. Resolved #23 --- Scripts/script.js | 74 ++++++++++++++++++++++++++++++++++++------- Scripts/script.min.js | 2 +- 2 files changed, 63 insertions(+), 13 deletions(-) diff --git a/Scripts/script.js b/Scripts/script.js index 3328c7e..07ce2fc 100644 --- a/Scripts/script.js +++ b/Scripts/script.js @@ -3,7 +3,9 @@ (function () { var checkboxes = [], + checkboxesRandom = [], details = [], + detailsRandom = [], progress, bonus, fallback, prefix, menu; function findCheckboxes() { @@ -18,6 +20,12 @@ } details = document.getElementsByTagName('em'); + + checkboxesRandom = checkboxes.slice(0); + randomizeArray(checkboxesRandom); + + detailsRandom = Array.prototype.slice.call(details); + randomizeArray(detailsRandom); } function initialize() { @@ -56,8 +64,9 @@ } progress.max = max; + if (prefix === 'demo') { startDemo(); } } - + function openDetails(e) { if (!e) e = window.event; @@ -78,7 +87,7 @@ } function openDetailsElement(detail) { - + var ul = (detail.nextElementSibling || detail.nextSibling); for (var i = 0; i < details.length; i++) { @@ -141,21 +150,24 @@ function reset() { document.getElementById("reset").onclick = function () { + resetInner(); - for (var i = 0; i < checkboxes.length; i++) { - checkboxes[i].checked = false; + return false; + }; + } - if(Modernizr.localstorage) localStorage.removeItem(prefix + checkboxes[i].id); - } + function resetInner() { + for (var i = 0; i < checkboxes.length; i++) { + checkboxes[i].checked = false; - for (var j = 0; j < details.length; j++) { - if (Modernizr.localstorage) localStorage.removeItem(prefix + details[j].id); - } + if (Modernizr.localstorage) localStorage.removeItem(prefix + checkboxes[i].id); + } - calculateProgress(); + for (var j = 0; j < details.length; j++) { + if (Modernizr.localstorage) localStorage.removeItem(prefix + details[j].id); + } - return false; - }; + calculateProgress(); } function menuClick(e) { @@ -180,4 +192,42 @@ details[0].click(); }; + // demo related items below this + function randomizeArray(myArray) { + // Taken from: http://sedition.com/perl/javascript-fy.html + var i = myArray.length, j, tempi, tempj; + if (i == 0) return false; + while (--i) { + j = Math.floor(Math.random() * (i + 1)); + tempi = myArray[i]; + tempj = myArray[j]; + myArray[i] = tempj; + myArray[j] = tempi; + } + } + + function startDemo() { + animateChecboxes(0, checkboxes); + animateDetails(0, detailsRandom); + } + function animateChecboxes(index, items) { + + if (index == 0) { resetInner(); } + if (index > items.length - 1) { index = 0; resetInner(); items = checkboxesRandom; } + + setTimeout(function () { + items[index].checked = true; + calculateProgress(); + animateChecboxes(++index, items); + }, 200); + } + function animateDetails(index, items) { + + if (index > detailsRandom.length - 1) { index = 0; resetInner(); } + + openDetailsElement(items[index]); + setTimeout(function () { + animateDetails(++index, items); + }, 200 * 10); + } })(); \ No newline at end of file diff --git a/Scripts/script.min.js b/Scripts/script.min.js index c56b184..dce630e 100644 --- a/Scripts/script.min.js +++ b/Scripts/script.min.js @@ -1,2 +1,2 @@ -(function(){function c(){for(var i=document.getElementsByTagName("input"),t=0;tt.length-1&&(n=0,s(),t=h),setTimeout(function(){t[n].checked=!0,o(),y(++n,t)},200)}function p(n,t){n>e.length-1&&(n=0,s()),c(t[n]),setTimeout(function(){p(++n,t)},2e3)}var t=[],h=[],n=[],e=[],u,l,a,r,f;window.onload=function(){w(),b(),o(),g(),localStorage.length===0&&n[0].click()}})(); //@ sourceMappingURL=script.min.js.map \ No newline at end of file From 08d75f3b9db1f824804a107a1a14f9b06fa41e70 Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Thu, 17 Jan 2013 21:22:55 -0800 Subject: [PATCH 056/135] Added support for multiple sites --- App_Code/Checklist.cs | 150 +++++++------ Content/mediaqueries.css | 4 - Sites/azurechecklist.com/Sections/index.xml | 201 ++++++++++++++++++ .../Sections}/ASP.NET/Performance.xml | 0 .../Sections}/ASP.NET/index.xml | 0 .../Sections}/ASP.NET/section.css | 0 .../Sections}/DemoList/index.xml | 0 .../Sections}/DemoList/section.css | 0 .../webdevchecklist.com/Sections}/index.xml | 0 Views/_menu.cshtml | 19 +- Web.config | 11 +- index.cshtml | 29 +-- 12 files changed, 315 insertions(+), 99 deletions(-) create mode 100644 Sites/azurechecklist.com/Sections/index.xml rename {Sections => Sites/webdevchecklist.com/Sections}/ASP.NET/Performance.xml (100%) rename {Sections => Sites/webdevchecklist.com/Sections}/ASP.NET/index.xml (100%) rename {Sections => Sites/webdevchecklist.com/Sections}/ASP.NET/section.css (100%) rename {Sections => Sites/webdevchecklist.com/Sections}/DemoList/index.xml (100%) rename {Sections => Sites/webdevchecklist.com/Sections}/DemoList/section.css (100%) rename {Sections => Sites/webdevchecklist.com/Sections}/index.xml (100%) diff --git a/App_Code/Checklist.cs b/App_Code/Checklist.cs index e73f016..d1ee114 100644 --- a/App_Code/Checklist.cs +++ b/App_Code/Checklist.cs @@ -3,118 +3,130 @@ using System.IO; using System.Linq; using System.Web; -using System.Web.Caching; using System.Web.Hosting; using System.Xml; -/// -/// Summary description for DataProvider -/// public static class Checklist { - public static Dictionary Docs = new Dictionary(); - public const string Title = "Web Developer"; - public static string Folder = HostingEnvironment.MapPath("~/sections/"); + // Public + public static Dictionary> Docs = new Dictionary>(); + public const string Title = "Web Developer Checklist"; + + // Private + private const string defaultSite = "webdevchecklist.com"; + private static string SitesFolder = HostingEnvironment.MapPath("~/sites/"); static Checklist() { - BuildCache(Folder); + BuildCache(); } - - public static XmlDocument GetXmlDocument(HttpRequestBase request) + + private static void BuildCache() { - string name = GetFileName(request.RawUrl); + Docs.Clear(); - if (HttpRuntime.Cache["data"] == null) + foreach (string folder in Directory.GetDirectories(SitesFolder)) { - BuildCache(Folder); + var dic = new Dictionary(); - // HttpRuntime.Cache.Insert("data", "test", new CacheDependency(Folder)); + foreach (string file in Directory.GetFiles(folder, "*.xml", SearchOption.AllDirectories)) + { + XmlDocument doc = new XmlDocument(); + doc.Load(file); + + string key = file + .Replace(folder, string.Empty) + .Replace("Sections", string.Empty) + .Replace("\\", "/") + .Replace(".xml", string.Empty) + .TrimStart('/'); + + if (key.Contains("/") && key.EndsWith("index")) + { + key = key.Replace("/index", string.Empty); + } + + dic.Add(key, doc); + } + + Docs.Add(Path.GetFileName(folder), dic); } + } - var result = Docs.FirstOrDefault(d => d.Key.Equals(name, StringComparison.OrdinalIgnoreCase)); + public static XmlDocument GetXmlDocument(HttpRequestBase request) + { + string section = GetSiteName(request); - if (result.Value != null) + if (Docs.ContainsKey(section)) { - return result.Value; + var site = Docs[section]; + var pageName = GetPageName(request); + var result = site.Keys.SingleOrDefault(k => k.Equals(pageName, StringComparison.OrdinalIgnoreCase)); + + if (result != null) + { + return site[result]; + } } - return Docs["index"]; ; + return Docs[defaultSite]["index"]; } - private static void BuildCache(string folder) + public static string GetSiteName(HttpRequestBase request) { - Docs.Clear(); - foreach (string file in Directory.GetFiles(folder, "*.xml", SearchOption.AllDirectories)) - { - XmlDocument doc = new XmlDocument(); - doc.Load(file); - - string key = file - .Replace(folder, string.Empty) - .Replace("\\", "/") - .Replace(".xml", string.Empty); + return request.Url.Host.StartsWith("localhost") ? defaultSite : request.Url.Host; + } - if (key.Contains("/") && key.EndsWith("index")) - { - key = key.Replace("/index", string.Empty); - } + public static string GetSiteSectionFolder(HttpRequestBase request) + { + string siteName = GetSiteName(request); - Docs.Add(key, doc); - } + return Path.Combine(SitesFolder, siteName, "Sections"); } - public static string PageName(HttpRequestBase request) + public static string GetPageTitle(HttpRequestBase request) { - string name = GetFileName(request.RawUrl); - var result = Docs.FirstOrDefault(d => d.Key.Equals(name, StringComparison.OrdinalIgnoreCase)); + XmlDocument doc = GetXmlDocument(request); + XmlAttribute attr = doc.SelectSingleNode("checklist").Attributes["name"]; - if (result.Value != null) + if (attr != null) { - return result.Key; + return attr.InnerText; } - + return Title; } - public static string Subtitle(HttpRequestBase request) - { - if (PageName(request) != Title) - { - string clean = request.RawUrl.Trim('/'); + public static string GetPageName(HttpRequestBase request) + { + string site = GetSiteName(request); - if (Docs.Any(d => d.Key.Equals(clean, StringComparison.OrdinalIgnoreCase))) - return string.Empty; + if (Docs.ContainsKey(site)) + { + var pair = Docs[site]; + var path = request.RawUrl.Trim('/'); - int index = clean.IndexOf('/', 1); - - if (index > -1) + while (true) { - return clean.Substring(index); - } - - return string.Empty; - } + var result = pair.Keys.SingleOrDefault(k => k.Equals(path, StringComparison.OrdinalIgnoreCase)); - return request.RawUrl; - } + if (result != null) + return result; - public static string BaseName(HttpRequestBase request) - { - string fullName = GetFileName(request.RawUrl); - int index = fullName.IndexOf('/'); + int index = path.LastIndexOf('/'); + if (index == -1) + break; - if (index > -1) - { - return fullName.Substring(0, index); + path = path.Substring(0, index); + } } - return fullName; + return Title; } - static private string GetFileName(string path) + public static string GetBaseName(HttpRequestBase request) { - string clean = path.Trim('/'); + string clean = request.RawUrl.Trim('/'); if (Docs.Any(d => d.Key.Equals(clean, StringComparison.OrdinalIgnoreCase))) return clean; @@ -122,9 +134,7 @@ static private string GetFileName(string path) int index = clean.IndexOf('/'); if (index > -1) - { clean = clean.Substring(0, index); - } return clean; } diff --git a/Content/mediaqueries.css b/Content/mediaqueries.css index 0e99183..d73f94b 100644 --- a/Content/mediaqueries.css +++ b/Content/mediaqueries.css @@ -42,10 +42,6 @@ font-size: 1.4em; } - /*nav { - display: none; - }*/ - .ghFork { width: 0; height: 0; diff --git a/Sites/azurechecklist.com/Sections/index.xml b/Sites/azurechecklist.com/Sections/index.xml new file mode 100644 index 0000000..fd255bf --- /dev/null +++ b/Sites/azurechecklist.com/Sections/index.xml @@ -0,0 +1,201 @@ + + + + + W3C link checker + iWebTool Broken Link Checker + + + + BrowserShots.org + Browserling.com + Spoon.net + + + no-www.org score of 'B' + Remove 'www' in web.config + + + + + + W3C mobile checker + + + Don’t Forget the Viewport Meta Tag + Make your website mobile friendly + + + Input type: Email, Url, Phone + Diving in to HTML5 forms + + + Online media query tester + 6 free mobile emulators + Opera Mobile Emulator + + + + + + Uptime robot + GotSiteMonitor.com + + + Google Analytics + StatCounter + Clicky + + + + + + Google Page Speed + + + Yahoo's YSlow + + + redbot.org + + + SmushIt.com + PunyPNG.com + PNGGauntlet for Windows + Image Optim for Mac + + + + + + Compat Inspector + Modernizr JS library + + + A more useful 404 + + + Online generator + How to properly link a favicon + + + 11 best practices for URLs + URL rewriting in IIS + URL rewrite in Apache + + + How to deploy P3P + Configure IIS to use P3P + P3P validator + + + Google Custom Search + Consider 'Open Search' + + + Safari on iOS + Internet Explorer on Windows + + + + + + W3C HTML validator + Dr. Watson + + + W3C CSS validator + + + W3C i18n checker + + + Run CSS Lint online + + + Run JSLint online + Run JSHint online + + + + + + + SenSEO for Firefox + + + Online tester + Getting started + + + robots.txt tutorial + Create robots.txt online + + + Create sitemap online + + + + + + Schema.org reference + Schema-Creator.org + + + W3C semantic extractor + + + + + + Common problems and solutions + IDI Web Accessibility Checker + Test using a screen reader + + + Check color contrast online + + + Using WAI-ARIA Landmarks + Guide to WAI-ARIA + Practical examples + + + + + + ASafaaWeb security analyzer + OWASP Top 10 project + OWASP Cheat Sheets + + + XSS cheat sheet + DOM based XSS cheat sheet + Free XSS scanner + + + Explanation and walkthrough + CSRF cheat sheet + + + Setup SSL on IIS 7 + Setup SSL on Apache + Online SSL checker + Content Security Policy + + + MDN Overview + OWASP Overview + + + + + + We are humans, not machines! + + + + diff --git a/Sections/ASP.NET/Performance.xml b/Sites/webdevchecklist.com/Sections/ASP.NET/Performance.xml similarity index 100% rename from Sections/ASP.NET/Performance.xml rename to Sites/webdevchecklist.com/Sections/ASP.NET/Performance.xml diff --git a/Sections/ASP.NET/index.xml b/Sites/webdevchecklist.com/Sections/ASP.NET/index.xml similarity index 100% rename from Sections/ASP.NET/index.xml rename to Sites/webdevchecklist.com/Sections/ASP.NET/index.xml diff --git a/Sections/ASP.NET/section.css b/Sites/webdevchecklist.com/Sections/ASP.NET/section.css similarity index 100% rename from Sections/ASP.NET/section.css rename to Sites/webdevchecklist.com/Sections/ASP.NET/section.css diff --git a/Sections/DemoList/index.xml b/Sites/webdevchecklist.com/Sections/DemoList/index.xml similarity index 100% rename from Sections/DemoList/index.xml rename to Sites/webdevchecklist.com/Sections/DemoList/index.xml diff --git a/Sections/DemoList/section.css b/Sites/webdevchecklist.com/Sections/DemoList/section.css similarity index 100% rename from Sections/DemoList/section.css rename to Sites/webdevchecklist.com/Sections/DemoList/section.css diff --git a/Sections/index.xml b/Sites/webdevchecklist.com/Sections/index.xml similarity index 100% rename from Sections/index.xml rename to Sites/webdevchecklist.com/Sections/index.xml diff --git a/Views/_menu.cshtml b/Views/_menu.cshtml index e3ca2b0..0a551cd 100644 --- a/Views/_menu.cshtml +++ b/Views/_menu.cshtml @@ -1,5 +1,5 @@ @{ - string[] folders = Directory.GetDirectories(Checklist.Folder).Where(f => !f.EndsWith("DemoList")).ToArray(); + string[] folders = Directory.GetDirectories(Checklist.GetSiteSectionFolder(Request)).Where(f => !f.EndsWith("DemoList")).ToArray(); } + \ No newline at end of file diff --git a/Web.config b/Web.config index c6aea9f..7c11f23 100644 --- a/Web.config +++ b/Web.config @@ -41,7 +41,7 @@ - + @@ -59,6 +59,15 @@ + + diff --git a/index.cshtml b/index.cshtml index e811a2b..c3fdae0 100644 --- a/index.cshtml +++ b/index.cshtml @@ -10,14 +10,15 @@ Response.AddFileDependency(file); } - string DataName = Checklist.PageName(Request).Replace("/", " "); - string Subtitle = Checklist.Subtitle(Request); - string Section = Checklist.BaseName(Request); + string SiteName = Checklist.GetSiteName (Request); + string DataName = Checklist.GetPageName(Request).Replace("/", " "); + string Section = Checklist.GetBaseName(Request); + string PageTitle = Checklist.GetPageTitle(Request); } - + @@ -27,27 +28,29 @@ @if (DataName != Checklist.Title) { - Web Developer Checklist - @DataName - + @PageTitle - @DataName + } else { - Web Developer Checklist - } - + @PageTitle + } +
    -

    Web Developer Checklist

    +

    @PageTitle

    @if (DataName != Checklist.Title) {

    @DataName

    }
    - - @RenderPage("~/views/_menu.cshtml", null) + + @if (Checklist.Docs[SiteName].Count > 1) { + @RenderPage("~/views/_menu.cshtml", null); + }
    - -