radio/libjs/wController/image.js

70 lines
1.8 KiB
JavaScript

"use strict";
var Address = require("../wType/address");
var Controller = require("./controller");
var File = require("./file/file");
var Image = Controller.inherit({
"className": "Image",
"constructor": function(addr) {
Controller.fn.constructor.call(this, addr);
this.data = undefined;
this._hasCtrl = false;
this._fileCtrl = undefined;
this._need = 0;
this.addHandler("get");
},
"dontNeedData": function() {
--this._need;
},
"getMimeType": function () {
return this._fileCtrl.getMimeType();
},
"hasData": function() {
if (this._hasCtrl) {
return this._fileCtrl.hasData();
}
return false;
},
"_h_get": function(ev) {
var data = ev.getData();
if (this._hasCtrl) {
this.removeForeignController(this._fileCtrl);
this._fileCtrl.destructor();
delete this._fileCtrl;
this._hasCtrl = false;
}
var strId = data.at("data").toString();
if (strId !== "0") {
this._fileCtrl = new File(new Address(["images", strId]));
this.addForeignController("Corax", this._fileCtrl);
this._fileCtrl.on("data", this._onControllerData, this);
this._hasCtrl = true;
if (this._need > 0) {
this._fileCtrl.needData();
}
} else {
this.trigger("clear");
}
},
"needData": function() {
if (this._need === 0 && this._hasCtrl) {
this._fileCtrl.needData();
}
++this._need;
},
"_onControllerData": function() {
this.data = this._fileCtrl.data;
this.trigger("data");
}
});
module.exports = Image;