The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Rocket.Chat/packages/rocketchat-ui/client/lib/modal.js

108 lines
2.9 KiB

this.Modal = (function() {
const self = {};
const win = $(window);
//mistérios da vida c.483: Pq a self.$window diz ter 100% da janela via css mas na verdade ocupa menos de 100% da tela?
//isso impede que o retorno da janela ao normal quando não mais necessária a classe fluid. (comportamento dançante)
function focus() {
if (self.$modal) {
const input = self.$modal.find('input[type=\'text\']');
if (input.length) { return input.get(0).focus(); }
}
}
function check() {
if (self.$modal && self.$modal.length) {
if (win.height() < (self.$window.outerHeight() + (win.height() * 0.10))) {
if (!self.$modal.hasClass('fluid')) {
return self.$modal.addClass('fluid');
}
}
}
}
function stopListening() {
if (self.interval) { return clearInterval(self.interval); }
}
function startListening() {
stopListening();
return self.interval = setInterval(() => check(), 100);
}
function close() {
self.$modal.addClass('closed');
win.unbind('keydown.modal');
// acionar no on-complete da animação
return setTimeout(function() {
self.opened = 0;
stopListening();
return self.$modal.removeClass('opened closed');
}, 300);
}
function keydown(e) {
const k = e.which;
if (k === 27) {
e.preventDefault();
e.stopImmediatePropagation();
return close();
}
}
function checkFooter() {
if (self.$footer && self.$footer.length) {
const buttons = self.$footer.find('button');
return buttons.each(function() {
const btn = $(this);
if (btn.html().match(/fechar/ig)) {
return btn.click(function(e) {
e.preventDefault();
return close();
});
}
});
}
}
function setContent(template, data) {
self.$main.empty();
if (template) {
if (data) {
Blaze.renderWithData(template, data, self.$main.get(0));
} else {
Blaze.render(template, self.$main.get(0));
}
checkFooter();
return check();
}
}
function open(template, params) {
params = params || {};
RocketChat.animeBack(self.$modal, () => focus());
self.opened = 1;
if (params.listening) { startListening(); }
if (template != null) { setContent(template, params.data); }
self.$modal.addClass('opened');
self.$modal.removeClass('fluid');
return setTimeout(() => focus(), 200);
}
function init($modal, params) {
self.params = params || {};
self.opened = 0;
self.initialized = 0;
self.$modal = $modal.length ? $modal : $('.rocket-modal');
if (self.$modal.length) {
self.initialized = 0;
self.$window = self.$modal.find('.modal');
self.$main = self.$modal.find('main');
self.$close = self.$modal.find('header > .close');
self.$footer = self.$modal.find('footer');
self.$close.unbind('click').click(close);
win.unbind('resize.modal').bind('resize.modal', check);
return win.unbind('keydown.modal').bind('keydown.modal', e => keydown(e));
}
}
return { init, open, close, focus, setContent };
}());