/attachments/script/util.js
JavaScript | 201 lines | 184 code | 16 blank | 1 comment | 43 complexity | a4c19c9bcb1aa5c40d664c154934b7b3 MD5 | raw file
- 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 registerEmitter() {
- var Emitter = function(obj) {
- this.emit = function(obj, channel) {
- if (!channel) var channel = 'data';
- this.trigger(channel, obj);
- };
- };
- MicroEvent.mixin(Emitter);
- app.emitter = new Emitter();
- }
-
- function listenFor(keys) {
- var shortcuts = { // from jquery.hotkeys.js
- 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
- 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
- 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
- 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
- 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
- 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
- 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
- }
- window.addEventListener("keyup", function(e) {
- var pressed = shortcuts[e.keyCode];
- if(_.include(keys, pressed)) app.emitter.emit("keyup", pressed);
- }, false);
- }
-
- function observeExit(elem, callback) {
- var cancelButton = elem.find('.cancelButton');
- app.emitter.on('esc', function() {
- cancelButton.click();
- app.emitter.clear('esc');
- });
- cancelButton.click(callback);
- }
-
- 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:first" ).html(), options.data );
- if (target instanceof jQuery) {
- var targetDom = target;
- } else {
- var targetDom = $( "." + target + ":first" );
- }
- 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'));
- })
- }
- }
-
- // 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,
- registerEmitter: registerEmitter,
- listenFor: listenFor,
- show: show,
- hide: hide,
- position: position,
- render: render,
- notify: notify,
- observeExit: observeExit,
- formatMetadata: formatMetadata,
- getBaseURL: getBaseURL,
- resetForm: resetForm,
- delay: delay,
- persist: persist
- };
- }();