X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/e6e83eed52400d6e8a6ee6339cbe212c8cac1f90..118b83d442f52feca33ba6568ef39df2092568b7:/modules/documentHistory/documentHistory.js diff --git a/modules/documentHistory/documentHistory.js b/modules/documentHistory/documentHistory.js index 05cddbc..61eec9e 100644 --- a/modules/documentHistory/documentHistory.js +++ b/modules/documentHistory/documentHistory.js @@ -15,75 +15,103 @@ return function(sandbox) { } var itemViews = []; - var addHistoryItem = function(item) { + var addHistoryItem = function(item, options) { historyItems.add(item); var view = new itemView(item); itemViews.push(view); - domNodes.itemList.append(view.dom); + domNodes.itemList.prepend(view.dom); + if(options.animate) { + view.dom.hide().slideDown(); + } } var toggleItemViews = function(toggle) { itemViews.forEach(function(view) { - view.toggle(toggle); + if(!historyItems.selected(view.item)) + view.toggle(toggle); }); } + var toggleButton = function(btn, toggle) { + dom.find('button.'+btn).toggleClass('disabled', !toggle); + } + var historyItems = { _itemsById: {}, _selected: [], - select: function(id) { + select: function(item) { if(this._selected.length < 2) { - this._selected.push(id); - if(this._selected.length === 2) - toggleItemViews(false); + this._selected.push(item.version); + this._updateUI(); return true; } return false; }, unselect: function(item) { - this._selected = _.without(this._selected, id); - if(this._selected.length < 2) - toggleItemViews(true); + this._selected = _.without(this._selected, item.version); + this._updateUI(); }, add: function(item) { - this._itemsById[item.id] = item; + this._itemsById[item.version] = item; }, selected: function(item) { - return _.contains(_selected, item.id); + return _.contains(this._selected, item.version); + }, + _updateUI: function() { + var len = this._selected.length; + if(len === 0) { + toggleButton('compare', false); + toggleButton('show2', false); + toggleButton('restore', false); + } + if(len === 1) { + toggleButton('compare', false); + toggleButton('show2', true); + toggleButton('restore', true); + } + if(len === 2) { + toggleItemViews(false); + toggleButton('compare', true); + toggleButton('show2', false); + toggleButton('restore', false); + } else { + toggleItemViews(true); + } } }; + historyItems._updateUI(); var itemView = function(item) { this.item = item; this.dom = $(this.template(item)); - this.dom.on('click', this.onItemClicked); + this.dom.on('click', _.bind(this.onItemClicked, this)); }; itemView.prototype.template = _.template(itemTemplateSrc); itemView.prototype.onItemClicked = function() { - if(historyItems.selected(item)) { - historyItems.unselect(item); + if(historyItems.selected(this.item)) { + historyItems.unselect(this.item); this.dimItem(); - } else if(historyItems.select(item)) { + } else if(historyItems.select(this.item)) { this.highlightItem(); } }; itemView.prototype.highlightItem = function() { - + this.dom.addClass('highlighted'); }; itemView.prototype.dimItem = function() { - + this.dom.removeClass('highlighted'); }; itemView.prototype.toggle = function(toggle) { - + this.dom.toggleClass('disabled', !toggle); }; return { - start: function() { sandbox.publish('ready'); }, - setHistory: function(history) { + start: function() { sandbox.publish('ready'); }, + addHistory: function(history, options) { history.forEach(function(historyItem) { - addHistoryItem(historyItem); + addHistoryItem(historyItem, options || {}); }); }, getView: function() {