--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javascript/taggr.js Thu Jan 17 01:56:04 2008 +0000
@@ -0,0 +1,217 @@
+function toggle_dir (header_a_tag) {
+ var div = Element.next(header_a_tag);
+
+ if (div._have_contents) {
+ if (div.visible())
+ Effect.BlindUp(div, {duration: 0.5});
+ else
+ Effect.BlindDown(div, {duration: 0.5});
+ } else {
+
+ new Ajax.Updater(div, "taggr2.py", {
+ parameters: {
+ act: "dirlist",
+ path: div.id,
+ },
+ method: 'get',
+ onSuccess: function () {
+ Effect.BlindDown(div, {duration: 0.5});
+ div._have_contents = true;
+ }
+ });
+ }
+}
+
+function new_tag (tag_name) {
+ var tag_images = Builder.node("td", {className:"tag_images"});
+
+ $("tag_table").appendChild(
+ Builder.node("tr", [
+ Builder.node("td", {className:"tag"}, [
+ tag_name
+ ]),
+ tag_images
+ ])
+ );
+}
+
+function image_dropped (img, tag, e) {
+}
+
+function image_loaded (img) {
+}
+
+function image_click (img, ev) {
+
+}
+
+function init () {
+}
+
+var g_drag, g_hover, g_start, g_offset, g_targets;
+function check_mouse_down (ev) {
+ var e = ev.element();
+
+ if (e.hasClassName("image")) {
+ g_drag = e;
+ g_start = false;
+
+ var offset = e.cumulativeOffset();
+
+ g_offset = {
+ 'left': ev.pointerX() - offset.left,
+ 'top': ev.pointerY() - offset.top
+ };
+
+ g_hover = null;
+
+ g_targets = $$(".tag_images");
+
+ } else if (e.hasClassName("directory_link")) {
+ toggle_dir(e);
+
+ } else {
+ return true;
+ }
+
+ ev.stop();
+ return false;
+}
+
+function check_mouse_up (ev) {
+ if (g_drag) {
+ if (g_start) {
+ if (g_hover) {
+ drag_unhover(g_drag, g_hover, ev);
+ drag_end_drop(g_drag, g_hover, ev);
+ } else
+ drag_end_fail(g_drag, ev);
+
+ drag_cleanup(g_drag);
+ } else
+ image_click(g_drag, ev);
+
+ g_start = null;
+ g_drag = null;
+ g_hover = null;
+
+ ev.stop();
+ return false;
+ }
+}
+
+function check_mouse_move (ev) {
+ if (g_drag) {
+ if (!g_start) {
+ drag_start(g_drag);
+ g_start = true;
+ }
+
+ drag_move(g_drag, ev);
+
+ Position.prepare();
+
+ var px = ev.pointerX();
+ var py = ev.pointerY();
+
+ if (g_hover) {
+ if (!Position.withinIncludingScrolloffsets(g_hover, px, py)) {
+ drag_unhover(g_drag, g_hover, ev);
+ g_hover = null;
+ }
+ } else {
+ for (var i=0;i<g_targets.length;i++)
+ if (Position.withinIncludingScrolloffsets(g_targets[i], px, py)) {
+ drag_hover(g_drag, g_targets[i], ev);
+ g_hover = g_targets[i];
+ }
+ }
+
+ ev.stop();
+ return false;
+ }
+}
+
+function check_drag_hover (ev) {
+ var e = ev.element();
+ if (g_start) {
+
+ if (e.hasClassName("tag_images")) {
+ drag_hover(g_drag, e, ev);
+ g_hover = e;
+ }
+ }
+}
+
+function check_drag_nohover (ev) {
+ var e = ev.element();
+ if (g_start) {
+
+ if (g_hover && e == g_hover) {
+ drag_unhover(g_drag, g_hover, ev);
+ g_hover = null;
+ }
+ }
+}
+
+var g_ghost;
+function drag_start (e) {
+ g_ghost = Builder.node("img", {
+ src: e.src
+ });
+
+ g_ghost._key = e.id;
+
+ $('taggr').appendChild(g_ghost);
+
+ g_ghost.style.position = "absolute";
+}
+
+function drag_move (e, ev) {
+ g_ghost.style.left = ev.pointerX() - g_offset.left + "px";
+ g_ghost.style.top = ev.pointerY() - g_offset.top + "px";
+}
+
+function drag_end_drop (e, s, ev) {
+ if (!s.images)
+ s.images = new Array();
+
+ if (s.images.indexOf(g_ghost._key) != -1)
+ return drag_end_fail();
+
+ g_ghost.id = s.id + "_" + g_ghost._key
+
+ s.images.push(g_ghost._key)
+
+ $('taggr').removeChild(g_ghost);
+ s.appendChild(g_ghost);
+
+ g_ghost.style.position = "static";
+}
+
+function drag_end_fail (e, ev) {
+ $('taggr').removeChild(g_ghost);
+}
+
+function drag_cleanup (e, ev) {
+ g_ghost = null;
+}
+
+function drag_hover (e, s, ev) {
+ s.addClassName("hover");
+}
+
+function drag_unhover (e, s, ev) {
+ s.removeClassName("hover");
+}
+
+Event.observe(window, "load", init);
+Event.observe(document, "mousedown", check_mouse_down);
+Event.observe(document, "mouseup", check_mouse_up);
+Event.observe(document, "mousemove", check_mouse_move);
+Event.observe(document, "mouseover", check_drag_hover);
+Event.observe(document, "mouseout", check_drag_nohover);
+Event.observe(document, "dragenter", check_drag_hover);
+Event.observe(document, "dragexit", check_drag_nohover);
+
+