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, 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 formatMetadata(data) { out = '
'; $.each(data, function(key, val) { if (typeof(val) == 'string' && key[0] != '_') { out = out + '
' + key + '
' + val; } else if (typeof(val) == 'object' && key != "geometry" && val != null) { if (key == 'properties') { $.each(val, function(attr, value){ out = out + '
' + attr + '
' + value; }) } else { out = out + '
' + key + '
' + val.join(', '); } } }); out = out + '
'; 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, render: render, formatMetadata:formatMetadata, getBaseURL:getBaseURL, resetForm: resetForm, delay: delay, persist: persist }; }();