Fix scroll to highlighted line. Replace scrollTO js file with gem
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
9f80ab8e75
commit
74079fe236
5 changed files with 6 additions and 227 deletions
1
Gemfile
1
Gemfile
|
@ -163,6 +163,7 @@ gem 'select2-rails'
|
|||
gem 'jquery-atwho-rails', "~> 0.3.3"
|
||||
gem "jquery-rails"
|
||||
gem "jquery-ui-rails"
|
||||
gem "jquery-scrollto-rails"
|
||||
gem "raphael-rails", "~> 2.1.2"
|
||||
gem 'bootstrap-sass', '~> 3.0'
|
||||
gem "font-awesome-rails", '~> 3.2'
|
||||
|
|
|
@ -250,6 +250,8 @@ GEM
|
|||
jquery-rails (3.1.0)
|
||||
railties (>= 3.0, < 5.0)
|
||||
thor (>= 0.14, < 2.0)
|
||||
jquery-scrollto-rails (1.4.3)
|
||||
railties (> 3.1, < 5.0)
|
||||
jquery-turbolinks (2.0.1)
|
||||
railties (>= 3.1.0)
|
||||
turbolinks
|
||||
|
@ -607,6 +609,7 @@ DEPENDENCIES
|
|||
jasmine (= 2.0.0.rc5)
|
||||
jquery-atwho-rails (~> 0.3.3)
|
||||
jquery-rails
|
||||
jquery-scrollto-rails
|
||||
jquery-turbolinks
|
||||
jquery-ui-rails
|
||||
kaminari (~> 0.15.1)
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#= require jquery.history
|
||||
#= require jquery.waitforimages
|
||||
#= require jquery.atwho
|
||||
#= require jquery.scrollto
|
||||
#= require jquery.scrollTo
|
||||
#= require jquery.blockUI
|
||||
#= require turbolinks
|
||||
#= require jquery.turbolinks
|
||||
|
|
|
@ -26,7 +26,7 @@ class BlobView
|
|||
unless isNaN first_line
|
||||
$("#tree-content-holder .highlight .line").removeClass("hll")
|
||||
$("#LC#{line}").addClass("hll") for line in [first_line..last_line]
|
||||
$("#L#{first_line}").ScrollTo() unless e?
|
||||
$.scrollTo("#L#{first_line}") unless e?
|
||||
|
||||
# parse selected lines from hash
|
||||
# always return first and last line (initialized to NaN)
|
||||
|
|
225
vendor/assets/javascripts/jquery.scrollto.js
vendored
225
vendor/assets/javascripts/jquery.scrollto.js
vendored
|
@ -1,225 +0,0 @@
|
|||
/**
|
||||
* @depends jquery
|
||||
* @name jquery.scrollto
|
||||
* @package jquery-scrollto {@link http://balupton.com/projects/jquery-scrollto}
|
||||
*/
|
||||
|
||||
/**
|
||||
* jQuery Aliaser
|
||||
*/
|
||||
(function(window,undefined){
|
||||
// Prepare
|
||||
var jQuery, $, ScrollTo;
|
||||
jQuery = $ = window.jQuery;
|
||||
|
||||
/**
|
||||
* jQuery ScrollTo (balupton edition)
|
||||
* @version 1.2.0
|
||||
* @date July 9, 2012
|
||||
* @since 0.1.0, August 27, 2010
|
||||
* @package jquery-scrollto {@link http://balupton.com/projects/jquery-scrollto}
|
||||
* @author Benjamin "balupton" Lupton {@link http://balupton.com}
|
||||
* @copyright (c) 2010 Benjamin Arthur Lupton {@link http://balupton.com}
|
||||
* @license MIT License {@link http://creativecommons.org/licenses/MIT/}
|
||||
*/
|
||||
ScrollTo = $.ScrollTo = $.ScrollTo || {
|
||||
/**
|
||||
* The Default Configuration
|
||||
*/
|
||||
config: {
|
||||
duration: 400,
|
||||
easing: 'swing',
|
||||
callback: undefined,
|
||||
durationMode: 'each',
|
||||
offsetTop: 0,
|
||||
offsetLeft: 0
|
||||
},
|
||||
|
||||
/**
|
||||
* Configure ScrollTo
|
||||
*/
|
||||
configure: function(options){
|
||||
// Apply Options to Config
|
||||
$.extend(ScrollTo.config, options||{});
|
||||
|
||||
// Chain
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Perform the Scroll Animation for the Collections
|
||||
* We use $inline here, so we can determine the actual offset start for each overflow:scroll item
|
||||
* Each collection is for each overflow:scroll item
|
||||
*/
|
||||
scroll: function(collections, config){
|
||||
// Prepare
|
||||
var collection, $container, container, $target, $inline, position,
|
||||
containerScrollTop, containerScrollLeft,
|
||||
containerScrollTopEnd, containerScrollLeftEnd,
|
||||
startOffsetTop, targetOffsetTop, targetOffsetTopAdjusted,
|
||||
startOffsetLeft, targetOffsetLeft, targetOffsetLeftAdjusted,
|
||||
scrollOptions,
|
||||
callback;
|
||||
|
||||
// Determine the Scroll
|
||||
collection = collections.pop();
|
||||
$container = collection.$container;
|
||||
container = $container.get(0);
|
||||
$target = collection.$target;
|
||||
|
||||
// Prepare the Inline Element of the Container
|
||||
$inline = $('<span/>').css({
|
||||
'position': 'absolute',
|
||||
'top': '0px',
|
||||
'left': '0px'
|
||||
});
|
||||
position = $container.css('position');
|
||||
|
||||
// Insert the Inline Element of the Container
|
||||
$container.css('position','relative');
|
||||
$inline.appendTo($container);
|
||||
|
||||
// Determine the top offset
|
||||
startOffsetTop = $inline.offset().top;
|
||||
targetOffsetTop = $target.offset().top;
|
||||
targetOffsetTopAdjusted = targetOffsetTop - startOffsetTop - parseInt(config.offsetTop,10);
|
||||
|
||||
// Determine the left offset
|
||||
startOffsetLeft = $inline.offset().left;
|
||||
targetOffsetLeft = $target.offset().left;
|
||||
targetOffsetLeftAdjusted = targetOffsetLeft - startOffsetLeft - parseInt(config.offsetLeft,10);
|
||||
|
||||
// Determine current scroll positions
|
||||
containerScrollTop = container.scrollTop;
|
||||
containerScrollLeft = container.scrollLeft;
|
||||
|
||||
// Reset the Inline Element of the Container
|
||||
$inline.remove();
|
||||
$container.css('position',position);
|
||||
|
||||
// Prepare the scroll options
|
||||
scrollOptions = {};
|
||||
|
||||
// Prepare the callback
|
||||
callback = function(event){
|
||||
// Check
|
||||
if ( collections.length === 0 ) {
|
||||
// Callback
|
||||
if ( typeof config.callback === 'function' ) {
|
||||
config.callback.apply(this,[event]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Recurse
|
||||
ScrollTo.scroll(collections,config);
|
||||
}
|
||||
// Return true
|
||||
return true;
|
||||
};
|
||||
|
||||
// Handle if we only want to scroll if we are outside the viewport
|
||||
if ( config.onlyIfOutside ) {
|
||||
// Determine current scroll positions
|
||||
containerScrollTopEnd = containerScrollTop + $container.height();
|
||||
containerScrollLeftEnd = containerScrollLeft + $container.width();
|
||||
|
||||
// Check if we are in the range of the visible area of the container
|
||||
if ( containerScrollTop < targetOffsetTopAdjusted && targetOffsetTopAdjusted < containerScrollTopEnd ) {
|
||||
targetOffsetTopAdjusted = containerScrollTop;
|
||||
}
|
||||
if ( containerScrollLeft < targetOffsetLeftAdjusted && targetOffsetLeftAdjusted < containerScrollLeftEnd ) {
|
||||
targetOffsetLeftAdjusted = containerScrollLeft;
|
||||
}
|
||||
}
|
||||
|
||||
// Determine the scroll options
|
||||
if ( targetOffsetTopAdjusted !== containerScrollTop ) {
|
||||
scrollOptions.scrollTop = targetOffsetTopAdjusted;
|
||||
}
|
||||
if ( targetOffsetLeftAdjusted !== containerScrollLeft ) {
|
||||
scrollOptions.scrollLeft = targetOffsetLeftAdjusted;
|
||||
}
|
||||
|
||||
// Perform the scroll
|
||||
if ( $.browser.safari && container === document.body ) {
|
||||
window.scrollTo(scrollOptions.scrollLeft, scrollOptions.scrollTop);
|
||||
callback();
|
||||
}
|
||||
else if ( scrollOptions.scrollTop || scrollOptions.scrollLeft ) {
|
||||
$container.animate(scrollOptions, config.duration, config.easing, callback);
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
|
||||
// Return true
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* ScrollTo the Element using the Options
|
||||
*/
|
||||
fn: function(options){
|
||||
// Prepare
|
||||
var collections, config, $container, container;
|
||||
collections = [];
|
||||
|
||||
// Prepare
|
||||
var $target = $(this);
|
||||
if ( $target.length === 0 ) {
|
||||
// Chain
|
||||
return this;
|
||||
}
|
||||
|
||||
// Handle Options
|
||||
config = $.extend({},ScrollTo.config,options);
|
||||
|
||||
// Fetch
|
||||
$container = $target.parent();
|
||||
container = $container.get(0);
|
||||
|
||||
// Cycle through the containers
|
||||
while ( ($container.length === 1) && (container !== document.body) && (container !== document) ) {
|
||||
// Check Container for scroll differences
|
||||
var scrollTop, scrollLeft;
|
||||
scrollTop = $container.css('overflow-y') !== 'visible' && container.scrollHeight !== container.clientHeight;
|
||||
scrollLeft = $container.css('overflow-x') !== 'visible' && container.scrollWidth !== container.clientWidth;
|
||||
if ( scrollTop || scrollLeft ) {
|
||||
// Push the Collection
|
||||
collections.push({
|
||||
'$container': $container,
|
||||
'$target': $target
|
||||
});
|
||||
// Update the Target
|
||||
$target = $container;
|
||||
}
|
||||
// Update the Container
|
||||
$container = $container.parent();
|
||||
container = $container.get(0);
|
||||
}
|
||||
|
||||
// Add the final collection
|
||||
collections.push({
|
||||
'$container': $(
|
||||
($.browser.msie || $.browser.mozilla) ? 'html' : 'body'
|
||||
),
|
||||
'$target': $target
|
||||
});
|
||||
|
||||
// Adjust the Config
|
||||
if ( config.durationMode === 'all' ) {
|
||||
config.duration /= collections.length;
|
||||
}
|
||||
|
||||
// Handle
|
||||
ScrollTo.scroll(collections,config);
|
||||
|
||||
// Chain
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
// Apply our jQuery Prototype Function
|
||||
$.fn.ScrollTo = $.ScrollTo.fn;
|
||||
|
||||
})(window);
|
Loading…
Reference in a new issue