From ff6e0bf833b2d6b7a7997af93a7c6f66dbe6b867 Mon Sep 17 00:00:00 2001 From: TasteBot <travis@rdrei.net> Date: Fri, 6 Feb 2015 07:51:00 +0000 Subject: [PATCH] update the build files for gh-pages [ci skip] --- examples/react/.gitignore | 12 + examples/react/bower.json | 9 - .../bower_components/todomvc-common/base.css | 554 ------------------ .../bower_components/todomvc-common/bg.png | Bin 2126 -> 0 bytes examples/react/index.html | 11 +- .../director/build/director.js | 62 +- .../react/dist}/JSXTransformer.js | 0 .../react/dist}/react-with-addons.js | 0 .../node_modules/todomvc-app-css/index.css | 394 +++++++++++++ .../node_modules/todomvc-common/base.css | 141 +++++ .../todomvc-common/base.js | 27 + examples/react/package.json | 9 + 12 files changed, 623 insertions(+), 596 deletions(-) create mode 100644 examples/react/.gitignore delete mode 100644 examples/react/bower.json delete mode 100644 examples/react/bower_components/todomvc-common/base.css delete mode 100644 examples/react/bower_components/todomvc-common/bg.png rename examples/react/{bower_components => node_modules}/director/build/director.js (93%) rename examples/react/{bower_components/react => node_modules/react/dist}/JSXTransformer.js (100%) rename examples/react/{bower_components/react => node_modules/react/dist}/react-with-addons.js (100%) create mode 100644 examples/react/node_modules/todomvc-app-css/index.css create mode 100644 examples/react/node_modules/todomvc-common/base.css rename examples/react/{bower_components => node_modules}/todomvc-common/base.js (87%) create mode 100644 examples/react/package.json diff --git a/examples/react/.gitignore b/examples/react/.gitignore new file mode 100644 index 00000000..69e045fd --- /dev/null +++ b/examples/react/.gitignore @@ -0,0 +1,12 @@ +node_modules/director +!node_modules/director/build/director.js + +node_modules/react +!node_modules/react/dist/react-with-addons.js +!node_modules/react/dist/JSXTransformer.js +node_modules/todomvc-app-css +!node_modules/todomvc-app-css/index.css + +node_modules/todomvc-common +!node_modules/todomvc-common/base.css +!node_modules/todomvc-common/base.js diff --git a/examples/react/bower.json b/examples/react/bower.json deleted file mode 100644 index bae8d723..00000000 --- a/examples/react/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "todomvc-react", - "version": "0.0.0", - "dependencies": { - "todomvc-common": "~0.3.0", - "director": "~1.2.0", - "react": "~0.12.0" - } -} diff --git a/examples/react/bower_components/todomvc-common/base.css b/examples/react/bower_components/todomvc-common/base.css deleted file mode 100644 index 285f5313..00000000 --- a/examples/react/bower_components/todomvc-common/base.css +++ /dev/null @@ -1,554 +0,0 @@ -html, -body { - margin: 0; - padding: 0; -} - -button { - margin: 0; - padding: 0; - border: 0; - background: none; - font-size: 100%; - vertical-align: baseline; - font-family: inherit; - color: inherit; - -webkit-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; -} - -body { - font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; - line-height: 1.4em; - background: #eaeaea url('bg.png'); - color: #4d4d4d; - width: 550px; - margin: 0 auto; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; -} - -button, -input[type="checkbox"] { - outline: none; -} - -#todoapp { - background: #fff; - background: rgba(255, 255, 255, 0.9); - margin: 130px 0 40px 0; - border: 1px solid #ccc; - position: relative; - border-top-left-radius: 2px; - border-top-right-radius: 2px; - box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.2), - 0 25px 50px 0 rgba(0, 0, 0, 0.15); -} - -#todoapp:before { - content: ''; - border-left: 1px solid #f5d6d6; - border-right: 1px solid #f5d6d6; - width: 2px; - position: absolute; - top: 0; - left: 40px; - height: 100%; -} - -#todoapp input::-webkit-input-placeholder { - font-style: italic; -} - -#todoapp input::-moz-placeholder { - font-style: italic; - color: #a9a9a9; -} - -#todoapp h1 { - position: absolute; - top: -120px; - width: 100%; - font-size: 70px; - font-weight: bold; - text-align: center; - color: #b3b3b3; - color: rgba(255, 255, 255, 0.3); - text-shadow: -1px -1px rgba(0, 0, 0, 0.2); - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; -} - -#header { - padding-top: 15px; - border-radius: inherit; -} - -#header:before { - content: ''; - position: absolute; - top: 0; - right: 0; - left: 0; - height: 15px; - z-index: 2; - border-bottom: 1px solid #6c615c; - background: #8d7d77; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(132, 110, 100, 0.8)),to(rgba(101, 84, 76, 0.8))); - background: -webkit-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8)); - background: linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8)); - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670'); - border-top-left-radius: 1px; - border-top-right-radius: 1px; -} - -#new-todo, -.edit { - position: relative; - margin: 0; - width: 100%; - font-size: 24px; - font-family: inherit; - line-height: 1.4em; - border: 0; - outline: none; - color: inherit; - padding: 6px; - border: 1px solid #999; - box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; -} - -#new-todo { - padding: 16px 16px 16px 60px; - border: none; - background: rgba(0, 0, 0, 0.02); - z-index: 2; - box-shadow: none; -} - -#main { - position: relative; - z-index: 2; - border-top: 1px dotted #adadad; -} - -label[for='toggle-all'] { - display: none; -} - -#toggle-all { - position: absolute; - top: -42px; - left: -4px; - width: 40px; - text-align: center; - /* Mobile Safari */ - border: none; -} - -#toggle-all:before { - content: '»'; - font-size: 28px; - color: #d9d9d9; - padding: 0 25px 7px; -} - -#toggle-all:checked:before { - color: #737373; -} - -#todo-list { - margin: 0; - padding: 0; - list-style: none; -} - -#todo-list li { - position: relative; - font-size: 24px; - border-bottom: 1px dotted #ccc; -} - -#todo-list li:last-child { - border-bottom: none; -} - -#todo-list li.editing { - border-bottom: none; - padding: 0; -} - -#todo-list li.editing .edit { - display: block; - width: 506px; - padding: 13px 17px 12px 17px; - margin: 0 0 0 43px; -} - -#todo-list li.editing .view { - display: none; -} - -#todo-list li .toggle { - text-align: center; - width: 40px; - /* auto, since non-WebKit browsers doesn't support input styling */ - height: auto; - position: absolute; - top: 0; - bottom: 0; - margin: auto 0; - /* Mobile Safari */ - border: none; - -webkit-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; -} - -#todo-list li .toggle:after { - content: '✔'; - /* 40 + a couple of pixels visual adjustment */ - line-height: 43px; - font-size: 20px; - color: #d9d9d9; - text-shadow: 0 -1px 0 #bfbfbf; -} - -#todo-list li .toggle:checked:after { - color: #85ada7; - text-shadow: 0 1px 0 #669991; - bottom: 1px; - position: relative; -} - -#todo-list li label { - white-space: pre; - word-break: break-word; - padding: 15px 60px 15px 15px; - margin-left: 45px; - display: block; - line-height: 1.2; - -webkit-transition: color 0.4s; - transition: color 0.4s; -} - -#todo-list li.completed label { - color: #a9a9a9; - text-decoration: line-through; -} - -#todo-list li .destroy { - display: none; - position: absolute; - top: 0; - right: 10px; - bottom: 0; - width: 40px; - height: 40px; - margin: auto 0; - font-size: 22px; - color: #a88a8a; - -webkit-transition: all 0.2s; - transition: all 0.2s; -} - -#todo-list li .destroy:hover { - text-shadow: 0 0 1px #000, - 0 0 10px rgba(199, 107, 107, 0.8); - -webkit-transform: scale(1.3); - transform: scale(1.3); -} - -#todo-list li .destroy:after { - content: '✖'; -} - -#todo-list li:hover .destroy { - display: block; -} - -#todo-list li .edit { - display: none; -} - -#todo-list li.editing:last-child { - margin-bottom: -1px; -} - -#footer { - color: #777; - padding: 0 15px; - position: absolute; - right: 0; - bottom: -31px; - left: 0; - height: 20px; - z-index: 1; - text-align: center; -} - -#footer:before { - content: ''; - position: absolute; - right: 0; - bottom: 31px; - left: 0; - height: 50px; - z-index: -1; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3), - 0 6px 0 -3px rgba(255, 255, 255, 0.8), - 0 7px 1px -3px rgba(0, 0, 0, 0.3), - 0 43px 0 -6px rgba(255, 255, 255, 0.8), - 0 44px 2px -6px rgba(0, 0, 0, 0.2); -} - -#todo-count { - float: left; - text-align: left; -} - -#filters { - margin: 0; - padding: 0; - list-style: none; - position: absolute; - right: 0; - left: 0; -} - -#filters li { - display: inline; -} - -#filters li a { - color: #83756f; - margin: 2px; - text-decoration: none; -} - -#filters li a.selected { - font-weight: bold; -} - -#clear-completed { - float: right; - position: relative; - line-height: 20px; - text-decoration: none; - background: rgba(0, 0, 0, 0.1); - font-size: 11px; - padding: 0 10px; - border-radius: 3px; - box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.2); -} - -#clear-completed:hover { - background: rgba(0, 0, 0, 0.15); - box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.3); -} - -#info { - margin: 65px auto 0; - color: #a6a6a6; - font-size: 12px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7); - text-align: center; -} - -#info a { - color: inherit; -} - -/* - Hack to remove background from Mobile Safari. - Can't use it globally since it destroys checkboxes in Firefox and Opera -*/ - -@media screen and (-webkit-min-device-pixel-ratio:0) { - #toggle-all, - #todo-list li .toggle { - background: none; - } - - #todo-list li .toggle { - height: 40px; - } - - #toggle-all { - top: -56px; - left: -15px; - width: 65px; - height: 41px; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-appearance: none; - appearance: none; - } -} - -.hidden { - display: none; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px dashed #C5C5C5; - border-bottom: 1px dashed #F7F7F7; -} - -.learn a { - font-weight: normal; - text-decoration: none; - color: #b83f45; -} - -.learn a:hover { - text-decoration: underline; - color: #787e7e; -} - -.learn h3, -.learn h4, -.learn h5 { - margin: 10px 0; - font-weight: 500; - line-height: 1.2; - color: #000; -} - -.learn h3 { - font-size: 24px; -} - -.learn h4 { - font-size: 18px; -} - -.learn h5 { - margin-bottom: 0; - font-size: 14px; -} - -.learn ul { - padding: 0; - margin: 0 0 30px 25px; -} - -.learn li { - line-height: 20px; -} - -.learn p { - font-size: 15px; - font-weight: 300; - line-height: 1.3; - margin-top: 0; - margin-bottom: 0; -} - -.quote { - border: none; - margin: 20px 0 60px 0; -} - -.quote p { - font-style: italic; -} - -.quote p:before { - content: '“'; - font-size: 50px; - opacity: .15; - position: absolute; - top: -20px; - left: 3px; -} - -.quote p:after { - content: 'â€'; - font-size: 50px; - opacity: .15; - position: absolute; - bottom: -42px; - right: 3px; -} - -.quote footer { - position: absolute; - bottom: -40px; - right: 0; -} - -.quote footer img { - border-radius: 3px; -} - -.quote footer a { - margin-left: 5px; - vertical-align: middle; -} - -.speech-bubble { - position: relative; - padding: 10px; - background: rgba(0, 0, 0, .04); - border-radius: 5px; -} - -.speech-bubble:after { - content: ''; - position: absolute; - top: 100%; - right: 30px; - border: 13px solid transparent; - border-top-color: rgba(0, 0, 0, .04); -} - -.learn-bar > .learn { - position: absolute; - width: 272px; - top: 8px; - left: -300px; - padding: 10px; - border-radius: 5px; - background-color: rgba(255, 255, 255, .6); - -webkit-transition-property: left; - transition-property: left; - -webkit-transition-duration: 500ms; - transition-duration: 500ms; -} - -@media (min-width: 899px) { - .learn-bar { - width: auto; - margin: 0 0 0 300px; - } - - .learn-bar > .learn { - left: 8px; - } - - .learn-bar #todoapp { - width: 550px; - margin: 130px auto 40px auto; - } -} diff --git a/examples/react/bower_components/todomvc-common/bg.png b/examples/react/bower_components/todomvc-common/bg.png deleted file mode 100644 index b2a7600825ee11f21849ed475499c7d1ecbcc870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2126 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 Ef(>0N!2kdN diff --git a/examples/react/index.html b/examples/react/index.html index 0980f424..a48e38c8 100644 --- a/examples/react/index.html +++ b/examples/react/index.html @@ -3,7 +3,8 @@ <head> <meta charset="utf-8"> <title>React • TodoMVC</title> - <link rel="stylesheet" href="bower_components/todomvc-common/base.css"> + <link rel="stylesheet" href="node_modules/todomvc-common/base.css"> + <link rel="stylesheet" href="node_modules/todomvc-app-css/index.css"> </head> <body> <section id="todoapp"></section> @@ -13,10 +14,10 @@ <p>Part of <a href="http://todomvc.com">TodoMVC</a></p> </footer> - <script src="bower_components/todomvc-common/base.js"></script> - <script src="bower_components/react/react-with-addons.js"></script> - <script src="bower_components/react/JSXTransformer.js"></script> - <script src="bower_components/director/build/director.js"></script> + <script src="node_modules/todomvc-common/base.js"></script> + <script src="node_modules/react/dist/react-with-addons.js"></script> + <script src="node_modules/react/dist/JSXTransformer.js"></script> + <script src="node_modules/director/build/director.js"></script> <script src="js/utils.js"></script> <script src="js/todoModel.js"></script> diff --git a/examples/react/bower_components/director/build/director.js b/examples/react/node_modules/director/build/director.js similarity index 93% rename from examples/react/bower_components/director/build/director.js rename to examples/react/node_modules/director/build/director.js index 76717ed1..10388787 100644 --- a/examples/react/bower_components/director/build/director.js +++ b/examples/react/node_modules/director/build/director.js @@ -1,8 +1,8 @@ // -// Generated on Fri Dec 27 2013 12:02:11 GMT-0500 (EST) by Nodejitsu, Inc (Using Codesurgeon). -// Version 1.2.2 +// Generated on Tue Dec 16 2014 12:13:47 GMT+0100 (CET) by Charlie Robbins, Paolo Fragomeni & the Contributors (Using Codesurgeon). +// Version 1.2.6 // (function (exports) { @@ -10,29 +10,11 @@ /* * browser.js: Browser specific functionality for director. * - * (C) 2011, Nodejitsu Inc. + * (C) 2011, Charlie Robbins, Paolo Fragomeni, & the Contributors. * MIT LICENSE * */ -if (!Array.prototype.filter) { - Array.prototype.filter = function(filter, that) { - var other = [], v; - for (var i = 0, n = this.length; i < n; i++) { - if (i in this && filter.call(that, v = this[i], i, this)) { - other.push(v); - } - } - return other; - }; -} - -if (!Array.isArray){ - Array.isArray = function(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - }; -} - var dloc = document.location; function dlocHashEmpty() { @@ -196,7 +178,8 @@ var Router = exports.Router = function (routes) { }; Router.prototype.init = function (r) { - var self = this; + var self = this + , routeTo; this.handler = function(onChangeEvent) { var newURL = onChangeEvent && onChangeEvent.newURL || window.location.hash; var url = self.history === true ? self.getPath() : newURL.replace(/.*#/, ''); @@ -213,9 +196,16 @@ Router.prototype.init = function (r) { } } else { - var routeTo = dlocHashEmpty() && r ? r : !dlocHashEmpty() ? dloc.hash.replace(/^#/, '') : null; - if (routeTo) { - window.history.replaceState({}, document.title, routeTo); + if (this.convert_hash_in_init) { + // Use hash as route + routeTo = dlocHashEmpty() && r ? r : !dlocHashEmpty() ? dloc.hash.replace(/^#/, '') : null; + if (routeTo) { + window.history.replaceState({}, document.title, routeTo); + } + } + else { + // Use canonical url + routeTo = this.getPath(); } // Router has been initialized, but due to the chrome bug it will not @@ -351,7 +341,7 @@ function paramifyString(str, params, mod) { } } } - return mod === str ? "([._a-zA-Z0-9-]+)" : mod; + return mod === str ? "([._a-zA-Z0-9-%()]+)" : mod; } function regifyString(str, params) { @@ -397,6 +387,8 @@ function terminator(routes, delimiter, start, stop) { return routes; } +var QUERY_SEPARATOR = /\?.*/; + Router.prototype.configure = function(options) { options = options || {}; for (var i = 0; i < this.methods.length; i++) { @@ -410,6 +402,7 @@ Router.prototype.configure = function(options) { this.resource = options.resource; this.history = options.html5history && this.historySupport || false; this.run_in_init = this.history === true && options.run_handler_in_init !== false; + this.convert_hash_in_init = this.history === true && options.convert_hash_in_init !== false; this.every = { after: options.after || null, before: options.before || null, @@ -426,6 +419,7 @@ Router.prototype.param = function(token, matcher) { this.params[token] = function(str) { return str.replace(compiled, matcher.source || matcher); }; + return this; }; Router.prototype.on = Router.prototype.route = function(method, path, route) { @@ -453,8 +447,20 @@ Router.prototype.on = Router.prototype.route = function(method, path, route) { this.insert(method, this.scope.concat(path), route); }; +Router.prototype.path = function(path, routesFn) { + var self = this, length = this.scope.length; + if (path.source) { + path = path.source.replace(/\\\//ig, "/"); + } + path = path.split(new RegExp(this.delimiter)); + path = terminator(path, this.delimiter); + this.scope = this.scope.concat(path); + routesFn.call(this, this); + this.scope.splice(length, path.length); +}; + Router.prototype.dispatch = function(method, path, callback) { - var self = this, fns = this.traverse(method, path, this.routes, ""), invoked = this._invoked, after; + var self = this, fns = this.traverse(method, path.replace(QUERY_SEPARATOR, ""), this.routes, ""), invoked = this._invoked, after; this._invoked = true; if (!fns || fns.length === 0) { this.last = []; @@ -495,7 +501,7 @@ Router.prototype.invoke = function(fns, thisArg, callback) { if (Array.isArray(fn)) { return _asyncEverySeries(fn, apply, next); } else if (typeof fn == "function") { - fn.apply(thisArg, fns.captures.concat(next)); + fn.apply(thisArg, (fns.captures || []).concat(next)); } }; _asyncEverySeries(fns, apply, function() { diff --git a/examples/react/bower_components/react/JSXTransformer.js b/examples/react/node_modules/react/dist/JSXTransformer.js similarity index 100% rename from examples/react/bower_components/react/JSXTransformer.js rename to examples/react/node_modules/react/dist/JSXTransformer.js diff --git a/examples/react/bower_components/react/react-with-addons.js b/examples/react/node_modules/react/dist/react-with-addons.js similarity index 100% rename from examples/react/bower_components/react/react-with-addons.js rename to examples/react/node_modules/react/dist/react-with-addons.js diff --git a/examples/react/node_modules/todomvc-app-css/index.css b/examples/react/node_modules/todomvc-app-css/index.css new file mode 100644 index 00000000..43088488 --- /dev/null +++ b/examples/react/node_modules/todomvc-app-css/index.css @@ -0,0 +1,394 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + -ms-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + -ms-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +#todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +#todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + -ms-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +#new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + -ms-box-sizing: border-box; + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + -ms-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +#new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +#main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +#toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +#toggle-all:before { + content: 'â¯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +#toggle-all:checked:before { + color: #737373; +} + +#todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +#todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +#todo-list li:last-child { + border-bottom: none; +} + +#todo-list li.editing { + border-bottom: none; + padding: 0; +} + +#todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +#todo-list li.editing .view { + display: none; +} + +#todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; +} + +#todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>'); +} + +#todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>'); +} + +#todo-list li label { + white-space: pre; + word-break: break-word; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +#todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +#todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +#todo-list li .destroy:hover { + color: #af5b5e; +} + +#todo-list li .destroy:after { + content: '×'; +} + +#todo-list li:hover .destroy { + display: block; +} + +#todo-list li .edit { + display: none; +} + +#todo-list li.editing:last-child { + margin-bottom: -1px; +} + +#footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +#footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +#todo-count { + float: left; + text-align: left; +} + +#todo-count strong { + font-weight: 300; +} + +#filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +#filters li { + display: inline; +} + +#filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +#filters li a.selected, +#filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +#filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +#clear-completed, +html #clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + visibility: hidden; + position: relative; +} + +#clear-completed::after { + visibility: visible; + content: 'Clear completed'; + position: absolute; + right: 0; + white-space: nowrap; +} + +#clear-completed:hover::after { + text-decoration: underline; +} + +#info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +#info p { + line-height: 1; +} + +#info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +#info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + #toggle-all, + #todo-list li .toggle { + background: none; + } + + #todo-list li .toggle { + height: 40px; + } + + #toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + #footer { + height: 50px; + } + + #filters { + bottom: 10px; + } +} diff --git a/examples/react/node_modules/todomvc-common/base.css b/examples/react/node_modules/todomvc-common/base.css new file mode 100644 index 00000000..da65968a --- /dev/null +++ b/examples/react/node_modules/todomvc-common/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: '“'; + font-size: 50px; + opacity: .15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: 'â€'; + font-size: 50px; + opacity: .15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, .04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ''; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, .04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, .6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/examples/react/bower_components/todomvc-common/base.js b/examples/react/node_modules/todomvc-common/base.js similarity index 87% rename from examples/react/bower_components/todomvc-common/base.js rename to examples/react/node_modules/todomvc-common/base.js index d3a15127..44fb50c6 100644 --- a/examples/react/bower_components/todomvc-common/base.js +++ b/examples/react/node_modules/todomvc-common/base.js @@ -1,6 +1,8 @@ +/* global _ */ (function () { 'use strict'; + /* jshint ignore:start */ // Underscore's Template Module // Courtesy of underscorejs.org var _ = (function (_) { @@ -114,6 +116,7 @@ if (location.hostname === 'todomvc.com') { window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); } + /* jshint ignore:end */ function redirect() { if (location.hostname === 'tastejs.github.io') { @@ -175,13 +178,17 @@ if (learnJSON.backend) { this.frameworkJSON = learnJSON.backend; + this.frameworkJSON.issueLabel = framework; this.append({ backend: true }); } else if (learnJSON[framework]) { this.frameworkJSON = learnJSON[framework]; + this.frameworkJSON.issueLabel = framework; this.append(); } + + this.fetchIssueCount(); } Learn.prototype.append = function (opts) { @@ -212,6 +219,26 @@ document.body.insertAdjacentHTML('afterBegin', aside.outerHTML); }; + Learn.prototype.fetchIssueCount = function () { + var issueLink = document.getElementById('issue-count-link'); + if (issueLink) { + var url = issueLink.href.replace('https://github.com', 'https://api.github.com/repos'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = function (e) { + var parsedResponse = JSON.parse(e.target.responseText); + if (parsedResponse instanceof Array) { + var count = parsedResponse.length + if (count !== 0) { + issueLink.innerHTML = 'This app has ' + count + ' open issues'; + document.getElementById('issue-count').style.display = 'inline'; + } + } + }; + xhr.send(); + } + }; + redirect(); getFile('learn.json', Learn); })(); diff --git a/examples/react/package.json b/examples/react/package.json new file mode 100644 index 00000000..75c1b65a --- /dev/null +++ b/examples/react/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "dependencies": { + "director": "^1.2.0", + "react": "^0.12.0", + "todomvc-app-css": "^1.0.0", + "todomvc-common": "^1.0.1" + } +} -- 2.30.9