const fs = require ( 'fs' ) ;
const path = require ( 'path' ) ;
const az = require ( 'adm-zip' ) ;
const Mousetrap = require ( '../dep/mousetrap' ) ;
const lightRefresh = require ( '../fileview/lightrefresh' ) ;
const preModal = require ( '../modal/pre' ) ;
const postModal = require ( '../modal/post' ) ;
const showError = require ( '../modal/common/error' ) ;
const clearModals = require ( '../modal/clearmodals' ) ;
const newToast = require ( '../toast/createtoast' ) ;
const refresh = require ( '../fileview/refresh' ) ;
module . exports = ( event , pathToCompress ) => {
let zip = new az ( ) ;
if ( ! pathToCompress ) { pathToCompress = window . kade . cpath ; }
if ( window . kade . modal ) { return ; }
preModal ( 'compress-folder-modal-container' ) ;
let modalOut = document . createElement ( 'div' ) ;
modalOut . className = 'modal' ;
modalOut . id = 'compress-folder-modal-container' ;
document . body . appendChild ( modalOut ) ;
let modal = document . createElement ( 'div' ) ;
modal . className = 'modal-wrapper' ;
modalOut . appendChild ( modal ) ;
let title = document . createElement ( 'h2' ) ;
title . innerHTML = 'Compress Folder' ;
modal . appendChild ( title ) ;
let text = document . createElement ( 'p' ) ;
text . innerHTML = "Please name the zip you'd like to compress to." ;
modal . appendChild ( text ) ;
let cont = document . createElement ( 'div' ) ;
cont . className = 'button-container' ;
modal . appendChild ( cont ) ;
let input = document . createElement ( 'input' ) ;
input . placeholder = pathToCompress . split ( /\\+|\/+/gm ) . reverse ( ) [ 0 ] ;
input . value = input . placeholder ;
input . id = 'compress-folder-input' ;
let lastIn = '' ;
input . oninput = ( ) => {
if ( ! input . value . match ( /^[a-zA-Z0-9-_() ]*$/gm ) ) { input . value = lastIn ; }
else { lastIn = input . value ; }
} ;
cont . appendChild ( input ) ;
let conf = document . createElement ( 'button' ) ;
conf . innerHTML = 'Create' ;
conf . onclick = ( ) => {
try {
input . value = input . value . trim ( ) ;
if ( input . value . endsWith ( '.zip' ) ) { input . value = input . value . slice ( 0 , input . value . length - 4 ) ; }
if ( ! input . value . length ) { return ; }
if ( fs . existsSync ( path . join ( window . kade . cpath , ` ${ input . value } .zip ` ) ) ) {
if ( ! input . value . match ( /^.+\(\d\)$/gm ) ) { input . value += ' (1)' ; }
else {
let tempstr = input . value . split ( '' ) ;
tempstr [ input . value . length - 2 ] = ` ${ Number ( input . value . charAt ( input . value . length - 2 ) ) + 1 } ` ;
input . value = tempstr . join ( '' ) ;
}
return ;
}
input . style . display = 'none' ;
conf . style . display = 'none' ;
cont . style . display = 'none' ;
text . innerHTML = "Please wait a moment..." ;
closeWrap . style . display = 'none' ;
zip . addLocalFolderPromise ( pathToCompress ) . then ( ( ) => {
title . innerHTML += " - In Progress..."
text . innerHTML = "Your folder is being compressed. Please wait a moment.<br><br>This may take some time..." ;
let bar = document . createElement ( 'div' ) ;
bar . className = "loading-bar" ;
modal . appendChild ( bar ) ;
zip . writeZipPromise ( ` ${ window . kade . cpath } / ${ input . value } ${ input . value . endsWith ( '.zip' ) ? '' : '.zip' } ` , { overwrite : true } ) . then ( ( ) => {
newToast ( "Folder compressed" , [ ` The current folder was compressed into " ${ input . value } " successfully ` , ` <em> ${ window . kade . cpath } / ${ input . value } </em> ` ] , undefined , false , 5 ) ;
lightRefresh ( ) ;
modalOut . remove ( ) ;
postModal ( modalOut . id ) ;
} ) ;
} ) ;
} catch {
newToast ( "Folder not Compressed" , "An error caused that folder to not be compressed." , "#b24355" , false , 5 , ( ) => { showError ( "Folder Creation" , "There was an unknown error while trying to compress that folder. It may be a permissions issue, or the host folder doesn't exist anymore." ) ; } ) ;
clearModals ( ) ;
postModal ( modalOut . id ) ;
}
} ;
cont . appendChild ( conf ) ;
input . focus ( ) ;
let msm = new Mousetrap ( modal ) ;
msm . bind ( 'esc' , ( ) => {
lightRefresh ( ) ;
modalOut . remove ( ) ;
postModal ( modalOut . id ) ;
} ) ;
msm . bind ( 'enter' , ( ) => { conf . click ( ) ; } ) ;
let close = document . createElement ( 'a' ) ;
close . className = 'close-button' ;
close . onclick = ( ) => {
lightRefresh ( ) ;
modalOut . remove ( ) ;
postModal ( modalOut . id ) ;
} ;
let closeWrap = document . createElement ( 'div' ) ;
closeWrap . className = 'close-button-wrapper' ;
modal . appendChild ( closeWrap ) ;
closeWrap . appendChild ( close ) ;
} ;