summaryrefslogtreecommitdiff
path: root/modules/organize/js/organize.js
blob: c9408673a49bfdadbbc409cc291deea5d29d9cc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
(function($) {
  $.organize = {
    micro_thumb_draggable: {
      distance: 10,
      cursorAt: { left: -10, top: -10},
      appendTo: "#gOrganizeContentPane",
      helper: function(event, ui) {
        var selected = $("li.ui-state-selected img"),
            set = $('<div class="temp"></div>').css({zIndex: 2000, width: 80, height: Math.ceil(selected.length / 5) * 16 }),
            offset = $(this).offset(),
            click = { left: event.pageX - offset.left, top: event.pageY - offset.top };

        selected.each(function(i) {
          var row = parseInt(i / 5);
          var j = i - (row * 5);

          var o = $(this).offset();

          var copy = $(this).clone()
            .css({
              width: $(this).width(), height: $(this).height(), display: "block",
              margin: 0, position: 'absolute', outline: '5px solid #fff',
              left: o.left - event.pageX, top: o.top - event.pageY
            })
            .appendTo(set)
            .animate({width: 10, height: 10, outlineWidth: 1, margin: 1, left: (20 * j), top: (row * 20)}, 500);
        });
        return set;
      },
      start: function(event, ui) {
        $("#gMicroThumbPanel").prepend("<div id=\"gPlaceHolder\"></div>");

        $("#gMicroThumbPanel li.ui-state-selected").hide();
      },
      drag: function(event, ui) {
        var container = $("#gMicroThumbPanel").get(0);
        var scrollTop = container.scrollTop;
        var height = $(container).height();
        if (event.pageY > height + scrollTop) {
          container.scrollTop += height;
        } else if (event.pageY < scrollTop) {
          container.scrollTop -= height;
        }
      },
      stop: function(event, ui) {
        $("li.ui-state-selected").show();
      }
    },

    droppable: {
      accept: "*",
      tolerance: "pointer",
      greedy: true,
      drop: function(event, ui) {
        // @todo do a ajax call to send the rearrange request to the zerver
        // organize/move/target_id/
        // post parameters
        //  before=id|after=id
        //  source=[id1, id2, ...]
        //  before or after not supplied then append to end
        // return: json {
        //   result: success | msg,
        //   tree: null | new tree,
        //   content: new thumbgrid
        // }
      }
    },

    /**
     * Dynamically initialize the organize dialog when it is displayed
     */
    init: function(data) {
      var self = this;
      // Deal with ui.jquery bug: http://dev.jqueryui.com/ticket/4475 (target 1.8?)
      $(".sf-menu li.sfHover ul").css("z-index", 68);
      $("#gDialog").dialog("option", "zIndex", 70);
      $("#gDialog").bind("dialogopen", function(event, ui) {
        $("#gOrganize").height($("#gDialog").innerHeight() - 20);
        $("#gMicroThumbPanel").height($("#gDialog").innerHeight() - 90);
        $("#gOrganizeAlbumTree").height($("#gDialog").innerHeight() - 59);
      });

      $("#gDialog").bind("dialogclose", function(event, ui) {
        window.location.reload();
      });

      $("#gDialog #gMicroThumbDone").click(function(event) {
        $("#gDialog").dialog("close");
      });

      $(".gBranchText span").click($.organize.collapse_or_expand_tree);
      $(".gBranchText").click($.organize.show_album);

      $("#gMicroThumbPanel").selectable({filter: "li"});
      $("#gMicroThumbPanel img").draggable($.organize.micro_thumb_draggable);
      $(".gOrganizeBranch").droppable($.organize.droppable);
      $("#gMicroThumbPanel").droppable($.organize.droppable);
    },

    /**
     * Open or close a branch.
     */
    collapse_or_expand_tree: function(event) {
      event.stopPropagation();
      $(event.currentTarget).toggleClass("ui-icon-minus").toggleClass("ui-icon-plus");
      $("#gOrganizeChildren-" + $(event.currentTarget).attr("ref")).toggle();
    },

    /**
     * When the text of a selection is clicked, then show that albums contents
     */
    show_album: function(event) {
      event.preventDefault();
      if ($(event.currentTarget).hasClass("gBranchSelected")) {
        return;
      }
      var id = $(event.currentTarget).attr("ref");
      $(".gBranchSelected").removeClass("gBranchSelected");
      $("#gOrganizeBranch-" + id).addClass("gBranchSelected");
      var url = $("#gMicroThumbPanel").attr("ref").replace("__ITEM_ID__", id).replace("__OFFSET__", 0);
      $.get(url, function(data) {
        $("#gMicroThumbGrid").html(data);
      });
    }
  };
})(jQuery);