From a6daca00f6b61cfa2e5dafff92e01a8d5ae3730a Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sat, 15 Jan 2011 21:46:01 +0100 Subject: [PATCH] fixed bug on duplicate uuids via url parameter adding multiple uuids per url --- htdocs/frontend/javascripts/frontend.js | 18 ++++++++++------- htdocs/frontend/javascripts/init.js | 2 +- .../javascripts/jquery/jquery-extensions.js | 20 ++++++++++++++----- htdocs/frontend/javascripts/uuid.js | 5 ++--- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/htdocs/frontend/javascripts/frontend.js b/htdocs/frontend/javascripts/frontend.js index 09bf440..e6ef001 100644 --- a/htdocs/frontend/javascripts/frontend.js +++ b/htdocs/frontend/javascripts/frontend.js @@ -50,6 +50,7 @@ vz.wui.init = function() { $('#entity-subscribe input[type=button]').click(function() { try { vz.uuids.add($('#entity-subscribe input[type=text]').val()); + vz.uuids.save(); $('#entity-subscribe input[type=text]').val(''); $('#entity-add').dialog('close'); vz.entities.loadDetails(); @@ -312,6 +313,7 @@ vz.entities.show = function() { .attr('alt', 'delete') .bind('click', entity, function(event) { vz.uuids.remove(event.data.uuid); + vz.uuids.save(); vz.entities.loadDetails(); }) ); @@ -435,24 +437,26 @@ vz.load = function(context, identifier, data, success) { /** * Parse URL GET parameters */ -vz.parseUrlVars = function() { - var vars = $.getUrlVars(); +vz.parseUrlParams = function() { + var vars = $.getUrlParams(); for (var key in vars) { if (vars.hasOwnProperty(key)) { switch (key) { case 'uuid': // add optional uuid from url - try { - vz.uuids.add(vars[key]); - } catch (exception) { - vz.wui.dialogs.exception(exception); - } + var uuids = (typeof vars[key] == 'string') ? [vars[key]] : vars[key]; // handle multiple uuids + uuids.each(function(index, uuid) { + try { vz.uuids.add(uuid); } catch (exception) { /* ignore exception */ } + }); break; + case 'from': vz.options.plot.xaxis.min = parseInt(vars[key]); break; + case 'to': vz.options.plot.xaxis.max = parseInt(vars[key]); break; + case 'debug': $.getScript('javascripts/firebug-lite.js'); break; diff --git a/htdocs/frontend/javascripts/init.js b/htdocs/frontend/javascripts/init.js index 26d3dbf..81e3ded 100644 --- a/htdocs/frontend/javascripts/init.js +++ b/htdocs/frontend/javascripts/init.js @@ -63,7 +63,7 @@ $(document).ready(function() { vz.definitions.load(); vz.uuids.load(); vz.options.load(); - vz.parseUrlVars(); + vz.parseUrlParams(); // initialize user interface vz.wui.init(); diff --git a/htdocs/frontend/javascripts/jquery/jquery-extensions.js b/htdocs/frontend/javascripts/jquery/jquery-extensions.js index e2978cc..c461e0c 100644 --- a/htdocs/frontend/javascripts/jquery/jquery-extensions.js +++ b/htdocs/frontend/javascripts/jquery/jquery-extensions.js @@ -29,18 +29,28 @@ * Get URL parameters */ $.extend( { - getUrlVars : function() { - var vars = [], hash; + getUrlParams : function() { + var vars = {}, hash; var hashes = window.location.href.slice( window.location.href.indexOf('?') + 1).split('&'); for (var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); - vars[hash[0]] = hash[1]; + switch (typeof vars[hash[0]]) { + case 'undefined': + vars[hash[0]] = hash[1]; + break; + + case 'string': + vars[hash[0]] = Array(vars[hash[0]]); + + case 'object': + vars[hash[0]].push(hash[1]); + } } return vars; }, - getUrlVar : function(name) { - return $.getUrlVars()[name]; + getUrlParam : function(name) { + return $.getUrlParams()[name]; } }); diff --git a/htdocs/frontend/javascripts/uuid.js b/htdocs/frontend/javascripts/uuid.js index b343b22..2e5cf99 100644 --- a/htdocs/frontend/javascripts/uuid.js +++ b/htdocs/frontend/javascripts/uuid.js @@ -31,7 +31,6 @@ vz.uuids.add = function(uuid) { if (this.validate(uuid)) { if (!this.contains(uuid)) { this.push(uuid); - this.save(); } else { throw new Exception('UUIDException', 'UUID already added: ' + uuid); @@ -48,7 +47,6 @@ vz.uuids.add = function(uuid) { vz.uuids.remove = function(uuid) { if (this.contains(uuid)) { this.splice(this.indexOf(uuid), 1); // remove uuid from array - this.save(); } else { throw new Exception('UUIDException', 'UUID unkown: ' + uuid); @@ -66,7 +64,8 @@ vz.uuids.validate = function(uuid) { * Save uuids as cookie */ vz.uuids.save = function() { - $.setCookie('vz_uuids', this.join(';')); + var expires = new Date(new Date().getTime() + 31536e6); // expires in a year + $.setCookie('vz_uuids', this.join(';'), {expires: expires}); }; /**