").html($("", class: "header row", text: comp.asString)).appendTo($table)
- $td = $(" ", class: "cell").html($("", html: " ")).appendTo($tr)
- val = (new Function("if(#{comp.asString}){return true}else{return false}"))()
- if val
- $td.addClass("green")
- expression = " if (#{comp.asString}) { /* #{if val then 'executes' else 'does not execute'} */ } "
- $("
", class: "expression").html(expression).appendTo($tr)
+ $headRow = $(" ").append("").appendTo($table)
+ for valX, x in comps
+ $el = if supportsCanvas then rotateText(valX.asString) else $("", class: "rotate", text: valX.asString)
+ $(" ", class: "header col").html($el).appendTo($headRow)
+
+ $tr = $(" ").appendTo($table)
+ exprClass = do ->
+ val = (new Function("if(#{valX.asString}){return true}else{return false}"))()
+ if val then "true" else "false"
+ $("", class: "row header #{exprClass}").text(valX.asString).append(": ").appendTo($tr)
+ for valY, y in comps
+ [evalStr2, r2] = valX.testResults(valY, "==")
+ [evalStr3, r3] = valX.testResults(valY, "===")
+ if r2 and r3
+ status = "strict-equality"
+ txt = "="
+ else if r2
+ status = "loose-equality"
+ txt = "≅"
+ else
+ status = "no-equality"
+ txt = "≠"
+ td = $(" ", class: "cell", html: "#{txt}
").appendTo($tr)
+ td.data("eval2", evalStr2)
+ td.data("eval3", evalStr3)
+ if r2 and r3
+ td.addClass("strict-equality")
+ else if r2
+ td.addClass("loose-equality")
+
$table
+@buildKeyTable = ->
+ $table = $("", class: "key comparisons")
+ rows = [
+ ["no-eq", "≠", "Not equal"],
+ ["loose-equality", "≅", "Loose equality", """
+ Often gives "false" positives like "1" is true; [] is "0"
+ """]
+ ["strict-equality", "=", "Strict equality", """
+ Mostly evaluates as one would expect.
+ """]
+ ]
+ for [rowc, rowicon, rowtxt, rowdesc] in rows
+ tr = $("").appendTo $table
+ $("", class: "#{rowc} cell").html("#{rowicon}
").appendTo(tr)
+ td = $(" ", class: "#{rowc} label").html(rowtxt)
+ $("", class: "desc", html: rowdesc).appendTo(td) if rowdesc
+ td.appendTo(tr)
+ $table
rotateText = (txt, cHeight=80)->
canv = document.createElement("canvas")
canv.width = "25"
diff --git a/index.html b/index.html
deleted file mode 100644
index 7f532df..0000000
--- a/index.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
- JS Comparison Table
-
-
-
-
-
-
-
-
-
-
-
-
-
== (negated: !=)
-
- When using two equals signs for JavaScript equality testing, some funky conversions take place.
-
-
-
-
=== (negated: !==)
-
- When using three equals signs for JavaScript equality testing, everything is as is . Nothing gets converted before being evaluated.
-
-
-
-
A standard IF statement. If(value ) {/*- green -*/} else { /*- red -*/ }
-
Note: This row does not match up with any of the rows in the other table.
-
-
-
Moral of the story:
-
Use three equals unless you fully understand the conversions that take place for two-equals.
-
-
-
-
-
diff --git a/simple.css b/simple.css
deleted file mode 100644
index 3d605ea..0000000
--- a/simple.css
+++ /dev/null
@@ -1,358 +0,0 @@
-table.comparisons {
- border-spacing: 0;
-}
-table.comparisons td.row.header {
- text-align: right;
- font-family: Monospace;
- font-size: 15px;
- font-weight: 600;
- padding-right: 14px;
-}
-table.comparisons td.cell {
- padding: 1.5px;
-}
-table.comparisons td.cell div {
- width: 25px;
- height: 25px;
- border: 2px solid black;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- background-color: #ed9e98;
- border-color: #be120d;
-}
-table.comparisons td.cell.green div {
- background-color: #5bbe5b;
- border-color: #0b6c0b;
-}
-table.comparisons td.header.col {
- height: 90px;
-}
-table.comparisons td.header.col span.rotate {
- position: absolute;
- font-family: Monospace;
- font-size: 15px;
- font-weight: 600;
- -moz-transform:rotate(90deg);
- -webkit-transform:rotate(90deg);
- -o-transform:rotate(90deg);
- -ms-transform:rotate(90deg);
- transform:rotate(90deg);
-}
-table.comparisons .expression {
- font-size: 13px;
- color: #666;
- padding-left: 8px;
-}
-/*
- * jQuery UI CSS Framework 1.8.9
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.9
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Tabs 1.8.9
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/unified.html b/unified.html
new file mode 100644
index 0000000..c54013f
--- /dev/null
+++ b/unified.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+ JS Comparison Table
+
+
+
+
+
+
+
+
+
+
Equality in JavaScript
+
+
+
+
+
+
+
diff --git a/unified_comparison_table.css b/unified_comparison_table.css
new file mode 100644
index 0000000..5fdc8f7
--- /dev/null
+++ b/unified_comparison_table.css
@@ -0,0 +1,97 @@
+body {
+ margin: 0;
+}
+#content {
+ width: 1000px;
+ margin: 0 auto;
+}
+#table, #key {
+ float: left;
+}
+#table {
+ width: 720px;
+}
+#key {
+ margin-top: 120px;
+ width: 280px;
+}
+
+table.comparisons {
+ border-spacing: 0;
+ color: #444;
+}
+table.comparisons p.desc {
+ margin: 0;
+ font-style: italic;
+ color: #666;
+ font-size: 14px;
+}
+table.comparisons td.row.header {
+ text-align: right;
+ font-family: Monospace;
+ font-size: 15px;
+ font-weight: 600;
+}
+table.comparisons td.row.header span {
+ color: #eee;
+ margin-right: -4px;
+}
+/*table.comparisons td.row.header.true {
+ background-color: #f8f8f8;
+}*/
+table.comparisons td.row.header.true span {
+ color: #aaa;
+}
+table.comparisons.key td {
+ padding: 6px 0;
+}
+table.comparisons.key td.label {
+ padding-left: 6px;
+}
+table.comparisons td.cell {
+ padding: 1.5px;
+ cursor: pointer;
+}
+table.comparisons td.cell div {
+ width: 25px;
+ height: 25px;
+ background-color: #ece3e2;
+ border: 2px solid #cecece;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align: center;
+ line-height: 27px;
+ color: #c9c9c9;
+}
+table.comparisons td.strict-equality div, table.comparisons td.loose-equality div {
+ border-color: #817D7D;
+ background-color: #dbdbdb;
+ color: #817D7D;
+}
+table.comparisons td.strict-equality div {
+ color: #5f5f5f;
+ border-color: #464646;
+ background-color: #818181;
+ font-size: 28px;
+ font-weight: bold;
+}
+table.comparisons td.header.col {
+ height: 90px;
+}
+table.comparisons td.header.col span.rotate {
+ position: absolute;
+ font-family: Monospace;
+ font-size: 15px;
+ font-weight: 600;
+ -moz-transform:rotate(90deg);
+ -webkit-transform:rotate(90deg);
+ -o-transform:rotate(90deg);
+ -ms-transform:rotate(90deg);
+ transform:rotate(90deg);
+}
+table.comparisons .expression {
+ font-size: 13px;
+ color: #666;
+ padding-left: 8px;
+}
diff --git a/js/comparison_table.js b/unified_comparison_table.js
similarity index 68%
rename from js/comparison_table.js
rename to unified_comparison_table.js
index 11da614..af5355e 100644
--- a/js/comparison_table.js
+++ b/unified_comparison_table.js
@@ -176,8 +176,8 @@
return $table;
};
- this.buildComparisonTableForIf = function(values) {
- var $table, $td, $tr, comp, comps, expression, v, val, _i, _len;
+ this.buildUnifiedComparisonTable = function(values) {
+ var $el, $headRow, $table, $tr, comps, evalStr2, evalStr3, exprClass, r2, r3, status, td, txt, v, valX, valY, x, y, _i, _j, _len, _len1, _ref, _ref1;
comps = (function() {
var _i, _len, _results;
_results = [];
@@ -190,25 +190,81 @@
$table = $("", {
"class": "comparisons"
});
- for (_i = 0, _len = comps.length; _i < _len; _i++) {
- comp = comps[_i];
- $tr = $("").html($("", {
- "class": "header row",
- text: comp.asString
- })).appendTo($table);
- $td = $(" ", {
- "class": "cell"
- }).html($("", {
- html: " "
- })).appendTo($tr);
- val = (new Function("if(" + comp.asString + "){return true}else{return false}"))();
- if (val) {
- $td.addClass("green");
+ $headRow = $("
").append("").appendTo($table);
+ for (x = _i = 0, _len = comps.length; _i < _len; x = ++_i) {
+ valX = comps[x];
+ $el = supportsCanvas ? rotateText(valX.asString) : $("", {
+ "class": "rotate",
+ text: valX.asString
+ });
+ $(" ", {
+ "class": "header col"
+ }).html($el).appendTo($headRow);
+ $tr = $(" ").appendTo($table);
+ exprClass = (function() {
+ var val;
+ val = (new Function("if(" + valX.asString + "){return true}else{return false}"))();
+ if (val) {
+ return "true";
+ } else {
+ return "false";
+ }
+ })();
+ $("", {
+ "class": "row header " + exprClass
+ }).text(valX.asString).append(": ").appendTo($tr);
+ for (y = _j = 0, _len1 = comps.length; _j < _len1; y = ++_j) {
+ valY = comps[y];
+ _ref = valX.testResults(valY, "=="), evalStr2 = _ref[0], r2 = _ref[1];
+ _ref1 = valX.testResults(valY, "==="), evalStr3 = _ref1[0], r3 = _ref1[1];
+ if (r2 && r3) {
+ status = "strict-equality";
+ txt = "=";
+ } else if (r2) {
+ status = "loose-equality";
+ txt = "≅";
+ } else {
+ status = "no-equality";
+ txt = "≠";
+ }
+ td = $(" ", {
+ "class": "cell",
+ html: "" + txt + "
"
+ }).appendTo($tr);
+ td.data("eval2", evalStr2);
+ td.data("eval3", evalStr3);
+ if (r2 && r3) {
+ td.addClass("strict-equality");
+ } else if (r2) {
+ td.addClass("loose-equality");
+ }
}
- expression = " if (" + comp.asString + ") { /* " + (val ? 'executes' : 'does not execute') + " */ } ";
+ }
+ return $table;
+ };
+
+ this.buildKeyTable = function() {
+ var $table, rowc, rowdesc, rowicon, rows, rowtxt, td, tr, _i, _len, _ref;
+ $table = $("", {
+ "class": "key comparisons"
+ });
+ rows = [["no-eq", "≠", "Not equal"], ["loose-equality", "≅", "Loose equality", "Often gives \"false\" positives like \"1\" is true; [] is \"0\""], ["strict-equality", "=", "Strict equality", "Mostly evaluates as one would expect."]];
+ for (_i = 0, _len = rows.length; _i < _len; _i++) {
+ _ref = rows[_i], rowc = _ref[0], rowicon = _ref[1], rowtxt = _ref[2], rowdesc = _ref[3];
+ tr = $("").appendTo($table);
$("", {
- "class": "expression"
- }).html(expression).appendTo($tr);
+ "class": "" + rowc + " cell"
+ }).html("" + rowicon + "
").appendTo(tr);
+ td = $(" ", {
+ "class": "" + rowc + " label"
+ }).html(rowtxt);
+ if (rowdesc) {
+ $("", {
+ "class": "desc",
+ html: rowdesc
+ }).appendTo(td);
+ }
+ td.appendTo(tr);
}
return $table;
};