cnl
Version:
183 lines (167 loc) • 5.15 kB
JavaScript
var Component, Event,
extend = require("extends__"),
hasProp = {}.hasOwnProperty;
Event = require('ecl/dist/event');
module.exports = Component = (function(superClass) {
extend(Component, superClass);
function Component() {
var fn, i, j, len, len1, ref, ref1, type;
Component.__super__.constructor.apply(this, arguments);
ref = ['grab', 'release', 'drag'];
fn = (function(_this) {
return function(type) {
_this.addListener({
type: type,
capture: true,
listener: function(event) {
var ref1;
if (!((ref1 = this.events) != null ? ref1[type] : void 0)) {
return event.cancel().stop();
}
}
});
return _this.addListener({
type: type,
capture: false,
listener: function(event) {
var ref1;
if (!((ref1 = this.events) != null ? ref1[type] : void 0)) {
return event.cancel().stop();
}
}
});
};
})(this);
for (i = 0, len = ref.length; i < len; i++) {
type = ref[i];
fn(type);
}
ref1 = ['grab', 'release', 'drag'];
for (j = 0, len1 = ref1.length; j < len1; j++) {
type = ref1[j];
this.addListener(type, this[type + "CaptureListener"], true);
this.addListener(type, this[type + "Listener"], false);
}
}
Component.prototype.mousemoveCaptureListener = function(event) {
var $, ref, ref1, ref2, ref3, ref4, regions;
Component.__super__.mousemoveCaptureListener.apply(this, arguments);
if (event) {
$ = this.___runtime;
this.state = null;
if ($.grab) {
this.state = 'active';
if ((ref = this.events) != null ? ref.drag : void 0) {
this.broadcastEvent(new Event({
type: 'drag',
x: event.x,
y: event.y,
offsetX: event.x - (((ref1 = $.dragEvent) != null ? ref1.x : void 0) || ((ref2 = $.grabEvent) != null ? ref2.x : void 0) || 0),
offsetY: event.y - (((ref3 = $.dragEvent) != null ? ref3.y : void 0) || ((ref4 = $.grabEvent) != null ? ref4.y : void 0) || 0)
}));
}
} else if (regions = event.regions) {
this.state = (regions.hover ? 'hover' : regions.normal ? 'normal' : void 0);
}
}
return this;
};
Component.prototype.mousedownCaptureListener = function(event) {
var i, len, name, ref, regions, state;
Component.__super__.mousedownCaptureListener.apply(this, arguments);
if (event && (regions = event.regions)) {
ref = ['active', 'hover', 'normal'];
for (i = 0, len = ref.length; i < len; i++) {
name = ref[i];
if (!regions[name]) {
continue;
}
state = name;
break;
}
if ((this.state = state || null)) {
event.target = this;
}
}
return this;
};
Component.prototype.mouseupCaptureListener = function(event) {
var $, i, len, name, ref, ref1, regions, state;
Component.__super__.mouseupCaptureListener.apply(this, arguments);
if (event) {
$ = this.___runtime;
if (regions = event.regions) {
ref = ['active', 'hover', 'normal'];
for (i = 0, len = ref.length; i < len; i++) {
name = ref[i];
if (!regions[name]) {
continue;
}
state = name;
break;
}
}
if ((this.state = state || null)) {
event.target = this;
}
if ($.grab) {
$.grab = false;
if ((ref1 = this.events) != null ? ref1.release : void 0) {
this.broadcastEvent($.releaseEvent = new Event({
type: 'release',
x: event.x,
y: event.y
}));
}
}
}
return this;
};
Component.prototype.mousedownListener = function(event) {
var $, ref;
Component.__super__.mousedownListener.apply(this, arguments);
if (event) {
if ((this.state === 'active') && ((ref = this.events) != null ? ref.grab : void 0)) {
($ = this.___runtime).grab = true;
$.dragEvent = null;
this.broadcastEvent(new Event({
type: 'grab',
x: event.x,
y: event.y
}));
}
}
return this;
};
Component.prototype.dragCaptureListener = function(event) {
if (event) {
this.___runtime.dragEvent = event;
this.localizeEventCoordinates(event);
}
return this;
};
Component.prototype.grabCaptureListener = function(event) {
if (event) {
this.___runtime.grabEvent = event;
this.localizeEventCoordinates(event);
}
return this;
};
Component.prototype.releaseCaptureListener = function(event) {
if (event) {
this.___runtime.releaseEvent = event;
this.localizeEventCoordinates(event);
}
return this;
};
Component.prototype.dragListener = function() {
return this;
};
Component.prototype.grabListener = function() {
return this;
};
Component.prototype.releaseListener = function() {
return this;
};
return Component;
})(require('./shape'));