jobdone-shared-files 1.1.15 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@
15
15
  <small><span>已選擇</span><span class="text-primary mx-1">{{ selectedFilesSet.size
16
16
  }}</span><span>個檔案</span></small>
17
17
  <button class="btn btn-link btn-sm" @click='clearSelected'><span
18
- class="material-icons me-1">close</span>取消選取</button>
18
+ class="material-icons me-1">close</span><span>取消選取</span></button>
19
19
  </div>
20
20
  </template>
21
21
  <template v-else>
@@ -1,14 +1,19 @@
1
1
  import Modal from 'bootstrap/js/dist/modal.js';
2
+ import Offcanvas from 'bootstrap/js/dist/offcanvas.js';
2
3
 
3
4
  /** 移除焦點Function */
4
5
  const blurHandler = () => {
5
6
  document.activeElement && document.activeElement.blur();
6
7
  };
7
8
 
8
- /** 取得與 DOM 元素關聯的Modal實例,或在未初始化的情況下建立新的Modal實例。
9
+ /** 取得與 DOM 元素關聯的Modal或Offcanvas實例,或在未初始化的情況下建立新的實例。
9
10
  * @param { HTMLElement } modalDom 光箱的DOM
11
+ * @param { String } uiStyle UI樣式,"modal" 或 "offcanvas"
10
12
  */
11
- export const getOrCreateInstance = (modalDom) => {
13
+ export const getOrCreateInstance = (modalDom, uiStyle = "modal") => {
14
+ if (uiStyle === "offcanvas") {
15
+ return Offcanvas.getOrCreateInstance(modalDom);
16
+ }
12
17
  return Modal.getOrCreateInstance(modalDom);
13
18
  }
14
19
 
@@ -17,12 +22,13 @@ export const getOrCreateInstance = (modalDom) => {
17
22
  * @param { HTMLElement } modalDom 光箱的DOM
18
23
  * @param { Function } modalHiddenFun 關閉光箱後的回調函數(等待 CSS 轉換完成後執行)
19
24
  * @param { Boolean } hidePrevented static = true 時,使用者點選黑色遮罩被阻止關閉光箱時的回調函數
25
+ * @param { String } uiStyle 指定UI樣式,預設為 "modal",可選 "offcanvas"
20
26
  */
21
- export const modalShow = (modalDom, modalHiddenFun, hidePreventedFun) => {
27
+ export const modalShow = (modalDom, modalHiddenFun, hidePreventedFun, uiStyle = "modal") => {
22
28
  const removeEventListeners = () => {
23
- modalDom.removeEventListener('hide.bs.modal', blurHandler);
24
- modalDom.removeEventListener('hidden.bs.modal', afterCloseModalFun);
25
- modalDom.removeEventListener('hidePrevented.bs.modal', hidePreventedFun);
29
+ modalDom.removeEventListener(`hide.bs.${uiStyle}`, blurHandler);
30
+ modalDom.removeEventListener(`hidden.bs.${uiStyle}`, afterCloseModalFun);
31
+ modalDom.removeEventListener(`hidePrevented.bs.${uiStyle}`, hidePreventedFun);
26
32
  }
27
33
 
28
34
  const afterCloseModalFun = () => {
@@ -35,22 +41,24 @@ export const modalShow = (modalDom, modalHiddenFun, hidePreventedFun) => {
35
41
  // 先移除事件監聽,避免重複添加
36
42
  removeEventListeners();
37
43
 
38
- modalDom.addEventListener('hide.bs.modal', blurHandler); // 關閉光箱時需移除焦點,避免aria-hidden="true"的元素仍然有焦點
39
- modalDom.addEventListener('hidden.bs.modal', afterCloseModalFun);
44
+ modalDom.addEventListener(`hide.bs.${uiStyle}`, blurHandler); // 關閉光箱時需移除焦點,避免aria-hidden="true"的元素仍然有焦點
45
+ modalDom.addEventListener(`hidden.bs.${uiStyle}`, afterCloseModalFun);
40
46
  if (hidePreventedFun && typeof hidePreventedFun === 'function') {
41
- modalDom.addEventListener('hidePrevented.bs.modal', hidePreventedFun);
47
+ modalDom.addEventListener(`hidePrevented.bs.${uiStyle}`, hidePreventedFun);
42
48
  }
43
49
 
44
- getOrCreateInstance(modalDom).show();
50
+ getOrCreateInstance(modalDom, uiStyle).show();
45
51
  };
46
52
 
47
53
  /**
48
54
  * 手動關閉光箱
49
55
  * @param { HTMLElement } modalDom 光箱的DOM
56
+ * @param { String } uiStyle UI樣式,"modal" 或 "offcanvas"
57
+ * @param { Boolean } dispose 是否銷毀實例
50
58
  */
51
- export const modalHide = (modalDom, dispose = false) => {
52
- getOrCreateInstance(modalDom).hide();
59
+ export const modalHide = (modalDom, uiStyle = "modal", dispose = false) => {
60
+ getOrCreateInstance(modalDom, uiStyle).hide();
53
61
  if (dispose) {
54
- getOrCreateInstance(modalDom).dispose();
62
+ getOrCreateInstance(modalDom, uiStyle).dispose();
55
63
  }
56
64
  }
package/index.js CHANGED
@@ -3,13 +3,22 @@ import tagEditor from "./tagEditor.vue";
3
3
  import tree from "./tree.vue";
4
4
  import vueLoadingOverlay from "./vueLoadingOverlay.vue";
5
5
  import projectNavbar from "./ProjectManagement/projectNavbar.vue";
6
+ import { modalShow, modalHide } from "./common/ModalSetup";
7
+ import ModalFileRepositorySelector from "./ModalFileRepositorySelector.vue";
8
+ import autocompleteSelect from "./autocompleteSelect.vue";
6
9
 
7
10
  export default {
8
11
  paginate,
9
12
  tagEditor,
10
13
  tree,
11
14
  vueLoadingOverlay,
15
+ ModalFileRepositorySelector,
16
+ autocompleteSelect,
12
17
 
13
18
  // ProjectManagement
14
- projectNavbar
19
+ projectNavbar,
20
+
21
+ // Common
22
+ modalShow,
23
+ modalHide,
15
24
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jobdone-shared-files",
3
- "version": "1.1.15",
3
+ "version": "1.1.17",
4
4
  "description": "Shared JS and SCSS for Jobdone Enterprise.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,4 +1,16 @@
1
1
  #ModalFileRepository {
2
+ .btn>* {
3
+ vertical-align: middle;
4
+ }
5
+
6
+ .btn-link {
7
+ text-decoration: none;
8
+
9
+ }
10
+ .material-icons {
11
+ font-size: inherit;
12
+ }
13
+
2
14
  &.modal.sub-modal {
3
15
  backdrop-filter: none;
4
16
  background-color: rgba(#000000, 0.1);