Skip to content
Browse files

More code refactoring.

  • Loading branch information...
1 parent 5d380bd commit 2a74e9f9c7455111e44109aa964258573f050006 Denis Kokin committed Aug 9, 2011
Showing with 84 additions and 14 deletions.
  1. +84 −14 js/100by10x10_grid.js
View
98 js/100by10x10_grid.js
@@ -23,10 +23,24 @@
$.extend(Grid.prototype, {
/**
+ * Таблица соответствий кодов нажимаемых на клавиатуре клавиш
+ * предполагаемым действиям с таблицей
+ */
+ keymap: {
+ 37: this.moveLeft,
+ 38: this.moveUp,
+ 39: this.moveRight,
+ 40: this.moveDown,
+ 27: this.removeGrid
+ },
+
+ /**
* Конструктор
*/
initialize: function(options) {
- this.addGrid();
+ this
+ .addGrid()
+ .bindGrid();
},
/**
@@ -78,49 +92,105 @@
},
/**
+ * Навешивает события на сетку
+ */
+ bindGrid: function() {
+ $.attachEventHandler(document, 'keydown', function(event) {
+ var keyCode = event.keyCode;
+
+ if (this.keymap[keyCode] && typeof this.keymap[keyCode] === 'function') {
+ this.keymap[keyCode]();
+ }
+ }, this);
+
+ return this;
+ },
+
+ /**
* Удаляет сетку
*/
removeGrid: function() {
-
+ console.log('Grid removed');
}
});
return new Grid(container, options);
};
-
-
-
- var each = function(obj, iterator, context) {
- var breaker = {};
- for (var key in obj) {
- if (hasOwnProperty.call(obj, key)) {
- if (iterator.call(context, obj[key], key, obj) === breaker) return;
- }
- }
- };
+
/**
* Наш собственный ручной "jQuery" с блекджеком и маркитантками
*/
var $ = function() {
+ /**
+ * Применяет контекст к методу
+ * @param {!Object} obj - контекст
+ * @param {function(?Object)} method - метод
+ * @return {Object}
+ */
+ var _contextOf = function(obj, method) {
+ return function() {
+ method.apply(obj, arguments);
+ };
+ },
+
+ /**
+ * Итератор по объекту
+ * @param {!Object} obj - объект
+ * @param {function(?Object)} method - метод для итерирования
+ * @param {?Object} context - контекст выполнения итератора
+ */
+ _each = function(obj, iterator, context) {
+ var breaker = {};
+
+ for (var key in obj) {
+ if (hasOwnProperty.call(obj, key)) {
+ if (iterator.call(context, obj[key], key, obj) === breaker) return;
+ }
+ }
+ };
+
return {
/**
* Расширяет текущий объект данными объекта-источника
* @param {!Object} obj - источник
*/
extend: function(obj) {
- each(Array.prototype.slice.call(arguments, 1), function(source) {
+ _each(Array.prototype.slice.call(arguments, 1), function(source) {
for (var prop in source) {
if (source[prop] !== void 0) obj[prop] = source[prop];
}
});
return obj;
+ },
+
+ /**
+ * Навешивает событие, сохраняя контекст
+ * @param {!Object} element - элемент-источник события
+ * @param {string} eventString - имя события
+ * @param {function(?Object)} - обработчик события
+ * @param {?Object} - контекст выполнения обработчика
+ */
+ attachEventHandler: function(element, eventString, handler, context) {
+ if (typeof context != 'undefined' && context) {
+ if (element.addEventListener) { // W3C DOM
+ element.addEventListener(eventString, _contextOf(context, handler), false);
+ } else if (element.attachEvent) {// IE DOM
+ element.attachEvent('on' + eventString, _contextOf(context, handler));
+ }
+ } else {
+ if (element.addEventListener) {// W3C DOM
+ element.addEventListener(eventString, handler, false);
+ } else if (element.attachEvent) {// IE DOM
+ element.attachEvent('on' + eventString, handler);
+ }
+ }
}
}

0 comments on commit 2a74e9f

Please sign in to comment.
Something went wrong with that request. Please try again.