source: gs3-extensions/overlay-notes/trunk/src/main-notes.js@ 26826

Last change on this file since 26826 was 26826, checked in by davidb, 11 years ago

Javascript and CSS files that provide overlay/photo notes. Originally developed for the Pei Jones collection

File size: 12.4 KB
Line 
1
2function OverlayNotes(divID,metaname)
3{
4 this.divID = divID;
5 this.metaname = metaname;
6
7 this.posCount = 0;
8
9 /* create the Photo Note Container */
10 this.notes = new PhotoNoteContainer(divID);
11
12 this.getNotes(divID,metaname);
13}
14
15OverlayNotes.prototype.deleteFunction = function(note)
16{
17 var status = true;
18
19 if (note && note.id && note.id > 0) {
20 var metaposStr = note.id - 1;
21
22 var jsonVal = '{"caption":"' + note.text + '", "area":{"x":' + note.rect.left + ', "y":' + note.rect.top + ', "width":' + note.rect.width + ', "height":' + note.rect.height + '}}';
23
24 var removeFromIndexURL = "cgi-bin/metadata-server.pl?a=remove-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metapos=" + metaposStr;
25 var removeFromArchivesURL = "cgi-bin/metadata-server.pl?a=remove-archives-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metapos=" + metaposStr;
26 var removeFromImportURL = "cgi-bin/metadata-server.pl?a=remove-import-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metavalue=" + jsonVal;
27
28 var indexCallback =
29 {
30 success: function(response)
31 {
32 for(var i = 0; i < this.notes.length; i++)
33 {
34 var currentNote = this.notes[i];
35 if(currentNote.id > note.id)
36 {
37 currentNote.id--;
38 }
39 }
40 this.posCount--;
41 },
42 failed: function(){alert("Failed to delete index metadata of note with id: " + note.id);},
43 };
44
45 var archiveCallback =
46 {
47 success: function(){buildFunction(gs.cgiParams.c);},
48 failed: function(){alert("Failed to delete archive metadata of note with id: " + note.id);}
49 }
50
51 var importCallback =
52 {
53 success: function(){},
54 failed: function(){alert("Failed to delete import metadata of note with id: " + note.id);}
55 }
56
57 YAHOO.util.Connect.asyncRequest("GET", removeFromIndexURL, indexCallback);
58 YAHOO.util.Connect.asyncRequest("GET", removeFromArchivesURL, archiveCallback);
59 YAHOO.util.Connect.asyncRequest("GET", removeFromImportURL, importCallback);
60 }
61 else {
62 alert("Failed to find valid note data to delete");
63 status = false;
64 }
65
66 return status;
67}
68
69OverlayNotes.prototype.saveFunction = function(note)
70{
71 var saveIndexCallback =
72 {
73 success: function(response){},
74 failed: function(reponse){ alert("Failed to save index metadata of note with id: " + note.id)},
75 };
76
77 var saveArchivesCallback =
78 {
79 success: function(response){buildFunction(gs.cgiParams.c);},
80 failed: function(response){ alert("Failed in save import metadata of note with id: " + note.id) }
81 };
82
83 var saveImportCallback =
84 {
85 success: function(response){},
86 failed: function(response){ alert("Failed in save import metadata of note with id: " + note.id) }
87 };
88
89 var jsonVal = '{"caption":"' + note.text + '", "area":{"x":' + note.rect.left + ', "y":' + note.rect.top + ', "width":' + note.rect.width + ', "height":' + note.rect.height + '}}';
90 var metaposStr = (note && note.id && note.id > 0) ? note.id - 1 : this.posCount;
91
92 var saveIndexURL = "cgi-bin/metadata-server.pl?a=set-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metamode=override&metavalue=" + jsonVal + "&metapos=" + metaposStr;
93 var saveArchivesURL = "cgi-bin/metadata-server.pl?a=set-archives-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metamode=override&metavalue=" + jsonVal + "&metapos=" + metaposStr;
94 var saveImportURL = "cgi-bin/metadata-server.pl?a=set-import-metadata&site="+gs.xsltParams.site_name+"&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&metaname="+this.metaname+"&metamode=override&metavalue=" + jsonVal + "&metapos=" + metaposStr;
95 YAHOO.util.Connect.asyncRequest("GET", saveIndexURL, saveIndexCallback);
96 YAHOO.util.Connect.asyncRequest("GET", saveArchivesURL, saveArchivesCallback);
97 YAHOO.util.Connect.asyncRequest("GET", saveImportURL, saveImportCallback);
98
99 return 1;
100}
101
102OverlayNotes.prototype.getNotes = function(divID,metaname)
103{
104 if(gs.variables[metaname] == null || gs.variables[metaname] == undefined)
105 {
106 console.log("No photo notes");
107 return;
108 }
109
110 for(var i = 0; i < gs.variables[metaname].length; i++)
111 {
112 var metavals = gs.variables[metaname];
113 var note = metavals[i];
114 if(!note)
115 {
116 continue;
117 }
118
119 var newNote = new PhotoNote(note.caption, divID, i+1, new PhotoNoteRect(note.area.x,note.area.y,note.area.width,note.area.height));
120
121 var that = this;
122 newNote.onsave = function(note) { return that.saveFunction(note) };
123 newNote.ondelete = function(note) { return that.deleteFunction(note) };
124
125 this.notes.AddNote(newNote);
126 this.posCount++;
127 }
128
129 this.addNoteOverAndOutHandlers();
130}
131
132OverlayNotes.prototype.AddNote = function()
133{
134 this.posCount++;
135
136 var photoPos = $("#"+this.divID).offset();
137
138 var newNote = new PhotoNote('Add note text here...',this.divID,this.posCount,new PhotoNoteRect(20,20,50,50));
139
140 var that = this;
141 newNote.onsave = function(note) { return that.saveFunction(note) };
142 newNote.ondelete = function(note) { return that.deleteFunction(note) };
143 this.notes.AddNote(newNote);
144
145 this.addNoteOverAndOutHandlers();
146 newNote.Select();
147}
148
149OverlayNotes.prototype.addNoteOverAndOutHandlers = function()
150{
151 var divs = document.getElementsByTagName("DIV");
152 for(var i = 0; i < divs.length; i++)
153 {
154 if(divs[i].getAttribute("class") && divs[i].getAttribute("class").search("fn-area") != -1)
155 {
156 divs[i].onmouseover = function(){_zoomEnabled = false;}
157 divs[i].onmouseout = function(){_zoomEnabled = true;}
158 }
159 }
160}
161
162function addStatusBar()
163{
164 if (document.getElementById("buildStatusBar") != null) {
165 // already been added
166 return;
167 }
168
169 var textDiv = document.getElementById("gs-document");
170 var buildStatusBar = document.createElement("div");
171 buildStatusBar.setAttribute("id", "buildStatusBar");
172 buildStatusBar.setAttribute("class", "ui-state-default ui-corner-all");
173 buildStatusBar.setAttribute("style", "visibility:hidden; width:100%; margin-bottom: 10px;");
174 var buildingMessage = document.createElement("div");
175 buildingMessage.setAttribute("id", "buildMessage");
176 buildingMessage.setAttribute("style", "width:50%; padding:3px; margin:5px auto; text-align:center;");
177 buildStatusBar.appendChild(buildingMessage);
178
179 textDiv.insertBefore(buildStatusBar, textDiv.firstChild);
180}
181
182function prepopulateAnnotatorSearchBar()
183{
184 if(gs.cgiParams.s1_query && gs.cgiParams.s1_index == "GE")
185 {
186 $("#annotator-filter-text").val(gs.cgiParams.s1_query).keyup().blur();
187 console.log("AAA");
188 }
189
190 if(gs.cgiParams.s1_query && gs.cgiParams.s1_index == "GT")
191 {
192 $("#annotator-filter-tags").val(gs.cgiParams.s1_query).keyup().blur();
193 console.log("BBB");
194 }
195
196 if(gs.cgiParams.s1_query && gs.cgiParams.s1_index == "GX")
197 {
198 $("#annotator-filter-user").val(gs.cgiParams.s1_query).keyup().blur();
199 console.log("CCC");
200 }
201}
202
203function addPrevNextPageButtons()
204{
205 var buttonDiv = document.createElement("DIV");
206 var buttonTable = document.createElement("TABLE");
207 var buttonRow = document.createElement("TR");
208 var buttonPrevCell = document.createElement("TD");
209 var buttonNextCell = document.createElement("TD");
210 buttonRow.appendChild(buttonPrevCell);
211 buttonRow.appendChild(buttonNextCell);
212 buttonTable.appendChild(buttonRow);
213 buttonDiv.appendChild(buttonTable);
214
215 buttonDiv.setAttribute("style", "width:100%");
216 buttonTable.setAttribute("style", "margin:auto;");
217 buttonPrevCell.setAttribute("style", "padding:10px;");
218 buttonNextCell.setAttribute("style", "padding:10px;");
219
220 document.getElementById("gs-document-text").appendChild(buttonDiv);
221
222 gs.functions.getArchivesMetadata(gs.cgiParams.c, gs.xsltParams.site_name, gs.cgiParams.d, "SourceFile", null, function(meta)
223 {
224 var sourceFilename = meta.getValue();
225 var fileNameSegments = sourceFilename.split("-");
226 var finalSegment = fileNameSegments[fileNameSegments.length-1];
227
228 var extIndex = finalSegment.indexOf(".");
229 var ext = "";
230 if(extIndex != -1)
231 {
232 ext = finalSegment.substring(extIndex);
233 finalSegment = finalSegment.substring(0, extIndex);
234 }
235 var finalNumber = parseInt(finalSegment);
236
237 var prevFilename = "";
238 var nextFilename = "";
239 for(var i = 0; i < fileNameSegments.length - 1; i++)
240 {
241 prevFilename += fileNameSegments[i] + "-";
242 nextFilename += fileNameSegments[i] + "-";
243 }
244
245 if(finalNumber - 1 >= 0)
246 {
247 var prevFinalNumber = "" + (finalNumber - 1);
248 while(prevFinalNumber.length < finalSegment.length)
249 {
250 prevFinalNumber = "0" + prevFinalNumber;
251 }
252 prevFilename += prevFinalNumber + ext;
253
254 prevButtonCallback =
255 {
256 success:function(response)
257 {
258 var text = response.responseText;
259 var startIndex = text.indexOf("nodeID=\"");
260 if(startIndex == -1)
261 {
262 return;
263 }
264 startIndex += 8;
265 endIndex = text.indexOf("\"", startIndex + 1);
266
267 var id = text.substring(startIndex, endIndex);
268
269 var prevLink = document.createElement("A");
270 prevLink.innerHTML = "Previous Page";
271 prevLink.setAttribute("href", gs.xsltParams.library_name + "?a=d&d=" + id + "&c=" + gs.cgiParams.c + "&dt=hierarchy&ed=1");
272 buttonPrevCell.appendChild(prevLink);
273 },
274 failed:function(response){console.log("Search for previous document failed");}
275 }
276 YAHOO.util.Connect.asyncRequest("GET", gs.xsltParams.library_name + "?a=q&sa=&rt=rd&s=TextQuery&c=pj-flat&startPage=1&s1.query=" + prevFilename.replace(/-/g, " ") + "&s1.index=SO&o=xml", prevButtonCallback);
277 }
278
279 var nextFinalNumber = "" + (finalNumber + 1);
280 while(nextFinalNumber.length < finalSegment.length)
281 {
282 nextFinalNumber = "0" + nextFinalNumber;
283 }
284 nextFilename += nextFinalNumber + ext;
285
286 nextButtonCallback =
287 {
288 success:function(response)
289 {
290 var text = response.responseText;
291 var startIndex = text.indexOf("nodeID=\"");
292 if(startIndex == -1)
293 {
294 return;
295 }
296 startIndex += 8;
297 endIndex = text.indexOf("\"", startIndex + 1);
298
299 var id = text.substring(startIndex, endIndex);
300
301 var nextLink = document.createElement("A");
302 nextLink.innerHTML = "Next Page";
303 nextLink.setAttribute("href", gs.xsltParams.library_name + "?a=d&d=" + id + "&c=" + gs.cgiParams.c + "&dt=hierarchy&ed=1");
304 buttonNextCell.appendChild(nextLink);
305 },
306 failed:function(response){console.log("Search for next document failed");}
307 }
308
309 YAHOO.util.Connect.asyncRequest("GET", gs.xsltParams.library_name + "?a=q&sa=&rt=rd&s=TextQuery&c=pj-flat&startPage=1&s1.query=" + nextFilename.replace(/-/g, " ") + "&s1.index=SO&o=xml", nextButtonCallback);
310 });
311}
312
313function addSocialLinks()
314{
315 var socialLinksDiv = document.createElement("DIV");
316 socialLinksDiv.setAttribute("class", "addthis_toolbox addthis_default_style");
317
318 var facebookLink = document.createElement("A");
319 facebookLink.setAttribute("class", "addthis_button_facebook_like");
320 facebookLink.setAttribute("fb:like:layout", "button_count");
321 socialLinksDiv.appendChild(facebookLink);
322
323 var twitterLink = document.createElement("A");
324 twitterLink.setAttribute("class", "addthis_button_tweet");
325 socialLinksDiv.appendChild(twitterLink);
326
327 var gplusLink = document.createElement("A");
328 gplusLink.setAttribute("class", "addthis_button_google_plusone");
329 gplusLink.setAttribute("g:plusone:size", "medium");
330 socialLinksDiv.appendChild(gplusLink);
331
332 var addThisLink = document.createElement("A");
333 addThisLink.setAttribute("class", "addthis_counter addthis_pill_style");
334 socialLinksDiv.appendChild(addThisLink);
335
336 var script = document.createElement("SCRIPT");
337 script.setAttribute("type", "text/javascript");
338 script.setAttribute("src", "http://s7.addthis.com/js/250/addthis_widget.js#pubid=xa-4f5fe0cf41940d54");
339 socialLinksDiv.appendChild(script);
340
341 document.getElementById("gs-document-text").appendChild(socialLinksDiv);
342}
Note: See TracBrowser for help on using the repository browser.