@ablogcms/lib 3.2.28-beta.0

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.
Files changed (97) hide show
  1. package/README.md +29 -0
  2. package/dist/a-table/index.d.ts +10 -0
  3. package/dist/a-table/index.mjs +48 -0
  4. package/dist/a-table/index.mjs.map +1 -0
  5. package/dist/acms.d.ts +8 -0
  6. package/dist/acms.mjs +1 -0
  7. package/dist/acms.mjs.map +1 -0
  8. package/dist/chunk-AMZYQ4DG.mjs +344 -0
  9. package/dist/chunk-AMZYQ4DG.mjs.map +1 -0
  10. package/dist/chunk-W7TT2YZB.mjs +271 -0
  11. package/dist/chunk-W7TT2YZB.mjs.map +1 -0
  12. package/dist/chunk-ZPZHEKTI.mjs +20 -0
  13. package/dist/chunk-ZPZHEKTI.mjs.map +1 -0
  14. package/dist/command.d.ts +5 -0
  15. package/dist/command.mjs +63 -0
  16. package/dist/command.mjs.map +1 -0
  17. package/dist/create-pdf.d.ts +1 -0
  18. package/dist/create-pdf.mjs +27 -0
  19. package/dist/create-pdf.mjs.map +1 -0
  20. package/dist/events.d.ts +210 -0
  21. package/dist/flatpicker/date-picker.d.ts +6 -0
  22. package/dist/flatpicker/date-picker.mjs +28 -0
  23. package/dist/flatpicker/date-picker.mjs.map +1 -0
  24. package/dist/flatpicker/time-picker.d.ts +6 -0
  25. package/dist/flatpicker/time-picker.mjs +28 -0
  26. package/dist/flatpicker/time-picker.mjs.map +1 -0
  27. package/dist/geolocation.d.ts +1 -0
  28. package/dist/geolocation.mjs +30 -0
  29. package/dist/geolocation.mjs.map +1 -0
  30. package/dist/google-maps/google-maps.d.ts +6 -0
  31. package/dist/google-maps/google-maps.mjs +105 -0
  32. package/dist/google-maps/google-maps.mjs.map +1 -0
  33. package/dist/google-maps/loader.d.ts +9 -0
  34. package/dist/google-maps/loader.mjs +7 -0
  35. package/dist/google-maps/loader.mjs.map +1 -0
  36. package/dist/google-maps/picker/google-maps-picker.d.ts +72 -0
  37. package/dist/google-maps/picker/index.d.ts +5 -0
  38. package/dist/google-maps/picker/index.mjs +483 -0
  39. package/dist/google-maps/picker/index.mjs.map +1 -0
  40. package/dist/google-maps/street-view.d.ts +2 -0
  41. package/dist/google-maps/street-view.mjs +25 -0
  42. package/dist/google-maps/street-view.mjs.map +1 -0
  43. package/dist/htmx/geolocation.d.ts +1 -0
  44. package/dist/htmx/geolocation.mjs +40 -0
  45. package/dist/htmx/geolocation.mjs.map +1 -0
  46. package/dist/icons.d.ts +2 -0
  47. package/dist/icons.mjs +181 -0
  48. package/dist/icons.mjs.map +1 -0
  49. package/dist/lazy-load/index.d.ts +2 -0
  50. package/dist/lazy-load/index.mjs +21 -0
  51. package/dist/lazy-load/index.mjs.map +1 -0
  52. package/dist/lite-editor/index.d.ts +87 -0
  53. package/dist/lite-editor/index.mjs +274 -0
  54. package/dist/lite-editor/index.mjs.map +1 -0
  55. package/dist/lite-editor-field/index.d.ts +8 -0
  56. package/dist/lite-editor-field/index.mjs +18 -0
  57. package/dist/lite-editor-field/index.mjs.map +1 -0
  58. package/dist/loader/index.d.ts +2 -0
  59. package/dist/loader/index.mjs +262 -0
  60. package/dist/loader/index.mjs.map +1 -0
  61. package/dist/loader/loader.d.ts +29 -0
  62. package/dist/loader/sync-loader.d.ts +104 -0
  63. package/dist/open-street-map/open-street-map.d.ts +2 -0
  64. package/dist/open-street-map/open-street-map.mjs +60 -0
  65. package/dist/open-street-map/open-street-map.mjs.map +1 -0
  66. package/dist/open-street-map/picker/index.d.ts +6 -0
  67. package/dist/open-street-map/picker/index.mjs +50 -0
  68. package/dist/open-street-map/picker/index.mjs.map +1 -0
  69. package/dist/open-street-map/picker/open-street-map-picker.d.ts +55 -0
  70. package/dist/open-street-map/picker/open-street-map-picker.mjs +7 -0
  71. package/dist/open-street-map/picker/open-street-map-picker.mjs.map +1 -0
  72. package/dist/pdf2image.d.ts +21 -0
  73. package/dist/pdf2image.mjs +115 -0
  74. package/dist/pdf2image.mjs.map +1 -0
  75. package/dist/polyfill/index.d.ts +1 -0
  76. package/dist/polyfill/index.mjs +40 -0
  77. package/dist/polyfill/index.mjs.map +1 -0
  78. package/dist/read-files.d.ts +14 -0
  79. package/dist/read-files.mjs +62 -0
  80. package/dist/read-files.mjs.map +1 -0
  81. package/dist/resize-image/resize-image.d.ts +71 -0
  82. package/dist/resize-image/resize-image.mjs +308 -0
  83. package/dist/resize-image/resize-image.mjs.map +1 -0
  84. package/dist/resize-image/util.d.ts +134 -0
  85. package/dist/resize-image/util.mjs +7 -0
  86. package/dist/resize-image/util.mjs.map +1 -0
  87. package/dist/select2/index.d.ts +1 -0
  88. package/dist/select2/index.mjs +33 -0
  89. package/dist/select2/index.mjs.map +1 -0
  90. package/dist/trumbowyg.d.ts +12 -0
  91. package/dist/wysiwyg.d.ts +2 -0
  92. package/dist/wysiwyg.mjs +21 -0
  93. package/dist/wysiwyg.mjs.map +1 -0
  94. package/dist/zxcvbn/index.d.ts +2 -0
  95. package/dist/zxcvbn/index.mjs +35 -0
  96. package/dist/zxcvbn/index.mjs.map +1 -0
  97. package/package.json +203 -0
