Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
67d96b0f
Commit
67d96b0f
authored
Aug 27, 2014
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7611 from yglukhov/sticky-diff-headers
Diff headers made sticky.
parents
f089fd5f
6eb85b1a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
173 additions
and
1 deletion
+173
-1
app/assets/javascripts/application.js.coffee
app/assets/javascripts/application.js.coffee
+1
-0
app/assets/javascripts/diff.js.coffee
app/assets/javascripts/diff.js.coffee
+2
-1
vendor/assets/javascripts/jquery.sticky.js
vendor/assets/javascripts/jquery.sticky.js
+170
-0
No files found.
app/assets/javascripts/application.js.coffee
View file @
67d96b0f
...
...
@@ -15,6 +15,7 @@
#= require jquery.atwho
#= require jquery.scrollTo
#= require jquery.blockUI
#= require jquery.sticky
#= require turbolinks
#= require jquery.turbolinks
#= require bootstrap
...
...
app/assets/javascripts/diff.js.coffee
View file @
67d96b0f
...
...
@@ -34,7 +34,8 @@ class Diff
$
.
get
(
link
,
params
,
(
response
)
=>
target
.
parent
().
replaceWith
(
response
)
)
)
).
ready
=>
$
(
".diff-header"
).
sticky
{
responsiveWidth
:
true
,
getWidthFrom
:
".diff-file"
}
lineNumbers
:
(
line
)
->
return
([
0
,
0
])
unless
line
.
children
().
length
...
...
vendor/assets/javascripts/jquery.sticky.js
0 → 100755
View file @
67d96b0f
// Sticky Plugin v1.0.0 for jQuery
// =============
// Author: Anthony Garand
// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
// Improvements by Leonardo C. Daronco (daronco)
// Created: 2/14/2011
// Date: 2/12/2012
// Website: http://labs.anthonygarand.com/sticky
// Description: Makes an element on the page stick on the screen as you scroll
// It will only set the 'top' and 'position' of your element, you
// might need to adjust the width in some cases.
(
function
(
$
)
{
var
defaults
=
{
topSpacing
:
0
,
bottomSpacing
:
0
,
className
:
'
is-sticky
'
,
wrapperClassName
:
'
sticky-wrapper
'
,
center
:
false
,
getWidthFrom
:
''
,
responsiveWidth
:
false
},
$window
=
$
(
window
),
$document
=
$
(
document
),
sticked
=
[],
windowHeight
=
$window
.
height
(),
scroller
=
function
()
{
var
scrollTop
=
$window
.
scrollTop
(),
documentHeight
=
$document
.
height
(),
dwh
=
documentHeight
-
windowHeight
,
extra
=
(
scrollTop
>
dwh
)
?
dwh
-
scrollTop
:
0
;
for
(
var
i
=
0
;
i
<
sticked
.
length
;
i
++
)
{
var
s
=
sticked
[
i
],
elementTop
=
s
.
stickyWrapper
.
offset
().
top
,
etse
=
elementTop
-
s
.
topSpacing
-
extra
;
if
(
scrollTop
<=
etse
)
{
if
(
s
.
currentTop
!==
null
)
{
s
.
stickyElement
.
css
(
'
position
'
,
''
)
.
css
(
'
top
'
,
''
);
s
.
stickyElement
.
trigger
(
'
sticky-end
'
,
[
s
]).
parent
().
removeClass
(
s
.
className
);
s
.
currentTop
=
null
;
}
}
else
{
var
newTop
=
documentHeight
-
s
.
stickyElement
.
outerHeight
()
-
s
.
topSpacing
-
s
.
bottomSpacing
-
scrollTop
-
extra
;
if
(
newTop
<
0
)
{
newTop
=
newTop
+
s
.
topSpacing
;
}
else
{
newTop
=
s
.
topSpacing
;
}
if
(
s
.
currentTop
!=
newTop
)
{
s
.
stickyElement
.
css
(
'
position
'
,
'
fixed
'
)
.
css
(
'
top
'
,
newTop
);
if
(
typeof
s
.
getWidthFrom
!==
'
undefined
'
)
{
s
.
stickyElement
.
css
(
'
width
'
,
$
(
s
.
getWidthFrom
).
width
());
}
s
.
stickyElement
.
trigger
(
'
sticky-start
'
,
[
s
]).
parent
().
addClass
(
s
.
className
);
s
.
currentTop
=
newTop
;
}
}
}
},
resizer
=
function
()
{
windowHeight
=
$window
.
height
();
for
(
var
i
=
0
;
i
<
sticked
.
length
;
i
++
)
{
var
s
=
sticked
[
i
];
if
(
typeof
s
.
getWidthFrom
!==
'
undefined
'
&&
s
.
responsiveWidth
===
true
)
{
s
.
stickyElement
.
css
(
'
width
'
,
$
(
s
.
getWidthFrom
).
width
());
}
}
},
methods
=
{
init
:
function
(
options
)
{
var
o
=
$
.
extend
({},
defaults
,
options
);
return
this
.
each
(
function
()
{
var
stickyElement
=
$
(
this
);
var
stickyId
=
stickyElement
.
attr
(
'
id
'
);
var
wrapperId
=
stickyId
?
stickyId
+
'
-
'
+
defaults
.
wrapperClassName
:
defaults
.
wrapperClassName
var
wrapper
=
$
(
'
<div></div>
'
)
.
attr
(
'
id
'
,
stickyId
+
'
-sticky-wrapper
'
)
.
addClass
(
o
.
wrapperClassName
);
stickyElement
.
wrapAll
(
wrapper
);
if
(
o
.
center
)
{
stickyElement
.
parent
().
css
({
width
:
stickyElement
.
outerWidth
(),
marginLeft
:
"
auto
"
,
marginRight
:
"
auto
"
});
}
if
(
stickyElement
.
css
(
"
float
"
)
==
"
right
"
)
{
stickyElement
.
css
({
"
float
"
:
"
none
"
}).
parent
().
css
({
"
float
"
:
"
right
"
});
}
var
stickyWrapper
=
stickyElement
.
parent
();
stickyWrapper
.
css
(
'
height
'
,
stickyElement
.
outerHeight
());
sticked
.
push
({
topSpacing
:
o
.
topSpacing
,
bottomSpacing
:
o
.
bottomSpacing
,
stickyElement
:
stickyElement
,
currentTop
:
null
,
stickyWrapper
:
stickyWrapper
,
className
:
o
.
className
,
getWidthFrom
:
o
.
getWidthFrom
,
responsiveWidth
:
o
.
responsiveWidth
});
});
},
update
:
scroller
,
unstick
:
function
(
options
)
{
return
this
.
each
(
function
()
{
var
unstickyElement
=
$
(
this
);
var
removeIdx
=
-
1
;
for
(
var
i
=
0
;
i
<
sticked
.
length
;
i
++
)
{
if
(
sticked
[
i
].
stickyElement
.
get
(
0
)
==
unstickyElement
.
get
(
0
))
{
removeIdx
=
i
;
}
}
if
(
removeIdx
!=
-
1
)
{
sticked
.
splice
(
removeIdx
,
1
);
unstickyElement
.
unwrap
();
unstickyElement
.
removeAttr
(
'
style
'
);
}
});
}
};
// should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
if
(
window
.
addEventListener
)
{
window
.
addEventListener
(
'
scroll
'
,
scroller
,
false
);
window
.
addEventListener
(
'
resize
'
,
resizer
,
false
);
}
else
if
(
window
.
attachEvent
)
{
window
.
attachEvent
(
'
onscroll
'
,
scroller
);
window
.
attachEvent
(
'
onresize
'
,
resizer
);
}
$
.
fn
.
sticky
=
function
(
method
)
{
if
(
methods
[
method
])
{
return
methods
[
method
].
apply
(
this
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
else
if
(
typeof
method
===
'
object
'
||
!
method
)
{
return
methods
.
init
.
apply
(
this
,
arguments
);
}
else
{
$
.
error
(
'
Method
'
+
method
+
'
does not exist on jQuery.sticky
'
);
}
};
$
.
fn
.
unstick
=
function
(
method
)
{
if
(
methods
[
method
])
{
return
methods
[
method
].
apply
(
this
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
else
if
(
typeof
method
===
'
object
'
||
!
method
)
{
return
methods
.
unstick
.
apply
(
this
,
arguments
);
}
else
{
$
.
error
(
'
Method
'
+
method
+
'
does not exist on jQuery.sticky
'
);
}
};
$
(
function
()
{
setTimeout
(
scroller
,
0
);
});
})(
jQuery
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment