From cf4d38276b50ffe8fac33ba1be31f4f4d0b91434 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sun, 20 Nov 2016 10:43:18 +0000 Subject: [PATCH] Replace vulcanize process with loose files It's a lot easier to debug, but may have reduced startup performance. Closes #682. --- CMakeLists.txt | 5 +- README.md | 2 +- package.json | 4 +- resources/l10n/template.pot | 298 +++++++++++----------- scripts/archive.js | 13 +- scripts/build_ui.js | 104 ++++++++ scripts/installer.iss | 8 +- scripts/vulcanize.js | 92 ------- src/gui/html/elements/editable-table.html | 10 +- src/gui/html/index.html | 8 +- src/gui/html/js/translateStaticText.js | 41 ++- 11 files changed, 304 insertions(+), 281 deletions(-) create mode 100644 scripts/build_ui.js delete mode 100755 scripts/vulcanize.js diff --git a/CMakeLists.txt b/CMakeLists.txt index 62479c9c..fbc98867 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -524,9 +524,10 @@ add_custom_command(TARGET LOOT POST_BUILD $/resources/ui/fonts/${font}) ENDFOREACH() -# Run Vulcanize to build the UI HTML. +# Build the UI HTML. add_custom_command(TARGET LOOT POST_BUILD - COMMAND "node" "${CMAKE_SOURCE_DIR}/scripts/vulcanize.js" ${CMAKE_SOURCE_DIR}) + COMMAND "node" "${CMAKE_SOURCE_DIR}/scripts/build_ui.js" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # Copy testing metadata ExternalProject_Get_Property(testing-metadata SOURCE_DIR) diff --git a/README.md b/README.md index 7ea0d132..d285a86f 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ You may also need to set `BOOST_ROOT` if CMake cannot find Boost. ### Rebuilding the HTML UI -The GUI's HTML file is automatically built when building the LOOT GUI binary, but it can also be built by running `node scripts/vulcanize.js` from the repository root. +The GUI's HTML file is automatically built when building the LOOT GUI binary, but it can also be built by running `node scripts/build_ui.js` from the repository root. ## Building The Documentation diff --git a/package.json b/package.json index 74367baf..1f5bd538 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "private": true, "dependencies": { "fs-extra": "^0.30.0", - "replace": "^0.3.0", - "vulcanize": "^1.14.5" + "hydrolysis": "^1.24.1", + "replace": "^0.3.0" }, "devDependencies": { "bower": "^1.7.1", diff --git a/resources/l10n/template.pot b/resources/l10n/template.pot index 4685f7f8..5495a573 100644 --- a/resources/l10n/template.pot +++ b/resources/l10n/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: LOOT 0.10.0\n" "Report-Msgid-Bugs-To: https://github.com/loot/loot/issues\n" -"POT-Creation-Date: 2016-11-19 11:59+0000\n" +"POT-Creation-Date: 2016-11-20 10:46+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -75,7 +75,7 @@ msgstr "" msgid "The load order has been copied to the clipboard." msgstr "" -#: src/gui/html/js/events.js:267 src/gui/html/js/translateStaticText.js:195 +#: src/gui/html/js/events.js:267 src/gui/html/js/translateStaticText.js:214 msgid "Quit" msgstr "" @@ -96,497 +96,497 @@ msgid "N/A" msgstr "" #: src/gui/html/js/handlePromiseError.js:15 -#: src/gui/html/js/translateStaticText.js:115 +#: src/gui/html/js/translateStaticText.js:134 msgid "Error" msgstr "" -#: src/gui/html/js/translateStaticText.js:17 +#: src/gui/html/js/translateStaticText.js:36 msgid "Active Plugin" msgstr "" -#: src/gui/html/js/translateStaticText.js:18 -#: src/gui/html/js/translateStaticText.js:264 +#: src/gui/html/js/translateStaticText.js:37 +#: src/gui/html/js/translateStaticText.js:283 msgid "Master File" msgstr "" -#: src/gui/html/js/translateStaticText.js:19 +#: src/gui/html/js/translateStaticText.js:38 msgid "Empty Plugin" msgstr "" -#: src/gui/html/js/translateStaticText.js:20 +#: src/gui/html/js/translateStaticText.js:39 msgid "Loads Archive" msgstr "" -#: src/gui/html/js/translateStaticText.js:21 -#: src/gui/html/js/translateStaticText.js:89 +#: src/gui/html/js/translateStaticText.js:40 +#: src/gui/html/js/translateStaticText.js:108 msgid "Has User Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:23 +#: src/gui/html/js/translateStaticText.js:42 msgid "Edit Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:24 +#: src/gui/html/js/translateStaticText.js:43 msgid "Copy Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:25 +#: src/gui/html/js/translateStaticText.js:44 msgid "Clear User Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:32 +#: src/gui/html/js/translateStaticText.js:51 msgid "Enable Edits" msgstr "" -#: src/gui/html/js/translateStaticText.js:33 -#: src/gui/html/js/translateStaticText.js:88 +#: src/gui/html/js/translateStaticText.js:52 +#: src/gui/html/js/translateStaticText.js:107 msgid "Priority" msgstr "" -#: src/gui/html/js/translateStaticText.js:34 -#: src/gui/html/js/translateStaticText.js:87 +#: src/gui/html/js/translateStaticText.js:53 +#: src/gui/html/js/translateStaticText.js:106 msgid "Global Priority" msgstr "" -#: src/gui/html/js/translateStaticText.js:36 +#: src/gui/html/js/translateStaticText.js:55 msgid "Main" msgstr "" -#: src/gui/html/js/translateStaticText.js:37 +#: src/gui/html/js/translateStaticText.js:56 msgid "Load After" msgstr "" -#: src/gui/html/js/translateStaticText.js:38 +#: src/gui/html/js/translateStaticText.js:57 msgid "Requirements" msgstr "" -#: src/gui/html/js/translateStaticText.js:39 +#: src/gui/html/js/translateStaticText.js:58 msgid "Incompatibilities" msgstr "" -#: src/gui/html/js/translateStaticText.js:40 +#: src/gui/html/js/translateStaticText.js:59 msgid "Messages" msgstr "" -#: src/gui/html/js/translateStaticText.js:41 +#: src/gui/html/js/translateStaticText.js:60 msgid "Bash Tags" msgstr "" -#: src/gui/html/js/translateStaticText.js:42 +#: src/gui/html/js/translateStaticText.js:61 msgid "Dirty Plugin Info" msgstr "" -#: src/gui/html/js/translateStaticText.js:43 +#: src/gui/html/js/translateStaticText.js:62 msgid "Clean Plugin Info" msgstr "" -#: src/gui/html/js/translateStaticText.js:44 +#: src/gui/html/js/translateStaticText.js:63 msgid "Locations" msgstr "" -#: src/gui/html/js/translateStaticText.js:46 -#: src/gui/html/js/translateStaticText.js:50 -#: src/gui/html/js/translateStaticText.js:54 +#: src/gui/html/js/translateStaticText.js:65 +#: src/gui/html/js/translateStaticText.js:69 +#: src/gui/html/js/translateStaticText.js:73 msgid "Filename" msgstr "" -#: src/gui/html/js/translateStaticText.js:47 -#: src/gui/html/js/translateStaticText.js:51 -#: src/gui/html/js/translateStaticText.js:55 +#: src/gui/html/js/translateStaticText.js:66 +#: src/gui/html/js/translateStaticText.js:70 +#: src/gui/html/js/translateStaticText.js:74 msgid "Display Name" msgstr "" -#: src/gui/html/js/translateStaticText.js:48 -#: src/gui/html/js/translateStaticText.js:52 -#: src/gui/html/js/translateStaticText.js:56 -#: src/gui/html/js/translateStaticText.js:60 -#: src/gui/html/js/translateStaticText.js:65 +#: src/gui/html/js/translateStaticText.js:67 +#: src/gui/html/js/translateStaticText.js:71 +#: src/gui/html/js/translateStaticText.js:75 +#: src/gui/html/js/translateStaticText.js:79 +#: src/gui/html/js/translateStaticText.js:84 msgid "Condition" msgstr "" -#: src/gui/html/js/translateStaticText.js:58 +#: src/gui/html/js/translateStaticText.js:77 msgid "Type" msgstr "" -#: src/gui/html/js/translateStaticText.js:59 +#: src/gui/html/js/translateStaticText.js:78 msgid "Content" msgstr "" -#: src/gui/html/js/translateStaticText.js:61 -#: src/gui/html/js/translateStaticText.js:252 +#: src/gui/html/js/translateStaticText.js:80 +#: src/gui/html/js/translateStaticText.js:271 msgid "Language" msgstr "" -#: src/gui/html/js/translateStaticText.js:63 +#: src/gui/html/js/translateStaticText.js:82 msgid "Add/Remove" msgstr "" -#: src/gui/html/js/translateStaticText.js:64 +#: src/gui/html/js/translateStaticText.js:83 msgid "Bash Tag" msgstr "" -#: src/gui/html/js/translateStaticText.js:67 -#: src/gui/html/js/translateStaticText.js:73 +#: src/gui/html/js/translateStaticText.js:86 +#: src/gui/html/js/translateStaticText.js:92 msgid "CRC" msgstr "" -#: src/gui/html/js/translateStaticText.js:68 +#: src/gui/html/js/translateStaticText.js:87 msgid "ITM Count" msgstr "" -#: src/gui/html/js/translateStaticText.js:69 +#: src/gui/html/js/translateStaticText.js:88 msgid "Deleted References" msgstr "" -#: src/gui/html/js/translateStaticText.js:70 +#: src/gui/html/js/translateStaticText.js:89 msgid "Deleted Navmeshes" msgstr "" -#: src/gui/html/js/translateStaticText.js:71 -#: src/gui/html/js/translateStaticText.js:74 +#: src/gui/html/js/translateStaticText.js:90 +#: src/gui/html/js/translateStaticText.js:93 msgid "Cleaning Utility" msgstr "" -#: src/gui/html/js/translateStaticText.js:76 +#: src/gui/html/js/translateStaticText.js:95 msgid "URL" msgstr "" -#: src/gui/html/js/translateStaticText.js:77 -#: src/gui/html/js/translateStaticText.js:261 +#: src/gui/html/js/translateStaticText.js:96 +#: src/gui/html/js/translateStaticText.js:280 msgid "Name" msgstr "" -#: src/gui/html/js/translateStaticText.js:79 +#: src/gui/html/js/translateStaticText.js:98 msgid "Save Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:80 -#: src/gui/html/js/translateStaticText.js:98 -#: src/gui/html/js/translateStaticText.js:182 -#: src/gui/html/js/translateStaticText.js:275 +#: src/gui/html/js/translateStaticText.js:99 +#: src/gui/html/js/translateStaticText.js:117 +#: src/gui/html/js/translateStaticText.js:201 +#: src/gui/html/js/translateStaticText.js:294 msgid "Cancel" msgstr "" -#: src/gui/html/js/translateStaticText.js:90 +#: src/gui/html/js/translateStaticText.js:109 msgid "Editor Is Open" msgstr "" -#: src/gui/html/js/translateStaticText.js:97 -#: src/gui/html/js/translateStaticText.js:289 +#: src/gui/html/js/translateStaticText.js:116 +#: src/gui/html/js/translateStaticText.js:308 msgid "OK" msgstr "" -#: src/gui/html/js/translateStaticText.js:105 +#: src/gui/html/js/translateStaticText.js:124 msgid "A filename is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:106 -#: src/gui/html/js/translateStaticText.js:117 -#: src/gui/html/js/translateStaticText.js:127 -#: src/gui/html/js/translateStaticText.js:139 -#: src/gui/html/js/translateStaticText.js:148 -#: src/gui/html/js/translateStaticText.js:156 -#: src/gui/html/js/translateStaticText.js:165 +#: src/gui/html/js/translateStaticText.js:125 +#: src/gui/html/js/translateStaticText.js:136 +#: src/gui/html/js/translateStaticText.js:146 +#: src/gui/html/js/translateStaticText.js:158 +#: src/gui/html/js/translateStaticText.js:167 +#: src/gui/html/js/translateStaticText.js:175 +#: src/gui/html/js/translateStaticText.js:184 msgid "Delete Row" msgstr "" -#: src/gui/html/js/translateStaticText.js:113 +#: src/gui/html/js/translateStaticText.js:132 msgid "Note" msgstr "" -#: src/gui/html/js/translateStaticText.js:114 +#: src/gui/html/js/translateStaticText.js:133 msgid "Warning" msgstr "" -#: src/gui/html/js/translateStaticText.js:116 +#: src/gui/html/js/translateStaticText.js:135 msgid "A content string is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:124 +#: src/gui/html/js/translateStaticText.js:143 msgid "Add" msgstr "" -#: src/gui/html/js/translateStaticText.js:125 +#: src/gui/html/js/translateStaticText.js:144 msgid "Remove" msgstr "" -#: src/gui/html/js/translateStaticText.js:126 -#: src/gui/html/js/translateStaticText.js:163 +#: src/gui/html/js/translateStaticText.js:145 +#: src/gui/html/js/translateStaticText.js:182 msgid "A name is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:134 -#: src/gui/html/js/translateStaticText.js:146 +#: src/gui/html/js/translateStaticText.js:153 +#: src/gui/html/js/translateStaticText.js:165 msgid "A CRC is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:135 -#: src/gui/html/js/translateStaticText.js:136 -#: src/gui/html/js/translateStaticText.js:137 +#: src/gui/html/js/translateStaticText.js:154 +#: src/gui/html/js/translateStaticText.js:155 +#: src/gui/html/js/translateStaticText.js:156 msgid "Values must be integers." msgstr "" -#: src/gui/html/js/translateStaticText.js:138 -#: src/gui/html/js/translateStaticText.js:147 +#: src/gui/html/js/translateStaticText.js:157 +#: src/gui/html/js/translateStaticText.js:166 msgid "A utility name is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:155 +#: src/gui/html/js/translateStaticText.js:174 msgid "A link is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:164 +#: src/gui/html/js/translateStaticText.js:183 msgid "A folder is required." msgstr "" -#: src/gui/html/js/translateStaticText.js:172 -#: src/gui/html/js/translateStaticText.js:272 +#: src/gui/html/js/translateStaticText.js:191 +#: src/gui/html/js/translateStaticText.js:291 msgid "Add New Row" msgstr "" -#: src/gui/html/js/translateStaticText.js:178 +#: src/gui/html/js/translateStaticText.js:197 msgid "Jump To General Information" msgstr "" -#: src/gui/html/js/translateStaticText.js:179 +#: src/gui/html/js/translateStaticText.js:198 msgid "Sort Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:180 +#: src/gui/html/js/translateStaticText.js:199 msgid "Update Masterlist" msgstr "" -#: src/gui/html/js/translateStaticText.js:181 -#: src/gui/html/js/translateStaticText.js:274 +#: src/gui/html/js/translateStaticText.js:200 +#: src/gui/html/js/translateStaticText.js:293 msgid "Apply" msgstr "" -#: src/gui/html/js/translateStaticText.js:183 +#: src/gui/html/js/translateStaticText.js:202 msgid "Search Cards" msgstr "" -#: src/gui/html/js/translateStaticText.js:186 +#: src/gui/html/js/translateStaticText.js:205 msgid "Redate Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:187 +#: src/gui/html/js/translateStaticText.js:206 msgid "Open Debug Log Location" msgstr "" -#: src/gui/html/js/translateStaticText.js:188 +#: src/gui/html/js/translateStaticText.js:207 msgid "Clear All User Metadata" msgstr "" -#: src/gui/html/js/translateStaticText.js:189 +#: src/gui/html/js/translateStaticText.js:208 msgid "Copy Load Order" msgstr "" -#: src/gui/html/js/translateStaticText.js:190 +#: src/gui/html/js/translateStaticText.js:209 msgid "Copy Content" msgstr "" -#: src/gui/html/js/translateStaticText.js:191 +#: src/gui/html/js/translateStaticText.js:210 msgid "Refresh Content" msgstr "" -#: src/gui/html/js/translateStaticText.js:192 +#: src/gui/html/js/translateStaticText.js:211 msgid "View Documentation" msgstr "" -#: src/gui/html/js/translateStaticText.js:193 +#: src/gui/html/js/translateStaticText.js:212 msgid "About" msgstr "" -#: src/gui/html/js/translateStaticText.js:194 -#: src/gui/html/js/translateStaticText.js:244 +#: src/gui/html/js/translateStaticText.js:213 +#: src/gui/html/js/translateStaticText.js:263 msgid "Settings" msgstr "" -#: src/gui/html/js/translateStaticText.js:198 +#: src/gui/html/js/translateStaticText.js:217 msgid "Search cards" msgstr "" -#: src/gui/html/js/translateStaticText.js:203 +#: src/gui/html/js/translateStaticText.js:222 msgid "Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:204 +#: src/gui/html/js/translateStaticText.js:223 msgid "Filters" msgstr "" -#: src/gui/html/js/translateStaticText.js:205 +#: src/gui/html/js/translateStaticText.js:224 msgid "Press Enter or click outside the input to set the filter." msgstr "" -#: src/gui/html/js/translateStaticText.js:206 +#: src/gui/html/js/translateStaticText.js:225 msgid "Show only plugins with cards that contain" msgstr "" -#: src/gui/html/js/translateStaticText.js:207 +#: src/gui/html/js/translateStaticText.js:226 msgid "No text specified" msgstr "" -#: src/gui/html/js/translateStaticText.js:210 +#: src/gui/html/js/translateStaticText.js:229 msgid "Hide version numbers" msgstr "" -#: src/gui/html/js/translateStaticText.js:211 +#: src/gui/html/js/translateStaticText.js:230 msgid "Hide CRCs" msgstr "" -#: src/gui/html/js/translateStaticText.js:212 +#: src/gui/html/js/translateStaticText.js:231 msgid "Hide Bash Tags" msgstr "" -#: src/gui/html/js/translateStaticText.js:213 +#: src/gui/html/js/translateStaticText.js:232 msgid "Hide notes" msgstr "" -#: src/gui/html/js/translateStaticText.js:214 +#: src/gui/html/js/translateStaticText.js:233 msgid "Hide 'Do not clean' messages" msgstr "" -#: src/gui/html/js/translateStaticText.js:215 +#: src/gui/html/js/translateStaticText.js:234 msgid "Hide all plugin messages" msgstr "" -#: src/gui/html/js/translateStaticText.js:216 +#: src/gui/html/js/translateStaticText.js:235 msgid "Hide inactive plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:217 +#: src/gui/html/js/translateStaticText.js:236 msgid "Hide messageless plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:220 +#: src/gui/html/js/translateStaticText.js:239 msgid "Show only conflicting plugins for" msgstr "" -#: src/gui/html/js/translateStaticText.js:221 +#: src/gui/html/js/translateStaticText.js:240 msgid "No plugin selected" msgstr "" -#: src/gui/html/js/translateStaticText.js:225 +#: src/gui/html/js/translateStaticText.js:244 msgid "Hidden plugins:" msgstr "" -#: src/gui/html/js/translateStaticText.js:226 +#: src/gui/html/js/translateStaticText.js:245 msgid "Hidden messages:" msgstr "" -#: src/gui/html/js/translateStaticText.js:231 +#: src/gui/html/js/translateStaticText.js:250 msgid "General Information" msgstr "" -#: src/gui/html/js/translateStaticText.js:232 +#: src/gui/html/js/translateStaticText.js:251 msgid "Masterlist Revision" msgstr "" -#: src/gui/html/js/translateStaticText.js:233 +#: src/gui/html/js/translateStaticText.js:252 msgid "Masterlist Date" msgstr "" -#: src/gui/html/js/translateStaticText.js:234 +#: src/gui/html/js/translateStaticText.js:253 msgid "Warnings" msgstr "" -#: src/gui/html/js/translateStaticText.js:235 +#: src/gui/html/js/translateStaticText.js:254 msgid "Errors" msgstr "" -#: src/gui/html/js/translateStaticText.js:236 +#: src/gui/html/js/translateStaticText.js:255 msgid "Total Messages" msgstr "" -#: src/gui/html/js/translateStaticText.js:237 +#: src/gui/html/js/translateStaticText.js:256 msgid "Active Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:238 +#: src/gui/html/js/translateStaticText.js:257 msgid "Dirty Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:239 +#: src/gui/html/js/translateStaticText.js:258 msgid "Total Plugins" msgstr "" -#: src/gui/html/js/translateStaticText.js:247 +#: src/gui/html/js/translateStaticText.js:266 msgid "Default Game" msgstr "" -#: src/gui/html/js/translateStaticText.js:248 +#: src/gui/html/js/translateStaticText.js:267 msgid "Autodetect" msgstr "" -#: src/gui/html/js/translateStaticText.js:253 +#: src/gui/html/js/translateStaticText.js:272 msgid "Language changes will be applied after LOOT is restarted." msgstr "" -#: src/gui/html/js/translateStaticText.js:255 +#: src/gui/html/js/translateStaticText.js:274 msgid "Enable debug logging" msgstr "" -#: src/gui/html/js/translateStaticText.js:256 +#: src/gui/html/js/translateStaticText.js:275 msgid "The output is logged to the LOOTDebugLog.txt file." msgstr "" -#: src/gui/html/js/translateStaticText.js:258 +#: src/gui/html/js/translateStaticText.js:277 msgid "Update masterlist before sorting" msgstr "" -#: src/gui/html/js/translateStaticText.js:262 +#: src/gui/html/js/translateStaticText.js:281 msgid "Base Game" msgstr "" -#: src/gui/html/js/translateStaticText.js:263 +#: src/gui/html/js/translateStaticText.js:282 msgid "LOOT Folder" msgstr "" -#: src/gui/html/js/translateStaticText.js:265 +#: src/gui/html/js/translateStaticText.js:284 msgid "Masterlist Repository URL" msgstr "" -#: src/gui/html/js/translateStaticText.js:266 +#: src/gui/html/js/translateStaticText.js:285 msgid "Masterlist Repository Branch" msgstr "" -#: src/gui/html/js/translateStaticText.js:267 +#: src/gui/html/js/translateStaticText.js:286 msgid "Install Path" msgstr "" -#: src/gui/html/js/translateStaticText.js:268 +#: src/gui/html/js/translateStaticText.js:287 msgid "Install Path Registry Key" msgstr "" -#: src/gui/html/js/translateStaticText.js:281 +#: src/gui/html/js/translateStaticText.js:300 msgid "First-Time Tips" msgstr "" -#: src/gui/html/js/translateStaticText.js:283 +#: src/gui/html/js/translateStaticText.js:302 msgid "" "CRCs are only displayed after plugins have been loaded, either by conflict " "filtering, or by sorting." msgstr "" -#: src/gui/html/js/translateStaticText.js:284 +#: src/gui/html/js/translateStaticText.js:303 msgid "" "Double-click a plugin in the sidebar to quickly open it in the metadata " "editor." msgstr "" -#: src/gui/html/js/translateStaticText.js:285 +#: src/gui/html/js/translateStaticText.js:304 msgid "" "Plugins can be drag and dropped from the sidebar into the metadata editor's " "\"load after\", \"requirements\" and \"incompatibility\" tables." msgstr "" -#: src/gui/html/js/translateStaticText.js:286 +#: src/gui/html/js/translateStaticText.js:305 msgid "" "Some features are disabled while the metadata editor is open, or while there " "is a sorted load order that has not been applied or discarded." msgstr "" -#: src/gui/html/js/translateStaticText.js:287 +#: src/gui/html/js/translateStaticText.js:306 msgid "" "Many interface elements have tooltips. If you don't know what something is, " "try hovering your mouse over it to find out. Otherwise, LOOT's documentation " diff --git a/scripts/archive.js b/scripts/archive.js index 93b4a6a2..da54b353 100644 --- a/scripts/archive.js +++ b/scripts/archive.js @@ -140,18 +140,9 @@ function createAppArchive(rootPath, releasePath, tempPath, destPath) { }); // UI files. - fs.mkdirsSync(path.join(tempPath, 'resources', 'ui', 'css')); fs.copySync( - path.join(releasePath, 'resources', 'ui', 'index.html'), - path.join(tempPath, 'resources', 'ui', 'index.html') - ); - fs.copySync( - path.join(rootPath, 'resources', 'ui', 'css', 'dark-theme.css'), - path.join(tempPath, 'resources', 'ui', 'css', 'dark-theme.css') - ); - fs.copySync( - path.join(rootPath, 'resources', 'ui', 'fonts'), - path.join(tempPath, 'resources', 'ui', 'fonts') + path.join(releasePath, 'resources', 'ui'), + path.join(tempPath, 'resources', 'ui') ); // Documentation. diff --git a/scripts/build_ui.js b/scripts/build_ui.js new file mode 100644 index 00000000..f31e45d0 --- /dev/null +++ b/scripts/build_ui.js @@ -0,0 +1,104 @@ +'use strict'; +const helpers = require('./helpers'); +const hyd = require('hydrolysis'); +const fs = require('fs-extra'); +const path = require('path'); + +function getHtmlImports(filePath) { + return hyd.Analyzer.analyze(filePath).then((analyzer) => + analyzer._getDependencies(filePath) + ); +} + +function isString(variable) { + return typeof variable === 'string' || variable instanceof String; +} + +function flattenUnique(array) { + const results = new Set(); + array.forEach((element) => { + if (isString(element)) { + results.add(element); + } else if (element) { + flattenUnique(element).forEach((subelement) => { + results.add(subelement); + }); + } + }); + return results; +} + +function getRecursiveHtmlImports(filePath, imports) { + return getHtmlImports(filePath).then((paths) => + Promise.all(paths.map((dependency) => { + if (imports.has(dependency)) { + return null; + } + imports.add(dependency); + return getRecursiveHtmlImports(dependency, imports); + })) + ).then((results) => { + flattenUnique(results).forEach((dependency) => { + imports.add(dependency); + }); + + return imports; + }); +} + +function getJavaScriptSources(filePath) { + return hyd.Analyzer.analyze(filePath).then((analyzer) => + Object.keys(analyzer.parsedScripts).filter((script) => + script.endsWith('.js') + ) + ); +} + +function getRelativePath(filePath) { + if (filePath.startsWith('src/gui/html/')) { + return filePath.substring(13); + } + return filePath; +} + +function normalisePaths(html) { + return html.replace(/href="(\.\.\/){3}/g, 'href="') + .replace(/src="(\.\.\/){3}/g, 'src="'); +} + +function copyNormalisedFile(sourceFile, destinationFile) { + const html = fs.readFileSync(sourceFile, { encoding: 'utf8' }); + fs.mkdirs(path.dirname(destinationFile)); + fs.writeFileSync(destinationFile, normalisePaths(html)); +} + +function copyFiles(pathsPromise, destinationRootPath) { + pathsPromise.then((paths) => { + paths.forEach((filePath) => { + const destinationPath = `${destinationRootPath}/${getRelativePath(filePath)}`; + if (filePath.includes('bower_components')) { + fs.copySync(filePath, destinationPath); + } else { + copyNormalisedFile(filePath, destinationPath); + } + }); + }); +} + +helpers.getAppReleasePaths('.').forEach(releasePath => { + const index = 'src/gui/html/index.html'; + const destinationRootPath = `${releasePath.path}/resources/ui`; + const imports = new Set(); + + copyFiles(getRecursiveHtmlImports(index, imports), destinationRootPath); + copyFiles(getJavaScriptSources(index), destinationRootPath); + fs.copySync('src/gui/html/css', `${destinationRootPath}/css`); + fs.copySync('resources/ui/css/dark-theme.css', `${destinationRootPath}/css/dark-theme.css`); + fs.copySync('resources/ui/fonts', `${destinationRootPath}/fonts`); + copyNormalisedFile(index, `${destinationRootPath}/index.html`); + + // This is the only JS file referenced by a HTML import (neon-animation), + // so just hardcode it instead of recursively searching for it. + const webAnimationsJs = 'bower_components/web-animations-js/web-animations-next-lite.min.js'; + fs.copySync(webAnimationsJs, `${destinationRootPath}/${webAnimationsJs}`); +}); diff --git a/scripts/installer.iss b/scripts/installer.iss index a462e384..0575e0ac 100644 --- a/scripts/installer.iss +++ b/scripts/installer.iss @@ -105,12 +105,8 @@ DestDir: "{app}\resources\l10n"; Flags: ignoreversion Source: "{#buildir}\docs\html\*"; \ DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs -Source: "{#buildir}\Release\resources\ui\index.html"; \ -DestDir: "{app}\resources\ui"; Flags: ignoreversion -Source: "resources\ui\css\dark-theme.css"; \ -DestDir: "{app}\resources\ui\css"; Flags: ignoreversion -Source: "resources\ui\fonts\*"; \ -DestDir: "{app}\resources\ui\fonts"; Flags: ignoreversion +Source: "{#buildir}\Release\resources\ui\*"; \ +DestDir: "{app}\resources\ui"; Flags: ignoreversion recursesubdirs Source: "resources\l10n\da\LC_MESSAGES\loot.mo"; \ DestDir: "{app}\resources\l10n\da\LC_MESSAGES"; Flags: ignoreversion diff --git a/scripts/vulcanize.js b/scripts/vulcanize.js deleted file mode 100755 index 60895f7c..00000000 --- a/scripts/vulcanize.js +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env node -// Build the UI's index.html file. Takes one argument, which is the path to the -// repository's root. - -/* eslint-disable no-unused-vars */ -'use strict'; -const path = require('path'); -const fs = require('fs'); -const helpers = require('./helpers'); -const Vulcanize = require('vulcanize'); -const mkdirp = require('mkdirp'); - -// Initialise from command line parameters. -let rootPath = '.'; -let buildType = 'ui'; -if (process.argv.length > 3) { - rootPath = process.argv[2]; - buildType = process.argv[3]; -} else if (process.argv.length > 2) { - rootPath = process.argv[2]; -} - -const vulcanize = new Vulcanize({ - inlineScripts: true, - inlineCss: true, - excludes: [ - 'css/theme.css', - ], -}); - -function mkdir(dir) { - try { - mkdirp.sync(dir); - } catch (e) { - if (e.code !== 'EEXIST') { - console.log(e); - } - } -} - -function vulcanizeFile(inputPath, outputPath) { - // Make sure output directory exists first. - mkdir(path.dirname(outputPath)); - - vulcanize.process(inputPath, (err, inlinedHtml) => { - if (err) { - console.error(err); - process.exit(1); - } - - fs.writeFileSync(outputPath, inlinedHtml); - }); -} - -function vulcanizeRelease(releasePath) { - const inputPath = path.join(rootPath, 'src', 'gui', 'html', 'index.html'); - const outputPath = path.join(releasePath.path, 'resources', 'ui', 'index.html'); - - vulcanizeFile(inputPath, outputPath); -} - -function vulcanizeTests(releasePath) { - const inputPath = path.join(rootPath, 'src', 'tests', 'gui', 'html', 'elements'); - const outputPath = path.join(releasePath.path, 'html_tests', 'elements'); - - const tests = [ - 'test_editable-table.html', - 'test_loot-custom-icons.html', - 'test_loot-dropdown-menu.html', - 'test_loot-menu.html', - 'test_loot-message-dialog.html', - 'test_loot-plugin-card.html', - 'test_loot-plugin-editor.html', - 'test_loot-plugin-item.html', - 'test_loot-search-toolbar.html', - ]; - - tests.forEach((test) => { - vulcanizeFile(path.join(inputPath, test), path.join(outputPath, test)); - }); -} - -// Run the appropriate build(s). -const releasePaths = helpers.getAppReleasePaths(rootPath); - -if (buildType === 'ui' || buildType === 'all') { - releasePaths.forEach(vulcanizeRelease); -} - -if (buildType === 'tests' || buildType === 'all') { - releasePaths.forEach(vulcanizeTests); -} diff --git a/src/gui/html/elements/editable-table.html b/src/gui/html/elements/editable-table.html index 598708fe..c7ecf2ee 100644 --- a/src/gui/html/elements/editable-table.html +++ b/src/gui/html/elements/editable-table.html @@ -188,13 +188,19 @@