|
5 | 5 | requireConfirmation: false, |
6 | 6 | }; |
7 | 7 |
|
| 8 | + var objID = null; |
| 9 | + var objType = null; |
| 10 | + |
8 | 11 | // helper function to get the innerText of all elements matching a selector |
9 | 12 | const getAllInnerText = (selector) => Array.from(document.querySelectorAll(selector)) |
10 | 13 | .map((el) => el.innerText.trim()) |
11 | 14 | .filter((text) => text !== ""); |
12 | 15 |
|
13 | 16 | // On image page, get data about gallery (image's position within gallery, next/prev image IDs), |
14 | 17 | // add arrow buttons to page, and register arrow keypress handlers, |
15 | | - async function setupTagCopyPaste(objType) { |
| 18 | + async function setupTagCopyPaste(objTypeTriggered) { |
16 | 19 | // Get plugin settings. |
17 | 20 | const configSettings = await csLib.getConfiguration("tagCopyPaste", {}); // getConfiguration is from cs-ui-lib.js |
18 | 21 | pluginSettings = { |
19 | 22 | ...defaultPluginSettings, |
20 | 23 | ...configSettings, |
21 | 24 | }; |
22 | 25 |
|
23 | | - var objID = window.location.pathname.split("/")[2]; |
| 26 | + objID = window.location.pathname.split("/")[2]; |
| 27 | + objType = objTypeTriggered; |
24 | 28 |
|
25 | 29 | // Add UI elements. |
26 | 30 | if (objID !== "new") { |
27 | | - insertCopyPasteButtons(objID, objType); |
| 31 | + insertCopyPasteButtons(); |
28 | 32 | } |
29 | 33 | } |
30 | 34 |
|
31 | | - function insertCopyPasteButtons(objID, objType) { |
| 35 | + function copyEventHandler(event) { |
| 36 | + event.preventDefault(); |
| 37 | + handleCopyClick(); |
| 38 | + } |
| 39 | + |
| 40 | + function pasteEventHandler(event) { |
| 41 | + event.preventDefault(); |
| 42 | + handlePasteClick(); |
| 43 | + } |
| 44 | + |
| 45 | + function insertCopyPasteButtons() { |
32 | 46 | // listen for copy and paste events within tag input box |
33 | 47 | // find tag input box |
34 | 48 | const tagInputBox = document.querySelector("label[for='tag_ids'] + div .react-select__value-container"); |
35 | 49 | if (tagInputBox) { |
36 | | - tagInputBox.addEventListener("copy", (event) => { |
37 | | - event.preventDefault(); |
38 | | - handleCopyClick(); |
39 | | - }); |
40 | | - tagInputBox.addEventListener("paste", (event) => { |
41 | | - event.preventDefault(); |
42 | | - handlePasteClick(objID, objType); |
43 | | - }); |
| 50 | + tagInputBox.removeEventListener("copy", copyEventHandler); |
| 51 | + tagInputBox.removeEventListener("paste", pasteEventHandler); |
| 52 | + tagInputBox.addEventListener("copy", copyEventHandler); |
| 53 | + tagInputBox.addEventListener("paste", pasteEventHandler); |
44 | 54 | } |
45 | 55 |
|
46 | 56 | var copyButton = document.createElement("button"); |
|
56 | 66 | pasteButton.innerText = "Paste"; |
57 | 67 | pasteButton.onclick = (event) => { |
58 | 68 | event.preventDefault(); |
59 | | - handlePasteClick(objID, objType); |
| 69 | + handlePasteClick(); |
60 | 70 | } |
61 | 71 |
|
62 | 72 | if (document.querySelector("button.imageGalleryNav-pasteButton") == null) { |
|
77 | 87 | } |
78 | 88 |
|
79 | 89 | // Handle paste click. |
80 | | - async function handlePasteClick(objID, objType) { |
| 90 | + async function handlePasteClick() { |
81 | 91 | // Parse tag list from comma delimited string. |
82 | 92 | const tagInput = await navigator.clipboard.readText(); |
83 | 93 | var inputTagList = tagInput.split(/\r?\n|\r|,/).map(s => s.trim()).filter((text) => text !== "") // do de-duplication later |
|
123 | 133 |
|
124 | 134 | // Update tags on object with new tag ID list. |
125 | 135 | await updateObjTags( |
126 | | - objID, |
127 | 136 | tagUpdateList, |
128 | 137 | `${objType.toLowerCase()}Update`, |
129 | 138 | `${objType}UpdateInput` |
|
135 | 144 | // *** GQL Calls *** |
136 | 145 |
|
137 | 146 | // Update Object by ID, new tags list, and GQL mutation name. |
138 | | - async function updateObjTags(objID, tags, fnName, inputName) { |
| 147 | + async function updateObjTags(tags, fnName, inputName) { |
139 | 148 | const variables = { input: { id: objID, tag_ids: tags } }; |
140 | 149 | const query = `mutation UpdateObj($input:${inputName}!) { ${fnName}(input: $input) {id} }`; |
141 | 150 | return await csLib.callGQL({ query, variables }); |
|
173 | 182 | [ "/performers/", "[id='performer-edit']", "Performer" ], |
174 | 183 | [ "/galleries/", "[id*='-edit-details']", "Gallery" ], |
175 | 184 | [ "/images/", "[id*='-edit-details']", "Image" ] |
176 | | - ].forEach(([path, selector, objType]) => { |
| 185 | + ].forEach(([path, selector, objTypeTriggered]) => { |
177 | 186 | // Wait for the page to load and the element to be present. |
178 | 187 | csLib.PathElementListener(path, selector, () => { |
179 | | - setupTagCopyPaste(objType); |
| 188 | + setupTagCopyPaste(objTypeTriggered); |
180 | 189 | }); // PathElementListener is from cs-ui-lib.js |
181 | 190 | }); |
182 | 191 | })(); |
0 commit comments