comparison gis_gui/lib/blocks.js @ 63:7f008e782563

add gui files to product via FileSystemSite
author casties
date Fri, 05 Nov 2010 18:52:55 +0100
parents
children 2f477270cc0c
comparison
equal deleted inserted replaced
62:3905385c8854 63:7f008e782563
1 /*
2 * fallback for console.log calls
3 */
4 if (typeof(console) == 'undefined') {
5 console = {
6 log : function(){},
7 debug : function(){},
8 error : function(){},
9 }
10 }
11
12 function defined(x) {
13 // returns if x is defined
14 return (typeof arguments[0] != "undefined");
15 }
16
17 /*
18 * guiBlocks base
19 */
20 function guiBlocks(container) {
21 // list of blocks
22 this.blocks = [];
23 this.containerElement = container;
24 return this;
25 }
26 //var guiBlocks = new Object();
27
28 /*
29 * Block base class
30 */
31 guiBlocks.Block = function(id, element) {
32 this.id = id; // the blocks html id
33 this.element = element; // the html dom element
34 this.storeId = null; // the id in online storage
35 this.params = new Object(); // parameters to store
36 return this;
37 };
38
39 // create a new block and add it to the current workspaces stack
40 guiBlocks.prototype.addBlock = function(url, baseId, params, whenDone) {
41 // old version compatibility
42 if (typeof(params) == "function") {
43 whenDone = params;
44 }
45 // add title to url
46 var newblock = $("<div>Block loading...</div>");
47 var newid=baseId+"_"+randomString();
48 var container = this.containerElement;
49 console.debug("addblock newid="+newid);
50 newblock.hide();
51 newblock.load(url, function() {
52 // after load function
53 console.debug("addblock after load block");
54 console.debug(container);
55 $(this).find(".block").attr("id",newid);
56 $(this).appendTo(container);
57 // chain done function
58 if (typeof(whenDone) == "function") {
59 // chain whenDone
60 whenDone();
61 } else {
62 // default after load function
63 $(this).fadeIn();
64 };
65
66 });
67 // create new Block object
68 var block = new guiBlocks.Block(newid, newblock);
69 // add parameters
70 if (typeof(params) != "object") {
71 // create new params
72 params = {"id": newid};
73 } else if (typeof(params.id) == "undefined") {
74 // must be new block (with params)
75 params.id = newid;
76 }
77 block.params = params;
78 // add to list of blocks
79 this.blocks.push(block);
80 return block;
81 }
82
83 guiBlocks.prototype.getBlock = function(id) {
84 for (b in this.blocks) {
85 if (b.id == id) {
86 return b;
87 }
88 }
89 return null;
90 }
91
92 /*
93 guiBlocks.prototype.getStoreItem = function(tag,type,item) {
94 // get item from online storage
95 jQuery.get();
96 }
97 */
98
99 guiBlocks.prototype.loadListOfItems = function(storeTag,storeType,callback) {
100 // loads list of id and type objects and executes callback function
101 var url = "../db/RESTjson/db/public/gui_objects/"+escape(storeTag)+"/"+storeType+"?recursive=true";
102 jQuery.getJSON(url,callback);
103 }
104
105
106 guiBlocks.Block.prototype.storeBlock = function(storeTag) {
107 var storeType = this.params.type;
108 var storeItem = this.params.id;
109 var url = "../db/RESTjson/db/public/gui_objects/"+escape(storeTag)+"/"+storeType+"/"+storeItem;
110 var ds = JSON.stringify(this.params);
111 jQuery.ajax({
112 type: "PUT",
113 url: url,
114 data: ds,
115 success: function(msg){
116 console.debug("PUT success msg=",msg);
117 this.storeId = storeItem;
118 }
119 });
120 };
121
122
123
124 // collapse the block so that only its titlebar is visible
125 function foldBlock(segment){
126 if (! segment) {
127 return;
128 }
129 if(segment.hasClass("folded")){
130 //if the segment is collapsed
131 segment.removeClass("folded");
132 segment.find(".body").slideDown();
133 } else{
134 //if the segment is expanded
135 segment.addClass("folded");
136 segment.find(".body").slideUp();
137 }
138 }
139
140 function switchSubscreens(container, id1, id2) {
141 var oldScreen = container.find("#"+id1);
142 var newScreen = container.find("#"+id2);
143
144 oldScreen.fadeOut();
145 newScreen.fadeIn();
146 }
147
148 function guiBlocks_init() {
149 // initialize collapsed windows
150 $("div.block.folded").each(function(e){
151 $(this).find(".body").slideUp();
152 });
153
154 // TitleBar Click
155 $("div.block div.titlebar h1").live("click", function(e) {
156 var segment = $(this).parents().filter("div.block");
157 foldBlock(segment);
158 });
159
160 // TitleBar Close
161 $("div.block div.titlebar div.close_button").live("click", function(e){
162 segment = $(this).parents().filter("div.block");
163 segment.fadeOut(function(){ segment.remove()});
164 });
165
166 };
167
168
169 function randomString() {
170 var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
171 var string_length = 8;
172 var randomstring = '';
173 for (var i=0; i<string_length; i++) {
174 var rnum = Math.floor(Math.random() * chars.length);
175 randomstring += chars.substring(rnum,rnum+1);
176 }
177 return randomstring;
178 }
179