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
0
Merge Requests
0
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
Boxiang Sun
gitlab-ce
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
Show 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)
...
@@ -43,6 +43,7 @@ v 8.4.0 (unreleased)
- API: Add support for deleting a tag via the API (Robert Schilling)
- API: Add support for deleting a tag via the API (Robert Schilling)
- Allow subsequent validations in CI Linter
- Allow subsequent validations in CI Linter
- Fix Encoding::CompatibilityError bug when markdown content has some complex URL (Jason Lee)
- Fix Encoding::CompatibilityError bug when markdown content has some complex URL (Jason Lee)
- Autosize Markdown textareas
v 8.3.4
v 8.3.4
- Use gitlab-workhorse 0.5.4 (fixes API routing bug)
- 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
...
@@ -246,6 +246,7 @@ class @Notes
else
else
previewButton
.
removeClass
(
"turn-on"
).
addClass
"turn-off"
previewButton
.
removeClass
(
"turn-on"
).
addClass
"turn-off"
autosize
(
textarea
)
new
Autosave
textarea
,
[
new
Autosave
textarea
,
[
"Note"
"Note"
form
.
find
(
"#note_commit_id"
).
val
()
form
.
find
(
"#note_commit_id"
).
val
()
...
...
app/assets/stylesheets/framework/markdown_area.scss
View file @
552c179a
...
@@ -107,6 +107,7 @@
...
@@ -107,6 +107,7 @@
background
:
#FFF
;
background
:
#FFF
;
border
:
1px
solid
#ddd
;
border
:
1px
solid
#ddd
;
min-height
:
140px
;
min-height
:
140px
;
max-height
:
430px
;
padding
:
5px
;
padding
:
5px
;
box-shadow
:
none
;
box-shadow
:
none
;
width
:
100%
;
width
:
100%
;
...
...
app/assets/stylesheets/pages/note_form.scss
View file @
552c179a
...
@@ -159,6 +159,7 @@
...
@@ -159,6 +159,7 @@
.edit_note
{
.edit_note
{
.markdown-area
{
.markdown-area
{
min-height
:
140px
;
min-height
:
140px
;
max-height
:
430px
;
}
}
.note-form-actions
{
.note-form-actions
{
background
:
transparent
;
background
:
transparent
;
...
...
app/views/projects/_zen.html.haml
View file @
552c179a
.zennable
.zennable
.zen-backdrop
.zen-backdrop
-
classes
<<
' js-gfm-input markdown-area'
-
classes
<<
' js-gfm-input
js-autosize
markdown-area'
-
if
defined?
(
f
)
&&
f
-
if
defined?
(
f
)
&&
f
=
f
.
text_area
attr
,
class:
classes
=
f
.
text_area
attr
,
class:
classes
-
else
-
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