Permalink
Browse files

init

  • Loading branch information...
1 parent f7abfa4 commit edcf7b249f1aee4b070e26ae76fe388021ac4aab @egroSK committed May 7, 2012
Showing with 3,454 additions and 0 deletions.
  1. +91 −0 01_polling/app.js
  2. +15 −0 01_polling/package.json
  3. +76 −0 01_polling/public/javascripts/app.js
  4. +4 −0 01_polling/public/javascripts/jquery.min.js
  5. +12 −0 01_polling/public/stylesheets/style.css
  6. +19 −0 01_polling/todo.js
  7. +43 −0 01_polling/todos.js
  8. +42 −0 01_polling/views/index.ejs
  9. +98 −0 02_polling_with_piggybacking/app.js
  10. +15 −0 02_polling_with_piggybacking/package.json
  11. +94 −0 02_polling_with_piggybacking/public/javascripts/app.js
  12. +4 −0 02_polling_with_piggybacking/public/javascripts/jquery.min.js
  13. +12 −0 02_polling_with_piggybacking/public/stylesheets/style.css
  14. +19 −0 02_polling_with_piggybacking/todo.js
  15. +43 −0 02_polling_with_piggybacking/todos.js
  16. +42 −0 02_polling_with_piggybacking/views/index.ejs
  17. +95 −0 03_polling_script_element/app.js
  18. +15 −0 03_polling_script_element/package.json
  19. +96 −0 03_polling_script_element/public/javascripts/app.js
  20. +4 −0 03_polling_script_element/public/javascripts/jquery.min.js
  21. +12 −0 03_polling_script_element/public/stylesheets/style.css
  22. +19 −0 03_polling_script_element/todo.js
  23. +43 −0 03_polling_script_element/todos.js
  24. +42 −0 03_polling_script_element/views/index.ejs
  25. +98 −0 04_xhr_streaming/app.js
  26. +15 −0 04_xhr_streaming/package.json
  27. +104 −0 04_xhr_streaming/public/javascripts/app.js
  28. +4 −0 04_xhr_streaming/public/javascripts/jquery.min.js
  29. +12 −0 04_xhr_streaming/public/stylesheets/style.css
  30. +19 −0 04_xhr_streaming/todo.js
  31. +42 −0 04_xhr_streaming/views/index.ejs
  32. +119 −0 04_xhr_streaming_with_old/app.js
  33. +15 −0 04_xhr_streaming_with_old/package.json
  34. +110 −0 04_xhr_streaming_with_old/public/javascripts/app.js
  35. +4 −0 04_xhr_streaming_with_old/public/javascripts/jquery.min.js
  36. +12 −0 04_xhr_streaming_with_old/public/stylesheets/style.css
  37. +19 −0 04_xhr_streaming_with_old/todo.js
  38. +43 −0 04_xhr_streaming_with_old/todos.js
  39. +43 −0 04_xhr_streaming_with_old/views/index.ejs
  40. +100 −0 05_forever_iframe/app.js
  41. +15 −0 05_forever_iframe/package.json
  42. +70 −0 05_forever_iframe/public/javascripts/app.js
  43. +4 −0 05_forever_iframe/public/javascripts/jquery.min.js
  44. +12 −0 05_forever_iframe/public/stylesheets/style.css
  45. +19 −0 05_forever_iframe/todo.js
  46. +42 −0 05_forever_iframe/views/index.ejs
  47. +121 −0 05_forever_iframe_with_old/app.js
  48. +15 −0 05_forever_iframe_with_old/package.json
  49. +78 −0 05_forever_iframe_with_old/public/javascripts/app.js
  50. +4 −0 05_forever_iframe_with_old/public/javascripts/jquery.min.js
  51. +12 −0 05_forever_iframe_with_old/public/stylesheets/style.css
  52. +19 −0 05_forever_iframe_with_old/todo.js
  53. +43 −0 05_forever_iframe_with_old/todos.js
  54. +43 −0 05_forever_iframe_with_old/views/index.ejs
  55. +119 −0 06_longpolling/app.js
  56. +15 −0 06_longpolling/package.json
  57. +74 −0 06_longpolling/public/javascripts/app.js
  58. +4 −0 06_longpolling/public/javascripts/jquery.min.js
  59. +12 −0 06_longpolling/public/stylesheets/style.css
  60. +19 −0 06_longpolling/todo.js
  61. +43 −0 06_longpolling/todos.js
  62. +42 −0 06_longpolling/views/index.ejs
  63. +122 −0 07_longpolling_script_element/app.js
  64. +15 −0 07_longpolling_script_element/package.json
  65. +80 −0 07_longpolling_script_element/public/javascripts/app.js
  66. +4 −0 07_longpolling_script_element/public/javascripts/jquery.min.js
  67. +12 −0 07_longpolling_script_element/public/stylesheets/style.css
  68. +19 −0 07_longpolling_script_element/todo.js
  69. +43 −0 07_longpolling_script_element/todos.js
  70. +42 −0 07_longpolling_script_element/views/index.ejs
  71. +100 −0 08_serversent/app.js
  72. +15 −0 08_serversent/package.json
  73. +67 −0 08_serversent/public/javascripts/app.js
  74. +4 −0 08_serversent/public/javascripts/jquery.min.js
  75. +12 −0 08_serversent/public/stylesheets/style.css
  76. +19 −0 08_serversent/todo.js
  77. +42 −0 08_serversent/views/index.ejs
  78. +115 −0 08_serversent_with_old/app.js
  79. +15 −0 08_serversent_with_old/package.json
  80. +68 −0 08_serversent_with_old/public/javascripts/app.js
  81. +4 −0 08_serversent_with_old/public/javascripts/jquery.min.js
  82. +12 −0 08_serversent_with_old/public/stylesheets/style.css
  83. +19 −0 08_serversent_with_old/todo.js
  84. +43 −0 08_serversent_with_old/todos.js
  85. +43 −0 08_serversent_with_old/views/index.ejs
