Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
GitLab
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
projects.thm.de
GitLab
Commits
552c179a
Commit
552c179a
authored
Nov 29, 2015
by
Robert Speicher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Autosize textareas
parent
0e344aa2
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
252 additions
and
1 deletion
+252
-1
CHANGELOG
CHANGELOG
+1
-0
app/assets/javascripts/behaviors/autosize.js.coffee
app/assets/javascripts/behaviors/autosize.js.coffee
+4
-0
app/assets/javascripts/notes.js.coffee
app/assets/javascripts/notes.js.coffee
+1
-0
app/assets/stylesheets/framework/markdown_area.scss
app/assets/stylesheets/framework/markdown_area.scss
+1
-0
app/assets/stylesheets/pages/note_form.scss
app/assets/stylesheets/pages/note_form.scss
+1
-0
app/views/projects/_zen.html.haml
app/views/projects/_zen.html.haml
+1
-1
vendor/assets/javascripts/autosize.js
vendor/assets/javascripts/autosize.js
+243
-0
No files found.
CHANGELOG
View file @
552c179a
...
...
@@ -43,6 +43,7 @@ v 8.4.0 (unreleased)
- API: Add support for deleting a tag via the API (Robert Schilling)
- Allow subsequent validations in CI Linter
- Fix Encoding::CompatibilityError bug when markdown content has some complex URL (Jason Lee)
- Autosize Markdown textareas
v 8.3.4
- Use gitlab-workhorse 0.5.4 (fixes API routing bug)
...
...
app/assets/javascripts/behaviors/autosize.js.coffee
0 → 100644
View file @
552c179a
#= require autosize
$
->
autosize
(
$
(
'.js-autosize'
))
app/assets/javascripts/notes.js.coffee
View file @
552c179a
...
...
@@ -246,6 +246,7 @@ class @Notes
else
previewButton
.
removeClass
(
"turn-on"
).
addClass
"turn-off"
autosize
(
textarea
)
new
Autosave
textarea
,
[
"Note"
form
.
find
(
"#note_commit_id"
).
val
()
...
...
app/assets/stylesheets/framework/markdown_area.scss
View file @
552c179a
...
...
@@ -107,6 +107,7 @@
background
:
#FFF
;
border
:
1px
solid
#ddd
;
min-height
:
140px
;
max-height
:
430px
;
padding
:
5px
;
box-shadow
:
none
;
width
:
100%
;
...
...
app/assets/stylesheets/pages/note_form.scss
View file @
552c179a
...
...
@@ -159,6 +159,7 @@
.edit_note
{
.markdown-area
{
min-height
:
140px
;
max-height
:
430px
;
}
.note-form-actions
{
background
:
transparent
;
...
...
app/views/projects/_zen.html.haml
View file @
552c179a
.zennable
.zen-backdrop
-
classes
<<
' js-gfm-input markdown-area'
-
classes
<<
' js-gfm-input
js-autosize
markdown-area'
-
if
defined?
(
f
)
&&
f
=
f
.
text_area
attr
,
class:
classes
-
else
...
...
vendor/assets/javascripts/autosize.js
0 → 100755
View file @
552c179a
/*!
Autosize 3.0.14
license: MIT
http://www.jacklmoore.com/autosize
*/
(
function
(
global
,
factory
)
{
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
define
([
'
exports
'
,
'
module
'
],
factory
);
}
else
if
(
typeof
exports
!==
'
undefined
'
&&
typeof
module
!==
'
undefined
'
)
{
factory
(
exports
,
module
);
}
else
{
var
mod
=
{
exports
:
{}
};
factory
(
mod
.
exports
,
mod
);
global
.
autosize
=
mod
.
exports
;
}
})(
this
,
function
(
exports
,
module
)
{
'
use strict
'
;
var
set
=
typeof
Set
===
'
function
'
?
new
Set
()
:
(
function
()
{
var
list
=
[];
return
{
has
:
function
has
(
key
)
{
return
Boolean
(
list
.
indexOf
(
key
)
>
-
1
);
},
add
:
function
add
(
key
)
{
list
.
push
(
key
);
},
'
delete
'
:
function
_delete
(
key
)
{
list
.
splice
(
list
.
indexOf
(
key
),
1
);
}
};
})();
function
assign
(
ta
)
{
var
_ref
=
arguments
[
1
]
===
undefined
?
{}
:
arguments
[
1
];
var
_ref$setOverflowX
=
_ref
.
setOverflowX
;
var
setOverflowX
=
_ref$setOverflowX
===
undefined
?
true
:
_ref$setOverflowX
;
var
_ref$setOverflowY
=
_ref
.
setOverflowY
;
var
setOverflowY
=
_ref$setOverflowY
===
undefined
?
true
:
_ref$setOverflowY
;
if
(
!
ta
||
!
ta
.
nodeName
||
ta
.
nodeName
!==
'
TEXTAREA
'
||
set
.
has
(
ta
))
return
;
var
heightOffset
=
null
;
var
overflowY
=
null
;
var
clientWidth
=
ta
.
clientWidth
;
function
init
()
{
var
style
=
window
.
getComputedStyle
(
ta
,
null
);
overflowY
=
style
.
overflowY
;
if
(
style
.
resize
===
'
vertical
'
)
{
ta
.
style
.
resize
=
'
none
'
;
}
else
if
(
style
.
resize
===
'
both
'
)
{
ta
.
style
.
resize
=
'
horizontal
'
;
}
if
(
style
.
boxSizing
===
'
content-box
'
)
{
heightOffset
=
-
(
parseFloat
(
style
.
paddingTop
)
+
parseFloat
(
style
.
paddingBottom
));
}
else
{
heightOffset
=
parseFloat
(
style
.
borderTopWidth
)
+
parseFloat
(
style
.
borderBottomWidth
);
}
// Fix when a textarea is not on document body and heightOffset is Not a Number
if
(
isNaN
(
heightOffset
))
{
heightOffset
=
0
;
}
update
();
}
function
changeOverflow
(
value
)
{
{
// Chrome/Safari-specific fix:
// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
// made available by removing the scrollbar. The following forces the necessary text reflow.
var
width
=
ta
.
style
.
width
;
ta
.
style
.
width
=
'
0px
'
;
// Force reflow:
/* jshint ignore:start */
ta
.
offsetWidth
;
/* jshint ignore:end */
ta
.
style
.
width
=
width
;
}
overflowY
=
value
;
if
(
setOverflowY
)
{
ta
.
style
.
overflowY
=
value
;
}
resize
();
}
function
resize
()
{
var
htmlTop
=
window
.
pageYOffset
;
var
bodyTop
=
document
.
body
.
scrollTop
;
var
originalHeight
=
ta
.
style
.
height
;
ta
.
style
.
height
=
'
auto
'
;
var
endHeight
=
ta
.
scrollHeight
+
heightOffset
;
if
(
ta
.
scrollHeight
===
0
)
{
// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
ta
.
style
.
height
=
originalHeight
;
return
;
}
ta
.
style
.
height
=
endHeight
+
'
px
'
;
// used to check if an update is actually necessary on window.resize
clientWidth
=
ta
.
clientWidth
;
// prevents scroll-position jumping
document
.
documentElement
.
scrollTop
=
htmlTop
;
document
.
body
.
scrollTop
=
bodyTop
;
}
function
update
()
{
var
startHeight
=
ta
.
style
.
height
;
resize
();
var
style
=
window
.
getComputedStyle
(
ta
,
null
);
if
(
style
.
height
!==
ta
.
style
.
height
)
{
if
(
overflowY
!==
'
visible
'
)
{
changeOverflow
(
'
visible
'
);
}
}
else
{
if
(
overflowY
!==
'
hidden
'
)
{
changeOverflow
(
'
hidden
'
);
}
}
if
(
startHeight
!==
ta
.
style
.
height
)
{
var
evt
=
document
.
createEvent
(
'
Event
'
);
evt
.
initEvent
(
'
autosize:resized
'
,
true
,
false
);
ta
.
dispatchEvent
(
evt
);
}
}
var
pageResize
=
function
pageResize
()
{
if
(
ta
.
clientWidth
!==
clientWidth
)
{
update
();
}
};
var
destroy
=
(
function
(
style
)
{
window
.
removeEventListener
(
'
resize
'
,
pageResize
,
false
);
ta
.
removeEventListener
(
'
input
'
,
update
,
false
);
ta
.
removeEventListener
(
'
keyup
'
,
update
,
false
);
ta
.
removeEventListener
(
'
autosize:destroy
'
,
destroy
,
false
);
ta
.
removeEventListener
(
'
autosize:update
'
,
update
,
false
);
set
[
'
delete
'
](
ta
);
Object
.
keys
(
style
).
forEach
(
function
(
key
)
{
ta
.
style
[
key
]
=
style
[
key
];
});
}).
bind
(
ta
,
{
height
:
ta
.
style
.
height
,
resize
:
ta
.
style
.
resize
,
overflowY
:
ta
.
style
.
overflowY
,
overflowX
:
ta
.
style
.
overflowX
,
wordWrap
:
ta
.
style
.
wordWrap
});
ta
.
addEventListener
(
'
autosize:destroy
'
,
destroy
,
false
);
// IE9 does not fire onpropertychange or oninput for deletions,
// so binding to onkeyup to catch most of those events.
// There is no way that I know of to detect something like 'cut' in IE9.
if
(
'
onpropertychange
'
in
ta
&&
'
oninput
'
in
ta
)
{
ta
.
addEventListener
(
'
keyup
'
,
update
,
false
);
}
window
.
addEventListener
(
'
resize
'
,
pageResize
,
false
);
ta
.
addEventListener
(
'
input
'
,
update
,
false
);
ta
.
addEventListener
(
'
autosize:update
'
,
update
,
false
);
set
.
add
(
ta
);
if
(
setOverflowX
)
{
ta
.
style
.
overflowX
=
'
hidden
'
;
ta
.
style
.
wordWrap
=
'
break-word
'
;
}
init
();
}
function
destroy
(
ta
)
{
if
(
!
(
ta
&&
ta
.
nodeName
&&
ta
.
nodeName
===
'
TEXTAREA
'
))
return
;
var
evt
=
document
.
createEvent
(
'
Event
'
);
evt
.
initEvent
(
'
autosize:destroy
'
,
true
,
false
);
ta
.
dispatchEvent
(
evt
);
}
function
update
(
ta
)
{
if
(
!
(
ta
&&
ta
.
nodeName
&&
ta
.
nodeName
===
'
TEXTAREA
'
))
return
;
var
evt
=
document
.
createEvent
(
'
Event
'
);
evt
.
initEvent
(
'
autosize:update
'
,
true
,
false
);
ta
.
dispatchEvent
(
evt
);
}
var
autosize
=
null
;
// Do nothing in Node.js environment and IE8 (or lower)
if
(
typeof
window
===
'
undefined
'
||
typeof
window
.
getComputedStyle
!==
'
function
'
)
{
autosize
=
function
(
el
)
{
return
el
;
};
autosize
.
destroy
=
function
(
el
)
{
return
el
;
};
autosize
.
update
=
function
(
el
)
{
return
el
;
};
}
else
{
autosize
=
function
(
el
,
options
)
{
if
(
el
)
{
Array
.
prototype
.
forEach
.
call
(
el
.
length
?
el
:
[
el
],
function
(
x
)
{
return
assign
(
x
,
options
);
});
}
return
el
;
};
autosize
.
destroy
=
function
(
el
)
{
if
(
el
)
{
Array
.
prototype
.
forEach
.
call
(
el
.
length
?
el
:
[
el
],
destroy
);
}
return
el
;
};
autosize
.
update
=
function
(
el
)
{
if
(
el
)
{
Array
.
prototype
.
forEach
.
call
(
el
.
length
?
el
:
[
el
],
update
);
}
return
el
;
};
}
module
.
exports
=
autosize
;
});
\ No newline at end of file
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