changeset 0:293976bb90c5

Origination.
author Atul Varma <avarma@mozilla.com>
date Sat, 01 May 2010 17:39:57 -0700
parents
children 66a402d86094
files index.html server.py
diffstat 2 files changed, 199 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/index.html	Sat May 01 17:39:57 2010 -0700
@@ -0,0 +1,183 @@
+<html>
+<head>
+<style type="text/css">
+body {
+  font-family: Palatino;
+}
+
+div.letter {
+  -webkit-transition-property: -webkit-transform, color;
+  -webkit-transition-duration: 0.1s, 0.2s;
+  -webkit-transition-timing-function: linear;
+  cursor: pointer;
+  font-size: 144pt;
+  width: 1em;
+}
+
+div.letter .info {
+  font-family: Futura, Helvetica;
+  white-space: pre;
+  font-size: 9pt;
+}
+
+div.letter.active {
+  color: red;
+}
+</style>
+</head>
+<body>
+<div class="letter">u<div class="info"></div></div>
+<div class="letter">m<div class="info"></div></div>
+<script>
+if (typeof Array.isArray !== 'function') {
+  Array.isArray = function (value) {
+    return Object.prototype.toString.call(value) === '[object Array]';
+  };
+}
+
+function $(selector) {
+  return new $.fn.init(selector);
+}
+
+$.fn = $.prototype = {
+  _qsa: function qsa(selector, element) {
+    if (element === undefined)
+      element = document;
+    var nodeList = element.querySelectorAll(selector);
+    var array = [];
+    for (var i = 0; i < nodeList.length; i++) {
+      array.push(nodeList[i]);
+    }
+    return array;
+  },
+  length: 0,
+  init: function init(selector) {
+    if (typeof(selector) == "string") {
+      this.elems = this._qsa(selector);
+    } else {
+      if (Array.isArray(selector)) {
+        this.elems = selector;
+      } else
+        this.elems = [selector];
+    }
+    this.length = this.elems.length;
+  },
+  get: function(i) {
+    if (i !== undefined)
+      return this.elems[i];
+    return this.elems;
+  },
+  bind: function(name, handler) {
+    this.elems.forEach(function(elem) {
+     elem.addEventListener(name, handler, false);
+    });
+  },
+  css: function(options) {
+    this.elems.forEach(function(elem) {
+      for (name in options)
+        elem.style.setProperty(name, options[name], null);
+    });
+  },
+  removeClass: function(name) {
+    this.elems.forEach(function(elem) {
+      var classes = elem.className.split(" ");
+      var index = classes.indexOf(name);
+      if (index != -1) {
+        classes.splice(index, 1);
+        elem.className = classes.join(" ");
+      }
+    });    
+  },
+  addClass: function(name) {
+    this.elems.forEach(function(elem) {
+      var classes = elem.className.split(" ");
+      var index = classes.indexOf(name);
+      if (index == -1) {
+        classes.push(name);
+        elem.className = classes.join(" ");
+      }
+    });
+  },
+  toggleClass: function(name) {
+    this.elems.forEach(function(elem) {
+      var classes = elem.className.split(" ");
+      var index = classes.indexOf(name);
+      if (index == -1)
+        classes.push(name);
+      else
+        classes.splice(index, 1);
+      elem.className = classes.join(" ");
+    });
+  },
+  text: function(text) {
+    if (text === undefined)
+      return this.elems[0].textContent;
+    this.elems.forEach(function(elem) {
+      elem.textContent = text;
+    });
+  },
+  find: function(selector) {
+    var self = this;
+    var array = [];
+    this.elems.forEach(function(elem) {
+      array = array.concat(self._qsa(selector, elem));
+    });
+    return new this.init(array);
+  },
+  each: function(cb) {
+    this.elems.forEach(function(elem) { cb.call(elem); });
+  }
+};
+
+$.fn.init.prototype = $.fn;
+
+function makeDraggable() {
+  var node = this;
+  var startX = 0;
+  var startY = 0;
+  var currX = 0;
+  var currY = 0;
+  var matrix = new WebKitCSSMatrix();
+
+  function updateInfo() {
+    //query.find(".info").text("curr: " + currX + ", " + currY + "\n" +
+    //                         "start: " + startX + ", " + startY);
+  }
+
+  function move() {
+    matrix = matrix.translate(currX - startX, currY - startY);
+    node.style.webkitTransform = matrix;
+  }
+
+  updateInfo();
+
+  $(node).bind("touchstart", function(event) {
+    event.preventDefault();
+    startX = event.targetTouches[0].pageX;
+    startY = event.targetTouches[0].pageY;
+    updateInfo();
+    $(this).addClass("active");
+  });
+
+  $(node).bind("touchmove", function(event) {
+    event.preventDefault();
+    currX = event.targetTouches[0].pageX;
+    currY = event.targetTouches[0].pageY;
+    move(this);
+    startX = currX;
+    startY = currY;
+    updateInfo();
+  });
+
+  $(node).bind("touchend", function(event) {
+    event.preventDefault();
+    $(this).removeClass("active");
+  });
+}
+
+$(window).bind("DOMContentLoaded", function() {
+  $(".letter").each(makeDraggable);
+});
+</script>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server.py	Sat May 01 17:39:57 2010 -0700
@@ -0,0 +1,16 @@
+import os
+import BaseHTTPServer
+import SimpleHTTPServer
+
+PORT = 8000
+
+def run(server_class=BaseHTTPServer.HTTPServer,
+        handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler,
+        port=PORT):
+    server_address = ('', port)
+    print "Serving files in '%s' on port %d." % (os.getcwd(), port)
+    httpd = server_class(server_address, handler_class)
+    httpd.serve_forever()
+
+if __name__ == '__main__':
+    run()