View
@@ -0,0 +1,91 @@
+/**
+ * Zjednodušený todo-list, technika (transportný spôsob) POLLING.
+ *
+ * Ukážková real-time webová aplikácia pre bakalársku prácu s témou real-time webové aplikácie
+ * určená k demonštrácii real-time komunikácie klienta so serverom transporným spôsobom uvedeným vyššie.
+ *
+ * Aplikácia má implementované iba dve funkcie - pridanie novej úlohy a získanie úloh zo servera.
+ * Aplikácia neobsahuje všetky potrebné prvky, ktoré by boli pokryté v produkčnej aplikácii,
+ * ako overovanie hodnôt získaných od užívateľa a podobne.
+ *
+ * Pozn. úlohy nie sú ukladané do databázy preto je ich životnosť iba po dobu spustenia aplikácie.
+ *
+ * @author Matej Paulech <matej.paulech@gmail.com>
+ */
+
+// Závislosti (moduly)
+
+var express = require('express');
+var app = module.exports = express.createServer();
+var Todos = require('./todos');
+
+// Vytvorenie objektu so zoznamom úloh a pridanie 2 ukážkových úloh
+
+var todos = new Todos();
+todos.add('Nakúpiť mlieko');
+todos.add('Dopísať bakalárku');
+
+// Nastavenia
+
+// Funkcia pre vlastný formátu času v logoch
+express.logger.format('date', function () {
+ var date = new Date();
+ return date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
+});
+
+app.configure(function(){
+ app.set('views', __dirname + '/views');
+ app.set('view engine', 'ejs');
+ app.set('view options', { 'layout': false });
+ app.use(express.bodyParser());
+ app.use(express.methodOverride());
+ app.use(express.logger({ 'format': ':date :method :url' }));
+ app.use(app.router);
+ app.use(express.static(__dirname + '/public'));
+ app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
+});
+
+// Routy
+
+/**
+ * GET /
+ * Pošle vyrenderovaný index ako odpoveď.
+ */
+app.get('/', function (req, res) {
+ res.header('Cache-Control', 'no-cache');
+ res.render('index.ejs', { 'title': 'Poolling demo - Jednoduchý TODO list' });
+});
+
+/**
+ * POST /todo (param = text, since)
+ * Uloží nové todočko do zoznamu.
+ */
+app.post('/todo', function (req, res) {
+ var todo_text = req.body['text'];
+ if (!todo_text || todo_text.trim().length === 0) {
+ return res.send('Text úlohy musí byť zadaný.', 400);
+ }
+
+ todos.add(todo_text);
+ res.send();
+});
+
+/**
+ * GET /todos (param = since)
+ * Odpovie zoznamom zmien od zvoleného času.
+ */
+app.get('/todos', function (req, res) {
+ var now = Date.now();
+ var since = Number(req.query['since']) || 0;
+
+ res.send({
+ todos: todos.getSince(since, now),
+ since: now
+ });
+});
+
+// Listen
+
+app.listen(3000, function(){
+ console.log("Express server is listening on: " + app.address().address + ":" + app.address().port);
+});
View
@@ -0,0 +1,15 @@
+{
+ "name": "polling-demo",
+ "description": "Ukážková real-time webová aplikácia pre bakalársku prácu s témou real-time webové aplikácie určená k demonštrácii real-time komunikácie klienta so serverom transporným spôsobom uvedeným v názve aplikácie.",
+ "version": "0.0.1",
+ "author": "Matej Paulech <matej.paulech@gmail.com>",
+ "private": true,
+ "main": "app",
+ "dependencies": {
+ "express": "2.5.8",
+ "ejs": "0.7.1"
+ },
+ "engine": {
+ "node": ">= 0.4.x"
+ }
+}
@@ -0,0 +1,76 @@
+/**
+ * Zjednodušený todo-list, technika (transportný spôsob) POLLING.
+ *
+ * Ukážková real-time webová aplikácia pre bakalársku prácu s témou real-time webové aplikácie
+ * určená k demonštrácii real-time komunikácie klienta so serverom transporným spôsobom uvedeným vyššie.
+ *
+ * Aplikácia má implementované iba dve funkcie - pridanie novej úlohy a získanie úloh zo servera.
+ * Aplikácia neobsahuje všetky potrebné prvky, ktoré by boli pokryté v produkčnej aplikácii,
+ * ako overovanie hodnôt získaných od užívateľa a podobne.
+ *
+ * Pozn. úlohy nie sú ukladané do databázy preto je ich životnosť iba po dobu spustenia aplikácie.
+ *
+ * @author Matej Paulech <matej.paulech@gmail.com>
+ */
+
+/** @type {number} since Timestamp poslednej zmeny (v ms) */
+var since = 0;
+/** @type {number} period Interval v ktorom sa budú zisťovať zmeny (v ms) */
+var period = 10 * 1000;
+
+/**
+ * Funkcia, ktorá získa nové dáta zo servera a spracuje ich.
+ */
+function checkForChanges() {
+ $.ajax({
+ type: 'GET',
+ url: 'todos',
+ data: { 'since': since },
+ }).done(function (data) {
+ since = data['since'];
+
+ data.todos.forEach(function (todo) {
+ $('<li>').text(todo['text']).appendTo('#todos');
+ });
+ $('#status_update').text('Posledná aktualizácia: ' + new Date(data['since']));
+
+ setTimeout(checkForChanges, period);
+ }).fail(function () {
+ $('#status_update').text('Nastala chyba pri získavaní poznámok zo serveru, skúšam znova');
+
+ setTimeout(checkForChanges, period);
+ });
+}
+
+$(function () {
+ $('#todo_text').focus();
+
+ /**
+ * Akcia pre odoslanie formulára.
+ * Skontroluje sa, či je textove pole vyplnene a ak áno pošle sa ajax požiadavka na server.
+ */
+ $('#new_todo').submit(function () {
+ var todo_text = $('#todo_text').val().trim();
+
+ if (todo_text.length === 0 ) {
+ alert("Zadaj novú úlohu.");
+ return false;
+ }
+
+ $.ajax({
+ type: 'POST',
+ url: 'todo',
+ data: { 'text': todo_text }
+ }).done(function () {
+ $('#todo_text').val('');
+ $('#status_new').text('Úloha bola úspešne uložená na serveri.').show().delay(2000).fadeOut();
+ }).fail(function (xhr, errorType, statusText) {
+ $('#status_new').text('Úlohu sa nepodarilo odoslať na server, skús znova... (' + statusText + ': ' + xhr.responseText + ')').show().delay(5000).fadeOut();
+ });
+
+ return false;
+ });
+
+ // Zavolá funkciu pre zistovanie zmien - prvotné získanie dát.
+ checkForChanges();
+});

