168 lines
4.3 KiB
JavaScript
168 lines
4.3 KiB
JavaScript
var util = function() {
|
|
|
|
$.fn.serializeObject = function() {
|
|
var o = {};
|
|
var a = this.serializeArray();
|
|
$.each(a, function() {
|
|
if (o[this.name]) {
|
|
if (!o[this.name].push) {
|
|
o[this.name] = [o[this.name]];
|
|
}
|
|
o[this.name].push(this.value || '');
|
|
} else {
|
|
o[this.name] = this.value || '';
|
|
}
|
|
});
|
|
return o;
|
|
};
|
|
|
|
function inURL(url, str) {
|
|
var exists = false;
|
|
if ( url.indexOf( str ) > -1 ) {
|
|
exists = true;
|
|
}
|
|
return exists;
|
|
}
|
|
|
|
function show( thing ) {
|
|
$('.' + thing ).show();
|
|
$('.' + thing + '-overlay').show();
|
|
}
|
|
|
|
function hide( thing ) {
|
|
$('.' + thing ).hide();
|
|
$('.' + thing + '-overlay').hide();
|
|
}
|
|
|
|
function position( thing, elem, offset ) {
|
|
var position = $(elem.target).offset();
|
|
if (offset) {
|
|
if (offset.top) position.top += offset.top;
|
|
if (offset.left) position.left += offset.left;
|
|
}
|
|
$('.' + thing + '-overlay').show().click(function(e) {
|
|
$(e.target).hide();
|
|
$('.' + thing).hide();
|
|
});
|
|
$('.' + thing).show().css({top: position.top + $(elem.target).height(), left: position.left});
|
|
}
|
|
|
|
function render( template, target, options ) {
|
|
if ( !options ) options = {data: {}};
|
|
if ( !options.data ) options = {data: options};
|
|
var html = $.mustache( $( "#" + template + "Template" ).html(), options.data ),
|
|
targetDom = $( "#" + target );
|
|
if( options.append ) {
|
|
targetDom.append( html );
|
|
} else {
|
|
targetDom.html( html );
|
|
}
|
|
if (template in app.after) app.after[template]();
|
|
}
|
|
|
|
function notify( message, options ) {
|
|
if (!options) var options = {};
|
|
$('#notification-container').show();
|
|
$('#notification-message').text(message);
|
|
if (!options.loader) $('.notification-loader').hide();
|
|
if (options.loader) $('.notification-loader').show();
|
|
if (!options.persist) setTimeout(function() { $('#notification-container').hide() }, 3000);
|
|
}
|
|
|
|
function formatMetadata(data) {
|
|
out = '<dl>';
|
|
$.each(data, function(key, val) {
|
|
if (typeof(val) == 'string' && key[0] != '_') {
|
|
out = out + '<dt>' + key + '<dd>' + val;
|
|
} else if (typeof(val) == 'object' && key != "geometry" && val != null) {
|
|
if (key == 'properties') {
|
|
$.each(val, function(attr, value){
|
|
out = out + '<dt>' + attr + '<dd>' + value;
|
|
})
|
|
} else {
|
|
out = out + '<dt>' + key + '<dd>' + val.join(', ');
|
|
}
|
|
}
|
|
});
|
|
out = out + '</dl>';
|
|
return out;
|
|
}
|
|
|
|
function getBaseURL(url) {
|
|
var baseURL = "";
|
|
if ( inURL(url, '_design') ) {
|
|
if (inURL(url, '_rewrite')) {
|
|
var path = url.split("#")[0];
|
|
if (path[path.length - 1] === "/") {
|
|
baseURL = "";
|
|
} else {
|
|
baseURL = '_rewrite/';
|
|
}
|
|
} else {
|
|
baseURL = '_rewrite/';
|
|
}
|
|
}
|
|
return baseURL;
|
|
}
|
|
|
|
var persist = {
|
|
restore: function() {
|
|
$('.persist').each(function(i, el) {
|
|
var inputId = $(el).attr('id');
|
|
if(localStorage.getItem(inputId)) $('#' + inputId).val(localStorage.getItem(inputId));
|
|
})
|
|
},
|
|
save: function(id) {
|
|
localStorage.setItem(id, $('#' + id).val());
|
|
},
|
|
clear: function() {
|
|
$('.persist').each(function(i, el) {
|
|
localStorage.removeItem($(el).attr('id'));
|
|
})
|
|
},
|
|
init: function() {
|
|
if (Modernizr.localstorage) {
|
|
util.persist.restore();
|
|
|
|
$('.persist').keyup(function(e) {
|
|
var inputId = $(e.target).attr('id');
|
|
util.persist.save(inputId);
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
// simple debounce adapted from underscore.js
|
|
function delay(func, wait) {
|
|
return function() {
|
|
var context = this, args = arguments;
|
|
var throttler = function() {
|
|
delete app.timeout;
|
|
func.apply(context, args);
|
|
};
|
|
if (!app.timeout) app.timeout = setTimeout(throttler, wait);
|
|
};
|
|
};
|
|
|
|
function resetForm(form) {
|
|
$(':input', form)
|
|
.not(':button, :submit, :reset, :hidden')
|
|
.val('')
|
|
.removeAttr('checked')
|
|
.removeAttr('selected');
|
|
}
|
|
|
|
return {
|
|
inURL: inURL,
|
|
show: show,
|
|
hide: hide,
|
|
position: position,
|
|
render: render,
|
|
notify: notify,
|
|
formatMetadata:formatMetadata,
|
|
getBaseURL:getBaseURL,
|
|
resetForm: resetForm,
|
|
delay: delay,
|
|
persist: persist
|
|
};
|
|
}(); |