gitlab-org--gitlab-foss/app/assets/javascripts/zen_mode.js.coffee

57 lines
1.7 KiB
CoffeeScript
Raw Normal View History

2015-05-21 05:25:18 +00:00
#= require dropzone
#= require mousetrap
#= require mousetrap/pause
2014-09-11 16:19:49 +00:00
class @ZenMode
constructor: ->
@active_zen_area = null
@active_checkbox = null
@scroll_position = 0
$(window).scroll =>
if not @active_checkbox
@scroll_position = window.pageYOffset
2014-09-11 16:19:49 +00:00
$('body').on 'click', '.zen-enter-link', (e) =>
e.preventDefault()
$(e.currentTarget).closest('.zennable').find('.zen-toggle-comment').prop('checked', true).change()
$('body').on 'click', '.zen-leave-link', (e) =>
e.preventDefault()
$(e.currentTarget).closest('.zennable').find('.zen-toggle-comment').prop('checked', false).change()
$('body').on 'change', '.zen-toggle-comment', (e) =>
2014-09-19 15:32:23 +00:00
checkbox = e.currentTarget
2014-09-11 16:19:49 +00:00
if checkbox.checked
# Disable other keyboard shortcuts in ZEN mode
2014-09-11 16:19:49 +00:00
Mousetrap.pause()
@updateActiveZenArea(checkbox)
2014-09-11 16:19:49 +00:00
else
@exitZenMode()
$(document).on 'keydown', (e) =>
2015-05-21 05:25:18 +00:00
if e.keyCode is 27 # Esc
2014-09-11 16:19:49 +00:00
@exitZenMode()
e.preventDefault()
2014-09-11 16:19:49 +00:00
updateActiveZenArea: (checkbox) =>
2014-09-11 16:19:49 +00:00
@active_checkbox = $(checkbox)
@active_checkbox.prop('checked', true)
@active_zen_area = @active_checkbox.parent().find('textarea')
# Prevent a user-resized textarea from persisting to fullscreen
@active_zen_area.removeAttr('style')
2014-09-11 16:19:49 +00:00
@active_zen_area.focus()
2014-09-19 15:32:23 +00:00
2014-09-11 16:19:49 +00:00
exitZenMode: =>
if @active_zen_area isnt null
Mousetrap.unpause()
@active_checkbox.prop('checked', false)
@active_zen_area = null
@active_checkbox = null
2015-05-21 05:25:18 +00:00
@restoreScroll(@scroll_position)
2014-10-01 14:40:30 +00:00
# Enable dropzone when leaving ZEN mode
Dropzone.forElement('.div-dropzone').enable()
2015-05-21 05:25:18 +00:00
restoreScroll: (y) ->
window.scrollTo(window.pageXOffset, y)