Commit 880c9a2c authored by Clement Ho's avatar Clement Ho

Backport fix epic fullscreen

parent 9fefb6c2
...@@ -36,7 +36,10 @@ export default function dropzoneInput(form) { ...@@ -36,7 +36,10 @@ export default function dropzoneInput(form) {
$formDropzone.append(divHover); $formDropzone.append(divHover);
$formDropzone.find('.div-dropzone-hover').append(iconPaperclip); $formDropzone.find('.div-dropzone-hover').append(iconPaperclip);
if (!uploadsPath) return; if (!uploadsPath) {
$formDropzone.addClass('js-invalid-dropzone');
return;
}
const dropzone = $formDropzone.dropzone({ const dropzone = $formDropzone.dropzone({
url: uploadsPath, url: uploadsPath,
......
...@@ -71,7 +71,7 @@ export default class ZenMode { ...@@ -71,7 +71,7 @@ export default class ZenMode {
this.active_textarea = this.active_backdrop.find('textarea'); this.active_textarea = this.active_backdrop.find('textarea');
// Prevent a user-resized textarea from persisting to fullscreen // Prevent a user-resized textarea from persisting to fullscreen
this.active_textarea.removeAttr('style'); this.active_textarea.removeAttr('style');
return this.active_textarea.focus(); this.active_textarea.focus();
} }
exit() { exit() {
...@@ -81,7 +81,11 @@ export default class ZenMode { ...@@ -81,7 +81,11 @@ export default class ZenMode {
this.scrollTo(this.active_textarea); this.scrollTo(this.active_textarea);
this.active_textarea = null; this.active_textarea = null;
this.active_backdrop = null; this.active_backdrop = null;
return Dropzone.forElement('.div-dropzone').enable();
const $dropzone = $('.div-dropzone');
if ($dropzone && !$dropzone.hasClass('js-invalid-dropzone')) {
Dropzone.forElement('.div-dropzone').enable();
}
} }
} }
......
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, object-shorthand, comma-dangle, no-return-assign, new-cap, max-len */
/* global Mousetrap */ /* global Mousetrap */
import Dropzone from 'dropzone'; import Dropzone from 'dropzone';
import ZenMode from '~/zen_mode'; import ZenMode from '~/zen_mode';
(function() { describe('ZenMode', () => {
var enterZen, escapeKeydown, exitZen; let zen;
const fixtureName = 'merge_requests/merge_request_with_comment.html.raw';
describe('ZenMode', function() {
var fixtureName = 'merge_requests/merge_request_with_comment.html.raw';
preloadFixtures(fixtureName); preloadFixtures(fixtureName);
beforeEach(function() {
loadFixtures(fixtureName); function enterZen() {
spyOn(Dropzone, 'forElement').and.callFake(function() { $('.notes-form .js-zen-enter').click();
return {
enable: function() {
return true;
} }
};
// Stub Dropzone.forElement(...).enable() function exitZen() {
}); $('.notes-form .js-zen-leave').click();
this.zen = new ZenMode(); }
function escapeKeydown() {
$('.notes-form textarea').trigger($.Event('keydown', {
keyCode: 27,
}));
}
beforeEach(() => {
loadFixtures(fixtureName);
spyOn(Dropzone, 'forElement').and.callFake(() => ({
enable: () => true,
}));
zen = new ZenMode();
// Set this manually because we can't actually scroll the window // Set this manually because we can't actually scroll the window
return this.zen.scroll_position = 456; zen.scroll_position = 456;
}); });
describe('on enter', function() {
it('pauses Mousetrap', function() { describe('on enter', () => {
it('pauses Mousetrap', () => {
spyOn(Mousetrap, 'pause'); spyOn(Mousetrap, 'pause');
enterZen(); enterZen();
return expect(Mousetrap.pause).toHaveBeenCalled(); expect(Mousetrap.pause).toHaveBeenCalled();
}); });
return it('removes textarea styling', function() {
it('removes textarea styling', () => {
$('.notes-form textarea').attr('style', 'height: 400px'); $('.notes-form textarea').attr('style', 'height: 400px');
enterZen(); enterZen();
return expect($('.notes-form textarea')).not.toHaveAttr('style'); expect($('.notes-form textarea')).not.toHaveAttr('style');
});
}); });
describe('in use', function() {
beforeEach(function() {
return enterZen();
}); });
return it('exits on Escape', function() {
describe('in use', () => {
beforeEach(enterZen);
it('exits on Escape', () => {
escapeKeydown(); escapeKeydown();
return expect($('.notes-form .zen-backdrop')).not.toHaveClass('fullscreen'); expect($('.notes-form .zen-backdrop')).not.toHaveClass('fullscreen');
}); });
}); });
return describe('on exit', function() {
beforeEach(function() { describe('on exit', () => {
return enterZen(); beforeEach(enterZen);
});
it('unpauses Mousetrap', function() { it('unpauses Mousetrap', () => {
spyOn(Mousetrap, 'unpause'); spyOn(Mousetrap, 'unpause');
exitZen(); exitZen();
return expect(Mousetrap.unpause).toHaveBeenCalled(); expect(Mousetrap.unpause).toHaveBeenCalled();
}); });
return it('restores the scroll position', function() {
spyOn(this.zen, 'scrollTo'); it('restores the scroll position', () => {
spyOn(zen, 'scrollTo');
exitZen(); exitZen();
return expect(this.zen.scrollTo).toHaveBeenCalled(); expect(zen.scrollTo).toHaveBeenCalled();
});
}); });
}); });
enterZen = function() { describe('enabling dropzone', () => {
return $('.notes-form .js-zen-enter').click(); beforeEach(() => {
}; enterZen();
});
exitZen = function() { it('should not call dropzone if element is not dropzone valid', () => {
return $('.notes-form .js-zen-leave').click(); $('.div-dropzone').addClass('js-invalid-dropzone');
}; exitZen();
expect(Dropzone.forElement).not.toHaveBeenCalled();
});
escapeKeydown = function() { it('should call dropzone if element is dropzone valid', () => {
return $('.notes-form textarea').trigger($.Event('keydown', { $('.div-dropzone').removeClass('js-invalid-dropzone');
keyCode: 27 exitZen();
})); expect(Dropzone.forElement).toHaveBeenCalled();
}; });
}).call(window); });
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment