diff -r 43f9c64a7672 -r 7f3bd3030ae9 plugins/gallery/tagging.js --- a/plugins/gallery/tagging.js Sun Feb 17 14:14:59 2008 -0500 +++ b/plugins/gallery/tagging.js Sun Feb 17 15:21:47 2008 -0500 @@ -9,7 +9,7 @@ image.parentNode.setAttribute('canvas:oncancel', 'obj.onclick = null;'); } -function snapr_process_canvas_add(obj) +function snapr_process_canvas_add(obj, tag_data) { obj.onclick = null; var abs_x = $(obj).Left() + obj.canvas.left; @@ -28,6 +28,8 @@ var ta = document.createElement('textarea'); ta.rows = '7'; ta.cols = '30'; + if ( typeof(tag_data) == 'string' ) + ta.value = tag_data; entry_div.appendChild(ta); entry_div.appendChild(document.createElement('br')); @@ -71,7 +73,7 @@ parent.removeChild(obj); var canvas_json = toJSONString(canvas_data); - ajaxPost(makeUrlNS('Gallery', id), 'ajax=true&act=add_tag&tag=' + escape(tag) + '&canvas_params=' + escape(canvas_json), snapr_process_ajax_tag_packet); + ajaxPost(makeUrlNS('Gallery', id), 'ajax=true&act=add_tag&tag=' + ajaxEscape(tag) + '&canvas_params=' + ajaxEscape(canvas_json), snapr_process_ajax_tag_packet); } function snapr_finalize_canvas_cancel(obj) @@ -81,10 +83,44 @@ parent.removeChild(obj); } +function snapr_finalize_canvas_edit_cancel(obj) +{ + var old_value = obj.getElementsByTagName('textarea')[0]; + old_value = old_value.OriginalValue; + var canvas = obj.parentNode; + var canvas_data = canvas.canvas; + var note_id = canvas.tag_id; + var auth_delete = canvas.auth_delete; + var parent = canvas.parentNode; + canvas.removeChild(obj); + parent.removeChild(canvas); + // redraw the note + snapr_draw_note(parent, old_value, canvas_data, note_id, false, auth_delete); +} + +function snapr_finalize_canvas_edit_delete(obj) +{ + var old_value = obj.getElementsByTagName('textarea')[0]; + old_value = old_value.OriginalValue; + var canvas = obj.parentNode; + var canvas_data = canvas.canvas; + var note_id = canvas.tag_id; + var auth_delete = canvas.auth_delete; + var parent = canvas.parentNode; + canvas.removeChild(obj); + parent.removeChild(canvas); + // redraw the note + var note = snapr_draw_note(parent, old_value, canvas_data, note_id, false, auth_delete); + // now nuke it + snapr_nuke_tag(note); +} + function snapr_draw_note(obj, tag, canvas_data, note_id, initial_hide, auth_delete) { var newbox = canvas_create_box(obj, canvas_data.left, canvas_data.top, canvas_data.width, canvas_data.height); newbox.tag_id = note_id; + newbox.canvas = canvas_data; + newbox.auth_delete = auth_delete; obj.onmouseover = function() { var boxen = this.getElementsByTagName('div'); @@ -113,6 +149,7 @@ } if ( auth_delete ) { + /* var p = document.createElement('p'); p.style.cssFloat = 'right'; p.style.styleFloat = 'right'; @@ -129,6 +166,12 @@ a_del.appendChild(document.createTextNode('[X]')); p.appendChild(a_del); newbox.firstChild.appendChild(p); + */ + newbox.style.cursor = 'pointer'; + newbox.onclick = function() + { + snapr_run_tag_editor(this); + } } var abs_x = $(newbox).Left(); var abs_y = $(newbox).Top() + $(newbox).Height() + 2; @@ -139,11 +182,13 @@ noteObj.style.position = 'absolute'; noteObj.style.top = abs_y + 'px'; noteObj.style.left = abs_x + 'px'; + noteObj.style.zIndex = '100'; var re = new RegExp(unescape('%0A'), 'g'); noteObj.innerHTML = tag.replace(re, "
\n"); obj.appendChild(noteObj); if ( initial_hide ) newbox.style.display = 'none'; + return newbox; } function snapr_display_note(note) @@ -172,6 +217,96 @@ ajaxPost(makeUrlNS('Gallery', id), 'ajax=true&act=del_tag&tag_id=' + obj.tag_id, snapr_process_ajax_tag_packet); } +function snapr_run_tag_editor(obj) +{ + obj.onclick = null; + var abs_x = $(obj).Left(); + var abs_y = $(obj).Top(); + var height = $(obj).Height() + 2; + + var value = obj.nextSibling.innerHTML; + var regex = new RegExp('
', 'g'); + value = value.replace(regex, ''); + obj.parentNode.removeChild(obj.nextSibling); + + var entry_div = document.createElement('div'); + entry_div.className = 'snapr_tag_entry'; + entry_div.style.position = 'absolute'; + entry_div.style.top = String(height) + 'px'; + entry_div.style.left = '0px'; + entry_div.style.zIndex = '100'; + + entry_div.appendChild(document.createTextNode('Enter a tag:')); + entry_div.appendChild(document.createElement('br')); + + var ta = document.createElement('textarea'); + ta.rows = '7'; + ta.cols = '30'; + ta.value = value; + ta.style.backgroundColor = '#FFFFFF'; + ta.style.borderWidth = '0'; + ta.style.color = '#000000'; + ta.OriginalValue = value; + entry_div.appendChild(ta); + + entry_div.appendChild(document.createElement('br')); + + var a_add = document.createElement('a'); + a_add.href = '#'; + a_add.onclick = function() + { + snapr_finalize_canvas_edit(this.parentNode.parentNode, this.parentNode.getElementsByTagName('textarea')[0]['value'], this.parentNode); + return false; + } + a_add.appendChild(document.createTextNode('Save tag')); + entry_div.appendChild(a_add); + + entry_div.appendChild(document.createTextNode(' | ')); + + var a_cancel = document.createElement('a'); + a_cancel.href = '#'; + a_cancel.onclick = function() + { + snapr_finalize_canvas_edit_cancel(this.parentNode); + return false; + } + a_cancel.appendChild(document.createTextNode('Cancel')); + entry_div.appendChild(a_cancel); + + entry_div.appendChild(document.createTextNode(' | ')); + + var a_del = document.createElement('a'); + a_del.href = '#'; + a_del.onclick = function() + { + snapr_finalize_canvas_edit_delete(this.parentNode); + return false; + } + a_del.style.color = '#FF0000'; + a_del.appendChild(document.createTextNode('Delete')); + entry_div.appendChild(a_del); + + obj.appendChild(entry_div); + ta.focus(); +} + +function snapr_finalize_canvas_edit(canvas, value, editor) +{ + var canvas_data = canvas.canvas; + var note_id = canvas.tag_id; + var parent = canvas.parentNode; + canvas.removeChild(editor); + parent.removeChild(canvas); + // send the edit across the 'net + var parent_obj = document.getElementById('snapr_preview_img').parentNode; + var id = parent_obj.getAttribute('snapr:imgid'); + if ( !id ) + return false; + + var canvas_json = toJSONString(canvas_data); + ajaxPost(makeUrlNS('Gallery', id), 'ajax=true&act=edit_tag&tag=' + ajaxEscape(value) + '&canvas_params=' + ajaxEscape(canvas_json) + '&tag_id=' + note_id, snapr_process_ajax_tag_packet); +} + function snapr_process_ajax_tag_packet() { if ( ajax.readyState == 4 && ajax.status == 200 ) @@ -179,7 +314,7 @@ var response = String(ajax.responseText + ''); if ( response.substr(0, 1) != '[' && response.substr(0, 1) != '{' ) { - handle_invalid_json(response); + new messagebox(MB_OK|MB_ICONSTOP, 'JSON response invalid', 'Received unexpected response:
' + response + '
'); return false; } response = parseJSON(response);