brite
Version:
DOM Centric Minimalistic MVC Framework
80 lines (59 loc) • 2.35 kB
JavaScript
;(function(){
// --------- Component Interface Implementation ---------- //
function DrawLayersPanel(){
}
DrawLayersPanel.prototype.create = function(data, config){
return $("#tmpl-" + this.name).render({});
}
DrawLayersPanel.prototype.postDisplay = function(){
var c = this;
refreshLayers.call(c);
c.draw = c.$element.bComponent("Draw");
// handle layer btap
c.$element.on("btap",".DrawLayersPanel-layer", function(){
var $layerDiv = $(this);
var index = $layerDiv.prevAll(".DrawLayersPanel-layer").length;
c.$element.trigger("Draw_DO_SELECT_LAYER",index);
});
// respond to layer event
c.draw.$element.on("Draw_LAYER_SELECT_CHANGE" + "." + c.cid, function(event,layeridx){
c.$element.find(".DrawLayersPanel-layer").removeClass("sel").eq(layeridx).addClass("sel");
});
c.draw.$element.on("Draw_XML_DOC_LAYERS_CHANGE" + "." + c.cid, function(event){
refreshLayers.call(c);
});
}
DrawLayersPanel.prototype.destroy = function(){
var c = this;
if (c.draw && c.draw.$element){
c.draw.$element.off("." + c.cid);
}
}
// --------- /Component Interface Implementation ---------- //
// --------- Component Private Methods --------- //
function refreshLayers(){
var c = this;
var draw = c.$element.bComponent("Draw");
// to preserve the selected index
var selectedIdx = c.$element.find(".DrawLayersPanel-layer.sel").prevAll(".DrawLayersPanel-layer").length;
var $xmlDoc = draw.getXmlDoc();
var idSeq = 0;
var layers = [];
$xmlDoc.find("layer").each(function(idx,layerXml){
var layer = {};
layer.name = "layer " + idSeq++;
layers.push(layer);
});
var contentHtml = $("#tmpl-DrawLayersPanel-layers").render({layers:layers});
var $newContent = $(contentHtml.trim());
// reset the selected state
$newContent.find(".DrawLayersPanel-layer").eq(selectedIdx).addClass("sel");
c.$element.empty().append($newContent);
}
// --------- /Component Private Methods --------- //
// --------- Component Registration --------- //
brite.registerComponent("DrawLayersPanel", null, function() {
return new DrawLayersPanel();
});
// --------- Component Registration --------- //
})();