diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 2d3b31b0..70d38c2d 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -17,6 +17,8 @@ require 'gollum/views/helpers' require 'gollum/views/layout' require 'gollum/views/editable' require 'gollum/views/has_page' +require 'gollum/views/pagination' + require File.expand_path '../helpers', __FILE__ @@ -355,8 +357,7 @@ module Precious else sha2, sha1 = sha1, "#{sha1}^" if !sha2 @versions = [sha1, sha2] - diffs = wiki.repo.diff(@versions.first, @versions.last, @page.path) - @diff = diffs.first + @diff = wiki.full_reverse_diff_for(@page, @versions.first, @versions.last) @message = "The patch does not apply." mustache :compare end @@ -385,9 +386,15 @@ module Precious wikip = wiki_page(params[:splat].first) @name = wikip.fullname @page = wikip.page - @page_num = [params[:page].to_i, 1].max + @page_num = [params[:page_num].to_i, 1].max + @max_count = settings.wiki_options.fetch(:pagination_count, 10) unless @page.nil? - @versions = @page.versions(:page => @page_num, :follow => settings.wiki_options.fetch(:follow_renames, ::Gollum::GIT_ADAPTER == 'rjgit' ? false : true)) + @versions = @page.versions( + per_page: @max_count, + page_num: @page_num, + follow: settings.wiki_options.fetch(:follow_renames, + ::Gollum::GIT_ADAPTER == 'rjgit' ? false : true) + ) mustache :history else redirect to("/") @@ -396,8 +403,9 @@ module Precious get '/latest_changes' do @wiki = wiki_new - max_count = settings.wiki_options.fetch(:latest_changes_count, 10) - @versions = @wiki.latest_changes({:max_count => max_count}) + @page_num = [params[:page_num].to_i, 1].max + @max_count = settings.wiki_options.fetch(:pagination_count, 10) + @versions = @wiki.latest_changes(::Gollum::Page.log_pagination_options(per_page: @max_count, page_num: @page_num)) mustache :latest_changes end @@ -429,8 +437,7 @@ module Precious @versions = [start_version, end_version] wiki = wikip.wiki @page = wikip.page - diffs = wiki.repo.diff(@versions.first, @versions.last, @page.path) - @diff = diffs.first + @diff = wiki.full_reverse_diff_for(@page, @versions.first, @versions.last) mustache :compare end @@ -477,6 +484,7 @@ module Precious @name = name @content = page.formatted_data @version = version + @historical = true @bar_side = wikip.wiki.bar_side @navbar = true mustache :page diff --git a/lib/gollum/public/gollum/javascript/gollum.js.erb b/lib/gollum/public/gollum/javascript/gollum.js.erb index d5a309f8..645abdf0 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js.erb +++ b/lib/gollum/public/gollum/javascript/gollum.js.erb @@ -97,91 +97,6 @@ $(document).ready(function() { e.preventDefault(); } ); - - var nodeSelector = { - node1: null, - node2: null, - - selectNodeRange: function( n1, n2 ) { - if ( nodeSelector.node1 && nodeSelector.node2 ) { - $('#wiki-history td.selected').removeClass('selected'); - nodeSelector.node1.addClass('selected'); - nodeSelector.node2.addClass('selected'); - - // swap the nodes around if they went in reverse - if ( nodeSelector.nodeComesAfter( nodeSelector.node1, - nodeSelector.node2 ) ) { - var n = nodeSelector.node1; - nodeSelector.node1 = nodeSelector.node2; - nodeSelector.node2 = n; - } - - var s = true; - var $nextNode = nodeSelector.node1.next(); - while ( $nextNode ) { - $nextNode.addClass('selected'); - if ( $nextNode[0] == nodeSelector.node2[0] ) { - break; - } - $nextNode = $nextNode.next(); - } - } - }, - - nodeComesAfter: function ( n1, n2 ) { - var s = false; - $(n1).prevAll().each(function() { - if ( $(this)[0] == $(n2)[0] ) { - s = true; - } - }); - return s; - }, - - checkNode: function( nodeCheckbox ) { - var $nodeCheckbox = nodeCheckbox; - var $node = $(nodeCheckbox).parent().parent(); - // if we're unchecking - if ( !$nodeCheckbox.is(':checked') ) { - - // remove the range, since we're breaking it - $('#wiki-history tr.selected').each(function() { - if ( $(this).find('td.checkbox input').is(':checked') ) { - return; - } - $(this).removeClass('selected'); - }); - - // no longer track this - if ( $node[0] == nodeSelector.node1[0] ) { - nodeSelector.node1 = null; - if ( nodeSelector.node2 ) { - nodeSelector.node1 = nodeSelector.node2; - nodeSelector.node2 = null; - } - } else if ( $node[0] == nodeSelector.node2[0] ) { - nodeSelector.node2 = null; - } - - } else { - if ( !nodeSelector.node1 ) { - nodeSelector.node1 = $node; - nodeSelector.node1.addClass('selected'); - } else if ( !nodeSelector.node2 ) { - // okay, we don't have a node 2 but have a node1 - nodeSelector.node2 = $node; - nodeSelector.node2.addClass('selected'); - nodeSelector.selectNodeRange( nodeSelector.node1, - nodeSelector.node2 ); - } else { - // we have two selected already - $nodeCheckbox[0].checked = false; - } - } - } - }; - - // ua detection if ($.browser.mozilla) { $('body').addClass('ff'); @@ -351,7 +266,7 @@ $(document).ready(function() { if ($('.history button.action-compare-revision').length) { $('.history button.action-compare-revision').click(function() { - $("#version-form").submit(); + $("#selection-form").submit(); }); } } @@ -445,6 +360,99 @@ $(document).ready(function() { }); } + if( $("#page-history").length) { + if( $("#page-history #pagination").length) { + + var maxSelected = 2; + var selectionColors = ["bg-green-light", "bg-red-light"]; + + var toggleInputs = function () { + var numSelected = 0; + $("#selection-form input").each(function (index, element) { + var value = $(element).val(); + var input = $('#version-form input[value="' + value + '"]'); + input.prop('checked', true); + if (index == 0) { + input.closest("li").removeClass(selectionColors[1]).addClass(selectionColors[index]); + } else if (index == 1) { + input.closest("li").addClass(selectionColors[index]); + } + numSelected = numSelected + 1; + }); + if (numSelected == maxSelected) { + $('#version-form input:not(:checked)').prop('disabled', true); + $('.history button.action-compare-revision').prop('disabled', false); + } else if (numSelected < maxSelected) { + $('#version-form input').prop('disabled', false); + $('.history button.action-compare-revision').prop('disabled', true); + } + }; + + var onCheckboxSelect = function ( box ) { + $('').attr({ + type: 'hidden', + id: $(box).val(), + name: 'versions[]', + value: $(box).val() + }).appendTo($("#selection-form")); + toggleInputs(); + }; + + var onCheckboxUnselect = function( box ) { + $('#selection-form #' + $(box).val()).remove(); + $(box).closest("li").removeClass(selectionColors.join(" ")); + toggleInputs(); + }; + + var setCheckboxEvents = function () { + $("#version-form input").on('change', function () { + if (this.checked) { + onCheckboxSelect(this); + } else { + onCheckboxUnselect(this); + } + }); + }; + setCheckboxEvents(); + toggleInputs(); + + var clickPageNav = function (e) { + e.preventDefault(); + $.ajax({ + url: $(this).attr('href'), + type: 'GET', + success: function(data) { + var rowDiv = $('#page-history-list', data); + var new_pagination = $('#pagination', data); + + next = $('#pagination #next'); + prev = $('#pagination #prev'); + new_next = new_pagination.find('#next'); + new_prev = new_pagination.find('#prev'); + + next[0].hidden = new_next[0].hidden; + prev[0].hidden = new_prev[0].hidden; + + next.children('a').attr('href', new_next.children('a').attr('href')); + prev.children('a').attr('href', new_prev.children('a').attr('href')); + + $('#page-history-list').replaceWith(rowDiv); + + setCheckboxEvents(); + toggleInputs(); + }, + error: function(data, textStatus, errorThrown) { + console.log('something went wrong: ' + textStatus + errorThrown) + } + }); + }; + + $("#pagination #next a, #pagination #prev a").each(function(index, element) { + $(element).on("click", clickPageNav); + }); + } + } + if( $("#last-edit").length ) { $("#page-info-toggle").click ( function () { $.ajax({ diff --git a/lib/gollum/public/gollum/stylesheets/template.scss b/lib/gollum/public/gollum/stylesheets/template.scss index f444c135..60bd29e8 100644 --- a/lib/gollum/public/gollum/stylesheets/template.scss +++ b/lib/gollum/public/gollum/stylesheets/template.scss @@ -726,4 +726,4 @@ a { color: #A31515; } } -} +} \ No newline at end of file diff --git a/lib/gollum/templates/history.mustache b/lib/gollum/templates/history.mustache index 2e726f1b..8d8c92d0 100644 --- a/lib/gollum/templates/history.mustache +++ b/lib/gollum/templates/history.mustache @@ -1,16 +1,17 @@