defaulted layers to off in layer explorer

This commit is contained in:
Andrew W Hill 2012-05-16 17:03:29 -07:00
parent a33ce36ad4
commit 7aeedbd6ab
3 changed files with 54 additions and 179 deletions

View File

@ -16,7 +16,7 @@
<script type="text/javascript" src="lib/backbone.js"></script>
<script type="text/javascript" src="lib/class.js"></script>
<script type="text/javascript" src="lib/backbone.cartodb.js"></script>
<script type="text/javascript" src="src/wri.js"></script>
<script type="text/javascript" src="src/gfw.js"></script>
<script type="text/javascript">
var gui;
function initialize() {
@ -32,14 +32,14 @@
dat.GUI.DEFAULT_WIDTH = 300;
gui = new dat.GUI();
WRI(function(env) {
WRI.app = new env.app.Instance(map, {
GFW(function(env) {
GFW.app = new env.app.Instance(map, {
user : 'wri-01',
layerTable : 'layerinfo',
logging : true
});
WRI.app.run();
WRI.env = env;
GFW.app.run();
GFW.env = env;
});
}

View File

@ -1,50 +1,50 @@
function WRI() {
function GFW() {
var args = Array.prototype.slice.call(arguments),
callback = args.pop(),
modules = (args[0] && typeof args[0] === "string") ? args : args[0],
config,
i;
if (!(this instanceof WRI)) {
return new WRI(modules, callback);
if (!(this instanceof GFW)) {
return new GFW(modules, callback);
}
if (!modules || modules === '*') {
modules = [];
for (i in WRI.modules) {
if (WRI.modules.hasOwnProperty(i)) {
for (i in GFW.modules) {
if (GFW.modules.hasOwnProperty(i)) {
modules.push(i);
}
}
}
for (i = 0; i < modules.length; i += 1) {
WRI.modules[modules[i]](this);
GFW.modules[modules[i]](this);
}
callback(this);
return this;
};
WRI.modules = {};
GFW.modules = {};
WRI.modules.app = function(wri) {
GFW.modules.app = function(gfw) {
wri.app = {};
gfw.app = {};
wri.app.Instance = Class.extend(
gfw.app.Instance = Class.extend(
{
init: function(map, options) {
this.options = _.defaults(options, {
user : 'wri-01',
user : 'gfw-01',
layerTable : 'layerinfo',
});
this._precision = 2;
wri.log.enabled = options ? options.logging: false;
gfw.log.enabled = options ? options.logging: false;
this._map = map;
@ -54,7 +54,7 @@ WRI.modules.app = function(wri) {
this._cartodb = Backbone.CartoDB({user: this.options.user});
this.datalayers = new wri.datalayers.Engine(this._cartodb, options.layerTable, this._map);
this.datalayers = new gfw.datalayers.Engine(this._cartodb, options.layerTable, this._map);
this._setHash();
@ -63,13 +63,11 @@ WRI.modules.app = function(wri) {
run: function() {
this._setupListeners();
this.update();
wri.log.info('App is now running!');
gfw.log.info('App is now running!');
},
_setHash: function(){
if (location.hash.split("/").length != 3){
var hash = "#5/0/110"
console.log("HASH RESET");
console.log(location.hash);
location.replace(hash);
this.lastHash = hash;
}
@ -127,20 +125,20 @@ WRI.modules.app = function(wri) {
);
};
WRI.modules.maplayer = function(wri) {
wri.maplayer = {};
wri.maplayer.Engine = Class.extend(
GFW.modules.maplayer = function(gfw) {
gfw.maplayer = {};
gfw.maplayer.Engine = Class.extend(
{
init: function(layer, map) {
this.layer = layer;
this._map = map;
this._bindDisplay(new wri.maplayer.Display());
this._bindDisplay(new gfw.maplayer.Display());
this._options = this._display.getOptions(this.layer.get('tileurl'), this.layer.get('ispng'));
// this._boundingbox = this.layer.get('the_geom');
var sw = new google.maps.LatLng(this.layer.get('ymin'), this.layer.get('xmin'));
var ne = new google.maps.LatLng(this.layer.get('ymax'),this.layer.get('xmax'));
this._bounds = new google.maps.LatLngBounds(sw, ne);
wri.log.info(this._options.getTileUrl({x: 3, y: 4},3));
gfw.log.info(this._options.getTileUrl({x: 3, y: 4},3));
this._displayed = false;
this._addControll();
this._maptype = new google.maps.ImageMapType(this._options);
@ -150,6 +148,11 @@ WRI.modules.maplayer = function(wri) {
this._setupListeners();
this._handleLayer();
if (this.layer.get('title') != 'FORMA'){
this.layer.attributes['visible'] = false;
this._toggleLayer();
}
},
_setupListeners: function(){
var that = this;
@ -205,11 +208,11 @@ WRI.modules.maplayer = function(wri) {
if(this.layer.get('visible') && !this._displayed && this._inView()){
this._displayed = true;
this._map.overlayMapTypes.setAt(this._tileindex, this._maptype);
wri.log.info(this.layer.get('title')+ " added at "+this._tileindex)
gfw.log.info(this.layer.get('title')+ " added at "+this._tileindex)
} else if (this._displayed && !this._inView()){
this._displayed = false;
this._map.overlayMapTypes.setAt(this._tileindex, null);
wri.log.info(this.layer.get('title')+ " removed at "+this._tileindex)
gfw.log.info(this.layer.get('title')+ " removed at "+this._tileindex)
}
},
_addControll: function(){
@ -220,7 +223,7 @@ WRI.modules.maplayer = function(wri) {
this.toggle
.add(this.layer.attributes, 'visible')
.onChange(function(value) {
wri.log.info(value);
gfw.log.info(value);
that._toggleLayer();
});
this.toggle
@ -248,11 +251,11 @@ WRI.modules.maplayer = function(wri) {
_toggleLayer: function(){
var that = this;
if (this.layer.get('visible') == false){
wri.log.info('LAYER OFF');
gfw.log.info('LAYER OFF');
this._map.overlayMapTypes.setAt(this._tileindex, null);
//this._map.overlayMapTypes.setAt(this._tileindex, null);
} else {
wri.log.info('LAYER ON');
gfw.log.info('LAYER ON');
if(this._inView()){
this._displayed = true;
this._map.overlayMapTypes.setAt(this._tileindex, this._maptype);
@ -260,13 +263,13 @@ WRI.modules.maplayer = function(wri) {
}
}
});
wri.maplayer.Display = Class.extend(
gfw.maplayer.Display = Class.extend(
{
/**
* Constructs a new Display with the given DOM element.
*/
init: function() {
wri.log.info('displayed');
gfw.log.info('displayed');
},
/**
@ -302,9 +305,9 @@ WRI.modules.maplayer = function(wri) {
);
}
WRI.modules.datalayers = function(wri) {
wri.datalayers = {};
wri.datalayers.Engine = Class.extend(
GFW.modules.datalayers = function(gfw) {
gfw.datalayers = {};
gfw.datalayers.Engine = Class.extend(
{
init: function(CartoDB, layerTable, map) {
this._map = map;
@ -328,9 +331,9 @@ WRI.modules.datalayers = function(wri) {
});
},
_addLayer: function(p){
wri.log.warn('only showing baselayers for now');
gfw.log.warn('only showing baselayers for now');
//if (p.get('category')=='baselayer'){
var layer = new wri.maplayer.Engine(p, this._map);
var layer = new gfw.maplayer.Engine(p, this._map);
this._dataarray.push(layer);
this._bycartodbid[p.get('cartodb_id')] = layer;
this._bytitle[p.get('title')] = layer;
@ -340,33 +343,33 @@ WRI.modules.datalayers = function(wri) {
};
/**
* Logging module that writes log messages to the console and to the Speed
* Logging module that gfwtes log messages to the console and to the Speed
* Tracer API. It contains convenience methods for info(), warn(), error(),
* and todo().
*
*/
WRI.modules.log = function(wri) {
wri.log = {};
GFW.modules.log = function(gfw) {
gfw.log = {};
wri.log.info = function(msg) {
wri.log._write('INFO: ' + msg);
gfw.log.info = function(msg) {
gfw.log._gfwte('INFO: ' + msg);
};
wri.log.warn = function(msg) {
wri.log._write('WARN: ' + msg);
gfw.log.warn = function(msg) {
gfw.log._gfwte('WARN: ' + msg);
};
wri.log.error = function(msg) {
wri.log._write('ERROR: ' + msg);
gfw.log.error = function(msg) {
gfw.log._gfwte('ERROR: ' + msg);
};
wri.log.todo = function(msg) {
wri.log._write('TODO: '+ msg);
gfw.log.todo = function(msg) {
gfw.log._gfwte('TODO: '+ msg);
};
wri.log._write = function(msg) {
gfw.log._gfwte = function(msg) {
var logger = window.console;
if (wri.log.enabled) {
if (gfw.log.enabled) {
if (logger && logger.markTimeline) {
logger.markTimeline(msg);
}

View File

@ -1,128 +0,0 @@
var MAPDIG = {};
MAPDIG.create = function(carto_user, table_name, ignore, default_width) {
var me = {
generated_sql: 'SELECT * FROM ' + table_name,
SQL: 'SELECT * FROM ' + table_name,
table: table_name,
carto_user: carto_user,
ignore: ['cartodb_id', 'the_geom', 'the_geom_webmercator', 'updated_at', 'created_at'].concat(ignore),
numbers: {},
strings: {},
origin_numbers: {},
default_width: default_width
};
me.toSQL = function(){
var sql = this.SQL;
var filter_sql = [];
_.each(this.numbers, function(val,key){
if (this.origin_numbers[key] != val){
var root = key.split(' ')[0]
var cap = key.split(' ')[1]
if (cap == 'min'){
filter_sql.push(root + '>=' + val);
} else {
filter_sql.push(root + '<=' + val)
}
}
}, this);
_.each(this.strings, function(val,key){
if (val != '*'){
filter_sql.push(key + ' LIKE \'%25' + val + '%25\'');
}
}, this);
return ((filter_sql.length < 1) ? sql : sql + ' WHERE ' + filter_sql.join(' AND '));
};
me.init = function(cartodb_layer){
var c, n1, s1, f1, tmp_dat; // holders for event handlers and reflected columns
var that = this;
that.layer = cartodb_layer;
dat.GUI.DEFAULT_WIDTH = that.default_width;
that.gui = new dat.GUI();
// Direct SQL input
c = that.gui.add(that, 'generated_sql').name('Map SQL');
c.onFinishChange(function(value) { that.executeSQL(value); });
// Attempt to reflect table structure and attach controls and events for all columns found
// Currently does this long hand as cannot access schema. dumb, but works
$.getJSON('http://'+that.carto_user+'.cartodb.com/api/v2/sql/?q=select%20*%20from%20' + that.table +'%20limit%201', function(data){
// grab the top value in each col, strip ignores
var cols = [];
_.each(data.rows[0],function(val,key){
if (!_.include(that.ignore, key)){
cols.push('max("'+key+'") as ' + key);
}
});
// sample a value from each column to determine GUI element type
$.getJSON('http://'+that.carto_user+'.cartodb.com/api/v2/sql/?q=select%20'+cols.join(',') +'%20from%20' + that.table +'%20limit%201', function(data){
n1 = that.gui.addFolder('Numeric filter');
s1 = that.gui.addFolder('Text filter');
_.each(data.rows[0], function(val,key){
if(_.isNumber(val)){
$.getJSON('http://'+that.carto_user+'.cartodb.com/api/v2/sql/?q=select min("'+key+'"), max("'+key+'") from ' + that.table, function(data){
if (data.rows[0].max > data.rows[0].min){
//f1 = n1.addFolder(key);
that.numbers[key+' min'] = data.rows[0].min;
that.numbers[key+' max'] = data.rows[0].max;
that.origin_numbers[key+' min'] = data.rows[0].min;
that.origin_numbers[key+' max'] = data.rows[0].max;
c = n1.add(that.numbers, key+' min', data.rows[0].min, data.rows[0].max);
c.onFinishChange(function(value) { that.renderSQL(); });
c = n1.add(that.numbers, key+' max', data.rows[0].min, data.rows[0].max);
c.onFinishChange(function(value) { that.renderSQL(); });
}
});
}
// test if it's massive - if so, text box, else dropdown.
if(_.isString(val)){
$.getJSON('http://'+that.carto_user+'.cartodb.com/api/v2/sql/?q=select count(distinct("'+key+'")) from ' + that.table, function(data){
if (data.rows[0].count <= 1000 && data.rows[0].count > 0){
$.getJSON('http://'+that.carto_user+'.cartodb.com/api/v2/sql/?q=select distinct("'+key+'") as ele from ' + that.table + ' ORDER BY ELE ASC', function(data){
tmp_dat = _.map(data.rows, function(r){ return r.ele; });
tmp_dat.unshift('*');
that.strings[key] = '*';
c = s1.add(that.strings, key, tmp_dat );
c.onFinishChange(function(value) { that.renderSQL(); });
});
} else {
that.strings[key] = '*';
c = s1.add(that.strings,key);
c.onFinishChange(function(value) { that.renderSQL(); });
}
});
}
});
});
});
// disabled as buggy
//this.gui.remember(this);
};
me.executeSQL = function(sql){
this.layer.update(sql);
};
me.renderSQL = function(){
this.generated_sql = this.toSQL();
for (var i in this.gui.__controllers) {
this.gui.__controllers[i].updateDisplay();
}
this.layer.update(this.generated_sql);
};
return me;
};