diff --git a/Pages/Admin/ManageGroupsPage.php b/Pages/Admin/ManageGroupsPage.php index 55a57c5a8..c06919610 100644 --- a/Pages/Admin/ManageGroupsPage.php +++ b/Pages/Admin/ManageGroupsPage.php @@ -165,7 +165,7 @@ public function ProcessPageLoad() $this->presenter->PageLoad(); $this->Set('chooseText', Resources::GetInstance()->GetString('Choose') . '...'); $this->Set('CanChangeRoles', $this->CanChangeRoles); - $this->Display('Admin/manage_groups.tpl'); + $this->Display('Admin/Groups/manage_groups.tpl'); } public function BindPageInfo(PageInfo $pageInfo) diff --git a/Web/css/librebooking.css b/Web/css/librebooking.css index 18e0ffef6..66b6cdd53 100644 --- a/Web/css/librebooking.css +++ b/Web/css/librebooking.css @@ -216,6 +216,26 @@ fieldset:disabled .btn { color: var(--primary) !important; } +.accordion-header { + background: var(--bs-secondary-bg); + color: var(--primary) !important; +} + +.accordion-header:has(.accordion-icon-container.collapsed) { + background: #ffffff; + color: var(--primary) !important; +} + +.accordion-header:hover { + background: var(--bs-secondary-bg) !important; + color: var(--primary) !important; +} + +.noImage { + min-height: 100px; + +} + .timespan { --bs-bg-opacity: .2; } @@ -484,6 +504,10 @@ table.reservations td { z-index: 99999; } +#resourceDetailsDiv .description p, #resourceDetailsDiv .note p { + margin: 0; +} + #userDetailsDiv, #customize-columns { display: none; @@ -575,4 +599,16 @@ input.mid-number { .no-show { display: none !important; -} \ No newline at end of file +} + +.trumbowyg-editor p, .notesValue p, .descriptionValue p { + margin: 0; +} + +.editable-container.editable-popup { + max-width: 50% !important; + } + + .editable-input { + max-width: 90%; + } \ No newline at end of file diff --git a/Web/css/trumbowyg.min.css b/Web/css/trumbowyg.min.css new file mode 100644 index 000000000..09d2183a5 --- /dev/null +++ b/Web/css/trumbowyg.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.27.3 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg/ - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +#trumbowyg-icons,.trumbowyg-icons{overflow:hidden;visibility:hidden;height:0;width:0}#trumbowyg-icons svg,.trumbowyg-icons svg{height:0;width:0}.trumbowyg-box *,.trumbowyg-box ::after,.trumbowyg-box ::before,.trumbowyg-modal *,.trumbowyg-modal ::after,.trumbowyg-modal ::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.trumbowyg-box svg,.trumbowyg-modal svg{width:17px;height:100%;color:#222;fill:#222}.trumbowyg-box{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:300px}.trumbowyg-editor-box{display:block;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-ms-flex:1;flex:1}.trumbowyg-box,.trumbowyg-editor-box{position:relative;width:100%;border:1px solid #d7e0e2}.trumbowyg-box .trumbowyg-editor{min-height:100%;margin:0 auto}.trumbowyg-box.trumbowyg-fullscreen{background:#fefefe;border:none!important}.trumbowyg-editor-box,.trumbowyg-textarea{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:20px;width:100%;border-style:none;resize:none;outline:0;overflow:auto;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.trumbowyg-editor-box.trumbowyg-autogrow-on-enter,.trumbowyg-textarea.trumbowyg-autogrow-on-enter{-webkit-transition:height .3s ease-out;-o-transition:height .3s ease-out;transition:height .3s ease-out}.trumbowyg-editor-box{padding:0}.trumbowyg-editor{outline:0;padding:20px}.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:transparent!important;text-shadow:0 0 7px #333}@media screen and (min-width:0 \0){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}.trumbowyg-box-blur .trumbowyg-editor hr,.trumbowyg-box-blur .trumbowyg-editor img{opacity:.2}.trumbowyg-textarea{position:relative;display:block;overflow:auto;border:none;font-size:14px;font-family:Consolas,Courier,"Courier New",monospace;line-height:18px}.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea{height:1px!important;width:25%;min-height:0!important;padding:0!important;background:0 0;opacity:0!important}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea{display:block;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-ms-flex:1;flex:1;margin-bottom:1px}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor-box{display:none}.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea{opacity:.8;background:0 0}.trumbowyg-editor-box[contenteditable=true]:empty:not(:focus)::before{content:attr(placeholder);color:#999;pointer-events:none;white-space:break-spaces}.trumbowyg-button-pane{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%;min-height:36px;background:#ecf0f1;border-bottom:1px solid #d7e0e2;margin:0;padding:0 5px;position:relative;list-style-type:none;line-height:10px;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;z-index:11}.trumbowyg-button-pane::after,.trumbowyg-button-pane::before{content:" ";display:block;position:absolute;top:35px;left:0;right:0;width:100%;height:1px;background:#d7e0e2}.trumbowyg-button-pane::after{top:71px}.trumbowyg-button-pane .trumbowyg-button-group{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-button-pane .trumbowyg-button-group::after{content:" ";display:block;width:1px;background:#d7e0e2;margin:0 5px;height:35px;vertical-align:top}.trumbowyg-button-pane .trumbowyg-button-group:last-child::after{content:none}.trumbowyg-button-pane button{display:block;position:relative;width:35px;height:35px;padding:1px 6px!important;margin-bottom:1px;overflow:hidden;border:none;cursor:pointer;background:0 0;vertical-align:middle;-webkit-transition:background-color 150ms,opacity 150ms;-o-transition:background-color 150ms,opacity 150ms;transition:background-color 150ms,opacity 150ms}.trumbowyg-button-pane button.trumbowyg-textual-button{width:auto;line-height:35px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.trumbowyg-button-pane button.trumbowyg-disable,.trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),.trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button){opacity:.2;cursor:default;pointer-events:none}.trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before,.trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before{background:#e3e9eb}.trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#fff;outline:0}.trumbowyg-button-pane .trumbowyg-open-dropdown::after{display:block;content:" ";position:absolute;top:27px;right:3px;height:0;width:0;border:3px solid transparent;border-top-color:#555}.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button{padding-left:10px!important;padding-right:18px!important}.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after{top:17px;right:7px}.trumbowyg-button-pane .trumbowyg-right{margin-left:auto}.trumbowyg-dropdown{max-width:300px;max-height:250px;overflow-y:auto;overflow-x:hidden;white-space:nowrap;border:1px solid #d7e0e2;padding:5px 0;border-top:none;background:#fff;color:#222;margin-left:-1px;-webkit-box-shadow:rgba(0,0,0,.1) 0 2px 3px;box-shadow:rgba(0,0,0,.1) 0 2px 3px;z-index:12}.trumbowyg-dropdown button{display:block;width:100%;height:35px;line-height:35px;text-decoration:none;background:#fff;padding:0 20px 0 10px;color:#222;border:none;cursor:pointer;text-align:left;font-size:15px;-webkit-transition:all 150ms;-o-transition:all 150ms;transition:all 150ms}.trumbowyg-dropdown button:focus,.trumbowyg-dropdown button:hover{background:#ecf0f1}.trumbowyg-dropdown button svg{float:left;margin-right:14px}.trumbowyg-modal{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%);max-width:520px;width:100%;height:350px;z-index:12;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.trumbowyg-modal-box{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%);max-width:500px;width:calc(100% - 20px);padding-bottom:45px;z-index:1;background-color:#fff;text-align:center;font-size:14px;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif;-webkit-box-shadow:rgba(0,0,0,.2) 0 2px 3px;box-shadow:rgba(0,0,0,.2) 0 2px 3px;-webkit-backface-visibility:hidden;backface-visibility:hidden}.trumbowyg-modal-box .trumbowyg-modal-title{font-size:24px;font-weight:700;margin:0 0 20px;padding:15px 0 13px;display:block;border-bottom:1px solid #d7e0e2}.trumbowyg-modal-box .trumbowyg-progress{width:100%;height:3px;position:absolute;top:58px}.trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar{background:#2bc06a;width:0;height:100%;-webkit-transition:width 150ms linear;-o-transition:width 150ms linear;transition:width 150ms linear}.trumbowyg-modal-box .trumbowyg-input-row{position:relative;margin:15px 12px;border:1px solid #dedede;overflow:hidden}.trumbowyg-modal-box .trumbowyg-input-infos{text-align:left;-webkit-transition:all 150ms;-o-transition:all 150ms;transition:all 150ms;width:150px;border-right:1px solid #dedede;padding:0 7px;background-color:#fbfcfc;position:absolute;left:0;top:0;bottom:0}.trumbowyg-modal-box .trumbowyg-input-infos label{color:#69878f;overflow:hidden;height:27px;line-height:27px}.trumbowyg-modal-box .trumbowyg-input-infos label,.trumbowyg-modal-box .trumbowyg-input-infos label span{display:block;height:27px;line-height:27px;-webkit-transition:all 150ms;-o-transition:all 150ms;transition:all 150ms}.trumbowyg-modal-box .trumbowyg-input-infos .trumbowyg-msg-error{color:#e74c3c}.trumbowyg-modal-box .trumbowyg-input-html{padding:1px 1px 1px 152px}.trumbowyg-modal-box .trumbowyg-input-html,.trumbowyg-modal-box .trumbowyg-input-html input,.trumbowyg-modal-box .trumbowyg-input-html select,.trumbowyg-modal-box .trumbowyg-input-html textarea{font-size:14px}.trumbowyg-modal-box .trumbowyg-input-html input,.trumbowyg-modal-box .trumbowyg-input-html select,.trumbowyg-modal-box .trumbowyg-input-html textarea{-webkit-transition:all 150ms;-o-transition:all 150ms;transition:all 150ms;height:27px;line-height:27px;border:0;width:100%;padding:0 7px}.trumbowyg-modal-box .trumbowyg-input-html input:focus,.trumbowyg-modal-box .trumbowyg-input-html input:hover,.trumbowyg-modal-box .trumbowyg-input-html select:focus,.trumbowyg-modal-box .trumbowyg-input-html select:hover,.trumbowyg-modal-box .trumbowyg-input-html textarea:focus,.trumbowyg-modal-box .trumbowyg-input-html textarea:hover{outline:1px solid #95a5a6}.trumbowyg-modal-box .trumbowyg-input-html input:focus,.trumbowyg-modal-box .trumbowyg-input-html select:focus,.trumbowyg-modal-box .trumbowyg-input-html textarea:focus{background:#fbfcfc}.trumbowyg-modal-box .trumbowyg-input-html input[type=checkbox]{width:16px;height:16px;padding:0}.trumbowyg-modal-box .trumbowyg-input-html-with-checkbox{text-align:left;padding:3px 1px 1px 3px}.trumbowyg-modal-box .trumbowyg-input-error input,.trumbowyg-modal-box .trumbowyg-input-error select,.trumbowyg-modal-box .trumbowyg-input-error textarea{outline:1px solid #e74c3c}.trumbowyg-modal-box .trumbowyg-input-error .trumbowyg-input-infos label span:first-child{margin-top:-27px}.trumbowyg-modal-box .error{margin-top:25px;display:block;color:red}.trumbowyg-modal-box .trumbowyg-modal-button{position:absolute;bottom:10px;right:0;text-decoration:none;color:#fff;display:block;width:100px;height:35px;line-height:33px;margin:0 10px;background-color:#333;border:none;cursor:pointer;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif;font-size:16px;-webkit-transition:all 150ms;-o-transition:all 150ms;transition:all 150ms}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{right:110px;background:#2bc06a}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#40d47e;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#25a25a}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{color:#555;background:#e6e6e6}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#fbfbfb;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#d5d5d5}.trumbowyg-overlay{position:absolute;background-color:rgba(255,255,255,.5);height:100%;width:100%;left:0;display:none;top:0;z-index:10}body.trumbowyg-body-fullscreen{overflow:hidden}.trumbowyg-fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;margin:0;padding:0;z-index:99999}.trumbowyg-fullscreen .trumbowyg-editor-box,.trumbowyg-fullscreen.trumbowyg-box{border:none}.trumbowyg-fullscreen .trumbowyg-editor-box,.trumbowyg-fullscreen .trumbowyg-textarea{height:auto!important;overflow:auto}.trumbowyg-fullscreen .trumbowyg-overlay{height:100%!important}.trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:#222;fill:transparent}.trumbowyg-editor embed,.trumbowyg-editor img,.trumbowyg-editor object,.trumbowyg-editor video{max-width:100%}.trumbowyg-editor img,.trumbowyg-editor video{height:auto}.trumbowyg-editor img{cursor:move}.trumbowyg-editor canvas:focus{outline:0}.trumbowyg-editor.trumbowyg-reset-css{background:#fefefe!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;line-height:1.45em!important;color:#333!important;font-weight:400!important}.trumbowyg-editor.trumbowyg-reset-css a{color:#15c!important;text-decoration:underline!important}.trumbowyg-editor.trumbowyg-reset-css blockquote,.trumbowyg-editor.trumbowyg-reset-css div,.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css p,.trumbowyg-editor.trumbowyg-reset-css ul{-webkit-box-shadow:none!important;box-shadow:none!important;background:0 0!important;margin:0!important;margin-bottom:15px!important;line-height:1.4em!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;border:none!important}.trumbowyg-editor.trumbowyg-reset-css hr,.trumbowyg-editor.trumbowyg-reset-css iframe,.trumbowyg-editor.trumbowyg-reset-css object{margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css blockquote{margin-left:32px!important;font-style:italic!important;color:#555!important}.trumbowyg-editor.trumbowyg-reset-css ul{list-style:disc!important}.trumbowyg-editor.trumbowyg-reset-css ol{list-style:decimal!important}.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css ul{padding-left:20px!important}.trumbowyg-editor.trumbowyg-reset-css ol ol,.trumbowyg-editor.trumbowyg-reset-css ol ul,.trumbowyg-editor.trumbowyg-reset-css ul ol,.trumbowyg-editor.trumbowyg-reset-css ul ul{border:none!important;margin:2px!important;padding:0!important;padding-left:24px!important}.trumbowyg-editor.trumbowyg-reset-css hr{display:block!important;height:1px!important;border:none!important;border-top:1px solid #ccc!important}.trumbowyg-editor.trumbowyg-reset-css h1,.trumbowyg-editor.trumbowyg-reset-css h2,.trumbowyg-editor.trumbowyg-reset-css h3,.trumbowyg-editor.trumbowyg-reset-css h4{color:#111!important;background:0 0!important;margin:0!important;padding:0!important;font-weight:700!important}.trumbowyg-editor.trumbowyg-reset-css h1{font-size:32px!important;line-height:38px!important;margin-bottom:20px!important}.trumbowyg-editor.trumbowyg-reset-css h2{font-size:26px!important;line-height:34px!important;margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css h3{font-size:22px!important;line-height:28px!important;margin-bottom:7px!important}.trumbowyg-editor.trumbowyg-reset-css h4{font-size:16px!important;line-height:22px!important;margin-bottom:7px!important}.trumbowyg-dark .trumbowyg-textarea{background:#222;color:#fff;border-color:#343434}.trumbowyg-dark .trumbowyg-box{border:1px solid #343434}.trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen{background:#111}.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{text-shadow:0 0 7px #ccc}@media screen and (min-width:0 \0){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}.trumbowyg-dark .trumbowyg-box svg{fill:#fff;color:#fff}.trumbowyg-dark .trumbowyg-button-pane{background-color:#222;border-bottom-color:#343434}.trumbowyg-dark .trumbowyg-button-pane::after,.trumbowyg-dark .trumbowyg-button-pane::before{background:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::after{background-color:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::after{background-color:#2a2a2a}.trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#333}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after{border-top-color:#fff}.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg{color:#ecf0f1;fill:transparent}.trumbowyg-dark .trumbowyg-dropdown{border-color:#343434;background:#333;-webkit-box-shadow:rgba(0,0,0,.3) 0 2px 3px;box-shadow:rgba(0,0,0,.3) 0 2px 3px}.trumbowyg-dark .trumbowyg-dropdown button{background:#333;color:#fff}.trumbowyg-dark .trumbowyg-dropdown button:focus,.trumbowyg-dark .trumbowyg-dropdown button:hover{background:#222}.trumbowyg-dark .trumbowyg-modal-box{background-color:#333;color:#fff}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title{border-bottom:1px solid #555;color:#fff;background:#3c3c3c}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-row{border-color:#222}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-infos{color:#eee;background-color:#2f2f2f;border-right-color:#222}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-infos span{color:#eee;background-color:#2f2f2f;border-color:#343434}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-row.trumbowyg-input-error input,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-row.trumbowyg-input-error select,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-input-row.trumbowyg-input-error textarea{border-color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box input,.trumbowyg-dark .trumbowyg-modal-box select,.trumbowyg-dark .trumbowyg-modal-box textarea{border-color:#343434;color:#fff;background:#222}.trumbowyg-dark .trumbowyg-modal-box input:focus,.trumbowyg-dark .trumbowyg-modal-box input:hover,.trumbowyg-dark .trumbowyg-modal-box select:focus,.trumbowyg-dark .trumbowyg-modal-box select:hover,.trumbowyg-dark .trumbowyg-modal-box textarea:focus,.trumbowyg-dark .trumbowyg-modal-box textarea:hover{border-color:#626262}.trumbowyg-dark .trumbowyg-modal-box input:focus,.trumbowyg-dark .trumbowyg-modal-box select:focus,.trumbowyg-dark .trumbowyg-modal-box textarea:focus{background-color:#2f2f2f}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{background:#1b7943}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#25a25a}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#176437}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{background:#333;color:#ccc}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#444}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#111}.trumbowyg-dark .trumbowyg-overlay{background-color:rgba(15,15,15,.6)} \ No newline at end of file diff --git a/Web/scripts/admin/accessory.js b/Web/scripts/admin/accessory.js index f5404d6c1..80708628d 100644 --- a/Web/scripts/admin/accessory.js +++ b/Web/scripts/admin/accessory.js @@ -26,20 +26,20 @@ function AccessoryManagement(opts) { AccessoryManagement.prototype.init = function () { - elements.accessoryList.delegate('a.update', 'click', function (e) { + elements.accessoryList.on('click', 'a.update', function (e) { setActiveId($(this)); e.preventDefault(); }); - elements.accessoryList.delegate('.edit', 'click', function () { + elements.accessoryList.on('click', '.edit', function () { editAccessory(); }); - elements.accessoryList.delegate('.delete', 'click', function () { + elements.accessoryList.on('click', '.delete', function () { deleteAccessory(); }); - elements.accessoryList.delegate('.resources', 'click', function () { + elements.accessoryList.on('click', '.resources', function () { showAccessoryResources(); }); @@ -52,7 +52,7 @@ function AccessoryManagement(opts) { }); - elements.accessoryResourcesDialog.delegate('.resourceCheckbox', 'click', function () { + elements.accessoryResourcesDialog.on('click', '.resourceCheckbox', function () { handleAccessoryResourceClick($(this)); }); diff --git a/Web/scripts/admin/announcement.js b/Web/scripts/admin/announcement.js index 6f8bd25a8..d272c54f3 100644 --- a/Web/scripts/admin/announcement.js +++ b/Web/scripts/admin/announcement.js @@ -33,18 +33,18 @@ function AnnouncementManagement(opts) { AnnouncementManagement.prototype.init = function () { - elements.announcementList.delegate('a.update', 'click', function (e) { + elements.announcementList.on( 'click', 'a.update', function (e) { setActiveId($(this)); e.preventDefault(); }); - elements.announcementList.delegate('.edit', 'click', function () { + elements.announcementList.on('click', '.edit', function () { editAnnouncement(); }); - elements.announcementList.delegate('.sendEmail', 'click', function () { + elements.announcementList.on('click', '.sendEmail', function () { emailAnnouncement(); }); - elements.announcementList.delegate('.delete', 'click', function () { + elements.announcementList.on('click', '.delete', function () { deleteAnnouncement(); }); diff --git a/Web/scripts/admin/attributes.js b/Web/scripts/admin/attributes.js index 2e3a65603..930ef1a60 100644 --- a/Web/scripts/admin/attributes.js +++ b/Web/scripts/admin/attributes.js @@ -68,12 +68,12 @@ function AttributeManagement(opts) { RefreshAttributeList(); }); - elements.attributeList.delegate('a.update', 'click', function (e) { + elements.attributeList.on( 'click', 'a.update', function (e) { e.preventDefault(); e.stopPropagation(); }); - elements.attributeList.delegate('.delete', 'click', function (e) { + elements.attributeList.on('click', '.delete', function (e) { e.preventDefault(); var attributeId = $(this).closest('tr').attr('attributeId'); @@ -101,7 +101,7 @@ function AttributeManagement(opts) { showRelevantAttributeOptions($(this).val(), elements.addDialog); }); - elements.attributeList.delegate('.edit', 'click', function (e) { + elements.attributeList.on('click', '.edit', function (e) { e.preventDefault(); e.stopPropagation(); selectedEntityChoices = elements.editEntityChoices; @@ -145,11 +145,11 @@ function AttributeManagement(opts) { } }); - selectedEntityChoices.delegate('a.all', 'click', function (e) { + selectedEntityChoices.on('click', 'a.all', function (e) { onEntityChoiceClick(e); }); - selectedEntityChoices.delegate('a.ok', 'click', function (e) { + selectedEntityChoices.on('click', 'a.ok', function (e) { e.preventDefault(); selectedEntityChoices.hide(); handleEntitiesSelected(activeAppliesTo); diff --git a/Web/scripts/admin/blackouts.js b/Web/scripts/admin/blackouts.js index 4cededb98..7eb52d7d8 100644 --- a/Web/scripts/admin/blackouts.js +++ b/Web/scripts/admin/blackouts.js @@ -45,11 +45,11 @@ function BlackoutManagement(opts) { $(this).closest('.modal').modal("hide"); }); - $('#result').delegate('.reload', 'click', function (e) { + $('#result').on( 'click', '.reload', function (e) { location.reload(); }); - $('#result').delegate('.unblock', 'click', function (e) { + $('#result').on('click', '.unblock', function (e) { $('#result').hide(); $('#wait-box').modal('hide'); }); @@ -96,7 +96,7 @@ function BlackoutManagement(opts) { handleBlackoutApplicabilityChange(); wireUpTimePickers(); - elements.blackoutTable.delegate('.update', 'click', function (e) { + elements.blackoutTable.on('click', '.update', function (e) { e.preventDefault(); var tr = $(this).parents('tr'); @@ -104,11 +104,11 @@ function BlackoutManagement(opts) { setActiveBlackoutId(id); }); - elements.blackoutTable.delegate('.delete', 'click', function () { + elements.blackoutTable.on('click', '.delete', function () { showDeleteBlackout(); }); - elements.blackoutTable.delegate('.delete-recurring', 'click', function () { + elements.blackoutTable.on('click', '.delete-recurring', function () { showDeleteRecurringBlackout(); }); @@ -210,7 +210,7 @@ function BlackoutManagement(opts) { $(this).attachReservationPopup(refNum, options.popupUrl); }); - $("#reservationTable").delegate('.editable', 'click', function () { + $("#reservationTable").on('click', '.editable', function () { $(this).addClass('clicked'); var td = $(this).find('.referenceNumber'); viewReservation(td.text()); @@ -275,4 +275,4 @@ function BlackoutManagement(opts) { ChangeUpdateScope(options.scopeOpts.full); }); } -} +} \ No newline at end of file diff --git a/Web/scripts/admin/group.js b/Web/scripts/admin/group.js index 1a9cc73f7..a8b197052 100644 --- a/Web/scripts/admin/group.js +++ b/Web/scripts/admin/group.js @@ -1,385 +1,371 @@ -function GroupManagement(opts) { - var options = opts; - - var elements = { - activeId: $('#activeId'), - groupList: $('#groupList'), - - autocompleteSearch: $('#groupSearch'), - userSearch: $('#userSearch'), - - groupUserList: $('#groupUserList'), - membersDialog: $('#membersDialog'), - allUsersList: $('#allUsersList'), - permissionsDialog: $('#permissionsDialog'), - deleteDialog: $('#deleteDialog'), - editDialog: $('#editDialog'), - browseUserDialog: $('#allUsers'), - rolesDialog: $('#rolesDialog'), - groupAdminDialog: $('#groupAdminDialog'), - - permissionsForm: $('#permissionsForm'), - addUserForm: $('#addUserForm'), - removeUserForm: $('#removeUserForm'), - editGroupForm: $('#editGroupForm'), - deleteGroupForm: $('#deleteGroupForm'), - rolesForm: $('#rolesForm'), - groupAdminForm: $('#groupAdminForm'), - groupCount: $('#groupCount'), - - addForm: $('#addGroupForm'), - addDialog: $('#addGroupDialog'), - - checkAllResourcesFull: $('#checkAllResourcesFull'), - checkAllResourcesView: $('#checkAllResourcesView'), - checkNoResources: $('#checkNoResources'), - - editGroupName: $('#editGroupName'), - editGroupIsDefault: $('#editGroupIsDefault'), - - changeAdminGroupsForm: $('#groupAdminGroupsForm'), - changeAdminResourcesForm: $('#resourceAdminForm'), - changeAdminSchedulesForm: $('#scheduleAdminForm'), - resourceAdminDialog: $('#resourceAdminDialog'), - groupAdminAllDialog: $('#groupAdminAllDialog'), - scheduleAdminDialog: $('#scheduleAdminDialog'), - - importGroupsDialog: $('#importGroupsDialog'), - importGroupsForm: $('#importGroupsForm'), - importGroupsTrigger: $('#import-groups') - }; - - var allUserList = null; - - GroupManagement.prototype.init = function () { - - elements.groupList.delegate('a.update', 'click', function (e) { - setActiveId($(this)); - e.preventDefault(); - }); - - elements.groupList.delegate('.rename', 'click', function () { - editGroup(); - }); - - elements.groupList.delegate('.permissions', 'click', function () { - changePermissions(); - }); - - elements.groupList.delegate('.members', 'click', function () { - changeMembers(); - elements.membersDialog.modal('show'); - }); - - elements.groupList.delegate('.delete', 'click', function () { - deleteGroup(); - }); - - elements.groupList.delegate('.roles', 'click', function () { - changeRoles(); - }); - - elements.browseUserDialog.delegate('.add', 'click', function () { - var link = $(this); - var userId = link.siblings('.id').val(); - - addUserToGroup(userId); - - link.find('i').removeClass('bi-plus-square-fill text-success').addClass('bi-check-circle-fill text-info'); - }); - - elements.groupUserList.delegate('.delete', 'click', function () { - var userId = $(this).siblings('.id').val(); - removeUserFromGroup($(this), userId); - }); - - elements.autocompleteSearch.autocomplete({ - source: function (request, response) { - $.ajax({ - url: options.groupAutocompleteUrl, - dataType: "json", - data: { - term: request.term - }, - success: function (data) { - response($.map(data, function (item) { - return { - label: item.Name, - value: item.Id - }; - })); - } - }); - }, - focus: function (event, ui) { - elements.autocompleteSearch.val(ui.item.label); - return false; - }, - select: function (event, ui) { - elements.autocompleteSearch.val(ui.item.label); - window.location.href = options.selectGroupUrl + ui.item.value - return false; - } - }); - - elements.userSearch.userAutoComplete(options.userAutocompleteUrl, function (ui) { - addUserToGroup(ui.item.value); - elements.userSearch.val(''); - }); - - elements.groupList.delegate('.groupAdmin', 'click', function () { - changeGroupAdmin(); - }); - - elements.groupList.delegate('.changeAdminGroups', 'click', function () { - changeAdminGroups(); - }); - elements.groupList.delegate('.changeAdminResources', 'click', function () { - changeAdminResources(); - }); - elements.groupList.delegate('.changeAdminSchedules', 'click', function () { - changeAdminSchedules(); - }); - - elements.checkAllResourcesFull.click(function (e) { - e.preventDefault(); - elements.permissionsDialog.find('.full').prop('selected', true) - }); - - elements.checkAllResourcesView.click(function (e) { - e.preventDefault(); - elements.permissionsDialog.find('.view').prop('selected', true) - }); - - elements.checkNoResources.click(function (e) { - e.preventDefault(); - elements.permissionsDialog.find('.none').prop('selected', true) - }); - - $(".save").click(function () { - $(this).closest('form').submit(); - }); - - $(".cancel").click(function () { - $(this).closest('.dialog').modal("hide"); - }); - - var hidePermissionsDialog = function () { - elements.permissionsDialog.modal('hide'); - }; - - var error = function (errorText) { - alert(errorText); - }; - - $("#browseUsers").click(function () { - showAllUsersToAdd(); - }); - - $('.adminDialog').on('click', '.checkbox', function (e) { - var $checkbox = $(e.target); - var modal = $checkbox.closest('.modal-body'); - modal.find('.count').text(modal.find(':checked').length); - }); - - $('#add-group').click(e => { - e.preventDefault(); - elements.addDialog.modal('show'); - elements.addDialog.find(':text').first().focus(); - }); - - elements.importGroupsTrigger.click(e => { - e.preventDefault(); - elements.importGroupsDialog.modal('show'); - }); - - const importHandler = function (responseText, form) { - if (!responseText) { - return; - } - - $('#importCount').text(responseText.importCount); - $('#importSkipped').text(responseText.skippedRows.length > 0 ? responseText.skippedRows.join(',') : '0'); - $('#importResult').removeClass('d-none'); - - var errors = $('#importErrors'); - errors.empty(); - if (responseText.messages && responseText.messages.length > 0) { - var messages = responseText.messages.join('
No data received
'); + }; + PerformAsyncAction(details, getSubmitCallback(action), $('#subscriptionIndicator'), subscriptionCallback); + }); + elements.checkAllResources.click(function (e) { e.preventDefault(); elements.bulkUpdateList.find('input:checkbox').prop('checked', true); @@ -377,14 +345,14 @@ function ResourceManagement(opts) { showAllUsersToAdd(); }); - elements.resourceUserList.delegate('.change-permission-type', 'change', function (e) { + elements.resourceUserList.on('change', '.change-permission-type', function (e) { e.preventDefault(); var userId = $(this).data('user-id'); var type = $(this).val(); changeUserPermission(userId, type); }); - elements.allUsersList.delegate('.change-permission-type', 'change', function (e) { + elements.allUsersList.on('change', '.change-permission-type', function (e) { e.preventDefault(); var userId = $(this).data('user-id'); var type = $(this).val(); @@ -396,14 +364,14 @@ function ResourceManagement(opts) { showAllGroupsToAdd(); }); - elements.resourceGroupList.delegate('.change-permission-type', 'change', function (e) { + elements.resourceGroupList.on('change', '.change-permission-type', function (e) { e.preventDefault(); var groupId = $(this).data('group-id'); var type = $(this).val(); changeGroupPermission(groupId, type); }); - elements.allGroupsList.delegate('.change-permission-type', 'change', function (e) { + elements.allGroupsList.on('change', '.change-permission-type', function (e) { e.preventDefault(); var groupId = $(this).data('group-id'); var type = $(this).val(); @@ -440,25 +408,6 @@ function ResourceManagement(opts) { elements.importDialog.modal('show'); }); - elements.imageDialog.delegate('.defaultImage', 'click', function (e) { - e.preventDefault(); - var image = $(e.target).closest('.resource-image').attr('id'); - elements.defaultImageName.val(image); - elements.defaultImageForm.submit(); - }); - - elements.imageDialog.delegate('.deleteImage', 'click', function (e) { - e.preventDefault(); - var image = $(e.target).closest('.resource-image').attr('id'); - elements.removeImageName.val(image); - elements.removeImageForm.submit(); - }); - - elements.imageDialog.on('hidden.bs.modal', function () { - window.location.reload(); - }); - - elements.toggleStatusChangeMessage.on('change', function (e) { if ($(this).is(":checked")) { elements.sendStatusChangeMessageContent.removeClass('d-none'); @@ -467,7 +416,61 @@ function ResourceManagement(opts) { elements.sendStatusChangeMessageContent.addClass('d-none'); } }); + } + + ResourceManagement.prototype.BindXEditableListeners = function () { + elements.resourcesList.on('click', '.renameButton', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.resourceNameField').editable('toggle'); + }); + elements.resourcesList.on('click', '.changeScheduleButton', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.scheduleName').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeResourceType', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.resourceTypeName').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeSortOrder', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.sortOrderValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeLocation', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.locationValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeContact', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.contactValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeDescription', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.descriptionValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeNotes', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.notesValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeResourceAdmin', function (e) { + e.stopPropagation(); + $(this).closest('.resourceDetails').find('.resourceAdminValue').editable('toggle'); + }); + + elements.resourcesList.on('click', '.changeAttribute', function (e) { + e.stopPropagation(); + $(e.target).closest('.updateCustomAttribute').find('.inlineAttribute').editable('toggle'); + }); + } + + ResourceManagement.prototype.configureAsyncForms = function () { var imageSaveErrorHandler = function (result) { alert(result); }; @@ -522,7 +525,8 @@ function ResourceManagement(opts) { ConfigureAsyncForm(elements.addForm, defaultSubmitCallback(elements.addForm), null, handleAddError); ConfigureAsyncForm(elements.deleteForm, defaultSubmitCallback(elements.deleteForm), function (result) { var id = getActiveResourceId(); - $('#resourceList').find('[data-resourceid="' + id + '"]').remove(); + console.log('deleting ' + id); + elements.resourcesList.find('[data-resourceid="' + id + '"]').closest('tr').remove(); elements.deleteDialog.modal('hide'); }); ConfigureAsyncForm(elements.durationForm, defaultSubmitCallback(elements.durationForm), onDurationSaved, null, { onBeforeSerialize: combineIntervals }); @@ -539,7 +543,7 @@ function ResourceManagement(opts) { ConfigureAsyncForm(elements.importForm, defaultSubmitCallback(elements.importForm), importHandler); ConfigureAsyncForm(elements.bulkDeleteForm, defaultSubmitCallback(elements.bulkDeleteForm)); ConfigureAsyncForm(elements.statusForm, defaultSubmitCallback(elements.statusForm)); - }; + } ResourceManagement.prototype.add = function (resource) { resources[resource.id] = resource; @@ -987,4 +991,4 @@ function ResourceManagement(opts) { elements.groupDiv.find('[group-id=' + id + ']').prop('checked', true); }); } -} +} \ No newline at end of file diff --git a/Web/scripts/admin/schedule.js b/Web/scripts/admin/schedule.js index 6d8365e2a..5444b2499 100644 --- a/Web/scripts/admin/schedule.js +++ b/Web/scripts/admin/schedule.js @@ -3,6 +3,7 @@ function ScheduleManagement(opts) { var elements = { activeId: $('#activeId'), + scheduleList: $('#schedulesTable_wrapper'), layoutDialog: $('#changeLayoutDialog'), deleteDialog: $('#deleteDialog'), @@ -80,117 +81,116 @@ function ScheduleManagement(opts) { }; ScheduleManagement.prototype.init = function () { - $('.scheduleDetails').each(function () { - var details = $(this); - var id = details.find(':hidden.id').val(); - var reservable = details.find('.reservableSlots'); - var blocked = details.find('.blockedSlots'); - var timezone = details.find('.timezone'); - var daysVisible = details.find('.daysVisible'); - var dayOfWeek = details.find('.dayOfWeek'); - var usesDailyLayouts = details.find('.usesDailyLayouts'); - - details.find('a.update').click(function () { - setActiveScheduleId(id); - }); - - details.find('.renameButton').click(function (e) { - e.stopPropagation(); - details.find('.scheduleName').editable('toggle'); - }); + elements.scheduleList.on('click', '.update', function (e) { + e.preventDefault(); + var id = $(this).closest('.scheduleDetails').attr('data-schedule-id'); + setActiveScheduleId(id); + }); - details.find('.dayName').click(function (e) { - e.stopPropagation(); - $(this).editable('toggle'); - }); + elements.scheduleList.on('click', '.renameButton', function (e) { + e.stopPropagation(); + $(this).closest('.scheduleDetails').find('.scheduleName').editable('toggle'); + }); - details.find('.daysVisible').click(function (e) { - e.stopPropagation(); - $(this).editable('toggle'); - }); + elements.scheduleList.on('click', '.dayName', function (e) { + e.stopPropagation(); + $(this).editable('toggle'); + }); - details.find('.changeScheduleAdmin').click(function (e) { - e.stopPropagation(); - details.find('.scheduleAdmin').editable('toggle'); - }); + elements.scheduleList.on('click', '.daysVisible', function (e) { + e.stopPropagation(); + $(this).editable('toggle'); + }); - details.find('.changeLayoutButton').click(function (e) { - if ($(e.target).data('layout-type') == 0) { - showChangeLayout(e, reservable, blocked, timezone, (usesDailyLayouts.val() == 'false')); - } - else { - showChangeCustomLayout(id); - } - return false; - }); + elements.scheduleList.on('click', '.changeScheduleAdmin', function (e) { + e.stopPropagation(); + $(this).closest('.scheduleDetails').find('.scheduleAdmin').editable('toggle'); + }); - details.find('.makeDefaultButton').click(function (e) { - PerformAsyncAction($(this), getSubmitCallback(options.makeDefaultAction), $('#action-indicator')); - }); + elements.scheduleList.on('click', '.changeLayoutButton', function (e) { + var id = getActiveScheduleId(); + var reservable = $(this).closest('.scheduleDetails').find('.reservableSlots'); + var blocked = $(this).closest('.scheduleDetails').find('.blockedSlots'); + var timezone = $(this).closest('.scheduleDetails').find('.timezone'); + var usesDailyLayouts = $(this).closest('.scheduleDetails').find('.usesDailyLayouts'); + + if ($(e.target).data('layout-type') == 0) { + showChangeLayout(e, reservable, blocked, timezone, (usesDailyLayouts.val() == 'false')); + } else { + showChangeCustomLayout(id); + } + return false; + }); - details.find('.enableSubscription').click(function (e) { - PerformAsyncAction($(this), getSubmitCallback(options.enableSubscriptionAction), $('#action-indicator')); - }); + elements.scheduleList.on('click', '.makeDefaultButton, .enableSubscription, .disableSubscription', function (e) { + var action; + if ($(this).hasClass('makeDefaultButton')) { + action = options.makeDefaultAction; + } else if ($(this).hasClass('enableSubscription')) { + action = options.enableSubscriptionAction; + } else if ($(this).hasClass('disableSubscription')) { + action = options.disableSubscriptionAction; + } - details.find('.disableSubscription').click(function (e) { - PerformAsyncAction($(this), getSubmitCallback(options.disableSubscriptionAction), $('#action-indicator')); - }); + if (action) { + PerformAsyncAction($(this), getSubmitCallback(action), $('#action-indicator')); + } + }); - details.find('.deleteScheduleButton').click(function (e) { - showDeleteDialog(e); - return false; - }); + elements.scheduleList.on('click', '.deleteScheduleButton', function (e) { + showDeleteDialog(e); + return false; + }); - details.find('.showAllDailyLayouts').click(function (e) { - e.preventDefault(); - $(this).next('.allDailyLayouts').toggle(); - }); + elements.scheduleList.on('click', '.showAllDailyLayouts', function (e) { + e.preventDefault(); + $(this).next('.allDailyLayouts').toggle(); + }); - details.find('.changePeakTimes').click(function (e) { - e.preventDefault(); - showPeakTimesDialog(getActiveScheduleId()); - }); + elements.scheduleList.on('click', '.changePeakTimes', function (e) { + e.preventDefault(); + showPeakTimesDialog(getActiveScheduleId()); + }); - details.find('.changeAvailability').click(function (e) { - e.preventDefault(); - showAvailabilityDialog(getActiveScheduleId()); - }); + elements.scheduleList.on('click', '.changeAvailability', function (e) { + e.preventDefault(); + showAvailabilityDialog(getActiveScheduleId()); + }); - details.find('.toggleConcurrent').click(function (e) { - e.preventDefault(); - var toggle = $(e.target); - var container = toggle.parent('.concurrentContainer'); - toggleConcurrentReservations(getActiveScheduleId(), toggle, container); - }); + elements.scheduleList.on('click', '.toggleConcurrent', function (e) { + e.preventDefault(); + var toggle = $(e.target); + var container = toggle.parent('.concurrentContainer'); + toggleConcurrentReservations(getActiveScheduleId(), toggle, container); + }); - details.find('.defaultScheduleStyle').click(function (e) { - e.stopPropagation(); - $(this).editable('toggle'); - }); + elements.scheduleList.on('click', '.defaultScheduleStyle', function (e) { + e.stopPropagation(); + $(this).editable('toggle'); + }); - details.find('.switchLayout').click(function (e) { - e.preventDefault(); - $('#switchLayoutTypeId').val($(e.target).data('switch-to')); - elements.switchLayoutDialog.modal('show'); - }); + elements.scheduleList.on('click', '.switchLayout', function (e) { + e.preventDefault(); + $('#switchLayoutTypeId').val($(e.target).data('switch-to')); + elements.switchLayoutDialog.modal('show'); + }); - details.find('.changeScheduleConcurrentMaximum').click(function (e) { - e.preventDefault(); - var concurrent = $(e.target).closest('.maximumConcurrentContainer').data('concurrent'); - elements.maximumConcurrentUnlimited.attr('checked', concurrent == "0"); - elements.maximumConcurrent.val(concurrent); - elements.maximumConcurrent.attr('disabled', concurrent == "0"); - elements.concurrentMaximumDialog.modal('show'); - }); + elements.scheduleList.on('click', '.changeScheduleConcurrentMaximum', function (e) { + e.preventDefault(); + var concurrent = $(e.target).closest('.maximumConcurrentContainer').data('concurrent'); + elements.maximumConcurrentUnlimited.attr('checked', concurrent == "0"); + elements.maximumConcurrent.val(concurrent); + elements.maximumConcurrent.attr('disabled', concurrent == "0"); + elements.concurrentMaximumDialog.modal('show'); + }); - details.find('.changeResourcesPerReservation').click(function (e) { - e.preventDefault(); - var maximum = $(e.target).closest('.resourcesPerReservationContainer').data('maximum'); - elements.resourcesPerReservationUnlimited.attr('checked', maximum == "0"); - elements.resourcesPerReservationResources.val(maximum); - elements.resourcesPerReservationResources.attr('disabled', maximum == "0"); - elements.resourcesPerReservationDialog.modal('show'); - }); + elements.scheduleList.on('click', '.changeResourcesPerReservation', function (e) { + e.preventDefault(); + var maximum = $(e.target).closest('.resourcesPerReservationContainer').data('maximum'); + elements.resourcesPerReservationUnlimited.attr('checked', maximum == "0"); + elements.resourcesPerReservationResources.val(maximum); + elements.resourcesPerReservationResources.attr('disabled', maximum == "0"); + elements.resourcesPerReservationDialog.modal('show'); }); elements.deletePeakTimesButton.click(function (e) { diff --git a/Web/scripts/admin/user.js b/Web/scripts/admin/user.js index ca26b0dd5..d9a837c81 100644 --- a/Web/scripts/admin/user.js +++ b/Web/scripts/admin/user.js @@ -3,7 +3,7 @@ function UserManagement(opts) { var elements = { activeId: $('#activeId'), - userList: $('#userList'), + userList: $('#userList_wrapper'), userAutocomplete: $('#userSearch'), filterStatusId: $('#filterStatusId'), @@ -61,50 +61,50 @@ function UserManagement(opts) { var users = {}; UserManagement.prototype.init = function () { - elements.userList.delegate('.update', 'click', function (e) { + elements.userList.on('click', '.update', function (e) { setActiveUserElement($(this)); e.preventDefault(); }); - elements.userList.delegate('.changeStatus', 'click', function (e) { + elements.userList.on('click', '.changeStatus', function (e) { changeStatus($(this)); }); - elements.userList.delegate('.changeGroups', 'click', function (e) { + elements.userList.on('click', '.changeGroups', function (e) { changeGroups(); }); - elements.userList.delegate('.changePermissions', 'click', function (e) { + elements.userList.on('click', '.changePermissions', function (e) { changePermissions(); }); - elements.userList.delegate('.resetPassword', 'click', function (e) { + elements.userList.on('click', '.resetPassword', function (e) { elements.passwordDialog.find(':password').val(''); elements.passwordDialog.modal('show'); }); - elements.userList.delegate('.changeColor', 'click', function (e) { + elements.userList.on('click', '.changeColor', 'click', function (e) { var user = getActiveUser(); elements.colorValue.val(user.reservationColor); elements.colorDialog.modal('show'); }); - elements.userList.delegate('.edit', 'click', function () { + elements.userList.on('click', '.edit', function () { changeUserInfo(); }); - elements.userList.delegate('.delete', 'click', function (e) { + elements.userList.on('click', '.delete', function (e) { deleteUser(); }); - elements.userList.delegate('.viewReservations', 'click', function (e) { + elements.userList.on('click', '.viewReservations', function (e) { var user = getActiveUser(); var name = encodeURI(user.first + ' ' + user.last); var url = options.manageReservationsUrl + '?uid=' + user.id + '&un=' + name; window.location.href = url; }); - elements.userList.delegate('.changeAttribute', 'click', function (e) { + elements.userList.on('click', '.changeAttribute', function (e) { e.stopPropagation(); $(e.target).closest('.updateCustomAttribute').find('.inlineAttribute').editable('toggle'); }); @@ -124,7 +124,7 @@ function UserManagement(opts) { window.location.href = options.filterUrl + statusid; }); - elements.addedGroups.delegate('div', 'click', function (e) { + elements.addedGroups.on('click', 'div', function (e) { e.preventDefault(); $('#removeGroupId').val($(this).attr('groupId')); $('#removeGroupUserId').val(getActiveUserId()); @@ -136,7 +136,7 @@ function UserManagement(opts) { $(this).appendTo(elements.removedGroups); }); - elements.removedGroups.delegate('div', 'click', function (e) { + elements.removedGroups.on('click', 'div', function (e) { e.preventDefault(); $('#addGroupId').val($(this).attr('groupId')); $('#addGroupUserId').val(getActiveUserId()); diff --git a/Web/scripts/js/purify.min.js b/Web/scripts/js/purify.min.js new file mode 100644 index 000000000..d42a328df --- /dev/null +++ b/Web/scripts/js/purify.min.js @@ -0,0 +1,3 @@ +/*! @license DOMPurify 2.4.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.0/LICENSE */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,n){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a},r.apply(null,arguments)}function o(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n":"p";e.doc.execCommand("formatBlock",!1,t),e.syncCode()}),0)})).on("cut drop",(function(){setTimeout((function(){e.semanticCode(!1,!0),e.$c.trigger("tbwchange")}),0)})).on("paste",(function(n){if(e.o.removeformatPasted){n.preventDefault(),t.getSelection&&t.getSelection().deleteFromDocument&&t.getSelection().deleteFromDocument();try{var o=t.clipboardData.getData("Text");try{e.doc.selection.createRange().pasteHTML(o)}catch(t){e.doc.getSelection().getRangeAt(0).insertNode(e.doc.createTextNode(o))}e.$c.trigger("tbwchange",n)}catch(t){e.execCmd("insertText",(n.originalEvent||n).clipboardData.getData("text/plain"))}}a.each(e.pasteHandlers,(function(e,t){t(n)})),setTimeout((function(){e.semanticCode(!1,!0),e.$c.trigger("tbwpaste",n),e.$c.trigger("tbwchange")}),0)})),e.$ta.on("keyup",(function(){e.$c.trigger("tbwchange")})).on("paste",(function(){setTimeout((function(){e.$c.trigger("tbwchange")}),0)})),a(e.doc.body).on("keydown."+e.eventNamespace,(function(t){if(27===t.which&&a("."+n+"modal-box").length>=1)return e.closeModal(),!1}))},autogrowEditorOnEnter:function(){var e=this;e.$ed.removeClass("autogrow-on-enter");var t=e.$ed[0].clientHeight;e.$edBox.height("auto");var n=e.$ed[0].scrollHeight;e.$ed.addClass("autogrow-on-enter"),t!==n&&(e.$edBox.height(t),setTimeout((function(){e.$edBox.css({height:n}),e.$c.trigger("tbwresize")}),0))},buildBtnPane:function(){var e=this,t=e.o.prefix,n=e.$btnPane=a("
",{class:t+"button-pane"});a.each(e.o.btns,(function(o,r){Array.isArray(r)||(r=[r]);var i=a("",{class:t+"button-group "+(r.indexOf("fullscreen")>=0?t+"right":"")});a.each(r,(function(t,n){try{e.isSupportedBtn(n)&&i.append(e.buildBtn(n))}catch(e){}})),i.html().trim().length>0&&n.append(i)})),e.$box.prepend(n)},buildBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=o.dropdown,i=null==o.hasIcon||o.hasIcon,s=t.lang[e]||e,l=a("",{type:"button",class:n+e+"-button "+(o.class||"")+(i?"":" "+n+"textual-button"),html:t.hasSvg&&i?'':t.hideButtonTexts?"":o.text||o.title||t.lang[e]||e,title:(o.title||o.text||s)+(o.key?" ("+(t.isMac?"Cmd":"Ctrl")+" + "+o.key+")":""),tabindex:-1,mousedown:function(){return r&&!a("."+e+"-"+n+"dropdown",t.$box).is(":hidden")||a("body",t.doc).trigger("mousedown"),!((t.$btnPane.hasClass(n+"disable")||t.$box.hasClass(n+"disabled"))&&!a(this).hasClass(n+"active")&&!a(this).hasClass(n+"not-disable"))&&(t.execCmd((!r?o.fn:"dropdown")||e,o.param||e,o.forceCss),!1)}});if(r){l.addClass(n+"open-dropdown");var d=n+"dropdown",c={class:d+"-"+e+" "+d+" "+n+"fixed-top "+(o.dropdownClass||"")};c["data-"+d]=e;var u=a("",c);a.each(r,(function(e,n){t.btnsDef[n]&&t.isSupportedBtn(n)&&u.append(t.buildSubBtn(n))})),t.$box.append(u.hide())}else o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e});return r||(t.tagToButton[(o.tag||e).toLowerCase()]=e),l},buildSubBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=null==o.hasIcon||o.hasIcon;return o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e}),t.tagToButton[(o.tag||e).toLowerCase()]=e,a("",{type:"button",class:n+e+"-dropdown-button "+(o.class||"")+(o.ico?" "+n+o.ico+"-button":""),html:t.hasSvg&&r?''+(o.text||o.title||t.lang[e]||e):o.text||o.title||t.lang[e]||e,title:o.key?"("+(t.isMac?"Cmd":"Ctrl")+" + "+o.key+")":null,style:o.style||null,mousedown:function(){return a("body",t.doc).trigger("mousedown"),t.execCmd(o.fn||e,o.param||e,o.forceCss),!1}})},isSupportedBtn:function(e){try{return this.btnsDef[e].isSupported()}catch(e){}return!0},buildOverlay:function(){var e=this;return e.$overlay=a("",{class:e.o.prefix+"overlay"}).appendTo(e.$box),e.$overlay},showOverlay:function(){var e=this;a(t).trigger("scroll"),e.$overlay.fadeIn(200),e.$box.addClass(e.o.prefix+"box-blur")},hideOverlay:function(){var e=this;e.$overlay.fadeOut(50),e.$box.removeClass(e.o.prefix+"box-blur")},fixedBtnPaneEvents:function(){var e=this,n=e.o.fixedFullWidth,o=e.$box;e.o.fixedBtnPane&&(e.isFixed=!1,a(t).on("scroll."+e.eventNamespace+" resize."+e.eventNamespace,(function(){if(o){e.syncCode();var r=a(t).scrollTop(),i=o.offset().top+1,s=e.$btnPane,l=s.outerHeight()-2;r-i>0&&r-i-e.height<0?(e.isFixed||(e.isFixed=!0,s.css({position:"fixed",top:0,left:n?0:"auto",zIndex:7}),e.$box.css({paddingTop:s.height()})),s.css({width:n?"100%":o.width()-1}),a("."+e.o.prefix+"fixed-top",o).css({position:n?"fixed":"absolute",top:n?l:l+(r-i),zIndex:15})):e.isFixed&&(e.isFixed=!1,s.removeAttr("style"),e.$box.css({paddingTop:0}),a("."+e.o.prefix+"fixed-top",o).css({position:"absolute",top:l}))}})))},setDisabled:function(e){var t=this,n=t.o.prefix;t.disabled=e,e?t.$ta.attr("disabled",!0):t.$ta.removeAttr("disabled"),t.$box.toggleClass(n+"disabled",e),t.$ed.attr("contenteditable",!e)},destroy:function(){var e=this,n=e.o.prefix;e.isTextarea?e.$box.after(e.$ta.css({height:""}).val(e.html()).removeClass(n+"textarea").show()):e.$box.after(e.$edBox.css({height:""}).removeClass(n+"editor").removeAttr("contenteditable").removeAttr("dir").html(e.html()).show()),e.$ed.off("dblclick","img"),e.destroyPlugins(),e.$box.remove(),e.$c.removeData("trumbowyg"),a("body").removeClass(n+"body-fullscreen"),e.$c.trigger("tbwclose"),a(t).off("scroll."+e.eventNamespace+" resize."+e.eventNamespace),a(e.doc.body).off("keydown."+e.eventNamespace)},empty:function(){this.doc.execCommand("insertHTML",!1,""),this.$ta.val(""),this.syncCode(!0)},toggle:function(){var e=this,t=e.o.prefix;e.o.autogrowOnEnter&&(e.autogrowOnEnterDontClose=!e.$box.hasClass(t+"editor-hidden")),e.semanticCode(!1,!0),e.$c.trigger("tbwchange"),setTimeout((function(){e.doc.activeElement.blur(),e.$box.toggleClass(t+"editor-hidden "+t+"editor-visible"),e.$btnPane.toggleClass(t+"disable"),a("."+t+"viewHTML-button",e.$btnPane).toggleClass(t+"active"),e.$box.hasClass(t+"editor-visible")?e.$ta.attr("tabindex",-1):e.$ta.removeAttr("tabindex"),e.o.autogrowOnEnter&&!e.autogrowOnEnterDontClose&&e.autogrowEditorOnEnter()}),0)},toggleSpan:function(e){this.$ed.find("span").each((function(){!0===e?a(this).attr("data-tbw-flag",!0):a(this).attr("data-tbw-flag")?a(this).removeAttr("data-tbw-flag"):a(this).contents().unwrap()}))},dropdown:function(e){var n=this,o=a("body",n.doc),r=n.o.prefix,i=a("[data-"+r+"dropdown="+e+"]",n.$box),s=a("."+r+e+"-button",n.$btnPane),l=i.is(":hidden");if(o.trigger("mousedown"),l){var d=s.offset().left;s.addClass(r+"active"),i.css({position:"absolute",top:s.offset().top-n.$btnPane.offset().top+s.outerHeight(),left:n.o.fixedFullWidth&&n.isFixed?d:d-n.$btnPane.offset().left}).show(),a(t).trigger("scroll"),o.on("mousedown."+n.eventNamespace,(function(e){i.is(e.target)||(a("."+r+"dropdown",n.$box).hide(),a("."+r+"active",n.$btnPane).removeClass(r+"active"),o.off("mousedown."+n.eventNamespace))}))}},html:function(e){var t=this;return null!=e?(t.$ta.val(e),t.syncCode(!0),t.$c.trigger("tbwchange"),t):t.$ta.val()},syncTextarea:function(){var e=this;e.$ta.val(e.$ed.text().trim().length>0||e.$ed.find(e.o.tagsToKeep.join(",")).length>0?e.$ed.html():"")},syncCode:function(e){var t=this;if(!e&&t.$ed.is(":visible"))t.syncTextarea();else{var n=a("