Changeset 3260511
- Timestamp:
- 03/24/2025 04:19:56 AM (13 months ago)
- Location:
- merge-pdf
- Files:
-
- 8 deleted
- 30 edited
- 1 copied
-
tags/1.0.0/trunk (copied) (copied from merge-pdf/trunk)
-
tags/1.0.0/trunk/build/block.json (modified) (1 diff)
-
tags/1.0.0/trunk/build/index-rtl.css (modified) (1 diff)
-
tags/1.0.0/trunk/build/index.asset.php (modified) (1 diff)
-
tags/1.0.0/trunk/build/index.css (modified) (1 diff)
-
tags/1.0.0/trunk/build/index.css.map (deleted)
-
tags/1.0.0/trunk/build/index.js (modified) (1 diff)
-
tags/1.0.0/trunk/build/index.js.map (deleted)
-
tags/1.0.0/trunk/build/style-index-rtl.css (modified) (1 diff)
-
tags/1.0.0/trunk/build/style-index.css (modified) (1 diff)
-
tags/1.0.0/trunk/build/style-index.css.map (deleted)
-
tags/1.0.0/trunk/build/view.asset.php (modified) (1 diff)
-
tags/1.0.0/trunk/build/view.js (modified) (1 diff)
-
tags/1.0.0/trunk/build/view.js.map (deleted)
-
tags/1.0.0/trunk/includes/process-machine.php (modified) (1 diff)
-
tags/1.0.0/trunk/languages/merge-pdf.pot (modified) (1 diff)
-
tags/1.0.0/trunk/merge-pdf.php (modified) (2 diffs)
-
tags/1.0.0/trunk/readme.txt (modified) (2 diffs)
-
tags/1.0.0/trunk/src/block.json (modified) (1 diff)
-
tags/1.0.0/trunk/src/view.js (modified) (3 diffs)
-
trunk/build/block.json (modified) (1 diff)
-
trunk/build/index-rtl.css (modified) (1 diff)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.css (modified) (1 diff)
-
trunk/build/index.css.map (deleted)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/build/index.js.map (deleted)
-
trunk/build/style-index-rtl.css (modified) (1 diff)
-
trunk/build/style-index.css (modified) (1 diff)
-
trunk/build/style-index.css.map (deleted)
-
trunk/build/view.asset.php (modified) (1 diff)
-
trunk/build/view.js (modified) (1 diff)
-
trunk/build/view.js.map (deleted)
-
trunk/includes/process-machine.php (modified) (1 diff)
-
trunk/languages/merge-pdf.pot (modified) (1 diff)
-
trunk/merge-pdf.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/src/block.json (modified) (1 diff)
-
trunk/src/view.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
merge-pdf/tags/1.0.0/trunk/build/block.json
r3225930 r3260511 3 3 "apiVersion": 3, 4 4 "name": "create-block/merge-pdf", 5 "version": "1.0. 0",5 "version": "1.0.1", 6 6 "title": "Merge Pdf", 7 7 "category": "widgets", -
merge-pdf/tags/1.0.0/trunk/build/index-rtl.css
r3232408 r3260511 1 /*!****************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***! 3 \****************************************************************************************************************************************************************************************************************************************************/ 4 .solution__merge-pdf { 5 margin: 1rem; 6 } 1 .solution__merge-pdf{margin:1rem} -
merge-pdf/tags/1.0.0/trunk/build/index.asset.php
r3232408 r3260511 1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '9 71621e220fab65d6c23');1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '95952ffc9d1cf6e0a1db'); -
merge-pdf/tags/1.0.0/trunk/build/index.css
r3232408 r3260511 1 /*!****************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***! 3 \****************************************************************************************************************************************************************************************************************************************************/ 4 .solution__merge-pdf { 5 margin: 1rem; 6 } 7 8 /*# sourceMappingURL=index.css.map*/ 1 .solution__merge-pdf{margin:1rem} -
merge-pdf/tags/1.0.0/trunk/build/index.js
r3232408 r3260511 1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/edit.js": 6 /*!*********************!*\ 7 !*** ./src/edit.js ***! 8 \*********************/ 9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "default": () => (/* binding */ Edit), 14 /* harmony export */ mergePDFIcon: () => (/* binding */ mergePDFIcon) 15 /* harmony export */ }); 16 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); 17 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 18 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 20 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 21 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); 22 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); 23 /** 24 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. 25 * Those files can contain any CSS code that gets applied to the editor. 26 * 27 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css 28 */ 29 30 31 32 33 function Edit() { 34 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 35 className: "solution__merge-pdf", 36 children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 37 className: "solution__container__wrapper", 38 children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { 39 className: "solution__container", 40 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 41 className: "solution__header", 42 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Merge PDF', 'merge-pdf') 43 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { 44 className: "solution__form", 45 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("label", { 46 htmlFor: "file", 47 className: "solution__label", 48 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { 49 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('File:', 'merge-pdf') 50 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input", { 51 type: "file", 52 id: "file", 53 name: "file", 54 required: true, 55 className: "solution__file-input", 56 disabled: true 57 })] 58 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", { 59 disabled: true, 60 className: "solution__btn", 61 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Submit', 'merge-pdf') 62 })] 63 })] 64 }) 65 }) 66 })); 67 } 68 const mergePDFIcon = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('svg', { 69 width: 32, 70 height: 33, 71 viewBox: '0 0 32 33', 72 fill: 'none', 73 xmlns: 'http://www.w3.org/2000/svg' 74 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('ellipse', { 75 cx: '15.8843', 76 cy: '16.5014', 77 rx: '13.2358', 78 ry: '13.3335', 79 fill: '#E3FAFC' 80 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 81 d: 'M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282', 82 stroke: '#0C8599', 83 'stroke-width': '1.32791', 84 'stroke-linecap': 'round', 85 'stroke-linejoin': 'round' 86 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 87 d: 'M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282', 88 stroke: '#0C8599', 89 'stroke-width': '1.32791', 90 'stroke-linecap': 'round', 91 'stroke-linejoin': 'round' 92 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 93 d: 'M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z', 94 stroke: '#0C8599', 95 'stroke-width': '1.32791', 96 'stroke-linecap': 'round', 97 'stroke-linejoin': 'round', 98 'fill-rule': 'evenodd', 99 'clip-rule': 'evenodd' 100 })); 101 102 /***/ }), 103 104 /***/ "./src/index.js": 105 /*!**********************!*\ 106 !*** ./src/index.js ***! 107 \**********************/ 108 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 109 110 __webpack_require__.r(__webpack_exports__); 111 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss"); 112 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 113 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__); 114 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js"); 115 /* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/block.json"); 116 117 118 119 120 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__, { 121 icon: _edit__WEBPACK_IMPORTED_MODULE_2__.mergePDFIcon, 122 edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"] 123 }); 124 125 /***/ }), 126 127 /***/ "./src/editor.scss": 128 /*!*************************!*\ 129 !*** ./src/editor.scss ***! 130 \*************************/ 131 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 132 133 __webpack_require__.r(__webpack_exports__); 134 // extracted by mini-css-extract-plugin 135 136 137 /***/ }), 138 139 /***/ "./src/style.scss": 140 /*!************************!*\ 141 !*** ./src/style.scss ***! 142 \************************/ 143 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 144 145 __webpack_require__.r(__webpack_exports__); 146 // extracted by mini-css-extract-plugin 147 148 149 /***/ }), 150 151 /***/ "react/jsx-runtime": 152 /*!**********************************!*\ 153 !*** external "ReactJSXRuntime" ***! 154 \**********************************/ 155 /***/ ((module) => { 156 157 module.exports = window["ReactJSXRuntime"]; 158 159 /***/ }), 160 161 /***/ "@wordpress/blocks": 162 /*!********************************!*\ 163 !*** external ["wp","blocks"] ***! 164 \********************************/ 165 /***/ ((module) => { 166 167 module.exports = window["wp"]["blocks"]; 168 169 /***/ }), 170 171 /***/ "@wordpress/element": 172 /*!*********************************!*\ 173 !*** external ["wp","element"] ***! 174 \*********************************/ 175 /***/ ((module) => { 176 177 module.exports = window["wp"]["element"]; 178 179 /***/ }), 180 181 /***/ "@wordpress/i18n": 182 /*!******************************!*\ 183 !*** external ["wp","i18n"] ***! 184 \******************************/ 185 /***/ ((module) => { 186 187 module.exports = window["wp"]["i18n"]; 188 189 /***/ }), 190 191 /***/ "./src/block.json": 192 /*!************************!*\ 193 !*** ./src/block.json ***! 194 \************************/ 195 /***/ ((module) => { 196 197 module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.0","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}'); 198 199 /***/ }) 200 201 /******/ }); 202 /************************************************************************/ 203 /******/ // The module cache 204 /******/ var __webpack_module_cache__ = {}; 205 /******/ 206 /******/ // The require function 207 /******/ function __webpack_require__(moduleId) { 208 /******/ // Check if module is in cache 209 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 210 /******/ if (cachedModule !== undefined) { 211 /******/ return cachedModule.exports; 212 /******/ } 213 /******/ // Create a new module (and put it into the cache) 214 /******/ var module = __webpack_module_cache__[moduleId] = { 215 /******/ // no module.id needed 216 /******/ // no module.loaded needed 217 /******/ exports: {} 218 /******/ }; 219 /******/ 220 /******/ // Execute the module function 221 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 222 /******/ 223 /******/ // Return the exports of the module 224 /******/ return module.exports; 225 /******/ } 226 /******/ 227 /******/ // expose the modules object (__webpack_modules__) 228 /******/ __webpack_require__.m = __webpack_modules__; 229 /******/ 230 /************************************************************************/ 231 /******/ /* webpack/runtime/chunk loaded */ 232 /******/ (() => { 233 /******/ var deferred = []; 234 /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 235 /******/ if(chunkIds) { 236 /******/ priority = priority || 0; 237 /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 238 /******/ deferred[i] = [chunkIds, fn, priority]; 239 /******/ return; 240 /******/ } 241 /******/ var notFulfilled = Infinity; 242 /******/ for (var i = 0; i < deferred.length; i++) { 243 /******/ var chunkIds = deferred[i][0]; 244 /******/ var fn = deferred[i][1]; 245 /******/ var priority = deferred[i][2]; 246 /******/ var fulfilled = true; 247 /******/ for (var j = 0; j < chunkIds.length; j++) { 248 /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 249 /******/ chunkIds.splice(j--, 1); 250 /******/ } else { 251 /******/ fulfilled = false; 252 /******/ if(priority < notFulfilled) notFulfilled = priority; 253 /******/ } 254 /******/ } 255 /******/ if(fulfilled) { 256 /******/ deferred.splice(i--, 1) 257 /******/ var r = fn(); 258 /******/ if (r !== undefined) result = r; 259 /******/ } 260 /******/ } 261 /******/ return result; 262 /******/ }; 263 /******/ })(); 264 /******/ 265 /******/ /* webpack/runtime/compat get default export */ 266 /******/ (() => { 267 /******/ // getDefaultExport function for compatibility with non-harmony modules 268 /******/ __webpack_require__.n = (module) => { 269 /******/ var getter = module && module.__esModule ? 270 /******/ () => (module['default']) : 271 /******/ () => (module); 272 /******/ __webpack_require__.d(getter, { a: getter }); 273 /******/ return getter; 274 /******/ }; 275 /******/ })(); 276 /******/ 277 /******/ /* webpack/runtime/define property getters */ 278 /******/ (() => { 279 /******/ // define getter functions for harmony exports 280 /******/ __webpack_require__.d = (exports, definition) => { 281 /******/ for(var key in definition) { 282 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 283 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 284 /******/ } 285 /******/ } 286 /******/ }; 287 /******/ })(); 288 /******/ 289 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 290 /******/ (() => { 291 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 292 /******/ })(); 293 /******/ 294 /******/ /* webpack/runtime/make namespace object */ 295 /******/ (() => { 296 /******/ // define __esModule on exports 297 /******/ __webpack_require__.r = (exports) => { 298 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 299 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 300 /******/ } 301 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 302 /******/ }; 303 /******/ })(); 304 /******/ 305 /******/ /* webpack/runtime/jsonp chunk loading */ 306 /******/ (() => { 307 /******/ // no baseURI 308 /******/ 309 /******/ // object to store loaded and loading chunks 310 /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 311 /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 312 /******/ var installedChunks = { 313 /******/ "index": 0, 314 /******/ "./style-index": 0 315 /******/ }; 316 /******/ 317 /******/ // no chunk on demand loading 318 /******/ 319 /******/ // no prefetching 320 /******/ 321 /******/ // no preloaded 322 /******/ 323 /******/ // no HMR 324 /******/ 325 /******/ // no HMR manifest 326 /******/ 327 /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 328 /******/ 329 /******/ // install a JSONP callback for chunk loading 330 /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 331 /******/ var chunkIds = data[0]; 332 /******/ var moreModules = data[1]; 333 /******/ var runtime = data[2]; 334 /******/ // add "moreModules" to the modules object, 335 /******/ // then flag all "chunkIds" as loaded and fire callback 336 /******/ var moduleId, chunkId, i = 0; 337 /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 338 /******/ for(moduleId in moreModules) { 339 /******/ if(__webpack_require__.o(moreModules, moduleId)) { 340 /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 341 /******/ } 342 /******/ } 343 /******/ if(runtime) var result = runtime(__webpack_require__); 344 /******/ } 345 /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 346 /******/ for(;i < chunkIds.length; i++) { 347 /******/ chunkId = chunkIds[i]; 348 /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 349 /******/ installedChunks[chunkId][0](); 350 /******/ } 351 /******/ installedChunks[chunkId] = 0; 352 /******/ } 353 /******/ return __webpack_require__.O(result); 354 /******/ } 355 /******/ 356 /******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; 357 /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 358 /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 359 /******/ })(); 360 /******/ 361 /************************************************************************/ 362 /******/ 363 /******/ // startup 364 /******/ // Load entry module and return exports 365 /******/ // This entry module depends on other loaded chunks and execution need to be delayed 366 /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.js"))) 367 /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 368 /******/ 369 /******/ })() 370 ; 371 //# sourceMappingURL=index.js.map 1 (()=>{"use strict";var e,i={354:()=>{const e=window.wp.blocks,i=window.wp.element,r=window.wp.i18n,n=window.ReactJSXRuntime,t=(0,i.createElement)("svg",{width:32,height:33,viewBox:"0 0 32 33",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)("ellipse",{cx:"15.8843",cy:"16.5014",rx:"13.2358",ry:"13.3335",fill:"#E3FAFC"}),(0,i.createElement)("path",{d:"M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round","fill-rule":"evenodd","clip-rule":"evenodd"})),l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.1","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');(0,e.registerBlockType)(l,{icon:t,edit:function(){return(0,i.createElement)("div",null,(0,n.jsx)("div",{className:"solution__merge-pdf",children:(0,n.jsx)("div",{className:"solution__container__wrapper",children:(0,n.jsxs)("div",{className:"solution__container",children:[(0,n.jsx)("div",{className:"solution__header",children:(0,r.__)("Merge PDF","merge-pdf")}),(0,n.jsxs)("div",{className:"solution__form",children:[(0,n.jsxs)("label",{htmlFor:"file",className:"solution__label",children:[(0,n.jsx)("span",{children:(0,r.__)("File:","merge-pdf")}),(0,n.jsx)("input",{type:"file",id:"file",name:"file",required:!0,className:"solution__file-input",disabled:!0})]}),(0,n.jsx)("button",{disabled:!0,className:"solution__btn",children:(0,r.__)("Submit","merge-pdf")})]})]})})}))}})}},r={};function n(e){var t=r[e];if(void 0!==t)return t.exports;var l=r[e]={exports:{}};return i[e](l,l.exports,n),l.exports}n.m=i,e=[],n.O=(i,r,t,l)=>{if(!r){var s=1/0;for(c=0;c<e.length;c++){r=e[c][0],t=e[c][1],l=e[c][2];for(var o=!0,a=0;a<r.length;a++)(!1&l||s>=l)&&Object.keys(n.O).every((e=>n.O[e](r[a])))?r.splice(a--,1):(o=!1,l<s&&(s=l));if(o){e.splice(c--,1);var d=t();void 0!==d&&(i=d)}}return i}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[r,t,l]},n.o=(e,i)=>Object.prototype.hasOwnProperty.call(e,i),(()=>{var e={57:0,350:0};n.O.j=i=>0===e[i];var i=(i,r)=>{var t,l,s=r[0],o=r[1],a=r[2],d=0;if(s.some((i=>0!==e[i]))){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(a)var c=a(n)}for(i&&i(r);d<s.length;d++)l=s[d],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(c)},r=self.webpackChunk=self.webpackChunk||[];r.forEach(i.bind(null,0)),r.push=i.bind(null,r.push.bind(r))})();var t=n.O(void 0,[350],(()=>n(354)));t=n.O(t)})(); -
merge-pdf/tags/1.0.0/trunk/build/style-index-rtl.css
r3232408 r3260511 1 /*!***************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***! 3 \***************************************************************************************************************************************************************************************************************************************************/ 4 :root { 5 --solution-merge-pdf-primary-color: #4f46e5; 6 --solution-merge-pdf-secondary-color: #eef2ff; 7 --solution-merge-pdf-tertiary-color: #000; 8 --solution-merge-pdf-background-color: #fff; 9 --solution-merge-pdf-border-color: #e5e7eb; 10 --solution-merge-pdf-input-border-color: #d1d5db; 11 --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2); 12 --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05); 13 --solution-merge-pdf-dropdown-bg-color: #fff; 14 --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1); 15 --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1); 16 } 17 18 .solution__merge-pdf .solution__container-wrapper { 19 padding: 1rem; 20 display: flex; 21 flex-direction: column; 22 gap: 1rem; 23 color: var(--solution-merge-pdf-tertiary-color); 24 } 25 .solution__merge-pdf .solution__container { 26 box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px; 27 border: 1px solid var(--solution-merge-pdf-border-color); 28 background-color: var(--solution-merge-pdf-background-color); 29 border-radius: 0.75rem; 30 padding: 1.5rem 1.5rem 0.5rem; 31 position: relative; 32 display: flex; 33 flex-direction: column; 34 min-height: 180px; 35 gap: 1rem; 36 } 37 .solution__merge-pdf .solution__header { 38 font-size: 1.25rem; 39 letter-spacing: 0.05em; 40 font-weight: 500; 41 } 42 .solution__merge-pdf .solution__content { 43 flex-grow: 1; 44 display: grid; 45 } 46 .solution__merge-pdf .solution__form { 47 display: flex; 48 flex-direction: column; 49 gap: 1rem; 50 } 51 .solution__merge-pdf .solution__label { 52 white-space: nowrap; 53 width: 100%; 54 font-size: 0.75rem; 55 font-weight: 500; 56 display: flex; 57 flex-direction: column; 58 gap: 0.3rem; 59 } 60 .solution__merge-pdf .solution__hint { 61 font-size: 0.75rem; 62 font-weight: 500; 63 color: var(--solution-merge-pdf-primary-color); 64 white-space: wrap; 65 } 66 .solution__merge-pdf .solution__input { 67 border: 1px solid var(--solution-merge-pdf-input-border-color); 68 border-radius: 0.375rem; 69 padding: 0.25rem 0.5rem; 70 font-size: 1rem; 71 line-height: 32px; 72 outline: 1px solid transparent; 73 outline-offset: -1px; 74 } 75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button { 76 margin-left: 1rem; 77 padding: 0.5rem 1rem; 78 border-radius: 0.75rem; 79 border: none; 80 background-color: var(--solution-merge-pdf-secondary-color); 81 color: var(--solution-merge-pdf-primary-color); 82 font-weight: 500; 83 cursor: pointer; 84 } 85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button { 86 background-color: var(--solution-merge-pdf-secondary-color); 87 } 88 .solution__merge-pdf .solution__btn { 89 display: inline-flex; 90 align-items: center; /* Ensures the icon and text are aligned */ 91 justify-content: center; 92 gap: 0.5rem; /* Adds space between the icon and the text */ 93 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color); 94 background: var(--solution-merge-pdf-secondary-color); 95 color: var(--solution-merge-pdf-primary-color); 96 padding: 0.5rem 1rem; 97 border-radius: 1rem; 98 font-weight: 600; 99 cursor: pointer; 100 border: none; 101 } 102 .solution__merge-pdf .solution__btn:hover { 103 filter: brightness(0.98); 104 } 105 .solution__merge-pdf .solution__btn .dashicons { 106 font-size: 1.2rem; /* Adjust the size of the icon */ 107 vertical-align: middle; /* Aligns the icon vertically with the text */ 108 } 109 .solution__merge-pdf .solution__dropdown-wrapper { 110 position: relative; 111 } 112 .solution__merge-pdf .solution__dropdown { 113 position: relative; 114 overflow: visible; 115 background-color: transparent; 116 box-shadow: none; 117 width: 100%; 118 border-radius: 0.75rem; 119 max-height: 15rem; 120 z-index: 10; 121 } 122 .solution__merge-pdf .solution__dropdown--hidden { 123 display: none; 124 } 125 .solution__merge-pdf .solution__loading-section { 126 display: none; 127 position: absolute; 128 top: 50%; 129 right: 50%; 130 transform: translate(50%, -50%); 131 } 132 .solution__merge-pdf .solution__loading-container { 133 display: flex; 134 justify-content: center; 135 align-items: center; 136 gap: 1rem; 137 transition: 2s ease; 138 } 139 .solution__merge-pdf .solution__download-section { 140 display: flex; 141 justify-content: center; 142 align-items: center; 143 flex-direction: column; 144 gap: 2rem; 145 height: 100%; 146 } 147 .solution__merge-pdf .solution__download-section:last-child { 148 margin-top: auto; 149 } 150 .solution__merge-pdf .solution__download-container { 151 display: flex; 152 flex-direction: column; 153 flex-grow: 1; 154 justify-content: center; 155 align-items: center; 156 gap: 1rem; 157 } 158 .solution__merge-pdf .solution__download-file-container { 159 display: flex; 160 flex-wrap: wrap; 161 justify-content: flex-start; 162 gap: 1rem; 163 } 164 .solution__merge-pdf .solution__download-file-name { 165 white-space: nowrap; 166 overflow: hidden; 167 text-overflow: ellipsis; 168 max-width: 12rem; 169 } 170 .solution__merge-pdf .solution__title-text { 171 font-weight: 600; 172 } 173 .solution__merge-pdf .solution__text { 174 font-weight: 500; 175 } 176 .solution__merge-pdf .solution__provided-text { 177 display: flex; 178 justify-content: center; 179 font-size: 0.7rem; 180 margin-top: 0.5rem; 181 } 182 .solution__merge-pdf .solution__error-section { 183 display: flex; 184 flex-direction: column; 185 justify-self: center; 186 align-self: center; 187 } 188 .solution__merge-pdf .solution__dot { 189 background: var(--solution-merge-pdf-tertiary-color); 190 height: 0.65em; 191 width: 0.65em; 192 border-radius: 50%; 193 animation: move 0.6s ease infinite; 194 } 195 .solution__merge-pdf .solution__link { 196 color: var(--solution-merge-pdf-tertiary-color); 197 } 198 .solution__merge-pdf .solution__select { 199 display: flex; 200 flex-direction: column; 201 position: relative; 202 gap: 0.3rem; 203 /* Placeholder color */ 204 /* Style for selected option */ 205 } 206 .solution__merge-pdf .solution__select .solution__select-input { 207 height: 42px; 208 padding: 0 0.5rem; 209 border-radius: 0.375rem; 210 border: 1px solid var(--solution-merge-pdf-input-border-color); 211 color: var(--solution-merge-pdf-tertiary-color); 212 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color); 213 -webkit-appearance: none; 214 -moz-appearance: none; 215 appearance: none; 216 cursor: pointer; 217 /* Arrow styling */ 218 background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E"); 219 background-repeat: no-repeat; 220 background-position: left 1rem center; 221 background-size: 1rem; 222 } 223 .solution__merge-pdf .solution__select .solution__select-input:focus { 224 outline: 1px solid var(--solution-merge-pdf-primary-color); 225 box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color); 226 } 227 .solution__merge-pdf .solution__select .solution__select-input option { 228 padding: 1rem; 229 } 230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] { 231 color: var(--solution-merge-pdf-input-border-color); 232 } 233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid { 234 color: var(--solution-merge-pdf-input-border-color); 235 } 236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) { 237 color: var(--solution-merge-pdf-tertiary-color); 238 } 239 .solution__merge-pdf .solution_dropdown button { 240 width: 100%; 241 } 242 .solution__merge-pdf .solution__dropdown-content { 243 display: none; 244 position: absolute; 245 flex-direction: column; 246 min-width: 100%; 247 max-height: 150px; 248 padding: 0.5rem 0; 249 overflow: auto; 250 background-color: #fff; 251 box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); 252 z-index: 10; 253 margin-top: 3px; 254 border-radius: 10px; 255 top: 100%; 256 right: 50%; 257 transform: translate(50%, 0); 258 } 259 .solution__merge-pdf .solution__dropdown-content label { 260 display: block; 261 margin-top: 10px; 262 padding: 0 1rem; 263 } 264 .solution__merge-pdf .solution__dropdown-button { 265 min-width: 100%; 266 } 267 .solution__merge-pdf .solution__dropdown-content:hover, 268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content { 269 display: flex; 270 } 271 .solution__merge-pdf .solution__group { 272 display: flex; 273 flex-wrap: wrap; 274 gap: 10px; 275 } 276 .solution__merge-pdf .solution__group > div, 277 .solution__merge-pdf .solution__group > label { 278 flex: 1; 279 } 280 .solution__merge-pdf .solution__sortable-container { 281 cursor: move; 282 display: flex; 283 padding: 1rem; 284 margin: 0.5rem 0; 285 border: 1px dashed var(--solution-merge-pdf-primary-color); 286 border-radius: 0.375rem; 287 align-items: center; 288 gap: 2rem; 289 } 290 .solution__merge-pdf .solution__preview-container { 291 position: relative; 292 padding: 1px 0; 293 background-color: #E2EFF9; 294 border-radius: 0.25rem; 295 min-height: 60px; 296 min-width: 60px; 297 max-width: 60px; 298 max-height: 60px; 299 display: flex; 300 align-items: center; 301 justify-content: center; 302 } 303 .solution__merge-pdf .solution__preview-image { 304 width: 60px; 305 height: 60px; 306 -o-object-fit: contain; 307 object-fit: contain; 308 } 309 .solution__merge-pdf .solution__file-info { 310 display: flex; 311 flex-direction: column; 312 gap: 0.5rem; 313 } 314 .solution__merge-pdf .solution__actions-group { 315 display: flex; 316 gap: 1rem; 317 margin-right: auto; 318 } 319 @media (max-width: 500px) { 320 .solution__merge-pdf .solution__sortable-container { 321 flex-wrap: wrap; /* Allow items to wrap to the next line */ 322 justify-content: center; /* Center item content */ 323 gap: 1rem; 324 } 325 .solution__merge-pdf .solution__sortable-container > :nth-child(1), 326 .solution__merge-pdf .solution__sortable-container > :nth-child(2) { 327 flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */ 328 } 329 .solution__merge-pdf .solution__sortable-container > :nth-child(3) { 330 flex: 1 1 100%; /* Full width for the third item */ 331 justify-content: center; /* Center item content */ 332 } 333 .solution__merge-pdf .solution__actions-group { 334 margin-right: 0; 335 } 336 } 337 338 .solution__modal { 339 display: none; /* Initially hidden */ 340 position: fixed; 341 top: 0; 342 right: 0; 343 width: 100%; /* Full screen width */ 344 height: 100%; /* Full screen height */ 345 background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */ 346 justify-content: center; /* Center content horizontally */ 347 align-items: center; /* Center content vertically */ 348 z-index: 1000; /* Ensures modal appears on top */ 349 } 350 351 /* Modal content styling */ 352 .solution__toolbar { 353 display: flex; 354 position: absolute; 355 justify-content: center; 356 align-items: center; 357 gap: 0.1rem; 358 top: 0; 359 right: 50%; 360 transform: translateX(50%); 361 background-color: rgba(240, 240, 240, 0.8); 362 border-bottom-right-radius: 0.375rem; 363 border-bottom-left-radius: 0.375rem; 364 z-index: 1000; 365 } 366 367 .solution__toolbar-button { 368 padding: 10px 15px; 369 cursor: pointer; 370 color: black; 371 border: none; 372 border-radius: 4px; 373 transition: background-color 0.3s; 374 background-color: transparent; 375 } 376 377 .solution__toolbar-button:hover { 378 color: white; 379 } 380 381 .solution__pdf-renderer { 382 display: flex; 383 justify-content: center; 384 align-items: center; 385 overflow: auto; 386 background-color: #f4f4f4; 387 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 388 border: 1px solid #ddd; 389 max-width: 80%; 390 max-height: 80%; 391 } 392 393 .solution__page-indicator { 394 color: black; 395 font-size: 16px; 396 align-self: center; 397 text-align: center; 398 white-space: nowrap; 399 } 400 401 .solution__interactive-image { 402 max-width: 80%; 403 max-height: 80%; 404 fit-object: contain; 405 } 406 407 @keyframes rotation { 408 0% { 409 transform: rotate(0deg); 410 } 411 100% { 412 transform: rotate(-360deg); 413 } 414 } 415 @keyframes move { 416 0% { 417 transform: translateX(-50%); 418 } 419 50% { 420 transform: translateX(50%); 421 } 422 100% { 423 transform: translateX(-50%); 424 } 425 } 1 :root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-left:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;right:50%;position:absolute;top:50%;transform:translate(50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:left 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;right:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-right:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-right:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;right:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;display:flex;gap:.1rem;right:50%;position:absolute;transform:translateX(50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes move{0%{transform:translateX(-50%)}50%{transform:translateX(50%)}to{transform:translateX(-50%)}} -
merge-pdf/tags/1.0.0/trunk/build/style-index.css
r3232408 r3260511 1 /*!***************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***! 3 \***************************************************************************************************************************************************************************************************************************************************/ 4 :root { 5 --solution-merge-pdf-primary-color: #4f46e5; 6 --solution-merge-pdf-secondary-color: #eef2ff; 7 --solution-merge-pdf-tertiary-color: #000; 8 --solution-merge-pdf-background-color: #fff; 9 --solution-merge-pdf-border-color: #e5e7eb; 10 --solution-merge-pdf-input-border-color: #d1d5db; 11 --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2); 12 --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05); 13 --solution-merge-pdf-dropdown-bg-color: #fff; 14 --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1); 15 --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1); 16 } 17 18 .solution__merge-pdf .solution__container-wrapper { 19 padding: 1rem; 20 display: flex; 21 flex-direction: column; 22 gap: 1rem; 23 color: var(--solution-merge-pdf-tertiary-color); 24 } 25 .solution__merge-pdf .solution__container { 26 box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px; 27 border: 1px solid var(--solution-merge-pdf-border-color); 28 background-color: var(--solution-merge-pdf-background-color); 29 border-radius: 0.75rem; 30 padding: 1.5rem 1.5rem 0.5rem; 31 position: relative; 32 display: flex; 33 flex-direction: column; 34 min-height: 180px; 35 gap: 1rem; 36 } 37 .solution__merge-pdf .solution__header { 38 font-size: 1.25rem; 39 letter-spacing: 0.05em; 40 font-weight: 500; 41 } 42 .solution__merge-pdf .solution__content { 43 flex-grow: 1; 44 display: grid; 45 } 46 .solution__merge-pdf .solution__form { 47 display: flex; 48 flex-direction: column; 49 gap: 1rem; 50 } 51 .solution__merge-pdf .solution__label { 52 white-space: nowrap; 53 width: 100%; 54 font-size: 0.75rem; 55 font-weight: 500; 56 display: flex; 57 flex-direction: column; 58 gap: 0.3rem; 59 } 60 .solution__merge-pdf .solution__hint { 61 font-size: 0.75rem; 62 font-weight: 500; 63 color: var(--solution-merge-pdf-primary-color); 64 white-space: wrap; 65 } 66 .solution__merge-pdf .solution__input { 67 border: 1px solid var(--solution-merge-pdf-input-border-color); 68 border-radius: 0.375rem; 69 padding: 0.25rem 0.5rem; 70 font-size: 1rem; 71 line-height: 32px; 72 outline: 1px solid transparent; 73 outline-offset: -1px; 74 } 75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button { 76 margin-right: 1rem; 77 padding: 0.5rem 1rem; 78 border-radius: 0.75rem; 79 border: none; 80 background-color: var(--solution-merge-pdf-secondary-color); 81 color: var(--solution-merge-pdf-primary-color); 82 font-weight: 500; 83 cursor: pointer; 84 } 85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button { 86 background-color: var(--solution-merge-pdf-secondary-color); 87 } 88 .solution__merge-pdf .solution__btn { 89 display: inline-flex; 90 align-items: center; /* Ensures the icon and text are aligned */ 91 justify-content: center; 92 gap: 0.5rem; /* Adds space between the icon and the text */ 93 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color); 94 background: var(--solution-merge-pdf-secondary-color); 95 color: var(--solution-merge-pdf-primary-color); 96 padding: 0.5rem 1rem; 97 border-radius: 1rem; 98 font-weight: 600; 99 cursor: pointer; 100 border: none; 101 } 102 .solution__merge-pdf .solution__btn:hover { 103 filter: brightness(0.98); 104 } 105 .solution__merge-pdf .solution__btn .dashicons { 106 font-size: 1.2rem; /* Adjust the size of the icon */ 107 vertical-align: middle; /* Aligns the icon vertically with the text */ 108 } 109 .solution__merge-pdf .solution__dropdown-wrapper { 110 position: relative; 111 } 112 .solution__merge-pdf .solution__dropdown { 113 position: relative; 114 overflow: visible; 115 background-color: transparent; 116 box-shadow: none; 117 width: 100%; 118 border-radius: 0.75rem; 119 max-height: 15rem; 120 z-index: 10; 121 } 122 .solution__merge-pdf .solution__dropdown--hidden { 123 display: none; 124 } 125 .solution__merge-pdf .solution__loading-section { 126 display: none; 127 position: absolute; 128 top: 50%; 129 left: 50%; 130 transform: translate(-50%, -50%); 131 } 132 .solution__merge-pdf .solution__loading-container { 133 display: flex; 134 justify-content: center; 135 align-items: center; 136 gap: 1rem; 137 transition: 2s ease; 138 } 139 .solution__merge-pdf .solution__download-section { 140 display: flex; 141 justify-content: center; 142 align-items: center; 143 flex-direction: column; 144 gap: 2rem; 145 height: 100%; 146 } 147 .solution__merge-pdf .solution__download-section:last-child { 148 margin-top: auto; 149 } 150 .solution__merge-pdf .solution__download-container { 151 display: flex; 152 flex-direction: column; 153 flex-grow: 1; 154 justify-content: center; 155 align-items: center; 156 gap: 1rem; 157 } 158 .solution__merge-pdf .solution__download-file-container { 159 display: flex; 160 flex-wrap: wrap; 161 justify-content: flex-start; 162 gap: 1rem; 163 } 164 .solution__merge-pdf .solution__download-file-name { 165 white-space: nowrap; 166 overflow: hidden; 167 text-overflow: ellipsis; 168 max-width: 12rem; 169 } 170 .solution__merge-pdf .solution__title-text { 171 font-weight: 600; 172 } 173 .solution__merge-pdf .solution__text { 174 font-weight: 500; 175 } 176 .solution__merge-pdf .solution__provided-text { 177 display: flex; 178 justify-content: center; 179 font-size: 0.7rem; 180 margin-top: 0.5rem; 181 } 182 .solution__merge-pdf .solution__error-section { 183 display: flex; 184 flex-direction: column; 185 justify-self: center; 186 align-self: center; 187 } 188 .solution__merge-pdf .solution__dot { 189 background: var(--solution-merge-pdf-tertiary-color); 190 height: 0.65em; 191 width: 0.65em; 192 border-radius: 50%; 193 animation: move 0.6s ease infinite; 194 } 195 .solution__merge-pdf .solution__link { 196 color: var(--solution-merge-pdf-tertiary-color); 197 } 198 .solution__merge-pdf .solution__select { 199 display: flex; 200 flex-direction: column; 201 position: relative; 202 gap: 0.3rem; 203 /* Placeholder color */ 204 /* Style for selected option */ 205 } 206 .solution__merge-pdf .solution__select .solution__select-input { 207 height: 42px; 208 padding: 0 0.5rem; 209 border-radius: 0.375rem; 210 border: 1px solid var(--solution-merge-pdf-input-border-color); 211 color: var(--solution-merge-pdf-tertiary-color); 212 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color); 213 -webkit-appearance: none; 214 -moz-appearance: none; 215 appearance: none; 216 cursor: pointer; 217 /* Arrow styling */ 218 background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E"); 219 background-repeat: no-repeat; 220 background-position: right 1rem center; 221 background-size: 1rem; 222 } 223 .solution__merge-pdf .solution__select .solution__select-input:focus { 224 outline: 1px solid var(--solution-merge-pdf-primary-color); 225 box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color); 226 } 227 .solution__merge-pdf .solution__select .solution__select-input option { 228 padding: 1rem; 229 } 230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] { 231 color: var(--solution-merge-pdf-input-border-color); 232 } 233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid { 234 color: var(--solution-merge-pdf-input-border-color); 235 } 236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) { 237 color: var(--solution-merge-pdf-tertiary-color); 238 } 239 .solution__merge-pdf .solution_dropdown button { 240 width: 100%; 241 } 242 .solution__merge-pdf .solution__dropdown-content { 243 display: none; 244 position: absolute; 245 flex-direction: column; 246 min-width: 100%; 247 max-height: 150px; 248 padding: 0.5rem 0; 249 overflow: auto; 250 background-color: #fff; 251 box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); 252 z-index: 10; 253 margin-top: 3px; 254 border-radius: 10px; 255 top: 100%; 256 left: 50%; 257 transform: translate(-50%, 0); 258 } 259 .solution__merge-pdf .solution__dropdown-content label { 260 display: block; 261 margin-top: 10px; 262 padding: 0 1rem; 263 } 264 .solution__merge-pdf .solution__dropdown-button { 265 min-width: 100%; 266 } 267 .solution__merge-pdf .solution__dropdown-content:hover, 268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content { 269 display: flex; 270 } 271 .solution__merge-pdf .solution__group { 272 display: flex; 273 flex-wrap: wrap; 274 gap: 10px; 275 } 276 .solution__merge-pdf .solution__group > div, 277 .solution__merge-pdf .solution__group > label { 278 flex: 1; 279 } 280 .solution__merge-pdf .solution__sortable-container { 281 cursor: move; 282 display: flex; 283 padding: 1rem; 284 margin: 0.5rem 0; 285 border: 1px dashed var(--solution-merge-pdf-primary-color); 286 border-radius: 0.375rem; 287 align-items: center; 288 gap: 2rem; 289 } 290 .solution__merge-pdf .solution__preview-container { 291 position: relative; 292 padding: 1px 0; 293 background-color: #E2EFF9; 294 border-radius: 0.25rem; 295 min-height: 60px; 296 min-width: 60px; 297 max-width: 60px; 298 max-height: 60px; 299 display: flex; 300 align-items: center; 301 justify-content: center; 302 } 303 .solution__merge-pdf .solution__preview-image { 304 width: 60px; 305 height: 60px; 306 -o-object-fit: contain; 307 object-fit: contain; 308 } 309 .solution__merge-pdf .solution__file-info { 310 display: flex; 311 flex-direction: column; 312 gap: 0.5rem; 313 } 314 .solution__merge-pdf .solution__actions-group { 315 display: flex; 316 gap: 1rem; 317 margin-left: auto; 318 } 319 @media (max-width: 500px) { 320 .solution__merge-pdf .solution__sortable-container { 321 flex-wrap: wrap; /* Allow items to wrap to the next line */ 322 justify-content: center; /* Center item content */ 323 gap: 1rem; 324 } 325 .solution__merge-pdf .solution__sortable-container > :nth-child(1), 326 .solution__merge-pdf .solution__sortable-container > :nth-child(2) { 327 flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */ 328 } 329 .solution__merge-pdf .solution__sortable-container > :nth-child(3) { 330 flex: 1 1 100%; /* Full width for the third item */ 331 justify-content: center; /* Center item content */ 332 } 333 .solution__merge-pdf .solution__actions-group { 334 margin-left: 0; 335 } 336 } 337 338 .solution__modal { 339 display: none; /* Initially hidden */ 340 position: fixed; 341 top: 0; 342 left: 0; 343 width: 100%; /* Full screen width */ 344 height: 100%; /* Full screen height */ 345 background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */ 346 justify-content: center; /* Center content horizontally */ 347 align-items: center; /* Center content vertically */ 348 z-index: 1000; /* Ensures modal appears on top */ 349 } 350 351 /* Modal content styling */ 352 .solution__toolbar { 353 display: flex; 354 position: absolute; 355 justify-content: center; 356 align-items: center; 357 gap: 0.1rem; 358 top: 0; 359 left: 50%; 360 transform: translateX(-50%); 361 background-color: rgba(240, 240, 240, 0.8); 362 border-bottom-left-radius: 0.375rem; 363 border-bottom-right-radius: 0.375rem; 364 z-index: 1000; 365 } 366 367 .solution__toolbar-button { 368 padding: 10px 15px; 369 cursor: pointer; 370 color: black; 371 border: none; 372 border-radius: 4px; 373 transition: background-color 0.3s; 374 background-color: transparent; 375 } 376 377 .solution__toolbar-button:hover { 378 color: white; 379 } 380 381 .solution__pdf-renderer { 382 display: flex; 383 justify-content: center; 384 align-items: center; 385 overflow: auto; 386 background-color: #f4f4f4; 387 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 388 border: 1px solid #ddd; 389 max-width: 80%; 390 max-height: 80%; 391 } 392 393 .solution__page-indicator { 394 color: black; 395 font-size: 16px; 396 align-self: center; 397 text-align: center; 398 white-space: nowrap; 399 } 400 401 .solution__interactive-image { 402 max-width: 80%; 403 max-height: 80%; 404 fit-object: contain; 405 } 406 407 @keyframes rotation { 408 0% { 409 transform: rotate(0deg); 410 } 411 100% { 412 transform: rotate(360deg); 413 } 414 } 415 @keyframes move { 416 0% { 417 transform: translateX(50%); 418 } 419 50% { 420 transform: translateX(-50%); 421 } 422 100% { 423 transform: translateX(50%); 424 } 425 } 426 427 /*# sourceMappingURL=style-index.css.map*/ 1 :root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-right:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;left:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(-50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-left:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-left:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;left:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;display:flex;gap:.1rem;left:50%;position:absolute;transform:translateX(-50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes move{0%{transform:translateX(50%)}50%{transform:translateX(-50%)}to{transform:translateX(50%)}} -
merge-pdf/tags/1.0.0/trunk/build/view.asset.php
r3232408 r3260511 1 <?php return array('dependencies' => array(), 'version' => ' d3134df337a43cf2ea57');1 <?php return array('dependencies' => array(), 'version' => '1b8511a4fa9f3be4b297'); -
merge-pdf/tags/1.0.0/trunk/build/view.js
r3232408 r3260511 1 /******/ (() => { // webpackBootstrap 2 /*!*********************!*\ 3 !*** ./src/view.js ***! 4 \*********************/ 5 document.querySelectorAll('.solution__merge-pdf .solution__form').forEach(form => { 6 form.addEventListener('submit', function (event) { 7 event.preventDefault(); 8 const formId = form.getAttribute('id'); 9 const fileInput = form.querySelector('[name="file"]'); 10 const loadingSection = document.getElementById(`loadingSection_${formId}`); 11 const errorSection = document.getElementById(`errorSection_${formId}`); 12 const resultMessage = document.getElementById(`resultMessage_${formId}`); 13 const downloadSection = document.getElementById(`downloadSection_${formId}`); 14 15 // Hide the form, show the loading indicator, hide error and download sections 16 form.style.display = 'none'; 17 loadingSection.style.display = 'flex'; 18 errorSection.style.display = 'none'; // Hide error section 19 downloadSection.style.display = 'none'; 20 const formData = new FormData(); 21 Array.from(fileInput.files).forEach((file, index) => { 22 formData.append(`file[${index}]`, file); 23 }); 24 formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce); 25 fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, { 26 method: 'POST', 27 body: formData 28 }).then(response => response.json()).then(data => { 29 if (data.id) { 30 pollStatus(data.id, formId); 31 } else { 32 loadingSection.style.display = 'none'; 33 errorSection.style.display = 'flex'; 34 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 35 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 36 fileListContainer.innerHTML = ''; 37 } 38 }).catch(() => { 39 loadingSection.style.display = 'none'; 40 errorSection.style.display = 'flex'; 41 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 42 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 43 fileListContainer.innerHTML = ''; 44 }); 45 }); 46 47 // Add event listener for restart buttons 48 const restartDownloadBtn = document.getElementById(`restartDownloadBtn_${form.id}`); 49 const restartErrorBtn = document.getElementById(`restartErrorBtn_${form.id}`); 50 51 // Function to restart the process and reset the form 52 function resetForm() { 53 form.reset(); 54 form.style.display = 'flex'; 55 document.getElementById(`loadingSection_${form.id}`).style.display = 'none'; // Hide loading 56 document.getElementById(`downloadSection_${form.id}`).style.display = 'none'; // Hide download 57 document.getElementById(`errorSection_${form.id}`).style.display = 'none'; // Hide error section 58 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 59 fileListContainer.innerHTML = ''; 60 } 61 if (restartDownloadBtn) { 62 restartDownloadBtn.addEventListener('click', resetForm); 63 } 64 if (restartErrorBtn) { 65 restartErrorBtn.addEventListener('click', resetForm); 66 } 67 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc; 68 const containerId = form.getAttribute('id'); 69 let currentPdf, currentPage, totalPages, rotation, scale; 70 let allFiles = []; 71 const fileListContainer = document.createElement("div"); 72 fileListContainer.setAttribute(`id`, `${containerId}-file-list-container`); 73 const formField = document.getElementById(`${containerId}-files-input`); 74 const formFieldParent = formField.parentElement; 75 formFieldParent.appendChild(fileListContainer); 76 formField.addEventListener("change", async event => { 77 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 78 const newFiles = Array.from(event.target.files); 79 80 // Merge new files with the existing files but remove duplicates within new files 81 const uniqueNewFiles = newFiles.filter(file => !allFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size)); 82 83 // Merge the unique new files with the existing files 84 allFiles = [...allFiles, ...uniqueNewFiles]; 85 const dataTransfer = new DataTransfer(); 86 87 // Add all unique files to DataTransfer 88 allFiles.forEach(file => { 89 dataTransfer.items.add(file); 90 }); 91 event.target.files = dataTransfer.files; 92 93 // Only create and append list items for new files that aren't already in the list 94 for (const file of uniqueNewFiles) { 95 const listItem = await createFileListItem(file, event); 96 fileListContainer.appendChild(listItem); 97 } 98 createSortableInstance(fileListContainer, event); 99 }); 100 async function createFileListItem(file, event) { 101 const listItem = document.createElement("div"); 102 listItem.classList.add("solution__sortable-container"); 103 const previewContainer = document.createElement("div"); 104 previewContainer.classList.add("solution__preview-container"); 105 if (file.type && file.type.match(/image.*/)) { 106 createPreviewImage(previewContainer, file); 107 } else if (file.type && file.type.match("application/pdf")) { 108 await createPreviewPdf(previewContainer, file); 109 } 110 const fileSize = file.size > 1024 * 1024 ? (file.size / (1024 * 1024)).toFixed(2) + " MB" : (file.size / 1024).toFixed(2) + " KB"; 111 const fileInfoContent = ` 112 <div class="solution__file-info"> 113 <div class="solution__file-name">${file.name}</div> 114 <div class="solution__file-size">${fileSize}</div> 115 </div> 116 `; 117 const fileInfo = document.createElement("div"); 118 fileInfo.classList.add("solution__file-info"); 119 fileInfo.innerHTML = fileInfoContent; 120 const previewButton = createPreviewButton(file); 121 const removeButton = createRemoveButton(file, event); 122 const actionContainer = document.createElement("div"); 123 actionContainer.classList.add("solution__actions-group"); 124 actionContainer.appendChild(previewButton); 125 actionContainer.appendChild(removeButton); 126 listItem.appendChild(previewContainer); 127 listItem.appendChild(fileInfo); 128 listItem.appendChild(actionContainer); 129 return listItem; 130 } 131 function createRemoveButton(file, event) { 132 const removeButton = document.createElement("button"); 133 removeButton.className = "solution__btn"; 134 const removeIcon = document.createElement("i"); 135 removeIcon.className = "fas fa-trash"; 136 removeIcon.title = "Remove File"; 137 removeButton.appendChild(removeIcon); 138 removeButton.addEventListener("click", e => { 139 e.preventDefault(); 140 e.stopPropagation(); 141 142 // Remove the file from allFiles as well 143 allFiles = allFiles.filter(f => f.name !== file.name); // Update the array directly 144 145 const dataTransfer = new DataTransfer(); 146 allFiles.forEach(f => dataTransfer.items.add(f)); 147 event.target.files = dataTransfer.files; 148 const listItem = e.target.closest(".solution__sortable-container"); 149 listItem?.parentElement?.removeChild(listItem); 150 }); 151 return removeButton; 152 } 153 function createPreviewButton(file) { 154 const previewButton = document.createElement("button"); 155 previewButton.classList.add("solution__btn"); 156 const viewIcon = document.createElement("i"); 157 viewIcon.className = "fas fa-eye"; 158 viewIcon.title = "View File"; 159 previewButton.appendChild(viewIcon); 160 previewButton.addEventListener("click", async e => { 161 e.preventDefault(); 162 e.stopPropagation(); 163 await showModal(file); 164 }); 165 return previewButton; 166 } 167 function createSortableInstance(element, event) { 168 if (element._sortableInstance) { 169 element._sortableInstance.destroy(); 170 } 171 element._sortableInstance = new Sortable(element, { 172 animation: 150, 173 onEnd: () => { 174 const dataTransfer = new DataTransfer(); 175 const newFileList = Array.from(element.children).map(item => { 176 const fileNameElement = item.querySelector(`#${containerId}-file-list-container .solution__file-name`); 177 return fileNameElement ? fileNameElement.textContent : null; 178 }); 179 newFileList.forEach(fileName => { 180 const file = Array.from(event.target.files).find(f => f.name === fileName); 181 if (file) { 182 dataTransfer.items.add(file); 183 } 184 }); 185 event.target.files = dataTransfer.files; 186 } 187 }); 188 } 189 function createPreviewImage(element, file) { 190 const fileURL = URL.createObjectURL(file); 191 const img = document.createElement("img"); 192 img.classList.add("solution__preview-image"); 193 img.src = fileURL; 194 element.appendChild(img); 195 } 196 async function createPreviewPdf(element, file) { 197 try { 198 const fileURL = URL.createObjectURL(file); 199 const pdf = await pdfjsLib.getDocument(fileURL).promise; 200 const page = await pdf.getPage(1); // Render the first page only 201 202 const preCalculateViewport = page.getViewport({ 203 scale: 1 204 }); 205 const scaleHeight = 60 / preCalculateViewport.height; 206 const scaleWidth = 60 / preCalculateViewport.width; 207 const scale = Math.min(scaleHeight, scaleWidth); 208 const viewport = page.getViewport({ 209 scale 210 }); 211 const canvas = document.createElement("canvas"); 212 canvas.className = "page"; 213 canvas.width = viewport.width; 214 canvas.height = viewport.height; 215 const context = canvas.getContext("2d"); 216 const renderContext = { 217 canvasContext: context, 218 viewport: viewport 219 }; 220 await page.render(renderContext).promise; 221 element.appendChild(canvas); 222 } catch (error) { 223 console.log(error); 224 } 225 } 226 async function showModal(file) { 227 const fullscreenModal = document.createElement("div"); 228 fullscreenModal.id = "solution__fullscreen-modal"; 229 fullscreenModal.classList.add("solution__modal"); 230 fullscreenModal.style.display = "flex"; // Show the modal when opened 231 232 if (file.type && file.type.match(/image.*/)) { 233 const imageContent = createImageRenderer(file); 234 const toolbar = createToolbar(); 235 fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content 236 fullscreenModal.appendChild(imageContent); // Render the image content 237 } 238 if (file.type && file.type.match("application/pdf")) { 239 const pdfContent = await createPdfRenderer(file); 240 const toolbar = createToolbar(); 241 fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content 242 fullscreenModal.appendChild(pdfContent); // Render the PDF content 243 } 244 document.body.appendChild(fullscreenModal); // Add the modal to the body 245 246 // Add event listener to close the modal when clicking outside the content or toolbar 247 fullscreenModal.addEventListener("click", event => { 248 closeModal(event, fullscreenModal); 249 }); 250 } 251 function closeModal(event, modal) { 252 if (event.target === modal) { 253 modal.remove(); 254 } 255 } 256 function createImageRenderer(file) { 257 const image = document.createElement("img"); 258 image.classList.add("solution__interactive-image"); 259 image.style.transformOrigin = "center center"; // Proper zoom/rotation pivot 260 image.setAttribute("data-scale", "1"); // Initialize scale 261 image.setAttribute("data-rotation", "0"); // Initialize rotation 262 263 // Load the image content 264 const reader = new FileReader(); 265 reader.onload = event => { 266 image.src = event.target.result; // Set image source 267 }; 268 reader.readAsDataURL(file); 269 return image; 270 } 271 async function createPdfRenderer(file) { 272 const pdfRendererDiv = document.createElement("div"); 273 pdfRendererDiv.classList.add("solution__pdf-renderer"); 274 275 // Create a canvas for rendering 276 const canvas = document.createElement("canvas"); 277 canvas.id = "solution__pdf-canvas"; 278 pdfRendererDiv.appendChild(canvas); 279 const ctx = canvas.getContext("2d"); 280 281 // Load the PDF using PDF.js 282 const pdf = await pdfjsLib.getDocument(URL.createObjectURL(file)).promise; 283 284 // Store PDF and page details in the instance 285 currentPdf = pdf; 286 currentPage = 1; 287 totalPages = pdf.numPages; 288 rotation = 0; 289 scale = 1; 290 291 // Render the first page 292 await renderPage(ctx); 293 return pdfRendererDiv; 294 } 295 async function renderPage(ctx) { 296 const page = await currentPdf.getPage(currentPage); 297 298 // Adjust canvas size based on the PDF page 299 const viewport = page.getViewport({ 300 scale, 301 rotation 302 }); 303 const canvas = ctx.canvas; 304 canvas.width = viewport.width; 305 canvas.height = viewport.height; 306 const renderContext = { 307 canvasContext: ctx, 308 viewport: viewport 309 }; 310 await page.render(renderContext).promise; 311 312 // Update toolbar state (for buttons and page indicator) 313 const pageIndicator = document.getElementById("solution__page-indicator"); 314 if (pageIndicator) { 315 pageIndicator.textContent = `${currentPage} / ${totalPages}`; 316 } 317 } 318 function createToolbar() { 319 const toolbar = document.createElement("div"); 320 toolbar.classList.add("solution__toolbar"); 321 322 // Buttons for toolbar 323 const buttons = [{ 324 text: "Left", 325 id: "solution__previous-btn", 326 icon: "fa-solid fa-chevron-left" 327 }, { 328 text: "Right", 329 id: "solution__next-btn", 330 icon: "fa-solid fa-chevron-right" 331 }, { 332 text: "Zoom In", 333 id: "solution__zoom-in-btn", 334 icon: "fa-solid fa-magnifying-glass-plus" 335 }, { 336 text: "Zoom Out", 337 id: "solution__zoom-out-btn", 338 icon: "fa-solid fa-magnifying-glass-minus" 339 }, { 340 text: "Rotate Left", 341 id: "solution__rotate-left-btn", 342 icon: "fa-solid fa-arrow-rotate-left" 343 }, { 344 text: "Rotate Right", 345 id: "solution__rotate-right-btn", 346 icon: "fa-solid fa-arrow-rotate-right" 347 }, { 348 text: "Close", 349 id: "close-modal-btn", 350 icon: "fa-solid fa-xmark" 351 }]; 352 353 // Create Left button 354 const leftBtn = createToolbarButton(buttons[0]); 355 toolbar.appendChild(leftBtn); 356 357 // Create page indicator 358 const pageIndicator = document.createElement("span"); 359 pageIndicator.id = "solution__page-indicator"; 360 pageIndicator.textContent = `${currentPage || 1} / ${totalPages || 1}`; 361 pageIndicator.classList.add("solution__page-indicator"); 362 toolbar.appendChild(pageIndicator); 363 364 // Create Right button 365 const rightBtn = createToolbarButton(buttons[1]); 366 toolbar.appendChild(rightBtn); 367 368 // Add remaining buttons 369 buttons.slice(2).forEach(button => { 370 const btn = createToolbarButton(button); 371 toolbar.appendChild(btn); 372 }); 373 return toolbar; 374 } 375 function createToolbarButton(buttonConfig) { 376 const btn = document.createElement("button"); 377 btn.id = buttonConfig.id; 378 btn.classList.add("solution__toolbar-button"); 379 380 // Create the icon element 381 const icon = document.createElement("i"); 382 icon.className = buttonConfig.icon; // Use the icon class from buttonConfig 383 btn.appendChild(icon); 384 385 // Assign the event listener 386 btn.addEventListener("click", async e => { 387 e.preventDefault(); 388 e.stopPropagation(); 389 await handleToolbarAction(buttonConfig.id); // Handle action here 390 }); 391 return btn; 392 } 393 async function handleToolbarAction(actionId) { 394 const pdfCanvas = document.querySelector("#solution__pdf-canvas"); 395 const image = document.querySelector(".solution__interactive-image"); 396 if (actionId === "close-modal-btn") { 397 document.getElementById("solution__fullscreen-modal")?.remove(); 398 return; 399 } 400 if (pdfCanvas) { 401 // Handle PDF-specific actions (left, right, etc.) 402 await handlePdfToolbarAction(actionId); 403 } else if (image) { 404 // Handle image-specific actions (zoom, rotate, etc.) 405 handleImageToolbarActions(actionId, image); 406 } 407 } 408 function handleImageToolbarActions(actionId, image) { 409 let scale = parseFloat(image.getAttribute("data-scale")) || 1; 410 let rotation = parseInt(image.getAttribute("data-rotation")) || 0; 411 412 // Store original dimensions 413 const originalWidth = image.naturalWidth; 414 const originalHeight = image.naturalHeight; 415 416 // Get parent element's dimensions 417 const parent = image.parentElement; 418 const parentWidth = parent.offsetWidth; 419 const parentHeight = parent.offsetHeight; 420 switch (actionId) { 421 case "solution__zoom-in-btn": 422 scale = Math.min(scale + 0.1, 5); // Cap zoom at 5x 423 break; 424 case "solution__zoom-out-btn": 425 scale = Math.max(scale - 0.1, 0.1); // Minimum zoom to 0.1x 426 break; 427 case "solution__rotate-left-btn": 428 rotation = (rotation - 90) % 360; // Rotate counter-clockwise 429 break; 430 case "solution__rotate-right-btn": 431 rotation = (rotation + 90) % 360; // Rotate clockwise 432 break; 433 } 434 435 // Determine whether to swap width and height 436 let adjustedWidth = originalWidth * scale; 437 let adjustedHeight = originalHeight * scale; 438 if (Math.abs(rotation % 180) === 90) { 439 // Swap width and height if rotated 90 or 270 degrees 440 [adjustedWidth, adjustedHeight] = [adjustedHeight, adjustedWidth]; 441 adjustedWidth = parentWidth * 0.8; 442 adjustedHeight = adjustedWidth / originalWidth * originalHeight; 443 adjustedHeight = parentHeight * 0.8; 444 adjustedHeight = adjustedHeight / originalWidth * originalHeight; 445 } 446 447 // Apply updated dimensions 448 image.style.transform = `scale(${scale}) rotate(${rotation}deg)`; 449 image.style.width = `${adjustedWidth}px`; 450 image.style.height = `${adjustedHeight}px`; 451 image.style.objectFit = "contain"; 452 453 // Update rotation data (only for internal tracking) 454 image.setAttribute("data-scale", scale); // Store current scale 455 image.setAttribute("data-rotation", rotation); // Store current rotation 456 } 457 async function handlePdfToolbarAction(actionId) { 458 const canvas = document.getElementById("solution__pdf-canvas"); 459 const ctx = canvas.getContext("2d"); 460 switch (actionId) { 461 case "solution__previous-btn": 462 if (currentPage > 1) { 463 currentPage--; 464 await renderPage(ctx); 465 } 466 break; 467 case "solution__next-btn": 468 if (currentPage < totalPages) { 469 currentPage++; 470 await renderPage(ctx); 471 } 472 break; 473 case "solution__zoom-in-btn": 474 scale += 0.2; 475 await renderPage(ctx); 476 break; 477 case "solution__zoom-out-btn": 478 scale -= 0.2; 479 await renderPage(ctx); 480 break; 481 case "solution__rotate-left-btn": 482 rotation -= 90; 483 await renderPage(ctx); 484 break; 485 case "solution__rotate-right-btn": 486 rotation += 90; 487 await renderPage(ctx); 488 break; 489 case "close-modal-btn": 490 break; 491 default: 492 console.log(`Unknown action: ${actionId}`); 493 } 494 } 495 }); 496 function pollStatus(id, formId) { 497 const loadingSection = document.getElementById(`loadingSection_${formId}`); 498 const errorSection = document.getElementById(`errorSection_${formId}`); 499 const resultMessage = document.getElementById(`resultMessage_${formId}`); 500 const downloadSection = document.getElementById(`downloadSection_${formId}`); 501 const downloadFilesContainer = document.getElementById(`downloadFilesContainer_${formId}`); 502 function checkStatus() { 503 fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`).then(response => response.json()).then(data => { 504 if (data.status === 'done') { 505 loadingSection.style.display = 'none'; 506 downloadFilesContainer.innerHTML = ''; // Clear previous downloads 507 508 if (data.output && data.output.files && data.output.files.length > 0) { 509 data.output.files.forEach(file => { 510 // Create download button 511 const downloadButton = document.createElement('button'); 512 downloadButton.type = 'button'; 513 downloadButton.className = 'solution__btn'; 514 downloadButton.innerHTML = ` 515 <div class="dashicons dashicons-download"></div> 516 <span class="solution__download-file-name">${file.name}</span> 517 `; 518 519 // Set download functionality 520 downloadButton.addEventListener('click', event => { 521 event.preventDefault(); 522 const anchor = document.createElement('a'); 523 anchor.href = file.path; 524 anchor.target = '_blank'; 525 document.body.appendChild(anchor); 526 anchor.click(); 527 document.body.removeChild(anchor); 528 }); 529 530 // Append elements to the container 531 const fileContainer = document.createElement('div'); 532 fileContainer.className = 'solution__download-file-container'; 533 fileContainer.appendChild(downloadButton); 534 downloadFilesContainer.appendChild(fileContainer); 535 }); 536 downloadSection.style.display = 'flex'; // Show download section 537 } else { 538 errorSection.style.display = 'flex'; 539 resultMessage.innerText = 'No files available for download.'; 540 } 541 } else if (data.status === 'error') { 542 throw new Error('Processing failed: ' + data.message); 543 } else { 544 setTimeout(checkStatus, 500); 545 } 546 }).catch(() => { 547 loadingSection.style.display = 'none'; 548 errorSection.style.display = 'flex'; 549 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 550 }); 551 } 552 checkStatus(); 553 } 554 /******/ })() 555 ; 556 //# sourceMappingURL=view.js.map 1 document.querySelectorAll(".solution__merge-pdf .solution__form").forEach((e=>{e.addEventListener("submit",(function(t){t.preventDefault();const n=e.getAttribute("id"),o=e.querySelector('[name="file"]'),i=document.getElementById(`loadingSection_${n}`),s=document.getElementById(`errorSection_${n}`),l=document.getElementById(`resultMessage_${n}`),d=document.getElementById(`downloadSection_${n}`);e.style.display="none",i.style.display="flex",s.style.display="none",d.style.display="none";const c=new FormData;Array.from(o.files).forEach(((e,t)=>{c.append(`file[${t}]`,e)})),c.append("mergePDFFormNonce",wpApiSettingsMergePDF.mergePDFNonce),fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`,{method:"POST",body:c}).then((e=>e.json())).then((e=>{e.id?function(e,t){const n=document.getElementById(`loadingSection_${t}`),o=document.getElementById(`errorSection_${t}`),a=document.getElementById(`resultMessage_${t}`),i=document.getElementById(`downloadSection_${t}`),s=document.getElementById(`downloadFilesContainer_${t}`);!function t(){fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${e}`,{method:"GET",headers:{"X-WP-Nonce":wpApiSettingsMergePDF.mergePDFNonce,"Content-Type":"application/json"}}).then((e=>e.json())).then((e=>{if("done"===e.status)n.style.display="none",s.innerHTML="",e.output&&e.output.files&&e.output.files.length>0?(e.output.files.forEach((e=>{const t=document.createElement("button");t.type="button",t.className="solution__btn",t.innerHTML=`\n <div class="dashicons dashicons-download"></div>\n <span class="solution__download-file-name">${e.name}</span>\n `,t.addEventListener("click",(t=>{t.preventDefault();const n=document.createElement("a");n.href=e.path,n.target="_blank",document.body.appendChild(n),n.click(),document.body.removeChild(n)}));const n=document.createElement("div");n.className="solution__download-file-container",n.appendChild(t),s.appendChild(n)})),i.style.display="flex"):(o.style.display="flex",a.innerText="No files available for download.");else{if("error"===e.status)throw new Error("Processing failed: "+e.message);setTimeout(t,500)}})).catch((()=>{n.style.display="none",o.style.display="flex",a.innerText="An unexpected error occurred. Please try again."}))}()}(e.id,n):(i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML="")})).catch((()=>{i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML=""}))}));const t=document.getElementById(`restartDownloadBtn_${e.id}`),n=document.getElementById(`restartErrorBtn_${e.id}`);function o(){e.reset(),e.style.display="flex",document.getElementById(`loadingSection_${e.id}`).style.display="none",document.getElementById(`downloadSection_${e.id}`).style.display="none",document.getElementById(`errorSection_${e.id}`).style.display="none",document.getElementById(`${a}-file-list-container`).innerHTML=""}t&&t.addEventListener("click",o),n&&n.addEventListener("click",o),pdfjsLib.GlobalWorkerOptions.workerSrc=wpApiSettingsMergePDF.pdfWorkerSrc;const a=e.getAttribute("id");let i,s,l,d,c,r=[];const u=document.createElement("div");u.setAttribute("id",`${a}-file-list-container`);const m=document.getElementById(`${a}-files-input`);async function p(e,t){const n=document.createElement("div");n.classList.add("solution__sortable-container");const o=document.createElement("div");o.classList.add("solution__preview-container"),e.type&&e.type.match(/image.*/)?function(e,t){const n=URL.createObjectURL(t),o=document.createElement("img");o.classList.add("solution__preview-image"),o.src=n,e.appendChild(o)}(o,e):e.type&&e.type.match("application/pdf")&&await async function(e,t){try{const n=URL.createObjectURL(t),o=await pdfjsLib.getDocument(n).promise,a=await o.getPage(1),i=a.getViewport({scale:1}),s=60/i.height,l=60/i.width,d=Math.min(s,l),c=a.getViewport({scale:d}),r=document.createElement("canvas");r.className="page",r.width=c.width,r.height=c.height;const u={canvasContext:r.getContext("2d"),viewport:c};await a.render(u).promise,e.appendChild(r)}catch(e){console.log(e)}}(o,e);const a=e.size>1048576?(e.size/1048576).toFixed(2)+" MB":(e.size/1024).toFixed(2)+" KB",u=`\n <div class="solution__file-info">\n <div class="solution__file-name">${e.name}</div>\n <div class="solution__file-size">${a}</div>\n </div>\n `,m=document.createElement("div");m.classList.add("solution__file-info"),m.innerHTML=u;const p=function(e){const t=document.createElement("button");t.classList.add("solution__btn");const n=document.createElement("i");return n.className="fas fa-eye",n.title="View File",t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.createElement("div");if(t.id="solution__fullscreen-modal",t.classList.add("solution__modal"),t.style.display="flex",e.type&&e.type.match(/image.*/)){const n=function(e){const t=document.createElement("img");t.classList.add("solution__interactive-image"),t.style.transformOrigin="center center",t.setAttribute("data-scale","1"),t.setAttribute("data-rotation","0");const n=new FileReader;return n.onload=e=>{t.src=e.target.result},n.readAsDataURL(e),t}(e),o=g();t.appendChild(o),t.appendChild(n)}if(e.type&&e.type.match("application/pdf")){const n=await async function(e){const t=document.createElement("div");t.classList.add("solution__pdf-renderer");const n=document.createElement("canvas");n.id="solution__pdf-canvas",t.appendChild(n);const o=n.getContext("2d"),a=await pdfjsLib.getDocument(URL.createObjectURL(e)).promise;return i=a,s=1,l=a.numPages,d=0,c=1,await f(o),t}(e),o=g();t.appendChild(o),t.appendChild(n)}document.body.appendChild(t),t.addEventListener("click",(e=>{!function(e,t){e.target===t&&t.remove()}(e,t)}))}(e)})),t}(e),_=function(e,t){const n=document.createElement("button");n.className="solution__btn";const o=document.createElement("i");return o.className="fas fa-trash",o.title="Remove File",n.appendChild(o),n.addEventListener("click",(n=>{n.preventDefault(),n.stopPropagation(),r=r.filter((t=>t.name!==e.name));const o=new DataTransfer;r.forEach((e=>o.items.add(e))),t.target.files=o.files;const a=n.target.closest(".solution__sortable-container");a?.parentElement?.removeChild(a)})),n}(e,t),y=document.createElement("div");return y.classList.add("solution__actions-group"),y.appendChild(p),y.appendChild(_),n.appendChild(o),n.appendChild(m),n.appendChild(y),n}async function f(e){const t=await i.getPage(s),n=t.getViewport({scale:c,rotation:d}),o=e.canvas;o.width=n.width,o.height=n.height;const a={canvasContext:e,viewport:n};await t.render(a).promise;const r=document.getElementById("solution__page-indicator");r&&(r.textContent=`${s} / ${l}`)}function g(){const e=document.createElement("div");e.classList.add("solution__toolbar");const t=[{text:"Left",id:"solution__previous-btn",icon:"fa-solid fa-chevron-left"},{text:"Right",id:"solution__next-btn",icon:"fa-solid fa-chevron-right"},{text:"Zoom In",id:"solution__zoom-in-btn",icon:"fa-solid fa-magnifying-glass-plus"},{text:"Zoom Out",id:"solution__zoom-out-btn",icon:"fa-solid fa-magnifying-glass-minus"},{text:"Rotate Left",id:"solution__rotate-left-btn",icon:"fa-solid fa-arrow-rotate-left"},{text:"Rotate Right",id:"solution__rotate-right-btn",icon:"fa-solid fa-arrow-rotate-right"},{text:"Close",id:"close-modal-btn",icon:"fa-solid fa-xmark"}],n=_(t[0]);e.appendChild(n);const o=document.createElement("span");o.id="solution__page-indicator",o.textContent=`${s||1} / ${l||1}`,o.classList.add("solution__page-indicator"),e.appendChild(o);const a=_(t[1]);return e.appendChild(a),t.slice(2).forEach((t=>{const n=_(t);e.appendChild(n)})),e}function _(e){const t=document.createElement("button");t.id=e.id,t.classList.add("solution__toolbar-button");const n=document.createElement("i");return n.className=e.icon,t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.querySelector("#solution__pdf-canvas"),n=document.querySelector(".solution__interactive-image");"close-modal-btn"!==e?t?await async function(e){const t=document.getElementById("solution__pdf-canvas").getContext("2d");switch(e){case"solution__previous-btn":s>1&&(s--,await f(t));break;case"solution__next-btn":s<l&&(s++,await f(t));break;case"solution__zoom-in-btn":c+=.2,await f(t);break;case"solution__zoom-out-btn":c-=.2,await f(t);break;case"solution__rotate-left-btn":d-=90,await f(t);break;case"solution__rotate-right-btn":d+=90,await f(t);break;case"close-modal-btn":break;default:console.log(`Unknown action: ${e}`)}}(e):n&&function(e,t){let n=parseFloat(t.getAttribute("data-scale"))||1,o=parseInt(t.getAttribute("data-rotation"))||0;const a=t.naturalWidth,i=t.naturalHeight,s=t.parentElement,l=s.offsetWidth,d=s.offsetHeight;switch(e){case"solution__zoom-in-btn":n=Math.min(n+.1,5);break;case"solution__zoom-out-btn":n=Math.max(n-.1,.1);break;case"solution__rotate-left-btn":o=(o-90)%360;break;case"solution__rotate-right-btn":o=(o+90)%360}let c=a*n,r=i*n;90===Math.abs(o%180)&&([c,r]=[r,c],c=.8*l,r=c/a*i,r=.8*d,r=r/a*i),t.style.transform=`scale(${n}) rotate(${o}deg)`,t.style.width=`${c}px`,t.style.height=`${r}px`,t.style.objectFit="contain",t.setAttribute("data-scale",n),t.setAttribute("data-rotation",o)}(e,n):document.getElementById("solution__fullscreen-modal")?.remove()}(e.id)})),t}m.parentElement.appendChild(u),m.addEventListener("change",(async e=>{const t=document.getElementById(`${a}-file-list-container`),n=Array.from(e.target.files).filter((e=>!r.some((t=>t.name===e.name&&t.size===e.size))));r=[...r,...n];const o=new DataTransfer;r.forEach((e=>{o.items.add(e)})),e.target.files=o.files;for(const o of n){const n=await p(o,e);t.appendChild(n)}!function(e,t){e._sortableInstance&&e._sortableInstance.destroy(),e._sortableInstance=new Sortable(e,{animation:150,onEnd:()=>{const n=new DataTransfer;Array.from(e.children).map((e=>{const t=e.querySelector(`#${a}-file-list-container .solution__file-name`);return t?t.textContent:null})).forEach((e=>{const o=Array.from(t.target.files).find((t=>t.name===e));o&&n.items.add(o)})),t.target.files=n.files}})}(t,e)}))})); -
merge-pdf/tags/1.0.0/trunk/includes/process-machine.php
r3225930 r3260511 122 122 // Check status of processing task 123 123 function cross_service_solutions_merge_pdf_check_status($request) { 124 $nonce = $request->get_header('X-WP-Nonce'); 125 if (!$nonce || !wp_verify_nonce($nonce, 'merge_pdf_form_nonce_action')) { 126 return new WP_Error('nonce_invalid', 'Nonce verification failed', array( 127 'status' => 403, 128 'message' => 'The provided nonce is invalid or expired. Please refresh and try again.' 129 )); 130 } 131 124 132 $api_key = esc_attr(get_option('cross_service_solutions_api_key')); 125 133 $id = sanitize_text_field($request['id']); -
merge-pdf/tags/1.0.0/trunk/languages/merge-pdf.pot
r3250034 r3260511 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Merge PDF 1.0. 0\n"5 "Project-Id-Version: Merge PDF 1.0.1\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/merge-pdf\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -
merge-pdf/tags/1.0.0/trunk/merge-pdf.php
r3232408 r3260511 5 5 * Requires at least: 6.6 6 6 * Requires PHP: 7.2.24 7 * Version: 1.0. 07 * Version: 1.0.1 8 8 * Author: Cross Service Solutions 9 9 * License: GPL-2.0-or-later … … 104 104 function cross_service_solutions_merge_pdf_localize_script() { 105 105 // Localize the script registered by the viewScript in block.json 106 wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettings ', array(106 wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettingsMergePDF', array( 107 107 'root' => esc_url_raw(rest_url()), 108 108 'mergePDFNonce' => wp_create_nonce('merge_pdf_form_nonce_action'), -
merge-pdf/tags/1.0.0/trunk/readme.txt
r3250034 r3260511 5 5 Requires at least: 5.0 6 6 Tested up to: 6.7 7 Stable tag: 1.0. 07 Stable tag: 1.0.1 8 8 Requires PHP: 7.2.24 9 9 License: GPLv2 or later … … 94 94 == Changelog == 95 95 96 = 1.0.1 = 97 * Implemented nonce validation for polling status GET request. 98 * Ensuring the global object in JavaScript is unique. 99 96 100 = 1.0.0 = 97 101 * Initial release of the Merge PDF plugin. -
merge-pdf/tags/1.0.0/trunk/src/block.json
r3225930 r3260511 3 3 "apiVersion": 3, 4 4 "name": "create-block/merge-pdf", 5 "version": "1.0. 0",5 "version": "1.0.1", 6 6 "title": "Merge Pdf", 7 7 "category": "widgets", -
merge-pdf/tags/1.0.0/trunk/src/view.js
r3225930 r3260511 28 28 formData.append(`file[${index}]`, file); 29 29 }); 30 formData.append('mergePDFFormNonce', wpApiSettings .mergePDFNonce);31 32 fetch(`${wpApiSettings .root}merge-pdf/v1/send-data`, {30 formData.append('mergePDFFormNonce', wpApiSettingsMergePDF.mergePDFNonce); 31 32 fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`, { 33 33 method: 'POST', 34 34 body: formData, … … 88 88 } 89 89 90 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings .pdfWorkerSrc;90 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettingsMergePDF.pdfWorkerSrc; 91 91 const containerId = form.getAttribute('id'); 92 92 let currentPdf, currentPage, totalPages, rotation, scale; … … 569 569 570 570 function checkStatus() { 571 fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`) 571 fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${id}`, { 572 method: 'GET', 573 headers: { 574 'X-WP-Nonce': wpApiSettingsMergePDF.mergePDFNonce, 575 'Content-Type': 'application/json' 576 } 577 }) 572 578 .then((response) => response.json()) 573 579 .then((data) => { -
merge-pdf/trunk/build/block.json
r3225930 r3260511 3 3 "apiVersion": 3, 4 4 "name": "create-block/merge-pdf", 5 "version": "1.0. 0",5 "version": "1.0.1", 6 6 "title": "Merge Pdf", 7 7 "category": "widgets", -
merge-pdf/trunk/build/index-rtl.css
r3232408 r3260511 1 /*!****************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***! 3 \****************************************************************************************************************************************************************************************************************************************************/ 4 .solution__merge-pdf { 5 margin: 1rem; 6 } 1 .solution__merge-pdf{margin:1rem} -
merge-pdf/trunk/build/index.asset.php
r3232408 r3260511 1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '9 71621e220fab65d6c23');1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '95952ffc9d1cf6e0a1db'); -
merge-pdf/trunk/build/index.css
r3232408 r3260511 1 /*!****************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***! 3 \****************************************************************************************************************************************************************************************************************************************************/ 4 .solution__merge-pdf { 5 margin: 1rem; 6 } 7 8 /*# sourceMappingURL=index.css.map*/ 1 .solution__merge-pdf{margin:1rem} -
merge-pdf/trunk/build/index.js
r3232408 r3260511 1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/edit.js": 6 /*!*********************!*\ 7 !*** ./src/edit.js ***! 8 \*********************/ 9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "default": () => (/* binding */ Edit), 14 /* harmony export */ mergePDFIcon: () => (/* binding */ mergePDFIcon) 15 /* harmony export */ }); 16 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); 17 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 18 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 20 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 21 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); 22 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); 23 /** 24 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. 25 * Those files can contain any CSS code that gets applied to the editor. 26 * 27 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css 28 */ 29 30 31 32 33 function Edit() { 34 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 35 className: "solution__merge-pdf", 36 children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 37 className: "solution__container__wrapper", 38 children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { 39 className: "solution__container", 40 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { 41 className: "solution__header", 42 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Merge PDF', 'merge-pdf') 43 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { 44 className: "solution__form", 45 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("label", { 46 htmlFor: "file", 47 className: "solution__label", 48 children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { 49 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('File:', 'merge-pdf') 50 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input", { 51 type: "file", 52 id: "file", 53 name: "file", 54 required: true, 55 className: "solution__file-input", 56 disabled: true 57 })] 58 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", { 59 disabled: true, 60 className: "solution__btn", 61 children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Submit', 'merge-pdf') 62 })] 63 })] 64 }) 65 }) 66 })); 67 } 68 const mergePDFIcon = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('svg', { 69 width: 32, 70 height: 33, 71 viewBox: '0 0 32 33', 72 fill: 'none', 73 xmlns: 'http://www.w3.org/2000/svg' 74 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('ellipse', { 75 cx: '15.8843', 76 cy: '16.5014', 77 rx: '13.2358', 78 ry: '13.3335', 79 fill: '#E3FAFC' 80 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 81 d: 'M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282', 82 stroke: '#0C8599', 83 'stroke-width': '1.32791', 84 'stroke-linecap': 'round', 85 'stroke-linejoin': 'round' 86 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 87 d: 'M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282', 88 stroke: '#0C8599', 89 'stroke-width': '1.32791', 90 'stroke-linecap': 'round', 91 'stroke-linejoin': 'round' 92 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', { 93 d: 'M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z', 94 stroke: '#0C8599', 95 'stroke-width': '1.32791', 96 'stroke-linecap': 'round', 97 'stroke-linejoin': 'round', 98 'fill-rule': 'evenodd', 99 'clip-rule': 'evenodd' 100 })); 101 102 /***/ }), 103 104 /***/ "./src/index.js": 105 /*!**********************!*\ 106 !*** ./src/index.js ***! 107 \**********************/ 108 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 109 110 __webpack_require__.r(__webpack_exports__); 111 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss"); 112 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 113 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__); 114 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js"); 115 /* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/block.json"); 116 117 118 119 120 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__, { 121 icon: _edit__WEBPACK_IMPORTED_MODULE_2__.mergePDFIcon, 122 edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"] 123 }); 124 125 /***/ }), 126 127 /***/ "./src/editor.scss": 128 /*!*************************!*\ 129 !*** ./src/editor.scss ***! 130 \*************************/ 131 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 132 133 __webpack_require__.r(__webpack_exports__); 134 // extracted by mini-css-extract-plugin 135 136 137 /***/ }), 138 139 /***/ "./src/style.scss": 140 /*!************************!*\ 141 !*** ./src/style.scss ***! 142 \************************/ 143 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 144 145 __webpack_require__.r(__webpack_exports__); 146 // extracted by mini-css-extract-plugin 147 148 149 /***/ }), 150 151 /***/ "react/jsx-runtime": 152 /*!**********************************!*\ 153 !*** external "ReactJSXRuntime" ***! 154 \**********************************/ 155 /***/ ((module) => { 156 157 module.exports = window["ReactJSXRuntime"]; 158 159 /***/ }), 160 161 /***/ "@wordpress/blocks": 162 /*!********************************!*\ 163 !*** external ["wp","blocks"] ***! 164 \********************************/ 165 /***/ ((module) => { 166 167 module.exports = window["wp"]["blocks"]; 168 169 /***/ }), 170 171 /***/ "@wordpress/element": 172 /*!*********************************!*\ 173 !*** external ["wp","element"] ***! 174 \*********************************/ 175 /***/ ((module) => { 176 177 module.exports = window["wp"]["element"]; 178 179 /***/ }), 180 181 /***/ "@wordpress/i18n": 182 /*!******************************!*\ 183 !*** external ["wp","i18n"] ***! 184 \******************************/ 185 /***/ ((module) => { 186 187 module.exports = window["wp"]["i18n"]; 188 189 /***/ }), 190 191 /***/ "./src/block.json": 192 /*!************************!*\ 193 !*** ./src/block.json ***! 194 \************************/ 195 /***/ ((module) => { 196 197 module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.0","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}'); 198 199 /***/ }) 200 201 /******/ }); 202 /************************************************************************/ 203 /******/ // The module cache 204 /******/ var __webpack_module_cache__ = {}; 205 /******/ 206 /******/ // The require function 207 /******/ function __webpack_require__(moduleId) { 208 /******/ // Check if module is in cache 209 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 210 /******/ if (cachedModule !== undefined) { 211 /******/ return cachedModule.exports; 212 /******/ } 213 /******/ // Create a new module (and put it into the cache) 214 /******/ var module = __webpack_module_cache__[moduleId] = { 215 /******/ // no module.id needed 216 /******/ // no module.loaded needed 217 /******/ exports: {} 218 /******/ }; 219 /******/ 220 /******/ // Execute the module function 221 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 222 /******/ 223 /******/ // Return the exports of the module 224 /******/ return module.exports; 225 /******/ } 226 /******/ 227 /******/ // expose the modules object (__webpack_modules__) 228 /******/ __webpack_require__.m = __webpack_modules__; 229 /******/ 230 /************************************************************************/ 231 /******/ /* webpack/runtime/chunk loaded */ 232 /******/ (() => { 233 /******/ var deferred = []; 234 /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 235 /******/ if(chunkIds) { 236 /******/ priority = priority || 0; 237 /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 238 /******/ deferred[i] = [chunkIds, fn, priority]; 239 /******/ return; 240 /******/ } 241 /******/ var notFulfilled = Infinity; 242 /******/ for (var i = 0; i < deferred.length; i++) { 243 /******/ var chunkIds = deferred[i][0]; 244 /******/ var fn = deferred[i][1]; 245 /******/ var priority = deferred[i][2]; 246 /******/ var fulfilled = true; 247 /******/ for (var j = 0; j < chunkIds.length; j++) { 248 /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 249 /******/ chunkIds.splice(j--, 1); 250 /******/ } else { 251 /******/ fulfilled = false; 252 /******/ if(priority < notFulfilled) notFulfilled = priority; 253 /******/ } 254 /******/ } 255 /******/ if(fulfilled) { 256 /******/ deferred.splice(i--, 1) 257 /******/ var r = fn(); 258 /******/ if (r !== undefined) result = r; 259 /******/ } 260 /******/ } 261 /******/ return result; 262 /******/ }; 263 /******/ })(); 264 /******/ 265 /******/ /* webpack/runtime/compat get default export */ 266 /******/ (() => { 267 /******/ // getDefaultExport function for compatibility with non-harmony modules 268 /******/ __webpack_require__.n = (module) => { 269 /******/ var getter = module && module.__esModule ? 270 /******/ () => (module['default']) : 271 /******/ () => (module); 272 /******/ __webpack_require__.d(getter, { a: getter }); 273 /******/ return getter; 274 /******/ }; 275 /******/ })(); 276 /******/ 277 /******/ /* webpack/runtime/define property getters */ 278 /******/ (() => { 279 /******/ // define getter functions for harmony exports 280 /******/ __webpack_require__.d = (exports, definition) => { 281 /******/ for(var key in definition) { 282 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 283 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 284 /******/ } 285 /******/ } 286 /******/ }; 287 /******/ })(); 288 /******/ 289 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 290 /******/ (() => { 291 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 292 /******/ })(); 293 /******/ 294 /******/ /* webpack/runtime/make namespace object */ 295 /******/ (() => { 296 /******/ // define __esModule on exports 297 /******/ __webpack_require__.r = (exports) => { 298 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 299 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 300 /******/ } 301 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 302 /******/ }; 303 /******/ })(); 304 /******/ 305 /******/ /* webpack/runtime/jsonp chunk loading */ 306 /******/ (() => { 307 /******/ // no baseURI 308 /******/ 309 /******/ // object to store loaded and loading chunks 310 /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 311 /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 312 /******/ var installedChunks = { 313 /******/ "index": 0, 314 /******/ "./style-index": 0 315 /******/ }; 316 /******/ 317 /******/ // no chunk on demand loading 318 /******/ 319 /******/ // no prefetching 320 /******/ 321 /******/ // no preloaded 322 /******/ 323 /******/ // no HMR 324 /******/ 325 /******/ // no HMR manifest 326 /******/ 327 /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 328 /******/ 329 /******/ // install a JSONP callback for chunk loading 330 /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 331 /******/ var chunkIds = data[0]; 332 /******/ var moreModules = data[1]; 333 /******/ var runtime = data[2]; 334 /******/ // add "moreModules" to the modules object, 335 /******/ // then flag all "chunkIds" as loaded and fire callback 336 /******/ var moduleId, chunkId, i = 0; 337 /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 338 /******/ for(moduleId in moreModules) { 339 /******/ if(__webpack_require__.o(moreModules, moduleId)) { 340 /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 341 /******/ } 342 /******/ } 343 /******/ if(runtime) var result = runtime(__webpack_require__); 344 /******/ } 345 /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 346 /******/ for(;i < chunkIds.length; i++) { 347 /******/ chunkId = chunkIds[i]; 348 /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 349 /******/ installedChunks[chunkId][0](); 350 /******/ } 351 /******/ installedChunks[chunkId] = 0; 352 /******/ } 353 /******/ return __webpack_require__.O(result); 354 /******/ } 355 /******/ 356 /******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; 357 /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 358 /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 359 /******/ })(); 360 /******/ 361 /************************************************************************/ 362 /******/ 363 /******/ // startup 364 /******/ // Load entry module and return exports 365 /******/ // This entry module depends on other loaded chunks and execution need to be delayed 366 /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.js"))) 367 /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 368 /******/ 369 /******/ })() 370 ; 371 //# sourceMappingURL=index.js.map 1 (()=>{"use strict";var e,i={354:()=>{const e=window.wp.blocks,i=window.wp.element,r=window.wp.i18n,n=window.ReactJSXRuntime,t=(0,i.createElement)("svg",{width:32,height:33,viewBox:"0 0 32 33",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)("ellipse",{cx:"15.8843",cy:"16.5014",rx:"13.2358",ry:"13.3335",fill:"#E3FAFC"}),(0,i.createElement)("path",{d:"M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round","fill-rule":"evenodd","clip-rule":"evenodd"})),l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.1","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');(0,e.registerBlockType)(l,{icon:t,edit:function(){return(0,i.createElement)("div",null,(0,n.jsx)("div",{className:"solution__merge-pdf",children:(0,n.jsx)("div",{className:"solution__container__wrapper",children:(0,n.jsxs)("div",{className:"solution__container",children:[(0,n.jsx)("div",{className:"solution__header",children:(0,r.__)("Merge PDF","merge-pdf")}),(0,n.jsxs)("div",{className:"solution__form",children:[(0,n.jsxs)("label",{htmlFor:"file",className:"solution__label",children:[(0,n.jsx)("span",{children:(0,r.__)("File:","merge-pdf")}),(0,n.jsx)("input",{type:"file",id:"file",name:"file",required:!0,className:"solution__file-input",disabled:!0})]}),(0,n.jsx)("button",{disabled:!0,className:"solution__btn",children:(0,r.__)("Submit","merge-pdf")})]})]})})}))}})}},r={};function n(e){var t=r[e];if(void 0!==t)return t.exports;var l=r[e]={exports:{}};return i[e](l,l.exports,n),l.exports}n.m=i,e=[],n.O=(i,r,t,l)=>{if(!r){var s=1/0;for(c=0;c<e.length;c++){r=e[c][0],t=e[c][1],l=e[c][2];for(var o=!0,a=0;a<r.length;a++)(!1&l||s>=l)&&Object.keys(n.O).every((e=>n.O[e](r[a])))?r.splice(a--,1):(o=!1,l<s&&(s=l));if(o){e.splice(c--,1);var d=t();void 0!==d&&(i=d)}}return i}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[r,t,l]},n.o=(e,i)=>Object.prototype.hasOwnProperty.call(e,i),(()=>{var e={57:0,350:0};n.O.j=i=>0===e[i];var i=(i,r)=>{var t,l,s=r[0],o=r[1],a=r[2],d=0;if(s.some((i=>0!==e[i]))){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(a)var c=a(n)}for(i&&i(r);d<s.length;d++)l=s[d],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(c)},r=self.webpackChunk=self.webpackChunk||[];r.forEach(i.bind(null,0)),r.push=i.bind(null,r.push.bind(r))})();var t=n.O(void 0,[350],(()=>n(354)));t=n.O(t)})(); -
merge-pdf/trunk/build/style-index-rtl.css
r3232408 r3260511 1 /*!***************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***! 3 \***************************************************************************************************************************************************************************************************************************************************/ 4 :root { 5 --solution-merge-pdf-primary-color: #4f46e5; 6 --solution-merge-pdf-secondary-color: #eef2ff; 7 --solution-merge-pdf-tertiary-color: #000; 8 --solution-merge-pdf-background-color: #fff; 9 --solution-merge-pdf-border-color: #e5e7eb; 10 --solution-merge-pdf-input-border-color: #d1d5db; 11 --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2); 12 --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05); 13 --solution-merge-pdf-dropdown-bg-color: #fff; 14 --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1); 15 --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1); 16 } 17 18 .solution__merge-pdf .solution__container-wrapper { 19 padding: 1rem; 20 display: flex; 21 flex-direction: column; 22 gap: 1rem; 23 color: var(--solution-merge-pdf-tertiary-color); 24 } 25 .solution__merge-pdf .solution__container { 26 box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px; 27 border: 1px solid var(--solution-merge-pdf-border-color); 28 background-color: var(--solution-merge-pdf-background-color); 29 border-radius: 0.75rem; 30 padding: 1.5rem 1.5rem 0.5rem; 31 position: relative; 32 display: flex; 33 flex-direction: column; 34 min-height: 180px; 35 gap: 1rem; 36 } 37 .solution__merge-pdf .solution__header { 38 font-size: 1.25rem; 39 letter-spacing: 0.05em; 40 font-weight: 500; 41 } 42 .solution__merge-pdf .solution__content { 43 flex-grow: 1; 44 display: grid; 45 } 46 .solution__merge-pdf .solution__form { 47 display: flex; 48 flex-direction: column; 49 gap: 1rem; 50 } 51 .solution__merge-pdf .solution__label { 52 white-space: nowrap; 53 width: 100%; 54 font-size: 0.75rem; 55 font-weight: 500; 56 display: flex; 57 flex-direction: column; 58 gap: 0.3rem; 59 } 60 .solution__merge-pdf .solution__hint { 61 font-size: 0.75rem; 62 font-weight: 500; 63 color: var(--solution-merge-pdf-primary-color); 64 white-space: wrap; 65 } 66 .solution__merge-pdf .solution__input { 67 border: 1px solid var(--solution-merge-pdf-input-border-color); 68 border-radius: 0.375rem; 69 padding: 0.25rem 0.5rem; 70 font-size: 1rem; 71 line-height: 32px; 72 outline: 1px solid transparent; 73 outline-offset: -1px; 74 } 75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button { 76 margin-left: 1rem; 77 padding: 0.5rem 1rem; 78 border-radius: 0.75rem; 79 border: none; 80 background-color: var(--solution-merge-pdf-secondary-color); 81 color: var(--solution-merge-pdf-primary-color); 82 font-weight: 500; 83 cursor: pointer; 84 } 85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button { 86 background-color: var(--solution-merge-pdf-secondary-color); 87 } 88 .solution__merge-pdf .solution__btn { 89 display: inline-flex; 90 align-items: center; /* Ensures the icon and text are aligned */ 91 justify-content: center; 92 gap: 0.5rem; /* Adds space between the icon and the text */ 93 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color); 94 background: var(--solution-merge-pdf-secondary-color); 95 color: var(--solution-merge-pdf-primary-color); 96 padding: 0.5rem 1rem; 97 border-radius: 1rem; 98 font-weight: 600; 99 cursor: pointer; 100 border: none; 101 } 102 .solution__merge-pdf .solution__btn:hover { 103 filter: brightness(0.98); 104 } 105 .solution__merge-pdf .solution__btn .dashicons { 106 font-size: 1.2rem; /* Adjust the size of the icon */ 107 vertical-align: middle; /* Aligns the icon vertically with the text */ 108 } 109 .solution__merge-pdf .solution__dropdown-wrapper { 110 position: relative; 111 } 112 .solution__merge-pdf .solution__dropdown { 113 position: relative; 114 overflow: visible; 115 background-color: transparent; 116 box-shadow: none; 117 width: 100%; 118 border-radius: 0.75rem; 119 max-height: 15rem; 120 z-index: 10; 121 } 122 .solution__merge-pdf .solution__dropdown--hidden { 123 display: none; 124 } 125 .solution__merge-pdf .solution__loading-section { 126 display: none; 127 position: absolute; 128 top: 50%; 129 right: 50%; 130 transform: translate(50%, -50%); 131 } 132 .solution__merge-pdf .solution__loading-container { 133 display: flex; 134 justify-content: center; 135 align-items: center; 136 gap: 1rem; 137 transition: 2s ease; 138 } 139 .solution__merge-pdf .solution__download-section { 140 display: flex; 141 justify-content: center; 142 align-items: center; 143 flex-direction: column; 144 gap: 2rem; 145 height: 100%; 146 } 147 .solution__merge-pdf .solution__download-section:last-child { 148 margin-top: auto; 149 } 150 .solution__merge-pdf .solution__download-container { 151 display: flex; 152 flex-direction: column; 153 flex-grow: 1; 154 justify-content: center; 155 align-items: center; 156 gap: 1rem; 157 } 158 .solution__merge-pdf .solution__download-file-container { 159 display: flex; 160 flex-wrap: wrap; 161 justify-content: flex-start; 162 gap: 1rem; 163 } 164 .solution__merge-pdf .solution__download-file-name { 165 white-space: nowrap; 166 overflow: hidden; 167 text-overflow: ellipsis; 168 max-width: 12rem; 169 } 170 .solution__merge-pdf .solution__title-text { 171 font-weight: 600; 172 } 173 .solution__merge-pdf .solution__text { 174 font-weight: 500; 175 } 176 .solution__merge-pdf .solution__provided-text { 177 display: flex; 178 justify-content: center; 179 font-size: 0.7rem; 180 margin-top: 0.5rem; 181 } 182 .solution__merge-pdf .solution__error-section { 183 display: flex; 184 flex-direction: column; 185 justify-self: center; 186 align-self: center; 187 } 188 .solution__merge-pdf .solution__dot { 189 background: var(--solution-merge-pdf-tertiary-color); 190 height: 0.65em; 191 width: 0.65em; 192 border-radius: 50%; 193 animation: move 0.6s ease infinite; 194 } 195 .solution__merge-pdf .solution__link { 196 color: var(--solution-merge-pdf-tertiary-color); 197 } 198 .solution__merge-pdf .solution__select { 199 display: flex; 200 flex-direction: column; 201 position: relative; 202 gap: 0.3rem; 203 /* Placeholder color */ 204 /* Style for selected option */ 205 } 206 .solution__merge-pdf .solution__select .solution__select-input { 207 height: 42px; 208 padding: 0 0.5rem; 209 border-radius: 0.375rem; 210 border: 1px solid var(--solution-merge-pdf-input-border-color); 211 color: var(--solution-merge-pdf-tertiary-color); 212 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color); 213 -webkit-appearance: none; 214 -moz-appearance: none; 215 appearance: none; 216 cursor: pointer; 217 /* Arrow styling */ 218 background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E"); 219 background-repeat: no-repeat; 220 background-position: left 1rem center; 221 background-size: 1rem; 222 } 223 .solution__merge-pdf .solution__select .solution__select-input:focus { 224 outline: 1px solid var(--solution-merge-pdf-primary-color); 225 box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color); 226 } 227 .solution__merge-pdf .solution__select .solution__select-input option { 228 padding: 1rem; 229 } 230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] { 231 color: var(--solution-merge-pdf-input-border-color); 232 } 233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid { 234 color: var(--solution-merge-pdf-input-border-color); 235 } 236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) { 237 color: var(--solution-merge-pdf-tertiary-color); 238 } 239 .solution__merge-pdf .solution_dropdown button { 240 width: 100%; 241 } 242 .solution__merge-pdf .solution__dropdown-content { 243 display: none; 244 position: absolute; 245 flex-direction: column; 246 min-width: 100%; 247 max-height: 150px; 248 padding: 0.5rem 0; 249 overflow: auto; 250 background-color: #fff; 251 box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); 252 z-index: 10; 253 margin-top: 3px; 254 border-radius: 10px; 255 top: 100%; 256 right: 50%; 257 transform: translate(50%, 0); 258 } 259 .solution__merge-pdf .solution__dropdown-content label { 260 display: block; 261 margin-top: 10px; 262 padding: 0 1rem; 263 } 264 .solution__merge-pdf .solution__dropdown-button { 265 min-width: 100%; 266 } 267 .solution__merge-pdf .solution__dropdown-content:hover, 268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content { 269 display: flex; 270 } 271 .solution__merge-pdf .solution__group { 272 display: flex; 273 flex-wrap: wrap; 274 gap: 10px; 275 } 276 .solution__merge-pdf .solution__group > div, 277 .solution__merge-pdf .solution__group > label { 278 flex: 1; 279 } 280 .solution__merge-pdf .solution__sortable-container { 281 cursor: move; 282 display: flex; 283 padding: 1rem; 284 margin: 0.5rem 0; 285 border: 1px dashed var(--solution-merge-pdf-primary-color); 286 border-radius: 0.375rem; 287 align-items: center; 288 gap: 2rem; 289 } 290 .solution__merge-pdf .solution__preview-container { 291 position: relative; 292 padding: 1px 0; 293 background-color: #E2EFF9; 294 border-radius: 0.25rem; 295 min-height: 60px; 296 min-width: 60px; 297 max-width: 60px; 298 max-height: 60px; 299 display: flex; 300 align-items: center; 301 justify-content: center; 302 } 303 .solution__merge-pdf .solution__preview-image { 304 width: 60px; 305 height: 60px; 306 -o-object-fit: contain; 307 object-fit: contain; 308 } 309 .solution__merge-pdf .solution__file-info { 310 display: flex; 311 flex-direction: column; 312 gap: 0.5rem; 313 } 314 .solution__merge-pdf .solution__actions-group { 315 display: flex; 316 gap: 1rem; 317 margin-right: auto; 318 } 319 @media (max-width: 500px) { 320 .solution__merge-pdf .solution__sortable-container { 321 flex-wrap: wrap; /* Allow items to wrap to the next line */ 322 justify-content: center; /* Center item content */ 323 gap: 1rem; 324 } 325 .solution__merge-pdf .solution__sortable-container > :nth-child(1), 326 .solution__merge-pdf .solution__sortable-container > :nth-child(2) { 327 flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */ 328 } 329 .solution__merge-pdf .solution__sortable-container > :nth-child(3) { 330 flex: 1 1 100%; /* Full width for the third item */ 331 justify-content: center; /* Center item content */ 332 } 333 .solution__merge-pdf .solution__actions-group { 334 margin-right: 0; 335 } 336 } 337 338 .solution__modal { 339 display: none; /* Initially hidden */ 340 position: fixed; 341 top: 0; 342 right: 0; 343 width: 100%; /* Full screen width */ 344 height: 100%; /* Full screen height */ 345 background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */ 346 justify-content: center; /* Center content horizontally */ 347 align-items: center; /* Center content vertically */ 348 z-index: 1000; /* Ensures modal appears on top */ 349 } 350 351 /* Modal content styling */ 352 .solution__toolbar { 353 display: flex; 354 position: absolute; 355 justify-content: center; 356 align-items: center; 357 gap: 0.1rem; 358 top: 0; 359 right: 50%; 360 transform: translateX(50%); 361 background-color: rgba(240, 240, 240, 0.8); 362 border-bottom-right-radius: 0.375rem; 363 border-bottom-left-radius: 0.375rem; 364 z-index: 1000; 365 } 366 367 .solution__toolbar-button { 368 padding: 10px 15px; 369 cursor: pointer; 370 color: black; 371 border: none; 372 border-radius: 4px; 373 transition: background-color 0.3s; 374 background-color: transparent; 375 } 376 377 .solution__toolbar-button:hover { 378 color: white; 379 } 380 381 .solution__pdf-renderer { 382 display: flex; 383 justify-content: center; 384 align-items: center; 385 overflow: auto; 386 background-color: #f4f4f4; 387 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 388 border: 1px solid #ddd; 389 max-width: 80%; 390 max-height: 80%; 391 } 392 393 .solution__page-indicator { 394 color: black; 395 font-size: 16px; 396 align-self: center; 397 text-align: center; 398 white-space: nowrap; 399 } 400 401 .solution__interactive-image { 402 max-width: 80%; 403 max-height: 80%; 404 fit-object: contain; 405 } 406 407 @keyframes rotation { 408 0% { 409 transform: rotate(0deg); 410 } 411 100% { 412 transform: rotate(-360deg); 413 } 414 } 415 @keyframes move { 416 0% { 417 transform: translateX(-50%); 418 } 419 50% { 420 transform: translateX(50%); 421 } 422 100% { 423 transform: translateX(-50%); 424 } 425 } 1 :root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-left:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;right:50%;position:absolute;top:50%;transform:translate(50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:left 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;right:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-right:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-right:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;right:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;display:flex;gap:.1rem;right:50%;position:absolute;transform:translateX(50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes move{0%{transform:translateX(-50%)}50%{transform:translateX(50%)}to{transform:translateX(-50%)}} -
merge-pdf/trunk/build/style-index.css
r3232408 r3260511 1 /*!***************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***! 3 \***************************************************************************************************************************************************************************************************************************************************/ 4 :root { 5 --solution-merge-pdf-primary-color: #4f46e5; 6 --solution-merge-pdf-secondary-color: #eef2ff; 7 --solution-merge-pdf-tertiary-color: #000; 8 --solution-merge-pdf-background-color: #fff; 9 --solution-merge-pdf-border-color: #e5e7eb; 10 --solution-merge-pdf-input-border-color: #d1d5db; 11 --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2); 12 --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05); 13 --solution-merge-pdf-dropdown-bg-color: #fff; 14 --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1); 15 --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1); 16 } 17 18 .solution__merge-pdf .solution__container-wrapper { 19 padding: 1rem; 20 display: flex; 21 flex-direction: column; 22 gap: 1rem; 23 color: var(--solution-merge-pdf-tertiary-color); 24 } 25 .solution__merge-pdf .solution__container { 26 box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px; 27 border: 1px solid var(--solution-merge-pdf-border-color); 28 background-color: var(--solution-merge-pdf-background-color); 29 border-radius: 0.75rem; 30 padding: 1.5rem 1.5rem 0.5rem; 31 position: relative; 32 display: flex; 33 flex-direction: column; 34 min-height: 180px; 35 gap: 1rem; 36 } 37 .solution__merge-pdf .solution__header { 38 font-size: 1.25rem; 39 letter-spacing: 0.05em; 40 font-weight: 500; 41 } 42 .solution__merge-pdf .solution__content { 43 flex-grow: 1; 44 display: grid; 45 } 46 .solution__merge-pdf .solution__form { 47 display: flex; 48 flex-direction: column; 49 gap: 1rem; 50 } 51 .solution__merge-pdf .solution__label { 52 white-space: nowrap; 53 width: 100%; 54 font-size: 0.75rem; 55 font-weight: 500; 56 display: flex; 57 flex-direction: column; 58 gap: 0.3rem; 59 } 60 .solution__merge-pdf .solution__hint { 61 font-size: 0.75rem; 62 font-weight: 500; 63 color: var(--solution-merge-pdf-primary-color); 64 white-space: wrap; 65 } 66 .solution__merge-pdf .solution__input { 67 border: 1px solid var(--solution-merge-pdf-input-border-color); 68 border-radius: 0.375rem; 69 padding: 0.25rem 0.5rem; 70 font-size: 1rem; 71 line-height: 32px; 72 outline: 1px solid transparent; 73 outline-offset: -1px; 74 } 75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button { 76 margin-right: 1rem; 77 padding: 0.5rem 1rem; 78 border-radius: 0.75rem; 79 border: none; 80 background-color: var(--solution-merge-pdf-secondary-color); 81 color: var(--solution-merge-pdf-primary-color); 82 font-weight: 500; 83 cursor: pointer; 84 } 85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button { 86 background-color: var(--solution-merge-pdf-secondary-color); 87 } 88 .solution__merge-pdf .solution__btn { 89 display: inline-flex; 90 align-items: center; /* Ensures the icon and text are aligned */ 91 justify-content: center; 92 gap: 0.5rem; /* Adds space between the icon and the text */ 93 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color); 94 background: var(--solution-merge-pdf-secondary-color); 95 color: var(--solution-merge-pdf-primary-color); 96 padding: 0.5rem 1rem; 97 border-radius: 1rem; 98 font-weight: 600; 99 cursor: pointer; 100 border: none; 101 } 102 .solution__merge-pdf .solution__btn:hover { 103 filter: brightness(0.98); 104 } 105 .solution__merge-pdf .solution__btn .dashicons { 106 font-size: 1.2rem; /* Adjust the size of the icon */ 107 vertical-align: middle; /* Aligns the icon vertically with the text */ 108 } 109 .solution__merge-pdf .solution__dropdown-wrapper { 110 position: relative; 111 } 112 .solution__merge-pdf .solution__dropdown { 113 position: relative; 114 overflow: visible; 115 background-color: transparent; 116 box-shadow: none; 117 width: 100%; 118 border-radius: 0.75rem; 119 max-height: 15rem; 120 z-index: 10; 121 } 122 .solution__merge-pdf .solution__dropdown--hidden { 123 display: none; 124 } 125 .solution__merge-pdf .solution__loading-section { 126 display: none; 127 position: absolute; 128 top: 50%; 129 left: 50%; 130 transform: translate(-50%, -50%); 131 } 132 .solution__merge-pdf .solution__loading-container { 133 display: flex; 134 justify-content: center; 135 align-items: center; 136 gap: 1rem; 137 transition: 2s ease; 138 } 139 .solution__merge-pdf .solution__download-section { 140 display: flex; 141 justify-content: center; 142 align-items: center; 143 flex-direction: column; 144 gap: 2rem; 145 height: 100%; 146 } 147 .solution__merge-pdf .solution__download-section:last-child { 148 margin-top: auto; 149 } 150 .solution__merge-pdf .solution__download-container { 151 display: flex; 152 flex-direction: column; 153 flex-grow: 1; 154 justify-content: center; 155 align-items: center; 156 gap: 1rem; 157 } 158 .solution__merge-pdf .solution__download-file-container { 159 display: flex; 160 flex-wrap: wrap; 161 justify-content: flex-start; 162 gap: 1rem; 163 } 164 .solution__merge-pdf .solution__download-file-name { 165 white-space: nowrap; 166 overflow: hidden; 167 text-overflow: ellipsis; 168 max-width: 12rem; 169 } 170 .solution__merge-pdf .solution__title-text { 171 font-weight: 600; 172 } 173 .solution__merge-pdf .solution__text { 174 font-weight: 500; 175 } 176 .solution__merge-pdf .solution__provided-text { 177 display: flex; 178 justify-content: center; 179 font-size: 0.7rem; 180 margin-top: 0.5rem; 181 } 182 .solution__merge-pdf .solution__error-section { 183 display: flex; 184 flex-direction: column; 185 justify-self: center; 186 align-self: center; 187 } 188 .solution__merge-pdf .solution__dot { 189 background: var(--solution-merge-pdf-tertiary-color); 190 height: 0.65em; 191 width: 0.65em; 192 border-radius: 50%; 193 animation: move 0.6s ease infinite; 194 } 195 .solution__merge-pdf .solution__link { 196 color: var(--solution-merge-pdf-tertiary-color); 197 } 198 .solution__merge-pdf .solution__select { 199 display: flex; 200 flex-direction: column; 201 position: relative; 202 gap: 0.3rem; 203 /* Placeholder color */ 204 /* Style for selected option */ 205 } 206 .solution__merge-pdf .solution__select .solution__select-input { 207 height: 42px; 208 padding: 0 0.5rem; 209 border-radius: 0.375rem; 210 border: 1px solid var(--solution-merge-pdf-input-border-color); 211 color: var(--solution-merge-pdf-tertiary-color); 212 box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color); 213 -webkit-appearance: none; 214 -moz-appearance: none; 215 appearance: none; 216 cursor: pointer; 217 /* Arrow styling */ 218 background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E"); 219 background-repeat: no-repeat; 220 background-position: right 1rem center; 221 background-size: 1rem; 222 } 223 .solution__merge-pdf .solution__select .solution__select-input:focus { 224 outline: 1px solid var(--solution-merge-pdf-primary-color); 225 box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color); 226 } 227 .solution__merge-pdf .solution__select .solution__select-input option { 228 padding: 1rem; 229 } 230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] { 231 color: var(--solution-merge-pdf-input-border-color); 232 } 233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid { 234 color: var(--solution-merge-pdf-input-border-color); 235 } 236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) { 237 color: var(--solution-merge-pdf-tertiary-color); 238 } 239 .solution__merge-pdf .solution_dropdown button { 240 width: 100%; 241 } 242 .solution__merge-pdf .solution__dropdown-content { 243 display: none; 244 position: absolute; 245 flex-direction: column; 246 min-width: 100%; 247 max-height: 150px; 248 padding: 0.5rem 0; 249 overflow: auto; 250 background-color: #fff; 251 box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); 252 z-index: 10; 253 margin-top: 3px; 254 border-radius: 10px; 255 top: 100%; 256 left: 50%; 257 transform: translate(-50%, 0); 258 } 259 .solution__merge-pdf .solution__dropdown-content label { 260 display: block; 261 margin-top: 10px; 262 padding: 0 1rem; 263 } 264 .solution__merge-pdf .solution__dropdown-button { 265 min-width: 100%; 266 } 267 .solution__merge-pdf .solution__dropdown-content:hover, 268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content { 269 display: flex; 270 } 271 .solution__merge-pdf .solution__group { 272 display: flex; 273 flex-wrap: wrap; 274 gap: 10px; 275 } 276 .solution__merge-pdf .solution__group > div, 277 .solution__merge-pdf .solution__group > label { 278 flex: 1; 279 } 280 .solution__merge-pdf .solution__sortable-container { 281 cursor: move; 282 display: flex; 283 padding: 1rem; 284 margin: 0.5rem 0; 285 border: 1px dashed var(--solution-merge-pdf-primary-color); 286 border-radius: 0.375rem; 287 align-items: center; 288 gap: 2rem; 289 } 290 .solution__merge-pdf .solution__preview-container { 291 position: relative; 292 padding: 1px 0; 293 background-color: #E2EFF9; 294 border-radius: 0.25rem; 295 min-height: 60px; 296 min-width: 60px; 297 max-width: 60px; 298 max-height: 60px; 299 display: flex; 300 align-items: center; 301 justify-content: center; 302 } 303 .solution__merge-pdf .solution__preview-image { 304 width: 60px; 305 height: 60px; 306 -o-object-fit: contain; 307 object-fit: contain; 308 } 309 .solution__merge-pdf .solution__file-info { 310 display: flex; 311 flex-direction: column; 312 gap: 0.5rem; 313 } 314 .solution__merge-pdf .solution__actions-group { 315 display: flex; 316 gap: 1rem; 317 margin-left: auto; 318 } 319 @media (max-width: 500px) { 320 .solution__merge-pdf .solution__sortable-container { 321 flex-wrap: wrap; /* Allow items to wrap to the next line */ 322 justify-content: center; /* Center item content */ 323 gap: 1rem; 324 } 325 .solution__merge-pdf .solution__sortable-container > :nth-child(1), 326 .solution__merge-pdf .solution__sortable-container > :nth-child(2) { 327 flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */ 328 } 329 .solution__merge-pdf .solution__sortable-container > :nth-child(3) { 330 flex: 1 1 100%; /* Full width for the third item */ 331 justify-content: center; /* Center item content */ 332 } 333 .solution__merge-pdf .solution__actions-group { 334 margin-left: 0; 335 } 336 } 337 338 .solution__modal { 339 display: none; /* Initially hidden */ 340 position: fixed; 341 top: 0; 342 left: 0; 343 width: 100%; /* Full screen width */ 344 height: 100%; /* Full screen height */ 345 background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */ 346 justify-content: center; /* Center content horizontally */ 347 align-items: center; /* Center content vertically */ 348 z-index: 1000; /* Ensures modal appears on top */ 349 } 350 351 /* Modal content styling */ 352 .solution__toolbar { 353 display: flex; 354 position: absolute; 355 justify-content: center; 356 align-items: center; 357 gap: 0.1rem; 358 top: 0; 359 left: 50%; 360 transform: translateX(-50%); 361 background-color: rgba(240, 240, 240, 0.8); 362 border-bottom-left-radius: 0.375rem; 363 border-bottom-right-radius: 0.375rem; 364 z-index: 1000; 365 } 366 367 .solution__toolbar-button { 368 padding: 10px 15px; 369 cursor: pointer; 370 color: black; 371 border: none; 372 border-radius: 4px; 373 transition: background-color 0.3s; 374 background-color: transparent; 375 } 376 377 .solution__toolbar-button:hover { 378 color: white; 379 } 380 381 .solution__pdf-renderer { 382 display: flex; 383 justify-content: center; 384 align-items: center; 385 overflow: auto; 386 background-color: #f4f4f4; 387 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 388 border: 1px solid #ddd; 389 max-width: 80%; 390 max-height: 80%; 391 } 392 393 .solution__page-indicator { 394 color: black; 395 font-size: 16px; 396 align-self: center; 397 text-align: center; 398 white-space: nowrap; 399 } 400 401 .solution__interactive-image { 402 max-width: 80%; 403 max-height: 80%; 404 fit-object: contain; 405 } 406 407 @keyframes rotation { 408 0% { 409 transform: rotate(0deg); 410 } 411 100% { 412 transform: rotate(360deg); 413 } 414 } 415 @keyframes move { 416 0% { 417 transform: translateX(50%); 418 } 419 50% { 420 transform: translateX(-50%); 421 } 422 100% { 423 transform: translateX(50%); 424 } 425 } 426 427 /*# sourceMappingURL=style-index.css.map*/ 1 :root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-right:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;left:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(-50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-left:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-left:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;left:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;display:flex;gap:.1rem;left:50%;position:absolute;transform:translateX(-50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes move{0%{transform:translateX(50%)}50%{transform:translateX(-50%)}to{transform:translateX(50%)}} -
merge-pdf/trunk/build/view.asset.php
r3232408 r3260511 1 <?php return array('dependencies' => array(), 'version' => ' d3134df337a43cf2ea57');1 <?php return array('dependencies' => array(), 'version' => '1b8511a4fa9f3be4b297'); -
merge-pdf/trunk/build/view.js
r3232408 r3260511 1 /******/ (() => { // webpackBootstrap 2 /*!*********************!*\ 3 !*** ./src/view.js ***! 4 \*********************/ 5 document.querySelectorAll('.solution__merge-pdf .solution__form').forEach(form => { 6 form.addEventListener('submit', function (event) { 7 event.preventDefault(); 8 const formId = form.getAttribute('id'); 9 const fileInput = form.querySelector('[name="file"]'); 10 const loadingSection = document.getElementById(`loadingSection_${formId}`); 11 const errorSection = document.getElementById(`errorSection_${formId}`); 12 const resultMessage = document.getElementById(`resultMessage_${formId}`); 13 const downloadSection = document.getElementById(`downloadSection_${formId}`); 14 15 // Hide the form, show the loading indicator, hide error and download sections 16 form.style.display = 'none'; 17 loadingSection.style.display = 'flex'; 18 errorSection.style.display = 'none'; // Hide error section 19 downloadSection.style.display = 'none'; 20 const formData = new FormData(); 21 Array.from(fileInput.files).forEach((file, index) => { 22 formData.append(`file[${index}]`, file); 23 }); 24 formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce); 25 fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, { 26 method: 'POST', 27 body: formData 28 }).then(response => response.json()).then(data => { 29 if (data.id) { 30 pollStatus(data.id, formId); 31 } else { 32 loadingSection.style.display = 'none'; 33 errorSection.style.display = 'flex'; 34 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 35 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 36 fileListContainer.innerHTML = ''; 37 } 38 }).catch(() => { 39 loadingSection.style.display = 'none'; 40 errorSection.style.display = 'flex'; 41 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 42 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 43 fileListContainer.innerHTML = ''; 44 }); 45 }); 46 47 // Add event listener for restart buttons 48 const restartDownloadBtn = document.getElementById(`restartDownloadBtn_${form.id}`); 49 const restartErrorBtn = document.getElementById(`restartErrorBtn_${form.id}`); 50 51 // Function to restart the process and reset the form 52 function resetForm() { 53 form.reset(); 54 form.style.display = 'flex'; 55 document.getElementById(`loadingSection_${form.id}`).style.display = 'none'; // Hide loading 56 document.getElementById(`downloadSection_${form.id}`).style.display = 'none'; // Hide download 57 document.getElementById(`errorSection_${form.id}`).style.display = 'none'; // Hide error section 58 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 59 fileListContainer.innerHTML = ''; 60 } 61 if (restartDownloadBtn) { 62 restartDownloadBtn.addEventListener('click', resetForm); 63 } 64 if (restartErrorBtn) { 65 restartErrorBtn.addEventListener('click', resetForm); 66 } 67 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc; 68 const containerId = form.getAttribute('id'); 69 let currentPdf, currentPage, totalPages, rotation, scale; 70 let allFiles = []; 71 const fileListContainer = document.createElement("div"); 72 fileListContainer.setAttribute(`id`, `${containerId}-file-list-container`); 73 const formField = document.getElementById(`${containerId}-files-input`); 74 const formFieldParent = formField.parentElement; 75 formFieldParent.appendChild(fileListContainer); 76 formField.addEventListener("change", async event => { 77 const fileListContainer = document.getElementById(`${containerId}-file-list-container`); 78 const newFiles = Array.from(event.target.files); 79 80 // Merge new files with the existing files but remove duplicates within new files 81 const uniqueNewFiles = newFiles.filter(file => !allFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size)); 82 83 // Merge the unique new files with the existing files 84 allFiles = [...allFiles, ...uniqueNewFiles]; 85 const dataTransfer = new DataTransfer(); 86 87 // Add all unique files to DataTransfer 88 allFiles.forEach(file => { 89 dataTransfer.items.add(file); 90 }); 91 event.target.files = dataTransfer.files; 92 93 // Only create and append list items for new files that aren't already in the list 94 for (const file of uniqueNewFiles) { 95 const listItem = await createFileListItem(file, event); 96 fileListContainer.appendChild(listItem); 97 } 98 createSortableInstance(fileListContainer, event); 99 }); 100 async function createFileListItem(file, event) { 101 const listItem = document.createElement("div"); 102 listItem.classList.add("solution__sortable-container"); 103 const previewContainer = document.createElement("div"); 104 previewContainer.classList.add("solution__preview-container"); 105 if (file.type && file.type.match(/image.*/)) { 106 createPreviewImage(previewContainer, file); 107 } else if (file.type && file.type.match("application/pdf")) { 108 await createPreviewPdf(previewContainer, file); 109 } 110 const fileSize = file.size > 1024 * 1024 ? (file.size / (1024 * 1024)).toFixed(2) + " MB" : (file.size / 1024).toFixed(2) + " KB"; 111 const fileInfoContent = ` 112 <div class="solution__file-info"> 113 <div class="solution__file-name">${file.name}</div> 114 <div class="solution__file-size">${fileSize}</div> 115 </div> 116 `; 117 const fileInfo = document.createElement("div"); 118 fileInfo.classList.add("solution__file-info"); 119 fileInfo.innerHTML = fileInfoContent; 120 const previewButton = createPreviewButton(file); 121 const removeButton = createRemoveButton(file, event); 122 const actionContainer = document.createElement("div"); 123 actionContainer.classList.add("solution__actions-group"); 124 actionContainer.appendChild(previewButton); 125 actionContainer.appendChild(removeButton); 126 listItem.appendChild(previewContainer); 127 listItem.appendChild(fileInfo); 128 listItem.appendChild(actionContainer); 129 return listItem; 130 } 131 function createRemoveButton(file, event) { 132 const removeButton = document.createElement("button"); 133 removeButton.className = "solution__btn"; 134 const removeIcon = document.createElement("i"); 135 removeIcon.className = "fas fa-trash"; 136 removeIcon.title = "Remove File"; 137 removeButton.appendChild(removeIcon); 138 removeButton.addEventListener("click", e => { 139 e.preventDefault(); 140 e.stopPropagation(); 141 142 // Remove the file from allFiles as well 143 allFiles = allFiles.filter(f => f.name !== file.name); // Update the array directly 144 145 const dataTransfer = new DataTransfer(); 146 allFiles.forEach(f => dataTransfer.items.add(f)); 147 event.target.files = dataTransfer.files; 148 const listItem = e.target.closest(".solution__sortable-container"); 149 listItem?.parentElement?.removeChild(listItem); 150 }); 151 return removeButton; 152 } 153 function createPreviewButton(file) { 154 const previewButton = document.createElement("button"); 155 previewButton.classList.add("solution__btn"); 156 const viewIcon = document.createElement("i"); 157 viewIcon.className = "fas fa-eye"; 158 viewIcon.title = "View File"; 159 previewButton.appendChild(viewIcon); 160 previewButton.addEventListener("click", async e => { 161 e.preventDefault(); 162 e.stopPropagation(); 163 await showModal(file); 164 }); 165 return previewButton; 166 } 167 function createSortableInstance(element, event) { 168 if (element._sortableInstance) { 169 element._sortableInstance.destroy(); 170 } 171 element._sortableInstance = new Sortable(element, { 172 animation: 150, 173 onEnd: () => { 174 const dataTransfer = new DataTransfer(); 175 const newFileList = Array.from(element.children).map(item => { 176 const fileNameElement = item.querySelector(`#${containerId}-file-list-container .solution__file-name`); 177 return fileNameElement ? fileNameElement.textContent : null; 178 }); 179 newFileList.forEach(fileName => { 180 const file = Array.from(event.target.files).find(f => f.name === fileName); 181 if (file) { 182 dataTransfer.items.add(file); 183 } 184 }); 185 event.target.files = dataTransfer.files; 186 } 187 }); 188 } 189 function createPreviewImage(element, file) { 190 const fileURL = URL.createObjectURL(file); 191 const img = document.createElement("img"); 192 img.classList.add("solution__preview-image"); 193 img.src = fileURL; 194 element.appendChild(img); 195 } 196 async function createPreviewPdf(element, file) { 197 try { 198 const fileURL = URL.createObjectURL(file); 199 const pdf = await pdfjsLib.getDocument(fileURL).promise; 200 const page = await pdf.getPage(1); // Render the first page only 201 202 const preCalculateViewport = page.getViewport({ 203 scale: 1 204 }); 205 const scaleHeight = 60 / preCalculateViewport.height; 206 const scaleWidth = 60 / preCalculateViewport.width; 207 const scale = Math.min(scaleHeight, scaleWidth); 208 const viewport = page.getViewport({ 209 scale 210 }); 211 const canvas = document.createElement("canvas"); 212 canvas.className = "page"; 213 canvas.width = viewport.width; 214 canvas.height = viewport.height; 215 const context = canvas.getContext("2d"); 216 const renderContext = { 217 canvasContext: context, 218 viewport: viewport 219 }; 220 await page.render(renderContext).promise; 221 element.appendChild(canvas); 222 } catch (error) { 223 console.log(error); 224 } 225 } 226 async function showModal(file) { 227 const fullscreenModal = document.createElement("div"); 228 fullscreenModal.id = "solution__fullscreen-modal"; 229 fullscreenModal.classList.add("solution__modal"); 230 fullscreenModal.style.display = "flex"; // Show the modal when opened 231 232 if (file.type && file.type.match(/image.*/)) { 233 const imageContent = createImageRenderer(file); 234 const toolbar = createToolbar(); 235 fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content 236 fullscreenModal.appendChild(imageContent); // Render the image content 237 } 238 if (file.type && file.type.match("application/pdf")) { 239 const pdfContent = await createPdfRenderer(file); 240 const toolbar = createToolbar(); 241 fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content 242 fullscreenModal.appendChild(pdfContent); // Render the PDF content 243 } 244 document.body.appendChild(fullscreenModal); // Add the modal to the body 245 246 // Add event listener to close the modal when clicking outside the content or toolbar 247 fullscreenModal.addEventListener("click", event => { 248 closeModal(event, fullscreenModal); 249 }); 250 } 251 function closeModal(event, modal) { 252 if (event.target === modal) { 253 modal.remove(); 254 } 255 } 256 function createImageRenderer(file) { 257 const image = document.createElement("img"); 258 image.classList.add("solution__interactive-image"); 259 image.style.transformOrigin = "center center"; // Proper zoom/rotation pivot 260 image.setAttribute("data-scale", "1"); // Initialize scale 261 image.setAttribute("data-rotation", "0"); // Initialize rotation 262 263 // Load the image content 264 const reader = new FileReader(); 265 reader.onload = event => { 266 image.src = event.target.result; // Set image source 267 }; 268 reader.readAsDataURL(file); 269 return image; 270 } 271 async function createPdfRenderer(file) { 272 const pdfRendererDiv = document.createElement("div"); 273 pdfRendererDiv.classList.add("solution__pdf-renderer"); 274 275 // Create a canvas for rendering 276 const canvas = document.createElement("canvas"); 277 canvas.id = "solution__pdf-canvas"; 278 pdfRendererDiv.appendChild(canvas); 279 const ctx = canvas.getContext("2d"); 280 281 // Load the PDF using PDF.js 282 const pdf = await pdfjsLib.getDocument(URL.createObjectURL(file)).promise; 283 284 // Store PDF and page details in the instance 285 currentPdf = pdf; 286 currentPage = 1; 287 totalPages = pdf.numPages; 288 rotation = 0; 289 scale = 1; 290 291 // Render the first page 292 await renderPage(ctx); 293 return pdfRendererDiv; 294 } 295 async function renderPage(ctx) { 296 const page = await currentPdf.getPage(currentPage); 297 298 // Adjust canvas size based on the PDF page 299 const viewport = page.getViewport({ 300 scale, 301 rotation 302 }); 303 const canvas = ctx.canvas; 304 canvas.width = viewport.width; 305 canvas.height = viewport.height; 306 const renderContext = { 307 canvasContext: ctx, 308 viewport: viewport 309 }; 310 await page.render(renderContext).promise; 311 312 // Update toolbar state (for buttons and page indicator) 313 const pageIndicator = document.getElementById("solution__page-indicator"); 314 if (pageIndicator) { 315 pageIndicator.textContent = `${currentPage} / ${totalPages}`; 316 } 317 } 318 function createToolbar() { 319 const toolbar = document.createElement("div"); 320 toolbar.classList.add("solution__toolbar"); 321 322 // Buttons for toolbar 323 const buttons = [{ 324 text: "Left", 325 id: "solution__previous-btn", 326 icon: "fa-solid fa-chevron-left" 327 }, { 328 text: "Right", 329 id: "solution__next-btn", 330 icon: "fa-solid fa-chevron-right" 331 }, { 332 text: "Zoom In", 333 id: "solution__zoom-in-btn", 334 icon: "fa-solid fa-magnifying-glass-plus" 335 }, { 336 text: "Zoom Out", 337 id: "solution__zoom-out-btn", 338 icon: "fa-solid fa-magnifying-glass-minus" 339 }, { 340 text: "Rotate Left", 341 id: "solution__rotate-left-btn", 342 icon: "fa-solid fa-arrow-rotate-left" 343 }, { 344 text: "Rotate Right", 345 id: "solution__rotate-right-btn", 346 icon: "fa-solid fa-arrow-rotate-right" 347 }, { 348 text: "Close", 349 id: "close-modal-btn", 350 icon: "fa-solid fa-xmark" 351 }]; 352 353 // Create Left button 354 const leftBtn = createToolbarButton(buttons[0]); 355 toolbar.appendChild(leftBtn); 356 357 // Create page indicator 358 const pageIndicator = document.createElement("span"); 359 pageIndicator.id = "solution__page-indicator"; 360 pageIndicator.textContent = `${currentPage || 1} / ${totalPages || 1}`; 361 pageIndicator.classList.add("solution__page-indicator"); 362 toolbar.appendChild(pageIndicator); 363 364 // Create Right button 365 const rightBtn = createToolbarButton(buttons[1]); 366 toolbar.appendChild(rightBtn); 367 368 // Add remaining buttons 369 buttons.slice(2).forEach(button => { 370 const btn = createToolbarButton(button); 371 toolbar.appendChild(btn); 372 }); 373 return toolbar; 374 } 375 function createToolbarButton(buttonConfig) { 376 const btn = document.createElement("button"); 377 btn.id = buttonConfig.id; 378 btn.classList.add("solution__toolbar-button"); 379 380 // Create the icon element 381 const icon = document.createElement("i"); 382 icon.className = buttonConfig.icon; // Use the icon class from buttonConfig 383 btn.appendChild(icon); 384 385 // Assign the event listener 386 btn.addEventListener("click", async e => { 387 e.preventDefault(); 388 e.stopPropagation(); 389 await handleToolbarAction(buttonConfig.id); // Handle action here 390 }); 391 return btn; 392 } 393 async function handleToolbarAction(actionId) { 394 const pdfCanvas = document.querySelector("#solution__pdf-canvas"); 395 const image = document.querySelector(".solution__interactive-image"); 396 if (actionId === "close-modal-btn") { 397 document.getElementById("solution__fullscreen-modal")?.remove(); 398 return; 399 } 400 if (pdfCanvas) { 401 // Handle PDF-specific actions (left, right, etc.) 402 await handlePdfToolbarAction(actionId); 403 } else if (image) { 404 // Handle image-specific actions (zoom, rotate, etc.) 405 handleImageToolbarActions(actionId, image); 406 } 407 } 408 function handleImageToolbarActions(actionId, image) { 409 let scale = parseFloat(image.getAttribute("data-scale")) || 1; 410 let rotation = parseInt(image.getAttribute("data-rotation")) || 0; 411 412 // Store original dimensions 413 const originalWidth = image.naturalWidth; 414 const originalHeight = image.naturalHeight; 415 416 // Get parent element's dimensions 417 const parent = image.parentElement; 418 const parentWidth = parent.offsetWidth; 419 const parentHeight = parent.offsetHeight; 420 switch (actionId) { 421 case "solution__zoom-in-btn": 422 scale = Math.min(scale + 0.1, 5); // Cap zoom at 5x 423 break; 424 case "solution__zoom-out-btn": 425 scale = Math.max(scale - 0.1, 0.1); // Minimum zoom to 0.1x 426 break; 427 case "solution__rotate-left-btn": 428 rotation = (rotation - 90) % 360; // Rotate counter-clockwise 429 break; 430 case "solution__rotate-right-btn": 431 rotation = (rotation + 90) % 360; // Rotate clockwise 432 break; 433 } 434 435 // Determine whether to swap width and height 436 let adjustedWidth = originalWidth * scale; 437 let adjustedHeight = originalHeight * scale; 438 if (Math.abs(rotation % 180) === 90) { 439 // Swap width and height if rotated 90 or 270 degrees 440 [adjustedWidth, adjustedHeight] = [adjustedHeight, adjustedWidth]; 441 adjustedWidth = parentWidth * 0.8; 442 adjustedHeight = adjustedWidth / originalWidth * originalHeight; 443 adjustedHeight = parentHeight * 0.8; 444 adjustedHeight = adjustedHeight / originalWidth * originalHeight; 445 } 446 447 // Apply updated dimensions 448 image.style.transform = `scale(${scale}) rotate(${rotation}deg)`; 449 image.style.width = `${adjustedWidth}px`; 450 image.style.height = `${adjustedHeight}px`; 451 image.style.objectFit = "contain"; 452 453 // Update rotation data (only for internal tracking) 454 image.setAttribute("data-scale", scale); // Store current scale 455 image.setAttribute("data-rotation", rotation); // Store current rotation 456 } 457 async function handlePdfToolbarAction(actionId) { 458 const canvas = document.getElementById("solution__pdf-canvas"); 459 const ctx = canvas.getContext("2d"); 460 switch (actionId) { 461 case "solution__previous-btn": 462 if (currentPage > 1) { 463 currentPage--; 464 await renderPage(ctx); 465 } 466 break; 467 case "solution__next-btn": 468 if (currentPage < totalPages) { 469 currentPage++; 470 await renderPage(ctx); 471 } 472 break; 473 case "solution__zoom-in-btn": 474 scale += 0.2; 475 await renderPage(ctx); 476 break; 477 case "solution__zoom-out-btn": 478 scale -= 0.2; 479 await renderPage(ctx); 480 break; 481 case "solution__rotate-left-btn": 482 rotation -= 90; 483 await renderPage(ctx); 484 break; 485 case "solution__rotate-right-btn": 486 rotation += 90; 487 await renderPage(ctx); 488 break; 489 case "close-modal-btn": 490 break; 491 default: 492 console.log(`Unknown action: ${actionId}`); 493 } 494 } 495 }); 496 function pollStatus(id, formId) { 497 const loadingSection = document.getElementById(`loadingSection_${formId}`); 498 const errorSection = document.getElementById(`errorSection_${formId}`); 499 const resultMessage = document.getElementById(`resultMessage_${formId}`); 500 const downloadSection = document.getElementById(`downloadSection_${formId}`); 501 const downloadFilesContainer = document.getElementById(`downloadFilesContainer_${formId}`); 502 function checkStatus() { 503 fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`).then(response => response.json()).then(data => { 504 if (data.status === 'done') { 505 loadingSection.style.display = 'none'; 506 downloadFilesContainer.innerHTML = ''; // Clear previous downloads 507 508 if (data.output && data.output.files && data.output.files.length > 0) { 509 data.output.files.forEach(file => { 510 // Create download button 511 const downloadButton = document.createElement('button'); 512 downloadButton.type = 'button'; 513 downloadButton.className = 'solution__btn'; 514 downloadButton.innerHTML = ` 515 <div class="dashicons dashicons-download"></div> 516 <span class="solution__download-file-name">${file.name}</span> 517 `; 518 519 // Set download functionality 520 downloadButton.addEventListener('click', event => { 521 event.preventDefault(); 522 const anchor = document.createElement('a'); 523 anchor.href = file.path; 524 anchor.target = '_blank'; 525 document.body.appendChild(anchor); 526 anchor.click(); 527 document.body.removeChild(anchor); 528 }); 529 530 // Append elements to the container 531 const fileContainer = document.createElement('div'); 532 fileContainer.className = 'solution__download-file-container'; 533 fileContainer.appendChild(downloadButton); 534 downloadFilesContainer.appendChild(fileContainer); 535 }); 536 downloadSection.style.display = 'flex'; // Show download section 537 } else { 538 errorSection.style.display = 'flex'; 539 resultMessage.innerText = 'No files available for download.'; 540 } 541 } else if (data.status === 'error') { 542 throw new Error('Processing failed: ' + data.message); 543 } else { 544 setTimeout(checkStatus, 500); 545 } 546 }).catch(() => { 547 loadingSection.style.display = 'none'; 548 errorSection.style.display = 'flex'; 549 resultMessage.innerText = 'An unexpected error occurred. Please try again.'; 550 }); 551 } 552 checkStatus(); 553 } 554 /******/ })() 555 ; 556 //# sourceMappingURL=view.js.map 1 document.querySelectorAll(".solution__merge-pdf .solution__form").forEach((e=>{e.addEventListener("submit",(function(t){t.preventDefault();const n=e.getAttribute("id"),o=e.querySelector('[name="file"]'),i=document.getElementById(`loadingSection_${n}`),s=document.getElementById(`errorSection_${n}`),l=document.getElementById(`resultMessage_${n}`),d=document.getElementById(`downloadSection_${n}`);e.style.display="none",i.style.display="flex",s.style.display="none",d.style.display="none";const c=new FormData;Array.from(o.files).forEach(((e,t)=>{c.append(`file[${t}]`,e)})),c.append("mergePDFFormNonce",wpApiSettingsMergePDF.mergePDFNonce),fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`,{method:"POST",body:c}).then((e=>e.json())).then((e=>{e.id?function(e,t){const n=document.getElementById(`loadingSection_${t}`),o=document.getElementById(`errorSection_${t}`),a=document.getElementById(`resultMessage_${t}`),i=document.getElementById(`downloadSection_${t}`),s=document.getElementById(`downloadFilesContainer_${t}`);!function t(){fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${e}`,{method:"GET",headers:{"X-WP-Nonce":wpApiSettingsMergePDF.mergePDFNonce,"Content-Type":"application/json"}}).then((e=>e.json())).then((e=>{if("done"===e.status)n.style.display="none",s.innerHTML="",e.output&&e.output.files&&e.output.files.length>0?(e.output.files.forEach((e=>{const t=document.createElement("button");t.type="button",t.className="solution__btn",t.innerHTML=`\n <div class="dashicons dashicons-download"></div>\n <span class="solution__download-file-name">${e.name}</span>\n `,t.addEventListener("click",(t=>{t.preventDefault();const n=document.createElement("a");n.href=e.path,n.target="_blank",document.body.appendChild(n),n.click(),document.body.removeChild(n)}));const n=document.createElement("div");n.className="solution__download-file-container",n.appendChild(t),s.appendChild(n)})),i.style.display="flex"):(o.style.display="flex",a.innerText="No files available for download.");else{if("error"===e.status)throw new Error("Processing failed: "+e.message);setTimeout(t,500)}})).catch((()=>{n.style.display="none",o.style.display="flex",a.innerText="An unexpected error occurred. Please try again."}))}()}(e.id,n):(i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML="")})).catch((()=>{i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML=""}))}));const t=document.getElementById(`restartDownloadBtn_${e.id}`),n=document.getElementById(`restartErrorBtn_${e.id}`);function o(){e.reset(),e.style.display="flex",document.getElementById(`loadingSection_${e.id}`).style.display="none",document.getElementById(`downloadSection_${e.id}`).style.display="none",document.getElementById(`errorSection_${e.id}`).style.display="none",document.getElementById(`${a}-file-list-container`).innerHTML=""}t&&t.addEventListener("click",o),n&&n.addEventListener("click",o),pdfjsLib.GlobalWorkerOptions.workerSrc=wpApiSettingsMergePDF.pdfWorkerSrc;const a=e.getAttribute("id");let i,s,l,d,c,r=[];const u=document.createElement("div");u.setAttribute("id",`${a}-file-list-container`);const m=document.getElementById(`${a}-files-input`);async function p(e,t){const n=document.createElement("div");n.classList.add("solution__sortable-container");const o=document.createElement("div");o.classList.add("solution__preview-container"),e.type&&e.type.match(/image.*/)?function(e,t){const n=URL.createObjectURL(t),o=document.createElement("img");o.classList.add("solution__preview-image"),o.src=n,e.appendChild(o)}(o,e):e.type&&e.type.match("application/pdf")&&await async function(e,t){try{const n=URL.createObjectURL(t),o=await pdfjsLib.getDocument(n).promise,a=await o.getPage(1),i=a.getViewport({scale:1}),s=60/i.height,l=60/i.width,d=Math.min(s,l),c=a.getViewport({scale:d}),r=document.createElement("canvas");r.className="page",r.width=c.width,r.height=c.height;const u={canvasContext:r.getContext("2d"),viewport:c};await a.render(u).promise,e.appendChild(r)}catch(e){console.log(e)}}(o,e);const a=e.size>1048576?(e.size/1048576).toFixed(2)+" MB":(e.size/1024).toFixed(2)+" KB",u=`\n <div class="solution__file-info">\n <div class="solution__file-name">${e.name}</div>\n <div class="solution__file-size">${a}</div>\n </div>\n `,m=document.createElement("div");m.classList.add("solution__file-info"),m.innerHTML=u;const p=function(e){const t=document.createElement("button");t.classList.add("solution__btn");const n=document.createElement("i");return n.className="fas fa-eye",n.title="View File",t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.createElement("div");if(t.id="solution__fullscreen-modal",t.classList.add("solution__modal"),t.style.display="flex",e.type&&e.type.match(/image.*/)){const n=function(e){const t=document.createElement("img");t.classList.add("solution__interactive-image"),t.style.transformOrigin="center center",t.setAttribute("data-scale","1"),t.setAttribute("data-rotation","0");const n=new FileReader;return n.onload=e=>{t.src=e.target.result},n.readAsDataURL(e),t}(e),o=g();t.appendChild(o),t.appendChild(n)}if(e.type&&e.type.match("application/pdf")){const n=await async function(e){const t=document.createElement("div");t.classList.add("solution__pdf-renderer");const n=document.createElement("canvas");n.id="solution__pdf-canvas",t.appendChild(n);const o=n.getContext("2d"),a=await pdfjsLib.getDocument(URL.createObjectURL(e)).promise;return i=a,s=1,l=a.numPages,d=0,c=1,await f(o),t}(e),o=g();t.appendChild(o),t.appendChild(n)}document.body.appendChild(t),t.addEventListener("click",(e=>{!function(e,t){e.target===t&&t.remove()}(e,t)}))}(e)})),t}(e),_=function(e,t){const n=document.createElement("button");n.className="solution__btn";const o=document.createElement("i");return o.className="fas fa-trash",o.title="Remove File",n.appendChild(o),n.addEventListener("click",(n=>{n.preventDefault(),n.stopPropagation(),r=r.filter((t=>t.name!==e.name));const o=new DataTransfer;r.forEach((e=>o.items.add(e))),t.target.files=o.files;const a=n.target.closest(".solution__sortable-container");a?.parentElement?.removeChild(a)})),n}(e,t),y=document.createElement("div");return y.classList.add("solution__actions-group"),y.appendChild(p),y.appendChild(_),n.appendChild(o),n.appendChild(m),n.appendChild(y),n}async function f(e){const t=await i.getPage(s),n=t.getViewport({scale:c,rotation:d}),o=e.canvas;o.width=n.width,o.height=n.height;const a={canvasContext:e,viewport:n};await t.render(a).promise;const r=document.getElementById("solution__page-indicator");r&&(r.textContent=`${s} / ${l}`)}function g(){const e=document.createElement("div");e.classList.add("solution__toolbar");const t=[{text:"Left",id:"solution__previous-btn",icon:"fa-solid fa-chevron-left"},{text:"Right",id:"solution__next-btn",icon:"fa-solid fa-chevron-right"},{text:"Zoom In",id:"solution__zoom-in-btn",icon:"fa-solid fa-magnifying-glass-plus"},{text:"Zoom Out",id:"solution__zoom-out-btn",icon:"fa-solid fa-magnifying-glass-minus"},{text:"Rotate Left",id:"solution__rotate-left-btn",icon:"fa-solid fa-arrow-rotate-left"},{text:"Rotate Right",id:"solution__rotate-right-btn",icon:"fa-solid fa-arrow-rotate-right"},{text:"Close",id:"close-modal-btn",icon:"fa-solid fa-xmark"}],n=_(t[0]);e.appendChild(n);const o=document.createElement("span");o.id="solution__page-indicator",o.textContent=`${s||1} / ${l||1}`,o.classList.add("solution__page-indicator"),e.appendChild(o);const a=_(t[1]);return e.appendChild(a),t.slice(2).forEach((t=>{const n=_(t);e.appendChild(n)})),e}function _(e){const t=document.createElement("button");t.id=e.id,t.classList.add("solution__toolbar-button");const n=document.createElement("i");return n.className=e.icon,t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.querySelector("#solution__pdf-canvas"),n=document.querySelector(".solution__interactive-image");"close-modal-btn"!==e?t?await async function(e){const t=document.getElementById("solution__pdf-canvas").getContext("2d");switch(e){case"solution__previous-btn":s>1&&(s--,await f(t));break;case"solution__next-btn":s<l&&(s++,await f(t));break;case"solution__zoom-in-btn":c+=.2,await f(t);break;case"solution__zoom-out-btn":c-=.2,await f(t);break;case"solution__rotate-left-btn":d-=90,await f(t);break;case"solution__rotate-right-btn":d+=90,await f(t);break;case"close-modal-btn":break;default:console.log(`Unknown action: ${e}`)}}(e):n&&function(e,t){let n=parseFloat(t.getAttribute("data-scale"))||1,o=parseInt(t.getAttribute("data-rotation"))||0;const a=t.naturalWidth,i=t.naturalHeight,s=t.parentElement,l=s.offsetWidth,d=s.offsetHeight;switch(e){case"solution__zoom-in-btn":n=Math.min(n+.1,5);break;case"solution__zoom-out-btn":n=Math.max(n-.1,.1);break;case"solution__rotate-left-btn":o=(o-90)%360;break;case"solution__rotate-right-btn":o=(o+90)%360}let c=a*n,r=i*n;90===Math.abs(o%180)&&([c,r]=[r,c],c=.8*l,r=c/a*i,r=.8*d,r=r/a*i),t.style.transform=`scale(${n}) rotate(${o}deg)`,t.style.width=`${c}px`,t.style.height=`${r}px`,t.style.objectFit="contain",t.setAttribute("data-scale",n),t.setAttribute("data-rotation",o)}(e,n):document.getElementById("solution__fullscreen-modal")?.remove()}(e.id)})),t}m.parentElement.appendChild(u),m.addEventListener("change",(async e=>{const t=document.getElementById(`${a}-file-list-container`),n=Array.from(e.target.files).filter((e=>!r.some((t=>t.name===e.name&&t.size===e.size))));r=[...r,...n];const o=new DataTransfer;r.forEach((e=>{o.items.add(e)})),e.target.files=o.files;for(const o of n){const n=await p(o,e);t.appendChild(n)}!function(e,t){e._sortableInstance&&e._sortableInstance.destroy(),e._sortableInstance=new Sortable(e,{animation:150,onEnd:()=>{const n=new DataTransfer;Array.from(e.children).map((e=>{const t=e.querySelector(`#${a}-file-list-container .solution__file-name`);return t?t.textContent:null})).forEach((e=>{const o=Array.from(t.target.files).find((t=>t.name===e));o&&n.items.add(o)})),t.target.files=n.files}})}(t,e)}))})); -
merge-pdf/trunk/includes/process-machine.php
r3225930 r3260511 122 122 // Check status of processing task 123 123 function cross_service_solutions_merge_pdf_check_status($request) { 124 $nonce = $request->get_header('X-WP-Nonce'); 125 if (!$nonce || !wp_verify_nonce($nonce, 'merge_pdf_form_nonce_action')) { 126 return new WP_Error('nonce_invalid', 'Nonce verification failed', array( 127 'status' => 403, 128 'message' => 'The provided nonce is invalid or expired. Please refresh and try again.' 129 )); 130 } 131 124 132 $api_key = esc_attr(get_option('cross_service_solutions_api_key')); 125 133 $id = sanitize_text_field($request['id']); -
merge-pdf/trunk/languages/merge-pdf.pot
r3250034 r3260511 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Merge PDF 1.0. 0\n"5 "Project-Id-Version: Merge PDF 1.0.1\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/merge-pdf\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -
merge-pdf/trunk/merge-pdf.php
r3232408 r3260511 5 5 * Requires at least: 6.6 6 6 * Requires PHP: 7.2.24 7 * Version: 1.0. 07 * Version: 1.0.1 8 8 * Author: Cross Service Solutions 9 9 * License: GPL-2.0-or-later … … 104 104 function cross_service_solutions_merge_pdf_localize_script() { 105 105 // Localize the script registered by the viewScript in block.json 106 wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettings ', array(106 wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettingsMergePDF', array( 107 107 'root' => esc_url_raw(rest_url()), 108 108 'mergePDFNonce' => wp_create_nonce('merge_pdf_form_nonce_action'), -
merge-pdf/trunk/readme.txt
r3250034 r3260511 5 5 Requires at least: 5.0 6 6 Tested up to: 6.7 7 Stable tag: 1.0. 07 Stable tag: 1.0.1 8 8 Requires PHP: 7.2.24 9 9 License: GPLv2 or later … … 94 94 == Changelog == 95 95 96 = 1.0.1 = 97 * Implemented nonce validation for polling status GET request. 98 * Ensuring the global object in JavaScript is unique. 99 96 100 = 1.0.0 = 97 101 * Initial release of the Merge PDF plugin. -
merge-pdf/trunk/src/block.json
r3225930 r3260511 3 3 "apiVersion": 3, 4 4 "name": "create-block/merge-pdf", 5 "version": "1.0. 0",5 "version": "1.0.1", 6 6 "title": "Merge Pdf", 7 7 "category": "widgets", -
merge-pdf/trunk/src/view.js
r3225930 r3260511 28 28 formData.append(`file[${index}]`, file); 29 29 }); 30 formData.append('mergePDFFormNonce', wpApiSettings .mergePDFNonce);31 32 fetch(`${wpApiSettings .root}merge-pdf/v1/send-data`, {30 formData.append('mergePDFFormNonce', wpApiSettingsMergePDF.mergePDFNonce); 31 32 fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`, { 33 33 method: 'POST', 34 34 body: formData, … … 88 88 } 89 89 90 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings .pdfWorkerSrc;90 pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettingsMergePDF.pdfWorkerSrc; 91 91 const containerId = form.getAttribute('id'); 92 92 let currentPdf, currentPage, totalPages, rotation, scale; … … 569 569 570 570 function checkStatus() { 571 fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`) 571 fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${id}`, { 572 method: 'GET', 573 headers: { 574 'X-WP-Nonce': wpApiSettingsMergePDF.mergePDFNonce, 575 'Content-Type': 'application/json' 576 } 577 }) 572 578 .then((response) => response.json()) 573 579 .then((data) => {
Note: See TracChangeset
for help on using the changeset viewer.