UNPKG

@reginaldo-marinho/rucula-js

Version:

Crie telas em Minutos! 🚀

353 lines (278 loc) • 14.8 kB
import { cookie } from "../../common/coockie"; import { constIdBaseWindow, constPagination } from "../../const"; export class WindowBaseDOM { private P:string private ruculaWindow = document.createElement("div"); private globalWindow:HTMLElement constructor(prefix:string, config: { globalWindow:HTMLElement, openLeftGrid:boolean, windowName:string, type?:string }){ this.P = prefix this.globalWindow = config.globalWindow if(config.type === 'header'){ config.openLeftGrid = false } this.create(config) } private create(config: { globalWindow:HTMLElement, openLeftGrid:boolean, windowName:string, type?:string }){ this.cleanGlobalWindow() this.ruculaWindow.classList.add("r-w"); this.ruculaWindow.classList.add(`${this.P}r-w`); const actions = this.leftGrid(); this.ruculaWindow.appendChild(actions) config.globalWindow?.appendChild(this.ruculaWindow); this.createMold(config.type) this.alterTheme() this.eraseForm() this.openActionswindow() this.actionCrudpreventDefault() this.widthAndHeigth() this.maximizeForm() this.openCloseForm() this.closeLeftGrid(config.openLeftGrid) this.createNameWindow(config.windowName) } private widthAndHeigth(){ let offsetTop = Number(this.ruculaWindow.offsetTop) let height = Number(window.innerHeight) this.ruculaWindow.style.height = `${height-offsetTop}px` } private createNameWindow(name:string){ let window = this.ruculaWindow.querySelector(".r-w-t") as HTMLElement if(window){ window.innerHTML = name } } private cleanGlobalWindow(){ for (let index = 0; index < this.globalWindow.childNodes.length; index++) { this.globalWindow.childNodes[index].remove(); } } private openCloseForm(){ let rNew = this.ruculaWindow.querySelector(`#${this.P}${constIdBaseWindow.NEW}`)! let itemContainer = document.querySelectorAll(`.${this.P}js-open-close-container`) rNew.addEventListener("click", () => { itemContainer.forEach(item => { item.classList.toggle("r-display-none") indicateBoxFrameOpend(rNew!, item!) }) function indicateBoxFrameOpend(rNew:Element, item:Element){ var isBoxFrame = item.classList.contains("box-frame") var isBoxFrameOpened = item.classList.contains("r-display-none") if(isBoxFrame && isBoxFrameOpened == false){ rNew.classList.add("r-box-frame-opened") } if(isBoxFrame && isBoxFrameOpened){ rNew.classList.remove("r-box-frame-opened") } } }) let rCloseGrid = this.ruculaWindow.querySelector(`#${this.P}${constIdBaseWindow.CLOSE_GRID}`) rCloseGrid?.addEventListener("click", () => { let div = document.querySelector(`.${this.P}r-f`) as HTMLDivElement div.classList.toggle('r-mobile') let leftGrid = document.getElementById(`${this.P}r-left-block`) as HTMLDivElement leftGrid.classList.toggle('r-display-block') }) } private leftGrid(){ const actions = document.createElement("div"); actions.className = "r-left-block" actions.id = `${this.P}r-left-block` const ACTIONS =` <div class="r-box-show" id="${this.P}r-box-show"> </div> <div class="r-act" id="${this.P}actions"> <div class="r-act-opt r-head" id="${this.P}w-title"> <button id="${this.P}${constIdBaseWindow.NEW}" class="r-a-b r-btn-new-cancel-close r-desktop-web"><i class="bi bi-plus-lg"></i></button> <button id="${this.P}${constIdBaseWindow.CLOSE_GRID}" class="r-a-b r-btn-new-cancel-close r-mobile"><i class="bi bi-x-lg"></i></button> <div class="r-w-t"> </div> <button id="${this.P}r-a-many" class="r-a-b"><i class="bi bi-list"></i></button> </div> <div class="r-left-block-grid" id="${this.P}w-grid"> <form class="searh-items-grid" id="${this.P}${constPagination.FIND}" autocomplete=off> <input name="r-find-value" type="text"/> <button><i class="bi bi-search"></i></button> </form> <div class="r-act-grid-body"> </div> <div class="r-act-grid-footer" id="${this.P}r-act-grid-footer"> <div> <span>N. Linha</span> <select id="${this.P}${constPagination.ROW_NUMBER}" name="len-page"> <option value="10">10</option> <option value="25">25</option> <option value="50">50</option> <option value="100">100</option> <option value="1000">1000</option> </select> </div> <div> <button id="${this.P}${constPagination.FIRST}" class="r-a-b"><i class="bi bi-arrow-up"></i></button> <button id="${this.P}${constPagination.LAST}" class="r-a-b"><i class="bi bi-arrow-down"></i></button> <button id="${this.P}${constPagination.PREVIOUS}" class="r-a-b"><i class="bi bi-arrow-left"></i></button> <button id="${this.P}${constPagination.NEXT}" class="r-a-b"><i class="bi bi-arrow-right"></i></button> </div> </div> </div> </div>` actions.innerHTML = ACTIONS; return actions.cloneNode(true); } private createMold(type?:string){ type ??= 'crud' const contentForm = document.createElement("div"); const CREATE_OR_EDIT = `<div class="container-r-f box-home ${this.P}js-open-close-container"> <div class="r-act-opt r-head" id="${this.P}w-title"> </div> <div class="r-f-items r-f-home"> <div class="r-f-home-round"> <i id="${this.P}r-f-home-icon"class="bi" ></i> </div> <h3 id="${this.P}r-f-home-title"></h3> </div> </div> <div class="${this.P}r-f container-r-f box-frame r-display-none ${this.P}js-open-close-container"> <div class="r-facede-action top"> <div class="r-head r-read-new r-facede-action top"> <div style="z-index: 10;"> <button id="${this.P}${constIdBaseWindow.ACTIONS_WINDOW}" class="r-a-b r-actions-window"><i class="bi bi-nut"></i></button> <div class="r-display-inline-block r-actions-window r-actions-window-itens"> <div class="r-display-inline-block"> <button id="${this.P}${constIdBaseWindow.MAXIMIZE_WINDOW}" class="r-a-b open-box-frame"><i class="bi bi-arrows"></i></button> <button id="${this.P}${constIdBaseWindow.MAXIMIZE_GRID}" class="r-a-b open-grid r-mobile"><i class="bi bi-grid-3x3-gap-fill"></i></button> <button id="${this.P}${constIdBaseWindow.ALTER_THEME}" class="r-a-b "><i class="bi bi-circle-half"></i></button> </div> <div class="actions-view"> <button id="${this.P}${constIdBaseWindow.GLOBALIZATION}" class="r-a-b"> <i class="bi bi-globe-americas"></i> <ol id="${this.P}${constIdBaseWindow.OLLI_GLOBALIZATION}" class="${constIdBaseWindow.OLLI_GLOBALIZATION} list-vertical-buttons list-vertical-buttons-pp-left r-display-none"> </ol> </button> <button id="${this.P}${constIdBaseWindow.ENVIROMENT}" class="r-a-b"> <div class="desc-environment"><i class="bi bi-fire"></i> <span class="description"></span> </div> <ol id="${this.P}${constIdBaseWindow.OLLI_ENVIROMENT}" class="${constIdBaseWindow.OLLI_ENVIROMENT} list-vertical-buttons list-vertical-buttons-pp-left r-display-none"> </ol> </button> </div> </div> </div> <div class="r-display-inline-block"> <button id="${this.P}${constIdBaseWindow.CHAT}" class="r-a-b"><i class="bi bi-chat-dots"></i></button> <button id="${this.P}${constIdBaseWindow.USER}" class="r-a-b"><i class="bi bi-person-circle"></i></button> </div> </div> </div> <div class="r-w-body"> ${type == 'crud' ? this.bodyForm() : '' } </div> <div class="r-facede-action bottom"> </div> </div> ` contentForm.innerHTML = CREATE_OR_EDIT; this.ruculaWindow.appendChild(contentForm.childNodes[0] as HTMLDivElement) this.ruculaWindow.appendChild(contentForm.childNodes[1] as HTMLDivElement) } private bodyForm(){ return `<form class="r-window-work" autocomplete="off"> <div class="r-head r-read-edit r-facede-action-crud" id="${this.P}r-facede-action-crud"> <h3 id="${this.P}${constIdBaseWindow.FRAME_INFO}"> </h3> <div id="${this.P}action-crud"> <button id="${this.P}r-a-save" class="r-a-b r-a-b-disable managed"><i class="bi bi-box-arrow-in-down"></i></button> <button id="${this.P}r-a-alter" class="r-a-b r-a-b-disable managed"><i class="bi bi-pen"></i></button> <button id="${this.P}r-a-delete" class="r-a-b r-a-b-disable managed"><i class="bi bi-trash"></i></button> <button id="${this.P}r-a-reload" class="r-a-b r-a-b-disable"><i class="bi bi-arrow-repeat"></i></button> <button id="${this.P}erase-window" class="r-a-b"><i class="bi bi-eraser"></i></button> <button id="${this.P}r-a-menu-vertical" class="r-a-b r-desktop-web"><i class="bi bi-arrows"></i></button> <button id="${this.P}r-a-menu-vertical-mobile" class="r-a-b r-mobile"><i class="bi bi-arrows"></i></button> </div> </div> <div class="r-f-work r-f-items" id="${this.P}${constIdBaseWindow.FORM_RUCULA_JS}"> </div> </form> <div class="r-vertical-actions"> <ol id=${this.P}${constIdBaseWindow.BUTTONS_MENU_VERTICAL_LIST} class=""> <li class="r-display-none r-mobile" id="${this.P}${constIdBaseWindow.BUTTON_MENU_VERTICAL_MOBILE_CLOSE}"> <button class="r-b-i" type="button"><i class="bi bi-x-lg"> </i></button> </li> </ol> </div>` } private closeLeftGrid(grid:boolean){ if(grid == false){ let rf = this.globalWindow.querySelector(`.${this.P}r-f.r-display-none`) if(rf != null){ let buttonNew = this.globalWindow.querySelector(`#${this.P}${constIdBaseWindow.NEW}`); (buttonNew as HTMLElement).click() } let actions = this.globalWindow.querySelector(`#${this.P}actions`); actions?.remove() let maximizeWindow = this.globalWindow.querySelector(`#${this.P}${constIdBaseWindow.MAXIMIZE_WINDOW}`) maximizeWindow?.remove() } } maximizeForm(){ let buttonMaximizeWindow = document.getElementById(`${this.P}${constIdBaseWindow.MAXIMIZE_WINDOW}`); buttonMaximizeWindow?.addEventListener('click',() => { let actions = document.getElementById(`${this.P}actions`); actions?.classList.toggle("r-close-grid"); }) let buttonMaximizeGrid = document.getElementById(`${this.P}${constIdBaseWindow.MAXIMIZE_GRID}`); buttonMaximizeGrid?.addEventListener('click',() => { let actions = document.getElementById(`${this.P}r-left-block`); actions?.classList.toggle("r-display-block"); let formFrames = document.querySelector(`.${this.P}r-f`) as HTMLDivElement formFrames.classList.toggle("r-mobile") }) } eraseForm(){ const eraseWindow = `${this.P}${constIdBaseWindow.ERASE_WINDOW}` let evt = new Event(eraseWindow) document.getElementById(eraseWindow)?.addEventListener('click', () => { this.globalWindow.dispatchEvent(evt) }) } private actionCrudpreventDefault(){ let facedeActionCrud = document.getElementById(`${this.P}r-facede-action-crud`) facedeActionCrud?.addEventListener('click', (e) => e.preventDefault()) } private openActionswindow(){ let actions = document.getElementById(`${this.P}${constIdBaseWindow.ACTIONS_WINDOW}`) actions?.addEventListener('click', (e) => { actions?.nextElementSibling?.classList.toggle('r-actions-window-active') actions?.nextElementSibling?.classList.toggle('r-actions-window') }) } private alterTheme(){ let rw = document.querySelector(`.${this.P}r-w`) let actions = document.getElementById(`${this.P}${constIdBaseWindow.ALTER_THEME}`) let theme = cookie.read('theme') if(theme == 'dark'){ rw?.classList.add('dark-theme') } actions?.addEventListener('click', (e) => { rw?.classList.toggle('dark-theme') if(rw?.classList.contains('dark-theme')){ document.cookie = "theme=dark" } else{ document.cookie = "theme=light" } }) } getPrincipalElementRucula(){ return document.getElementById(`${this.P}${constIdBaseWindow.FORM_RUCULA_JS}`) as HTMLFormElement } }