@@ -0,0 +1,115 @@
1
+ // src/pdf2image.js
2
+ import * as pdfjs from "pdfjs-dist/legacy/build/pdf.mjs";
3
+ var Pdf2Image = class {
4
+ /**
5
+ * Constructor
6
+ *
7
+ * @param url
8
+ */
9
+ constructor(url) {
10
+ this.url = url;
11
+ this.baseUrl = `${ACMS.Config.root}js/dest/`;
12
+ this.currentPage = 1;
13
+ this.numPages = -1;
14
+ this.document = null;
15
+ pdfjs.GlobalWorkerOptions.workerSrc = `${this.baseUrl}pdf.worker.js`;
16
+ }
17
+ async hasPrevPage() {
18
+ return this.currentPage > 1;
19
+ }
20
+ async hasNextPage() {
21
+ if (this.numPages < 1) {
22
+ this.numPages = await this.getPages();
23
+ }
24
+ if (this.currentPage < this.numPages) {
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+ async getPrevImage(width = 0) {
30
+ if (await this.hasPrevPage()) {
31
+ return this.getPageImage(this.currentPage - 1, width);
32
+ }
33
+ return false;
34
+ }
35
+ async getNextImage(width = 0) {
36
+ if (await this.hasNextPage()) {
37
+ return this.getPageImage(this.currentPage + 1, width);
38
+ }
39
+ return false;
40
+ }
41
+ async getPages() {
42
+ try {
43
+ const pdfDocument = await this.getDocument();
44
+ return pdfDocument.numPages;
45
+ } catch (e) {
46
+ return false;
47
+ }
48
+ }
49
+ async getPageImage(page, width = 0) {
50
+ try {
51
+ const canvas = document.createElement("canvas");
52
+ await this.toCanvas(canvas, page, width);
53
+ this.currentPage = page;
54
+ return canvas.toDataURL("image/jpeg");
55
+ } catch (e) {
56
+ return false;
57
+ }
58
+ }
59
+ async toCanvas(canvas, page, width) {
60
+ const pdfDocument = await this.getDocument();
61
+ const pdfPage = await pdfDocument.getPage(page);
62
+ let viewport = pdfPage.getViewport({ scale: 1 });
63
+ if (width > 0) {
64
+ const ratio = width / viewport.width;
65
+ viewport = pdfPage.getViewport({ scale: ratio });
66
+ }
67
+ const IMAGE_RESOLUTION = 150;
68
+ const outputScale = width > 0 ? 1 : IMAGE_RESOLUTION / 72;
69
+ canvas.height = Math.floor(viewport.height * outputScale);
70
+ canvas.width = Math.floor(viewport.width * outputScale);
71
+ const context = canvas.getContext("2d");
72
+ if (context === null) {
73
+ throw new Error("Failed to get 2D rendering context from canvas.");
74
+ }
75
+ context.save();
76
+ context.fillStyle = "rgb(255, 255, 255)";
77
+ context.fillRect(0, 0, canvas.width, canvas.height);
78
+ context.restore();
79
+ return pdfPage.render({
80
+ canvasContext: context,
81
+ transform: [outputScale, 0, 0, outputScale, 0, 0],
82
+ viewport
83
+ }).promise;
84
+ }
85
+ getDocument() {
86
+ return new Promise((resolve, reject) => {
87
+ if (this.document) {
88
+ resolve(this.document);
89
+ }
90
+ try {
91
+ const src = {
92
+ cMapUrl: `${this.baseUrl}cmaps/`,
93
+ cMapPacked: true
94
+ };
95
+ if (typeof this.url === "string") {
96
+ src.url = this.url;
97
+ } else {
98
+ src.data = this.url;
99
+ }
100
+ pdfjs.getDocument(src).promise.then((document2) => {
101
+ this.document = document2;
102
+ resolve(this.document);
103
+ }).catch((e) => {
104
+ reject(e);
105
+ });
106
+ } catch (e) {
107
+ reject(e);
108
+ }
109
+ });
110
+ }
111
+ };
112
+ export {
113
+ Pdf2Image as default
114
+ };
115
+ //# sourceMappingURL=pdf2image.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pdf2image.js"],"sourcesContent":["import * as pdfjs from 'pdfjs-dist/legacy/build/pdf.mjs';\n\nexport default class Pdf2Image {\n /**\n * Constructor\n *\n * @param url\n */\n constructor(url) {\n this.url = url;\n this.baseUrl = `${ACMS.Config.root}js/dest/`;\n this.currentPage = 1;\n this.numPages = -1;\n this.document = null;\n pdfjs.GlobalWorkerOptions.workerSrc = `${this.baseUrl}pdf.worker.js`;\n }\n\n async hasPrevPage() {\n return this.currentPage > 1;\n }\n\n async hasNextPage() {\n if (this.numPages < 1) {\n this.numPages = await this.getPages();\n }\n if (this.currentPage < this.numPages) {\n return true;\n }\n return false;\n }\n\n async getPrevImage(width = 0) {\n if (await this.hasPrevPage()) {\n return this.getPageImage(this.currentPage - 1, width);\n }\n return false;\n }\n\n async getNextImage(width = 0) {\n if (await this.hasNextPage()) {\n return this.getPageImage(this.currentPage + 1, width);\n }\n return false;\n }\n\n async getPages() {\n try {\n const pdfDocument = await this.getDocument();\n return pdfDocument.numPages;\n } catch (e) {\n return false;\n }\n }\n\n async getPageImage(page, width = 0) {\n try {\n const canvas = document.createElement('canvas');\n await this.toCanvas(canvas, page, width);\n this.currentPage = page;\n return canvas.toDataURL('image/jpeg');\n } catch (e) {\n return false;\n }\n }\n\n async toCanvas(canvas, page, width) {\n const pdfDocument = await this.getDocument();\n const pdfPage = await pdfDocument.getPage(page);\n let viewport = pdfPage.getViewport({ scale: 1 });\n if (width > 0) {\n const ratio = width / viewport.width;\n viewport = pdfPage.getViewport({ scale: ratio });\n }\n\n const IMAGE_RESOLUTION = 150; // widthが指定されていない場合の解像度\n const outputScale = width > 0 ? 1 : IMAGE_RESOLUTION / 72.0;\n\n canvas.height = Math.floor(viewport.height * outputScale);\n canvas.width = Math.floor(viewport.width * outputScale);\n\n const context = canvas.getContext('2d');\n if (context === null) {\n throw new Error('Failed to get 2D rendering context from canvas.');\n }\n context.save();\n context.fillStyle = 'rgb(255, 255, 255)';\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.restore();\n\n return pdfPage.render({\n canvasContext: context,\n transform: [outputScale, 0, 0, outputScale, 0, 0],\n viewport,\n }).promise;\n }\n\n getDocument() {\n return new Promise((resolve, reject) => {\n if (this.document) {\n resolve(this.document);\n }\n try {\n const src = {\n cMapUrl: `${this.baseUrl}cmaps/`,\n cMapPacked: true,\n };\n if (typeof this.url === 'string') {\n src.url = this.url;\n } else {\n src.data = this.url;\n }\n pdfjs\n .getDocument(src)\n .promise.then((document) => {\n this.document = document;\n resolve(this.document);\n })\n .catch((e) => {\n reject(e);\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n"],"mappings":"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","names":["document"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ // src/polyfill/index.js
2
+ import "core-js/features/promise";
3
+ import "core-js/features/object/assign";
4
+ import "core-js/features/symbol";
5
+ import "core-js/features/array/from";
6
+ import "canvas-toBlob";
7
+ window.addEventListener("unhandledrejection", () => {
8
+ });
9
+ window.onunhandledrejection = () => {
10
+ };
11
+ if (!Element.prototype.matches) {
12
+ Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
13
+ }
14
+ if (!Element.prototype.closest) {
15
+ Element.prototype.closest = function(value) {
16
+ let element = this;
17
+ do {
18
+ if (element.matches(value)) return element;
19
+ element = element.parentelementement || element.parentNode;
20
+ } while (element !== null && element.nodeType === 1);
21
+ return null;
22
+ };
23
+ }
24
+ if (window.navigator.userAgent === void 0) {
25
+ window.navigator.userAgent = "";
26
+ window.navigator.appVersion = "";
27
+ window.navigator.platform = "";
28
+ if (window.navigator.userAgentData !== void 0) {
29
+ const uaData = window.navigator.userAgentData;
30
+ const brand = uaData.brands[uaData.brands.length - 1];
31
+ let uaString = `dummy_${uaData.platform}_AppleWebKit_${brand.brand}_xxxx`;
32
+ if (uaData.mobile === true) {
33
+ uaString += "_Mobile_xxxx";
34
+ }
35
+ window.navigator.userAgent = uaString;
36
+ window.navigator.appVersion = brand.version;
37
+ window.navigator.platform = uaData.platform;
38
+ }
39
+ }
40
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/polyfill/index.js"],"sourcesContent":["// reactを動かすのに必要なpolyfill\nimport 'core-js/features/promise';\nimport 'core-js/features/object/assign';\nimport 'core-js/features/symbol';\nimport 'core-js/features/array/from';\nimport 'canvas-toBlob';\n\nwindow.addEventListener('unhandledrejection', () => {});\n\nwindow.onunhandledrejection = () => {};\n\nif (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\nif (!Element.prototype.closest) {\n Element.prototype.closest = function (value) {\n let element = this;\n do {\n if (element.matches(value)) return element;\n element = element.parentelementement || element.parentNode;\n } while (element !== null && element.nodeType === 1);\n return null;\n };\n}\n\nif (window.navigator.userAgent === undefined) {\n window.navigator.userAgent = '';\n window.navigator.appVersion = '';\n window.navigator.platform = '';\n\n if (window.navigator.userAgentData !== undefined) {\n const uaData = window.navigator.userAgentData;\n const brand = uaData.brands[uaData.brands.length - 1];\n let uaString = `dummy_${uaData.platform}_AppleWebKit_${brand.brand}_xxxx`;\n if (uaData.mobile === true) {\n uaString += '_Mobile_xxxx';\n }\n window.navigator.userAgent = uaString;\n window.navigator.appVersion = brand.version;\n window.navigator.platform = uaData.platform;\n }\n}\n"],"mappings":";AACA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,OAAO,iBAAiB,sBAAsB,MAAM;AAAC,CAAC;AAEtD,OAAO,uBAAuB,MAAM;AAAC;AAErC,IAAI,CAAC,QAAQ,UAAU,SAAS;AAC9B,UAAQ,UAAU,UAAU,QAAQ,UAAU,qBAAqB,QAAQ,UAAU;AACvF;AACA,IAAI,CAAC,QAAQ,UAAU,SAAS;AAC9B,UAAQ,UAAU,UAAU,SAAU,OAAO;AAC3C,QAAI,UAAU;AACd,OAAG;AACD,UAAI,QAAQ,QAAQ,KAAK,EAAG,QAAO;AACnC,gBAAU,QAAQ,sBAAsB,QAAQ;AAAA,IAClD,SAAS,YAAY,QAAQ,QAAQ,aAAa;AAClD,WAAO;AAAA,EACT;AACF;AAEA,IAAI,OAAO,UAAU,cAAc,QAAW;AAC5C,SAAO,UAAU,YAAY;AAC7B,SAAO,UAAU,aAAa;AAC9B,SAAO,UAAU,WAAW;AAE5B,MAAI,OAAO,UAAU,kBAAkB,QAAW;AAChD,UAAM,SAAS,OAAO,UAAU;AAChC,UAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,SAAS,CAAC;AACpD,QAAI,WAAW,SAAS,OAAO,QAAQ,gBAAgB,MAAM,KAAK;AAClE,QAAI,OAAO,WAAW,MAAM;AAC1B,kBAAY;AAAA,IACd;AACA,WAAO,UAAU,YAAY;AAC7B,WAAO,UAAU,aAAa,MAAM;AACpC,WAAO,UAAU,WAAW,OAAO;AAAA,EACrC;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ export type ExtendedFile = {
2
+ file: File;
3
+ filetype: 'image';
4
+ preview: string;
5
+ blob?: Blob | null;
6
+ } | {
7
+ file: File;
8
+ filetype: 'file';
9
+ };
10
+ /**
11
+ * ファイルが画像 (HEIC/HEIF を含む) かどうかを MIME タイプで判定する。
12
+ */
13
+ export declare const isImageFile: (file: File) => boolean;
14
+ export default function readFiles(files: File[] | FileList): Promise<ExtendedFile[]>;
@@ -0,0 +1,62 @@
1
+ // src/read-files.ts
2
+ var isImageFile = (file) => /(heic|heif)/i.test(file.type) || /image.*/.test(file.type);
3
+ function readFiles(files) {
4
+ const promises = [];
5
+ Array.from(files).forEach((f) => {
6
+ const promise = new Promise((resolve, reject) => {
7
+ const objFileReader = new FileReader();
8
+ if (/(heic|heif)/i.test(f.type)) {
9
+ let convertedBlob = null;
10
+ objFileReader.onload = () => {
11
+ resolve({
12
+ file: f,
13
+ filetype: "image",
14
+ preview: objFileReader.result,
15
+ blob: convertedBlob
16
+ });
17
+ };
18
+ (async () => {
19
+ const { heicTo } = await import(
20
+ /* webpackChunkName: "heic-to" */
21
+ "heic-to"
22
+ );
23
+ const blob = await heicTo({
24
+ blob: f,
25
+ type: "image/jpeg"
26
+ });
27
+ if (blob instanceof Blob) {
28
+ convertedBlob = blob;
29
+ objFileReader.readAsDataURL(blob);
30
+ }
31
+ })();
32
+ } else if (isImageFile(f)) {
33
+ objFileReader.onload = () => {
34
+ resolve({
35
+ file: f,
36
+ filetype: "image",
37
+ preview: objFileReader.result
38
+ });
39
+ };
40
+ objFileReader.readAsDataURL(f);
41
+ } else {
42
+ objFileReader.onload = () => {
43
+ resolve({
44
+ file: f,
45
+ filetype: "file"
46
+ });
47
+ };
48
+ objFileReader.readAsDataURL(f);
49
+ }
50
+ objFileReader.onerror = () => {
51
+ reject(new Error(`Failed to read file: ${f.name}`));
52
+ };
53
+ });
54
+ promises.push(promise);
55
+ });
56
+ return Promise.all(promises);
57
+ }
58
+ export {
59
+ readFiles as default,
60
+ isImageFile
61
+ };
62
+ //# sourceMappingURL=read-files.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/read-files.ts"],"sourcesContent":["export type ExtendedFile =\n | {\n file: File;\n filetype: 'image';\n preview: string;\n blob?: Blob | null;\n }\n | {\n file: File;\n filetype: 'file';\n };\n\n/**\n * ファイルが画像 (HEIC/HEIF を含む) かどうかを MIME タイプで判定する。\n */\nexport const isImageFile = (file: File): boolean => /(heic|heif)/i.test(file.type) || /image.*/.test(file.type);\n\nexport default function readFiles(files: File[] | FileList): Promise<ExtendedFile[]> {\n const promises: Promise<ExtendedFile>[] = [];\n Array.from(files).forEach((f) => {\n const promise = new Promise<ExtendedFile>((resolve, reject) => {\n const objFileReader = new FileReader();\n if (/(heic|heif)/i.test(f.type)) {\n let convertedBlob: Blob | null = null;\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'image',\n preview: objFileReader.result as string,\n blob: convertedBlob,\n });\n };\n (async () => {\n const { heicTo } = await import(/* webpackChunkName: \"heic-to\" */ 'heic-to');\n const blob = await heicTo({\n blob: f,\n type: 'image/jpeg',\n });\n if (blob instanceof Blob) {\n convertedBlob = blob;\n objFileReader.readAsDataURL(blob);\n }\n })();\n } else if (isImageFile(f)) {\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'image',\n preview: objFileReader.result as string,\n });\n };\n objFileReader.readAsDataURL(f);\n } else {\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'file',\n });\n };\n objFileReader.readAsDataURL(f);\n }\n objFileReader.onerror = () => {\n reject(new Error(`Failed to read file: ${f.name}`));\n };\n });\n promises.push(promise);\n });\n return Promise.all(promises);\n}\n"],"mappings":";AAeO,IAAM,cAAc,CAAC,SAAwB,eAAe,KAAK,KAAK,IAAI,KAAK,UAAU,KAAK,KAAK,IAAI;AAE/F,SAAR,UAA2B,OAAmD;AACnF,QAAM,WAAoC,CAAC;AAC3C,QAAM,KAAK,KAAK,EAAE,QAAQ,CAAC,MAAM;AAC/B,UAAM,UAAU,IAAI,QAAsB,CAAC,SAAS,WAAW;AAC7D,YAAM,gBAAgB,IAAI,WAAW;AACrC,UAAI,eAAe,KAAK,EAAE,IAAI,GAAG;AAC/B,YAAI,gBAA6B;AACjC,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,SAAS,cAAc;AAAA,YACvB,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AACA,SAAC,YAAY;AACX,gBAAM,EAAE,OAAO,IAAI,MAAM;AAAA;AAAA,YAAyC;AAAA,UAAS;AAC3E,gBAAM,OAAO,MAAM,OAAO;AAAA,YACxB,MAAM;AAAA,YACN,MAAM;AAAA,UACR,CAAC;AACD,cAAI,gBAAgB,MAAM;AACxB,4BAAgB;AAChB,0BAAc,cAAc,IAAI;AAAA,UAClC;AAAA,QACF,GAAG;AAAA,MACL,WAAW,YAAY,CAAC,GAAG;AACzB,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,SAAS,cAAc;AAAA,UACzB,CAAC;AAAA,QACH;AACA,sBAAc,cAAc,CAAC;AAAA,MAC/B,OAAO;AACL,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AACA,sBAAc,cAAc,CAAC;AAAA,MAC/B;AACA,oBAAc,UAAU,MAAM;AAC5B,eAAO,IAAI,MAAM,wBAAwB,EAAE,IAAI,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,CAAC;AACD,aAAS,KAAK,OAAO;AAAA,EACvB,CAAC;AACD,SAAO,QAAQ,IAAI,QAAQ;AAC7B;","names":[]}
@@ -0,0 +1,71 @@
1
+ export default class ResizeImage {
2
+ /**
3
+ * Constructor
4
+ *
5
+ * @param elm
6
+ */
7
+ constructor(elm: any);
8
+ elm: any;
9
+ dropAreaMark: string;
10
+ inputMark: any;
11
+ previewMark: any;
12
+ targetMark: any;
13
+ targetMarkCF: any;
14
+ dropSelect: boolean;
15
+ dragging: number;
16
+ previewOnly: boolean;
17
+ util: Util;
18
+ eventListeners: any[];
19
+ /**
20
+ * リサイズ処理の初期化
21
+ */
22
+ resize(): void;
23
+ /**
24
+ * イベントリスナーを削除し、クリーンアップする
25
+ */
26
+ destroy(): void;
27
+ /**
28
+ * targetに対してリサイズ処理イベントを登録
29
+ *
30
+ * @param target
31
+ */
32
+ exec(target: any): void;
33
+ previewBox: any;
34
+ /**
35
+ * 画像のファイル選択イベントを登録
36
+ *
37
+ * @param target
38
+ */
39
+ listener(target: any): void;
40
+ /**
41
+ * 画像ファイルを読み込み
42
+ *
43
+ * @param files
44
+ * @param target
45
+ * @return {boolean}
46
+ */
47
+ readFiles(files: any, target: any): boolean;
48
+ /**
49
+ * 画像ドラッグでの失敗を抑制
50
+ *
51
+ * @param target
52
+ */
53
+ banDrag(target: any): void;
54
+ /**
55
+ * 分数を約分
56
+ *
57
+ * @param numerator
58
+ * @param denominator
59
+ */
60
+ reduce(numerator: any, denominator: any): string | number;
61
+ /**
62
+ * リサイズした画像データをdomとして追加
63
+ *
64
+ * @param {HTMLElement} target 対象の要素
65
+ * @param {string} dataUrl 画像データのURL
66
+ * @param {boolean} resize リサイズされているかどうか
67
+ * @return {void}
68
+ */
69
+ set(target: HTMLElement, dataUrl: string, resize: boolean): void;
70
+ }
71
+ import Util from './util.js';
@@ -0,0 +1,308 @@
1
+ import {
2
+ ResizeImageUtil
3
+ } from "../chunk-AMZYQ4DG.mjs";
4
+
5
+ // src/resize-image/resize-image.js
6
+ var ResizeImage = class {
7
+ /**
8
+ * Constructor
9
+ *
10
+ * @param elm
11
+ */
12
+ constructor(elm) {
13
+ this.elm = elm;
14
+ this.dropAreaMark = ".js-drop_area";
15
+ this.inputMark = ACMS.Config.resizeImageInputMark;
16
+ this.previewMark = ACMS.Config.resizeImagePreviewMark;
17
+ this.targetMark = ACMS.Config.resizeImageTargetMark;
18
+ this.targetMarkCF = ACMS.Config.resizeImageTargetMarkCF;
19
+ this.dropSelect = false;
20
+ this.dragging = 0;
21
+ this.previewOnly = ACMS.Config.resizeImage !== "on";
22
+ this.util = new ResizeImageUtil();
23
+ this.eventListeners = [];
24
+ }
25
+ /**
26
+ * リサイズ処理の初期化
27
+ */
28
+ resize() {
29
+ const targetAry = this.elm.querySelectorAll(this.targetMark);
30
+ if (targetAry.length > 0) {
31
+ [].forEach.call(targetAry, (input) => {
32
+ this.exec(input);
33
+ });
34
+ } else if (this.elm.classList.contains(this.targetMarkCF.substr(1)) && !this.elm.classList.contains("resizeImage")) {
35
+ this.elm.classList.add("resizeImage");
36
+ this.exec(this.elm);
37
+ }
38
+ }
39
+ /**
40
+ * イベントリスナーを削除し、クリーンアップする
41
+ */
42
+ destroy() {
43
+ this.eventListeners.forEach(({ element, type, handler }) => {
44
+ element.removeEventListener(type, handler);
45
+ });
46
+ this.eventListeners = [];
47
+ const previewElements = this.elm.querySelectorAll(this.previewMark);
48
+ previewElements.forEach((element) => {
49
+ element.remove();
50
+ });
51
+ const resizeDataElements = this.elm.querySelectorAll(".js-img_resize_data");
52
+ resizeDataElements.forEach((element) => {
53
+ element.remove();
54
+ });
55
+ this.elm.classList.remove("resizeImage");
56
+ }
57
+ /**
58
+ * targetに対してリサイズ処理イベントを登録
59
+ *
60
+ * @param target
61
+ */
62
+ exec(target) {
63
+ const node = target.querySelector(this.previewMark);
64
+ if (node !== null) {
65
+ this.previewBox = node.cloneNode(true);
66
+ target.querySelector(this.previewMark).insertAdjacentHTML("afterend", '<div class="js-img_resize_preview_location" />');
67
+ this.listener(target);
68
+ }
69
+ }
70
+ /**
71
+ * 画像のファイル選択イベントを登録
72
+ *
73
+ * @param target
74
+ */
75
+ listener(target) {
76
+ const dropArea = target.querySelector(this.dropAreaMark);
77
+ const interval = 1500;
78
+ let lastTime = (/* @__PURE__ */ new Date()).getTime() - interval;
79
+ this.dragging = 0;
80
+ if (dropArea && window.File && window.FileReader && !this.previewOnly) {
81
+ this.banDrag(target);
82
+ target.querySelector("img").getAttribute("src");
83
+ if (!target.querySelector("img").getAttribute("src")) {
84
+ dropArea.classList.add("drag-n-drop-hover");
85
+ setTimeout(() => {
86
+ const area = dropArea.querySelector(".acms-admin-drop-area");
87
+ $(area).fadeOut(200, () => {
88
+ dropArea.classList.remove("drag-n-drop-hover");
89
+ dropArea.querySelector(".acms-admin-drop-area").style.display = "";
90
+ });
91
+ }, 800);
92
+ }
93
+ const dropHandler = (event) => {
94
+ event.stopPropagation();
95
+ event.preventDefault();
96
+ this.dragging = 0;
97
+ this.dropSelect = true;
98
+ dropArea.classList.remove("drag-n-drop-hover");
99
+ const { files } = event.dataTransfer;
100
+ let gif = false;
101
+ for (let i = 0; i < files.length; i++) {
102
+ const file = files[i];
103
+ if (file.type === "image/gif") {
104
+ gif = true;
105
+ break;
106
+ }
107
+ }
108
+ if (gif) {
109
+ if (!window.confirm(ACMS.i18n("drop_select_gif_image.alert"))) {
110
+ return false;
111
+ }
112
+ }
113
+ this.readFiles(event.dataTransfer.files, target);
114
+ return false;
115
+ };
116
+ dropArea.addEventListener("drop", dropHandler, false);
117
+ this.eventListeners.push({ element: dropArea, type: "drop", handler: dropHandler });
118
+ const dragOverHandler = (event) => {
119
+ event.stopPropagation();
120
+ event.preventDefault();
121
+ dropArea.classList.add("drag-n-drop-hover");
122
+ return false;
123
+ };
124
+ dropArea.addEventListener("dragover", dragOverHandler, false);
125
+ this.eventListeners.push({ element: dropArea, type: "dragover", handler: dragOverHandler });
126
+ const dragEnterHandler = (event) => {
127
+ event.stopPropagation();
128
+ event.preventDefault();
129
+ this.dragging++;
130
+ dropArea.classList.add("drag-n-drop-hover");
131
+ return false;
132
+ };
133
+ dropArea.addEventListener("dragenter", dragEnterHandler, false);
134
+ this.eventListeners.push({ element: dropArea, type: "dragenter", handler: dragEnterHandler });
135
+ const dragLeaveHandler = (event) => {
136
+ event.stopPropagation();
137
+ event.preventDefault();
138
+ this.dragging--;
139
+ if (this.dragging === 0) {
140
+ dropArea.classList.remove("drag-n-drop-hover");
141
+ }
142
+ return false;
143
+ };
144
+ dropArea.addEventListener("dragleave", dragLeaveHandler, false);
145
+ this.eventListeners.push({ element: dropArea, type: "dragleave", handler: dragLeaveHandler });
146
+ }
147
+ const fileInputs = target.querySelectorAll(this.inputMark);
148
+ fileInputs.forEach((fileInput) => {
149
+ const changeHandler = (event) => {
150
+ if (lastTime + interval <= (/* @__PURE__ */ new Date()).getTime()) {
151
+ lastTime = (/* @__PURE__ */ new Date()).getTime();
152
+ this.readFiles(event.target.files, target);
153
+ }
154
+ };
155
+ fileInput.addEventListener("change", changeHandler);
156
+ this.eventListeners.push({ element: fileInput, type: "change", handler: changeHandler });
157
+ });
158
+ }
159
+ /**
160
+ * 画像ファイルを読み込み
161
+ *
162
+ * @param files
163
+ * @param target
164
+ * @return {boolean}
165
+ */
166
+ readFiles(files, target) {
167
+ const sizeSelect = target.querySelectorAll("[name^=image_size_]");
168
+ const bannerSize = document.querySelectorAll(".js-banner_size_large");
169
+ const bannerSizeCriterion = document.querySelector(".js-banner_size_large_criterion");
170
+ const rawSize = sizeSelect.length > 0 && sizeSelect[0].value.length < 2;
171
+ if (sizeSelect.length > 1) {
172
+ return false;
173
+ }
174
+ if (bannerSize.length >= 1 && bannerSize.value) {
175
+ ACMS.Config.lgImg = `${bannerSizeCriterion.value}:${bannerSize[0].value}`;
176
+ }
177
+ [].forEach.call(target.querySelectorAll(this.previewMark), (item) => {
178
+ item.parentNode.removeChild(item);
179
+ });
180
+ [].forEach.call(target.querySelectorAll(".js-img_resize_data"), (item) => {
181
+ item.parentNode.removeChild(item);
182
+ });
183
+ const lgImageSize = ACMS.Config.lgImg;
184
+ const lgImgAry = lgImageSize.split(":");
185
+ const lgImgSide = lgImgAry[0];
186
+ let lgImgSize = lgImgAry[1];
187
+ if (rawSize) {
188
+ lgImgSize = 999999999;
189
+ }
190
+ for (let i = 0; i < files.length; i++) {
191
+ const file = files[i];
192
+ if (!file) continue;
193
+ this.util.getDataUrlFromFile(file, lgImgSide, lgImgSize).then((data) => {
194
+ const { dataUrl } = data;
195
+ let { resize } = data;
196
+ if (rawSize) {
197
+ resize = false;
198
+ }
199
+ if (!this.dropSelect && file.type === "image/gif") {
200
+ resize = false;
201
+ }
202
+ if (this.previewOnly) {
203
+ resize = false;
204
+ }
205
+ this.set(target, dataUrl, resize || this.dropSelect);
206
+ });
207
+ }
208
+ }
209
+ /**
210
+ * 画像ドラッグでの失敗を抑制
211
+ *
212
+ * @param target
213
+ */
214
+ banDrag(target) {
215
+ [].forEach.call(target.querySelectorAll("img"), (item) => {
216
+ const mouseDownHandler = (event) => {
217
+ event.preventDefault();
218
+ };
219
+ const mouseUpHandler = (event) => {
220
+ event.preventDefault();
221
+ };
222
+ item.addEventListener("mousedown", mouseDownHandler);
223
+ item.addEventListener("mouseup", mouseUpHandler);
224
+ this.eventListeners.push(
225
+ { element: item, type: "mousedown", handler: mouseDownHandler },
226
+ { element: item, type: "mouseup", handler: mouseUpHandler }
227
+ );
228
+ });
229
+ }
230
+ /**
231
+ * 分数を約分
232
+ *
233
+ * @param numerator
234
+ * @param denominator
235
+ */
236
+ reduce(numerator, denominator) {
237
+ if (numerator > denominator) {
238
+ return Math.floor(numerator / denominator);
239
+ }
240
+ const numerator0 = numerator;
241
+ const denominator0 = denominator;
242
+ let c;
243
+ while (1) {
244
+ c = numerator % denominator;
245
+ if (c === 0) break;
246
+ denominator = numerator;
247
+ numerator = c;
248
+ }
249
+ return `${Math.floor(numerator0 / numerator)}/${Math.floor(denominator0 / numerator)}`;
250
+ }
251
+ /**
252
+ * リサイズした画像データをdomとして追加
253
+ *
254
+ * @param {HTMLElement} target 対象の要素
255
+ * @param {string} dataUrl 画像データのURL
256
+ * @param {boolean} resize リサイズされているかどうか
257
+ * @return {void}
258
+ */
259
+ set(target, dataUrl, resize) {
260
+ if (!this.previewBox) {
261
+ this.previewBox = target.querySelector(this.previewMark).cloneNode(true);
262
+ [].forEach.call(target.querySelectorAll(this.previewMark), (item) => {
263
+ item.parentNode.removeChild(item);
264
+ });
265
+ [].forEach.call(target.querySelectorAll(".js-img_resize_data"), (item) => {
266
+ item.parentNode.removeChild(item);
267
+ });
268
+ }
269
+ const clone = this.previewBox.cloneNode(true);
270
+ clone.style.display = "";
271
+ clone.setAttribute("src", dataUrl);
272
+ target.querySelector(".js-img_resize_preview_location").insertAdjacentHTML("beforebegin", clone.outerHTML);
273
+ [].forEach.call(target.querySelectorAll(".js-img_resize_preview_old"), (item) => {
274
+ item.parentNode.removeChild(item);
275
+ });
276
+ const imgDataUrl = target.querySelector(".js-img_data_url");
277
+ if (imgDataUrl) {
278
+ imgDataUrl.setAttribute("data-src", dataUrl);
279
+ }
280
+ this.banDrag(target);
281
+ const input = target.querySelector(this.inputMark);
282
+ if (resize) {
283
+ const fileInput = target.querySelector(this.inputMark);
284
+ if (fileInput) {
285
+ fileInput.value = "";
286
+ }
287
+ } else {
288
+ dataUrl = "";
289
+ }
290
+ const inputName = input.getAttribute("name");
291
+ const dataForm = document.createElement("input");
292
+ dataForm.classList.add("js-img_resize_data");
293
+ dataForm.setAttribute("type", "hidden");
294
+ dataForm.setAttribute("accept", "image/*");
295
+ dataForm.setAttribute("type", "hidden");
296
+ dataForm.setAttribute("name", inputName);
297
+ dataForm.value = dataUrl;
298
+ const dummy = target.querySelector(".js-img_resize_dummy");
299
+ if (dummy) {
300
+ dummy.remove();
301
+ }
302
+ target.querySelector(this.inputMark).insertAdjacentHTML("afterend", dataForm.outerHTML);
303
+ }
304
+ };
305
+ export {
306
+ ResizeImage as default
307
+ };
308
+ //# sourceMappingURL=resize-image.mjs.map