source: main/trunk/model-sites-dev/mozarts-laptop/collect/digital-music-stand/script/annotate.js@ 30460

Last change on this file since 30460 was 30460, checked in by davidb, 8 years ago

Adjustments to make resize and move posits working in new Greenstone3 environment

  • Property svn:executable set to *
File size: 9.2 KB
RevLine 
[30446]1
2function Annotate(httpImagesMacro)
3{
4 var httpImages = httpImagesMacro;
5
6 var numAnnotations = 0;
7
8 var username = null;
9
10 this.getNumAnnotations = function()
11 {
12 return numAnnotations;
13 }
14
15 this.setUsername = function(cgiUsername)
16 {
17 username = cgiUsername;
18 }
19
20 this.getUsername = function()
21 {
22 return username;
23 }
24
25 this.createAnnotation = function(xleft,ytop,xwidth,yheight,text)
26 {
27 // start new annotation
28 var newAI = document.createElement("div");
29 newAI.setAttribute("class","annotationNote");
30 if (expeditee) {
31 newAI.setAttribute("onmouseout", "javascript:annotateLoseFocus(this)");
32 }
33
34 //newAI.style.position = "absolute";
35 //newAI.style.visibility = "visible";
36 //newAI.style.zIndex = "2";
37 //newAI.style.background = "rgba(255,200,200,0.7)";
38
39 if (xwidth) {
40 newAI.style.width = xwidth + "px";
41 }
42
43 if (yheight) {
44 newAI.style.height = yheight + "px";
45 }
46 else {
47 newAI.style.height = "auto";
48 }
49
50 //newAI.style.borderStyle = "solid";
51 //newAI.style.borderColor = "black";
52
53 newAI.style.padding = "1px";
54 newAI.style.paddingRight = "6px";
55
56
57 var annotate_x_org = xleft;
58 var annotate_y_org = ytop;
59
60 if (document.all) {
61 newAI.style.pixelLeft = annotate_x_org
62 newAI.style.pixelTop = annotate_y_org;
63 }
64 else if (document.getElementById) {
65 newAI.style.left = annotate_x_org + 'px';
66 newAI.style.top = annotate_y_org + 'px';
67 }
68
69
70 var tableElem = document.createElement("table");
71 var trElem = document.createElement("tr");
72
73 var tdTextElem = document.createElement("td");
74 var tdDecElem = document.createElement("td");
75
76 var editableElem = document.createElement("span");
77 if (expeditee) {
78 editableElem.setAttribute("onmouseover","javascript:annotateGainFocus(this)");
79 editableElem.setAttribute("onmousemove","javascript:annotateGainFocus(this)");
80 }
81 //else {
82 // tableElem.setAttribute("onmousedown","javascript:return false;");
83 // tableElem.setAttribute("onmouseup", "javascript:return false;");
84 // }
85
86 var annotation = (username!=null) ? username+"-annotation" : "annotation";
87
88 editableElem.setAttribute("id","annotateItem" + numAnnotations);
89 editableElem.setAttribute("class","editable-metadata");
90 editableElem.setAttribute("docoid",musicStand.getDocOID());
91 editableElem.setAttribute("metaname",annotation);
92 editableElem.setAttribute("metapos",numAnnotations);
93
[30456]94 //editableElem.setAttribute("style", "cursor:text;");
95
[30446]96 editableElem.style.position = "relative";
97
98 if (text == "") {
99 text = " "
100 }
101 editableElem.innerHTML = text;
102
103 tdTextElem.setAttribute("onmousedown","javascript:return annotateMouseDown(this,event);");
104 tdTextElem.setAttribute("onmouseup", "javascript:return annotateMouseUp(this,event);");
[30456]105 tdTextElem.setAttribute("style", "cursor:text;");
106
[30446]107 var closeElem = document.createElement("div");
[30456]108 //closeElem.onmouseup=closeAnnotation;
109 closeElem.setAttribute("onmouseup","javascript:return closeAnnotation(this,event);");
110 closeElem.setAttribute("style", "cursor:default;");
111
[30446]112 closeElem.style.position = "absolute";
113 closeElem.style.top = "0px";
114 closeElem.style.right = "0px";
115 closeElem.innerHTML = '<img src="'+httpImages+'/window-close.gif">';
116
117 var resizeElem = document.createElement("div");
118
119 resizeElem.setAttribute("onmousedown","javascript:return startResizeAnnotation(this,event);");
120 resizeElem.setAttribute("onmouseup", "javascript:return stopResizeAnnotation(this,event);");
121
[30460]122 resizeElem.setAttribute("style", "cursor:se-resize;");
[30456]123
[30446]124 resizeElem.style.position = "absolute";
125 resizeElem.style.bottom = "0px";
126 resizeElem.style.right = "0px";
127 resizeElem.innerHTML = '<img src="'+httpImages+'/resizer.gif">';
128
129 tdTextElem.appendChild(editableElem);
130 tdDecElem.appendChild(closeElem);
131 tdDecElem.appendChild(resizeElem);
132 trElem.appendChild(tdTextElem);
133 trElem.appendChild(tdDecElem);
134 tableElem.appendChild(trElem);
135 newAI.appendChild(tableElem);
136
137 numAnnotations++;
138
139 return newAI;
140 }
141
142
143 this.saveAnnotation = function(annotateWrapper,editedElem)
144 {
145 var docoid = editedElem.getAttribute("docoid");
146
147 if (gsdefined(docoid)) {
148 var metaname = editedElem.getAttribute("metaname");
149 var metapos = editedElem.getAttribute("metapos");
150 var metavalue= editedElem.innerHTML;
151
152 var metavalue = metavalue.replace(/&nbsp;/g, " ");
153
154 gsapi.setDocumentMetadata(docoid,metaname,metapos,metavalue);
155 // gsapi.setImportMetadata(docoid,metaname,metapos,metavalue);
156
157 // Store co-ord + width and height
158 var ax_org = parseInt(annotateWrapper.style.left);
159 var ay_org = parseInt(annotateWrapper.style.top);
160 var ax_dim = parseInt(annotateWrapper.style.width);
161 var ay_dim = parseInt(annotateWrapper.style.height);
162
163 var scaleFactor = musicStand.getScaleFactor();
164 ax_org /= scaleFactor;
165 ay_org /= scaleFactor;
166
167 var rectHash = { "left": ax_org, "top": ay_org };
168
169 if (ay_dim) {
170
171 if (!ax_dim) {
172 // switch to width and deliberately leave height
173 // underdefined
174 //ax_dim = parseInt(editedElem.offsetWidth) +4;
175 ax_dim = parseInt(annotateWrapper.offsetWidth)-10;
176 }
177 else {
178 rectHash.height = ay_dim;
179 }
180 }
181
182 if (ax_dim) {
183 rectHash.width = ax_dim;
184 }
185
186 var rectHashStr = JSON.stringify(rectHash);
187
188 //alert("rectHashStr = " + rectHashStr);
189
190 var metaname = (username!=null) ? username+"-rectpos" : "rectpos";
191
192 gsapi.setDocumentMetadata(docoid,metaname,metapos,rectHashStr);
193 // gsapi.setImportMetadata(docoid,metaname,metapos,rectHashStr);
194
195 }
196
197 return true;
198 }
199
200 this.clearAnnotations = function()
201 {
202 var annotateCanvasElem = document.getElementById("annotateCanvas");
203 annotateCanvasElem.innerHTML = null;
204 numAnnotations = 0;
205 }
206
207 this.loadAnnotation = function(docoid,metapos)
208 {
209 var annotationMetaname = "annotation";
210 var rectposMetaname = "rectpos";
211 if (username!=null) {
212 annotationMetaname = username + "-" + annotationMetaname;
213 rectposMetaname = username + "-" + rectposMetaname;
214 }
215
216 var annotateText = gsapi.getDocumentMetadata(docoid,annotationMetaname,metapos);
217 var annotateRect = gsapi.getDocumentMetadata(docoid,rectposMetaname,metapos);
218
219 //alert("annotateRect = " + annotateRect);
220
221 // Non-existent annotation rectangle has somehow got into the database
222 if (annotateRect == "") { return; }
223
224 var annotateHash = JSON.parse(annotateRect);
225
226 var xleft = annotateHash.left;
227 var ytop = annotateHash.top;
228 var xwidth = annotateHash.width;
229 var yheight = annotateHash.height;
230
231 var scaleFactor = musicStand.getScaleFactor();
232 xleft *= scaleFactor;
233 ytop *= scaleFactor;
234
235 var newAI = this.createAnnotation(xleft,ytop,xwidth,yheight,annotateText);
236
237 var annotateCanvasElem = document.getElementById("annotateCanvas");
238 annotateCanvasElem.appendChild(newAI);
239 }
240
241 this.loadAnnotations = function(docoid)
242 {
243 numAnnotations = 0;
244
245 var metaname = (username!=null) ? username+"-numAnnotations" : "numAnnotations";
246
247 var newNumAnnotations = gsapi.getLiveMetadata(docoid,metaname);
248
249 //alert("load: newNumAnnotations = " + newNumAnnotations);
250
251 for (var a=0; a<newNumAnnotations; a++) {
252 this.loadAnnotation(docoid,a);
253 }
254 }
255
256
257 this.removeAnnotation = function(annotateCanvas,removeMetapos)
258 {
259 var annotateDivs = annotateCanvas.childNodes;
260 //var numAnnotations = annotateDivs.length;
261
262 //alert("num annotations = " + numAnnotations + " removeMetapos = " + removeMetapos);
263
264 for (var a=0; a<numAnnotations; a++) {
265 var annotateDiv = annotateDivs[a];
266
267 var editableElems = getElementsByClass("editable-",annotateDiv);
268 var editableElem = editableElems[0];
269
270 var metapos = editableElem.getAttribute("metapos");
271
272 if (metapos>removeMetapos) {
273 editableElem.setAttribute("metapos",metapos-1);
274 }
275 }
276
277 if (annotateCanvas != null) {
278 var removeElem = annotateDivs[removeMetapos];
279 annotateCanvas.removeChild(removeElem);
280 }
281
282
283 var docoid = musicStand.getDocOID();
284
285 var annotationMetaname = "annotation";
286 var rectposMetaname = "rectpos";
287 var numAnnotationsMetaname = "numAnnotations";
288
289 if (username!=null) {
290 annotationMetaname = username + "-" + annotationMetaname;
291 rectposMetaname = username + "-" + rectposMetaname;
292 numAnnotationsMetaname = username + "-" + numAnnotationsMetaname;
293 }
294
295 gsapi.removeDocumentMetadata(docoid,annotationMetaname,removeMetapos);
296 gsapi.removeDocumentMetadata(docoid,rectposMetaname,removeMetapos);
297 numAnnotations--;
298 gsapi.setLiveMetadata(docoid,numAnnotationsMetaname,numAnnotations);
299 }
300}
Note: See TracBrowser for help on using the repository browser.