FIX #74
[euphorik.git] / js / fragment.js
1 // coding: utf-8
2 // Copyright 2008 Grégory Burri
3 //
4 // This file is part of Euphorik.
5 //
6 // Euphorik is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // Euphorik is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with Euphorik. If not, see <http://www.gnu.org/licenses/>.
18
19 /**
20 * Gestion du fragment d'url, permet de le modifier en direct.
21 */
22 Fragment = function() {
23 var thisFragment = this;
24 // remplacement des codes de type %22 (en hexa)
25 var replaceHtmlCode = function(str) {
26 return str.replace(/%(\d\d)/g, function(text, code) {
27 return String.fromCharCode(parseInt(code, 16));
28 });
29 };
30 this.fragments = {};
31 if (!window.location.hash) {
32 return;
33 }
34 try {
35 var fragmentsStr = replaceHtmlCode(window.location.hash.slice(1)).split(";");
36 fragmentsStr.each(function(i, tuple) {
37 tuple = tuple.split("=");
38 thisFragment.fragments[tuple[0]] = JSON.parse(tuple[1]);
39 });
40 } catch(error) {
41 ;; console.log(error);
42 }
43 };
44
45 Fragment.prototype.setVal = function(name, val) {
46 this.fragments[name] = val;
47 };
48
49 Fragment.prototype.getVal = function(name) {
50 return this.fragments[name];
51 };
52
53 Fragment.prototype.delVal = function(name) {
54 delete this.fragments[name];
55 };
56
57 Fragment.prototype.eraseAllVal = function() {
58 this.fragments = [];
59 };
60
61 Fragment.prototype.each = function(fun) {
62 objectEach(this.fragments, function(name, val) {
63 fun(name, val);
64 });
65 };
66
67 Fragment.prototype.write = function() {
68 var fragmentsStr = "";
69 var first = true;
70 objectEach(this.fragments, function(name, val) {
71 fragmentsStr += (first ? "" : ";") + name + "=" + JSON.stringify(val);
72 first = false;
73 });
74 window.location.hash = fragmentsStr;
75 };