Large diffs are not rendered by default.

Oops, something went wrong.
@@ -0,0 +1,12 @@
+body {
+ font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+a {
+ color: #00B7FF;
+}
+
+.status {
+ font-style: italic;
+ font-size: 13px;
+}
View
@@ -0,0 +1,19 @@
+/**
+ * Zjednodušený todo-list, technika POLLING.
+ * @author Matej Paulech <matej.paulech@gmail.com>
+ */
+
+/**
+ * Vytvorí objekt s todočkom. Todočku sa automaticky vygeneruje ID a dátum vytvorenia.
+ *
+ * @constructor
+ * @param {string} text Text nového todočka
+ */
+var Todo = function (text) {
+ this['date'] = Date.now();
+ this['id'] = this['date'].toString() + Math.floor(Math.random()*1000);
+ this['text'] = text;
+ return this;
+};
+
+module.exports = Todo;
View
@@ -0,0 +1,43 @@
+/**
+ * Zjednodušený todo-list, technika POLLING.
+ * @author Matej Paulech <matej.paulech@gmail.com>
+ */
+
+// Závislosti
+var Todo = require('./todo');
+
+/**
+ * Velmi zjednodušený (a neefektívny!) objekt pre uchovávanie todočiek.
+ * V skutočnej aplikácii by bola použitá databáza.
+ *
+ * @constructor
+ */
+var Todos = function () {
+ this.todos = [];
+};
+
+/**
+ * Pridá nové todo do databázy
+ *
+ * @param {string} text Text nového todočka
+ */
+Todos.prototype.add = function (text) {
+ var todo = new Todo(text);
+ this.todos.push(todo);
+ return todo;
+};
+
+/**
+ * Vrati pole todočiek vytvorených v zadanom časovom intervale
+ *
+ * @param {number} since Timestamp od ktorého majú byť získavané správy (v sekundách)
+ * @param {number} to Timestamp do ktoreho majú byť získavané správy (v sekundách)
+ * @return {Array.<Object.<number, string, string>>} Pole objektov s todočkami.
+ */
+Todos.prototype.getSince = function (since, to) {
+ return this.todos.filter(function (todo) {
+ return todo['date'] > since && todo['date'] <= to;
+ });
+};
+
+module.exports = Todos;
View
@@ -0,0 +1,42 @@
+<!--
+ Zjednodušený todo-list, technika (transportný spôsob) POLLING.
+
+ Ukážková real-time webová aplikácia pre bakalársku prácu s témou real-time webové aplikácie
+ určená k demonštrácii real-time komunikácie klienta so serverom transporným spôsobom uvedeným vyššie.
+
+ Aplikácia má implementované iba dve funkcie - pridanie novej úlohy a získanie úloh zo servera.
+ Aplikácia neobsahuje všetky potrebné prvky, ktoré by boli pokryté v produkčnej aplikácii,
+ ako overovanie hodnôt získaných od užívateľa a podobne.
+
+ Pozn. úlohy nie sú ukladané do databázy preto je ich životnosť iba po dobu spustenia aplikácie.
+
+ @author Matej Paulech <matej.paulech@gmail.com>
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title><%= title %></title>
+
+ <script src="javascripts/jquery.min.js" type="text/javascript"></script>
+ <script src="javascripts/app.js" type="text/javascript"></script>
+
+ <link href="stylesheets/style.css" rel="stylesheet" type="text/stylesheet" />
+ </head>
+
+ <body>
+ <h1><%= title %></h1>
+
+ <h2>Zoznam úloh</h2>
+ <ul id="todos"></ul>
+ <p id="status_update" class="status"></p>
+
+ <h2>Pridať novú úlohu</h2>
+ <form id="new_todo">
+ <input type="text" id="todo_text" />
+ <input type="submit" value="Pridať" />
+ </form>
+ <p id="status_new" class="status"></p>
+ </body>
+</html>
Oops, something went wrong.

0 comments on commit edcf7b2

Please sign in to comment.