c90c87939e01c2e661d803f960e1c0e2abfb48cc
[fnpeditor.git] / modules / documentHistory / documentHistory.js
1 define([\r
2 'libs/jquery-1.9.1.min',\r
3 'libs/underscore-min',\r
4 'libs/text!./templates/main.html',\r
5 'libs/text!./templates/item.html'\r
6 ], function($, _, mainTemplateSrc, itemTemplateSrc) {\r
7 \r
8 'use strict';\r
9     \r
10 return function(sandbox) {\r
11     \r
12     var dom = $(_.template(mainTemplateSrc)());\r
13     var domNodes = {\r
14         itemList: dom.find('.rng-module-documentHistory-itemsList'),\r
15     }\r
16     var itemViews = [];\r
17         \r
18     var addHistoryItem = function(item) {\r
19         historyItems.add(item);\r
20         var view = new itemView(item);\r
21         itemViews.push(view);\r
22         domNodes.itemList.prepend(view.dom);\r
23     }\r
24     \r
25     var toggleItemViews = function(toggle) {\r
26         itemViews.forEach(function(view) {\r
27             view.toggle(toggle);\r
28         });\r
29     }\r
30     \r
31     var historyItems = {\r
32         _itemsById: {},\r
33         _selected: [],\r
34         select: function(id) {\r
35             if(this._selected.length < 2) {\r
36                 this._selected.push(id);\r
37                 if(this._selected.length === 2)\r
38                     toggleItemViews(false);\r
39                 return true;\r
40             }\r
41             return false;\r
42         },\r
43         unselect: function(item) {\r
44             this._selected = _.without(this._selected, id);\r
45             if(this._selected.length < 2)\r
46                 toggleItemViews(true);\r
47         },\r
48         add: function(item) {\r
49             this._itemsById[item.id] = item;\r
50         },\r
51         selected: function(item) {\r
52             return _.contains(_selected, item.id);\r
53         }\r
54     };\r
55     \r
56     var itemView = function(item) {\r
57         this.item = item;\r
58         this.dom = $(this.template(item));\r
59         this.dom.on('click', this.onItemClicked);\r
60     };\r
61     itemView.prototype.template = _.template(itemTemplateSrc);\r
62     itemView.prototype.onItemClicked = function() {\r
63         if(historyItems.selected(item)) {\r
64             historyItems.unselect(item);\r
65             this.dimItem();\r
66         } else if(historyItems.select(item)) {\r
67             this.highlightItem();\r
68         }            \r
69     };\r
70     itemView.prototype.highlightItem = function() {\r
71         \r
72     };\r
73     itemView.prototype.dimItem = function() {\r
74     \r
75     };\r
76     itemView.prototype.toggle = function(toggle) {\r
77     \r
78     };\r
79 \r
80     \r
81     \r
82     return {\r
83         start: function() { sandbox.publish('ready'); },\r
84         addHistory: function(history) {\r
85             history.forEach(function(historyItem) {\r
86                 addHistoryItem(historyItem);\r
87             });\r
88         },\r
89         getView: function() {\r
90             return dom;\r
91         }\r
92     }\r
93 }\r
94 \r
95 });