summaryrefslogtreecommitdiff
path: root/www/lib/vis/examples/timeline/other/drag&drop.html
blob: 81bcb1f1771033b7a1c6b695e6507677f48a8453 (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
127
128
129
130
131
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Timeline | Drag & Drop</title>
  
  <script src="../../../dist/vis.js"></script>
  <link href="../../../dist/vis.css" rel="stylesheet" type="text/css" />

  <script src="../../googleAnalytics.js"></script>

  <style type="text/css">
    li.item {
      list-style: none;
      width: 150px;
      color: #1A1A1A;
      background-color: #D5DDF6;
      border: 1px solid #97B0F8;
      border-radius: 2px;
      margin-bottom: 5px;
      padding: 5px 12px;
    }
    li.item:before {
      content: "≣";
      font-family: Arial, sans-serif;
      display: inline-block;
      font-size: inherit;
      cursor: move;
    }
  </style>
</head>

<body>

<h1>Timeline Drag & Drop Example</h1>

<p>For this to work, you will have to define your own <code>'dragstart'</code> eventListener on each item in your list of items (make sure that any new item added to the list is attached to this eventListener 'dragstart' handler). This 'dragstart' handler must set <code>dataTransfer</code> - notice you can set  the item's information as you want this way.</p>

<div id="mytimeline" ></div>
<div>
  <h3>Items:</h3>
  <ul class="items">
    <li draggable="true" class="item">
      item 1 - box
    </li>
    <li draggable="true" class="item">
      item 2 - point
    </li>
    <li draggable="true" class="item">
      item 3 - range
    </li>
  </ul>
</div>

<script>

  // create groups
  var numberOfGroups = 3; 
  var groups = new vis.DataSet()
  for (var i = 0; i < numberOfGroups; i++) {
    groups.add({
      id: i,
      content: 'Truck&nbsp;' + i
    })
  }
  
  // create items
  var numberOfItems = 10;
  var items = new vis.DataSet();

  var itemsPerGroup = Math.round(numberOfItems/numberOfGroups);

  for (var truck = 0; truck < numberOfGroups; truck++) {
    var date = new Date();
    for (var order = 0; order < itemsPerGroup; order++) {
      date.setHours(date.getHours() +  4 * (Math.random() < 0.2));
      var start = new Date(date);

      date.setHours(date.getHours() + 2 + Math.floor(Math.random()*4));
      var end = new Date(date);

      items.add({
        id: order + itemsPerGroup * truck,
        group: truck,
        start: start,
        end: end,
        content: 'Order ' + order
      });
    }
  }
  
  // specify options
  var options = {
    stack: true,
    start: new Date(),
    end: new Date(1000*60*60*24 + (new Date()).valueOf()),
    editable: true,
    orientation: 'top'
  };

  // create a Timeline
  var container = document.getElementById('mytimeline');
  timeline1 = new vis.Timeline(container, items, groups, options);

  function handleDragStart(event) {
    dragSrcEl = event.target;

    event.dataTransfer.effectAllowed = 'move';
    var itemType = event.target.innerHTML.split('-')[1].trim();
    var item = {
      id: new Date(),
      type: itemType,
      content: event.target.innerHTML.split('-')[0].trim(),
      start: new Date(),
      end: new Date(1000*60*60*24 + (new Date()).valueOf()),
    };

    event.dataTransfer.setData("text/plain", JSON.stringify(item));
  }

  var items = document.querySelectorAll('.items .item');

  for (var i = items.length - 1; i >= 0; i--) {
    var item = items[i];
    item.addEventListener('dragstart', handleDragStart.bind(this), false);
  }

</script>

</body>
</html>