D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
gronke
Full window
Github gist
Ist heute Maschinendeck Treffen? // source http://jsbin.com/coheve
<!DOCTYPE html> <html> <head> <title>Ist heute Maschinendeck Treffen?</title> <style> body { text-align: center; font-family: Helvetica; } #state { font-size: 25px; } </style> <style id="jsbin-css"> ul, li { display: block; position: relative; padding: 1em; } .done { color: #ccc; text-decoration: line-through; } </style> </head> <body> <h1>Ist heute Maschinendeck Treffen?</h1> <div id="state"></div> <script> document.querySelector('#state').innerHTML = ((new Date()).getDay() === 3) ? "Ja" : "Nein"; </script> <script id="jsbin-javascript"> (function () { var TODOModel = Promenade.Model.extend({ type: 'todo', defaults: { done: false, description: '' } }); var TODOCollection = Promenade.Collection.extend({ model: TODOModel }); var TODOController = Promenade.Controller.extend({ defineRoutes: function () { this.handle('', 'defaultRoute'); this.handle('create', 'createTodo'); }, defaultRoute: function () { this.app.redirect('create'); }, createTodo: function () { this.app.view.contentRegion.show(new TODOListView({ collection: this.app.todoCollection })); } }); var TODONewView = Promenade.View.extend({ tagName: 'form', template: 'new', events: { 'submit': 'handleSubmit' }, handleSubmit: function (e) { this.collection.add(new TODOModel({ description: this.getDescriptionText() })); // Cancel the default form behavior: return false; }, getDescriptionText: function () { return this.$el.find('input').val(); } }); var TODOItemView = Promenade.View.extend({ tagName: 'li', template: 'item', events: { 'click input': 'toggleDone' }, toggleDone: function () { this.model.set( 'done', !this.model.get('done') ); this.$el.toggleClass( 'done', this.model.get('done') ); } }); var TODOListView = Promenade.CollectionView.extend({ tagName: 'div', template: 'list', layout: { 'new': '.new-region', 'outlet': '.outlet-region' }, itemClass: TODOItemView, initialize: function () { Promenade.CollectionView.prototype.initialize.apply(this, arguments); this.newRegion.show(new TODONewView({ collection: this.collection })); } }); var TODOApplication = Promenade.Application.extend({ models: [ TODOCollection ], controllers: [ TODOController ], view: Promenade.View.extend({ el: document.body, layout: { 'content': '' } }) }); window.app = new TODOApplication(); app.initializes.then(function () { Backbone.history.start(); console.log('Done!'); }); })(); </script> <script id="jsbin-source-css" type="text/css">ul, li { display: block; position: relative; padding: 1em; } .done { color: #ccc; text-decoration: line-through; }</script> <script id="jsbin-source-javascript" type="text/javascript"> (function () { var TODOModel = Promenade.Model.extend({ type: 'todo', defaults: { done: false, description: '' } }); var TODOCollection = Promenade.Collection.extend({ model: TODOModel }); var TODOController = Promenade.Controller.extend({ defineRoutes: function () { this.handle('', 'defaultRoute'); this.handle('create', 'createTodo'); }, defaultRoute: function () { this.app.redirect('create'); }, createTodo: function () { this.app.view.contentRegion.show(new TODOListView({ collection: this.app.todoCollection })); } }); var TODONewView = Promenade.View.extend({ tagName: 'form', template: 'new', events: { 'submit': 'handleSubmit' }, handleSubmit: function (e) { this.collection.add(new TODOModel({ description: this.getDescriptionText() })); // Cancel the default form behavior: return false; }, getDescriptionText: function () { return this.$el.find('input').val(); } }); var TODOItemView = Promenade.View.extend({ tagName: 'li', template: 'item', events: { 'click input': 'toggleDone' }, toggleDone: function () { this.model.set( 'done', !this.model.get('done') ); this.$el.toggleClass( 'done', this.model.get('done') ); } }); var TODOListView = Promenade.CollectionView.extend({ tagName: 'div', template: 'list', layout: { 'new': '.new-region', 'outlet': '.outlet-region' }, itemClass: TODOItemView, initialize: function () { Promenade.CollectionView.prototype.initialize.apply(this, arguments); this.newRegion.show(new TODONewView({ collection: this.collection })); } }); var TODOApplication = Promenade.Application.extend({ models: [ TODOCollection ], controllers: [ TODOController ], view: Promenade.View.extend({ el: document.body, layout: { 'content': '' } }) }); window.app = new TODOApplication(); app.initializes.then(function () { Backbone.history.start(); console.log('Done!'); }); })();</script></body> </html>