From e54a1988d6b7bb77701bbc4d83370db614a9a2b5 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Tue, 18 Nov 2014 21:00:45 +0000 Subject: [PATCH 01/14] Moved main menu to right side of app bar. --- resources/report/css/style.css | 2 +- resources/report/report.html | 38 +++++++++++++++++----------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/resources/report/css/style.css b/resources/report/css/style.css index 25ace30f..bb7a4c3c 100644 --- a/resources/report/css/style.css +++ b/resources/report/css/style.css @@ -40,7 +40,7 @@ body { color: black; } #sidebarTabs { - width: calc(33% - 68px); + width: calc(33% - 11px); } div[drawer] > core-tooltip { diff --git a/resources/report/report.html b/resources/report/report.html index e269ed7e..6596017b 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -41,9 +41,26 @@ + + + Plugins + Filters + + + + + + + + + + + + + - - + +
@@ -87,23 +104,6 @@
- - - Plugins - Filters - - - - - - - - - - - - -
From b5756c56b7ff9d655adc0c59a35038759729edd2 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Tue, 18 Nov 2014 21:50:57 +0000 Subject: [PATCH 02/14] Moved filter tabs into a separate sidebar toolbar. The sidebar content is now kept in a card too. --- resources/report/bower.json | 4 +- resources/report/css/overrides.css | 21 ++++- resources/report/css/style.css | 22 +---- resources/report/js/script.js | 4 - resources/report/report.html | 143 +++++++++++++++-------------- 5 files changed, 95 insertions(+), 99 deletions(-) diff --git a/resources/report/bower.json b/resources/report/bower.json index 717766b1..235d794c 100644 --- a/resources/report/bower.json +++ b/resources/report/bower.json @@ -32,6 +32,8 @@ "paper-progress": "Polymer/paper-progress#~0.5.0", "core-animated-pages": "Polymer/core-animated-pages#~0.5.1", "paper-toast": "Polymer/paper-toast#~0.5.1", - "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a" + "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a", + "core-header-panel": "Polymer/core-header-panel#~0.5.1", + "core-scaffold": "Polymer/core-scaffold#~0.5.1" } } diff --git a/resources/report/css/overrides.css b/resources/report/css/overrides.css index 17ab7e57..978b25a9 100644 --- a/resources/report/css/overrides.css +++ b/resources/report/css/overrides.css @@ -1,9 +1,22 @@ /* These styles override Polymer's own internal styling for certain elements. */ +/* The following is for the app and drawer bars. */ +core-toolbar, core-scaffold::shadow core-toolbar { + background: #4285f4; + color: white; + height: 56px; +} + /* The following is for setting the size of the drawer in narrow mode. */ -#container::shadow .narrow-layout #drawer { +html /deep/ .narrow-layout #drawer { width: 50% !important; - background: #f8f8f8; + background: white; +} + +/* Let the element stretch to fit the sidebar. */ +core-header-panel::shadow #mainContainer { + display: flex; + flex-direction: column; } /* These overrides change the colour of the game menu's text and underline. */ @@ -50,11 +63,11 @@ html /deep/ paper-item[disabled] { } /* These overrides change the colour of the tab ink effect and their underline. */ -#mainToolbar paper-tabs::shadow #selectionBar { +core-toolbar > paper-tabs::shadow #selectionBar { background-color: white; height: 4px; } -#mainToolbar paper-tab::shadow #ink { +core-toolbar paper-tab::shadow #ink { color: #f1f1f1; } diff --git a/resources/report/css/style.css b/resources/report/css/style.css index bb7a4c3c..e7c6da6e 100644 --- a/resources/report/css/style.css +++ b/resources/report/css/style.css @@ -30,18 +30,10 @@ body { background:#f8f8f8; height: 100%; } -#mainToolbar { - background: #4285f4; - color: white; - width: 99.99vw; /* Fix for scollbars when LOOT is run through Mod Organiser. */ - height: 56px; -} + #mainToolbar paper-dropdown { color: black; } -#sidebarTabs { - width: calc(33% - 11px); -} div[drawer] > core-tooltip { margin: 0 12px; @@ -73,6 +65,7 @@ paper-item > a { } #searchBox { display: block; + padding: 0 1em; } #container { position: fixed; @@ -224,14 +217,3 @@ paper-progress { #firstRun .tag { margin: 0; } - - -/* This animates the drawer toggle appearing in narrow view. */ -#drawerToggle { - display: none; -} -@media screen and (max-width: 640px) { - #drawerToggle { - display: block; - } -} \ No newline at end of file diff --git a/resources/report/js/script.js b/resources/report/js/script.js index a355e1af..b57f5df0 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -977,9 +977,6 @@ function handleClearMetadata(evt) { } }); } -function toggleDrawer(evt) { - document.getElementById('container').togglePanel(); -} function handleSidebarClick(evt) { if (evt.target.hasAttribute('data-index')) { window.location.hash = ''; @@ -1038,7 +1035,6 @@ function setupEventHandlers() { document.body.addEventListener('loot-copy-metadata', handleCopyMetadata, false); document.body.addEventListener('loot-clear-metadata', handleClearMetadata, false); - document.getElementById('drawerToggle').addEventListener('click', toggleDrawer, false); document.getElementById('cardsNav').addEventListener('click', handleSidebarClick, false); } function initVars() { diff --git a/resources/report/report.html b/resources/report/report.html index 6596017b..fb5c8ac7 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -19,9 +19,11 @@ + + @@ -39,74 +41,15 @@ - - - - - Plugins - Filters - - - - - - - - - - - - - - - - -
- - - Redate Plugins - - - - Clear All User Metadata - - - - Copy Content - - - - Refresh Content - - - - - Settings - - - - - View Documentation - - - - Open Debug Log Location - - - - About - - - - - Quit - -
-
-
-
- -
+ + + + + + Plugins + Filters + +
@@ -146,8 +89,68 @@ + +
+ + + + + + + + + + + + + + + +
+ + + Redate Plugins + + + + Clear All User Metadata + + + + Copy Content + + + + Refresh Content + + + + + Settings + + + + + View Documentation + + + + Open Debug Log Location + + + + About + + + + + Quit + +
+
+
-
+

Summary

@@ -215,7 +218,7 @@ - + From 4109f8b3caef9c3a391ee1ba9305a39f312114c9 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 19 Nov 2014 11:32:53 +0000 Subject: [PATCH 03/14] Started to redraw LOOT icon as SVG. Following the Material Design guidelines as best I can. --- resources/icon.svg | 282 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 resources/icon.svg diff --git a/resources/icon.svg b/resources/icon.svg new file mode 100644 index 00000000..617722af --- /dev/null +++ b/resources/icon.svg @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b8ce5b36dc32e57ea6a9eba823f5b1272abb33b4 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 19 Nov 2014 12:50:39 +0000 Subject: [PATCH 04/14] More progress on SVG icon. However, it looks rubbish when scaled down, so I'm going to try some things for that. --- resources/icon.svg | 417 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 350 insertions(+), 67 deletions(-) diff --git a/resources/icon.svg b/resources/icon.svg index 617722af..7a764b4d 100644 --- a/resources/icon.svg +++ b/resources/icon.svg @@ -18,6 +18,29 @@ sodipodi:docname="icon.svg"> + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + id="layer9" + inkscape:label="Lid Edge Shading & Tinting" + sodipodi:insensitive="true" + style="display:inline"> + + + + + + + + + + + + + + + + + + + + - - + style="fill:#bf360c;fill-opacity:0.17647059;stroke:none;display:inline" + id="rect3814-1" + width="12" + height="2" + x="112" + y="88" /> + + + + + + + Date: Wed, 19 Nov 2014 13:03:11 +0000 Subject: [PATCH 05/14] Fixed icon looking rubbish when scaled down. The yellow isn't a good edge material, it goes invisible against white when the icons are too small to have noticeable shadows. --- resources/icon.svg | 118 ++++++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 56 deletions(-) diff --git a/resources/icon.svg b/resources/icon.svg index 7a764b4d..ae687dc0 100644 --- a/resources/icon.svg +++ b/resources/icon.svg @@ -15,7 +15,10 @@ id="svg2" version="1.1" inkscape:version="0.48.5 r10040" - sodipodi:docname="icon.svg"> + sodipodi:docname="icon.svg" + inkscape:export-filename="C:\Users\olive_000\Documents\GitHub\LOOT\loot\resources\icon.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> @@ -294,20 +297,20 @@ inkscape:groupmode="layer" id="layer9" inkscape:label="Lid Edge Shading & Tinting" - sodipodi:insensitive="true" - style="display:inline"> + style="display:inline" + sodipodi:insensitive="true"> + y="96" /> @@ -315,8 +318,8 @@ inkscape:groupmode="layer" id="layer11" inkscape:label="Keyhole Shadows" - sodipodi:insensitive="true" - style="display:inline"> + style="display:inline" + sodipodi:insensitive="true"> + y="92" /> + y="92" /> + style="display:inline" + sodipodi:insensitive="true"> + d="m 20,20 0,152 152,0 0,-16 -128,0 0,-136 z" + style="fill:#ffeb3b;fill-opacity:1;stroke:none" + sodipodi:nodetypes="ccccccc" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccc" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccc" /> + style="display:inline"> + y="168" /> + y="144" /> + y="76" /> + y="76" /> + y="156" /> + y="112" /> + y="112" /> Date: Wed, 19 Nov 2014 13:27:33 +0000 Subject: [PATCH 06/14] Generated ico file for new icon. --- resources/icon.ico | Bin 50175 -> 15086 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/icon.ico b/resources/icon.ico index a281a644701499fc98d910fd3a51adf746f69843..bd01b92f0fa78fc69441bedf552f54f3db1665cb 100644 GIT binary patch literal 15086 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 literal 50175 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 z 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 Date: Wed, 19 Nov 2014 13:29:09 +0000 Subject: [PATCH 07/14] Revert "Moved filter tabs into a separate sidebar toolbar." This reverts commit b5756c56b7ff9d655adc0c59a35038759729edd2. --- resources/report/bower.json | 4 +- resources/report/css/overrides.css | 21 +---- resources/report/css/style.css | 22 ++++- resources/report/js/script.js | 4 + resources/report/report.html | 143 ++++++++++++++--------------- 5 files changed, 99 insertions(+), 95 deletions(-) diff --git a/resources/report/bower.json b/resources/report/bower.json index 235d794c..717766b1 100644 --- a/resources/report/bower.json +++ b/resources/report/bower.json @@ -32,8 +32,6 @@ "paper-progress": "Polymer/paper-progress#~0.5.0", "core-animated-pages": "Polymer/core-animated-pages#~0.5.1", "paper-toast": "Polymer/paper-toast#~0.5.1", - "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a", - "core-header-panel": "Polymer/core-header-panel#~0.5.1", - "core-scaffold": "Polymer/core-scaffold#~0.5.1" + "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a" } } diff --git a/resources/report/css/overrides.css b/resources/report/css/overrides.css index 978b25a9..17ab7e57 100644 --- a/resources/report/css/overrides.css +++ b/resources/report/css/overrides.css @@ -1,22 +1,9 @@ /* These styles override Polymer's own internal styling for certain elements. */ -/* The following is for the app and drawer bars. */ -core-toolbar, core-scaffold::shadow core-toolbar { - background: #4285f4; - color: white; - height: 56px; -} - /* The following is for setting the size of the drawer in narrow mode. */ -html /deep/ .narrow-layout #drawer { +#container::shadow .narrow-layout #drawer { width: 50% !important; - background: white; -} - -/* Let the element stretch to fit the sidebar. */ -core-header-panel::shadow #mainContainer { - display: flex; - flex-direction: column; + background: #f8f8f8; } /* These overrides change the colour of the game menu's text and underline. */ @@ -63,11 +50,11 @@ html /deep/ paper-item[disabled] { } /* These overrides change the colour of the tab ink effect and their underline. */ -core-toolbar > paper-tabs::shadow #selectionBar { +#mainToolbar paper-tabs::shadow #selectionBar { background-color: white; height: 4px; } -core-toolbar paper-tab::shadow #ink { +#mainToolbar paper-tab::shadow #ink { color: #f1f1f1; } diff --git a/resources/report/css/style.css b/resources/report/css/style.css index e7c6da6e..bb7a4c3c 100644 --- a/resources/report/css/style.css +++ b/resources/report/css/style.css @@ -30,10 +30,18 @@ body { background:#f8f8f8; height: 100%; } - +#mainToolbar { + background: #4285f4; + color: white; + width: 99.99vw; /* Fix for scollbars when LOOT is run through Mod Organiser. */ + height: 56px; +} #mainToolbar paper-dropdown { color: black; } +#sidebarTabs { + width: calc(33% - 11px); +} div[drawer] > core-tooltip { margin: 0 12px; @@ -65,7 +73,6 @@ paper-item > a { } #searchBox { display: block; - padding: 0 1em; } #container { position: fixed; @@ -217,3 +224,14 @@ paper-progress { #firstRun .tag { margin: 0; } + + +/* This animates the drawer toggle appearing in narrow view. */ +#drawerToggle { + display: none; +} +@media screen and (max-width: 640px) { + #drawerToggle { + display: block; + } +} \ No newline at end of file diff --git a/resources/report/js/script.js b/resources/report/js/script.js index b57f5df0..a355e1af 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -977,6 +977,9 @@ function handleClearMetadata(evt) { } }); } +function toggleDrawer(evt) { + document.getElementById('container').togglePanel(); +} function handleSidebarClick(evt) { if (evt.target.hasAttribute('data-index')) { window.location.hash = ''; @@ -1035,6 +1038,7 @@ function setupEventHandlers() { document.body.addEventListener('loot-copy-metadata', handleCopyMetadata, false); document.body.addEventListener('loot-clear-metadata', handleClearMetadata, false); + document.getElementById('drawerToggle').addEventListener('click', toggleDrawer, false); document.getElementById('cardsNav').addEventListener('click', handleSidebarClick, false); } function initVars() { diff --git a/resources/report/report.html b/resources/report/report.html index fb5c8ac7..6596017b 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -19,11 +19,9 @@ - - @@ -41,15 +39,74 @@ - - - - - - Plugins - Filters - - + + + + + Plugins + Filters + + + + + + + + + + + + + + + + +
+ + + Redate Plugins + + + + Clear All User Metadata + + + + Copy Content + + + + Refresh Content + + + + + Settings + + + + + View Documentation + + + + Open Debug Log Location + + + + About + + + + + Quit + +
+
+
+
+ +
@@ -89,68 +146,8 @@ - -
- - - - - - - - - - - - - - - -
- - - Redate Plugins - - - - Clear All User Metadata - - - - Copy Content - - - - Refresh Content - - - - - Settings - - - - - View Documentation - - - - Open Debug Log Location - - - - About - - - - - Quit - -
-
-
-
+

Summary

@@ -218,7 +215,7 @@ - + From 8c72c5b52dcb44b7e2a2e89779a4fce9a0622bfe Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 19 Nov 2014 19:29:23 +0000 Subject: [PATCH 08/14] Re-implemented tabs in separate sidebar. No more huge CPU usage. --- resources/report/css/overrides.css | 4 +- resources/report/css/style.css | 16 +- resources/report/report.html | 268 +++++++++++++++-------------- 3 files changed, 142 insertions(+), 146 deletions(-) diff --git a/resources/report/css/overrides.css b/resources/report/css/overrides.css index 17ab7e57..86ffbd94 100644 --- a/resources/report/css/overrides.css +++ b/resources/report/css/overrides.css @@ -50,11 +50,11 @@ html /deep/ paper-item[disabled] { } /* These overrides change the colour of the tab ink effect and their underline. */ -#mainToolbar paper-tabs::shadow #selectionBar { +paper-tabs::shadow #selectionBar { background-color: white; height: 4px; } -#mainToolbar paper-tab::shadow #ink { +paper-tab::shadow #ink { color: #f1f1f1; } diff --git a/resources/report/css/style.css b/resources/report/css/style.css index bb7a4c3c..5c36c344 100644 --- a/resources/report/css/style.css +++ b/resources/report/css/style.css @@ -30,23 +30,20 @@ body { background:#f8f8f8; height: 100%; } -#mainToolbar { +core-toolbar { background: #4285f4; color: white; - width: 99.99vw; /* Fix for scollbars when LOOT is run through Mod Organiser. */ height: 56px; } #mainToolbar paper-dropdown { color: black; } -#sidebarTabs { - width: calc(33% - 11px); -} - div[drawer] > core-tooltip { margin: 0 12px; } div[drawer] { + background: white; + box-shadow: rgba(0, 0, 0, 0.0980392) 0px 2px 4px, rgba(0, 0, 0, 0.0980392) 0px 0px 3px; z-index: 1; } #main { @@ -54,6 +51,7 @@ div[drawer] { overflow-x: hidden; position: relative; z-index: 0; + height: calc(100% - 56px); } #cardsNav { margin: 0; @@ -74,17 +72,11 @@ paper-item > a { #searchBox { display: block; } -#container { - position: fixed; - top: 56px; - height: calc(100% - 56px); -} section { background:white; overflow:hidden; margin:1em; - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); padding:1em; position: relative; border-top-left-radius: 2px; diff --git a/resources/report/report.html b/resources/report/report.html index 6596017b..1a071cb9 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -40,73 +40,14 @@ - - - - Plugins - Filters - - - - - - - - - - - - - - - - -
- - - Redate Plugins - - - - Clear All User Metadata - - - - Copy Content - - - - Refresh Content - - - - - Settings - - - - - View Documentation - - - - Open Debug Log Location - - - - About - - - - - Quit - -
-
-
-
+ + + Plugins + Filters + +
@@ -147,73 +88,136 @@
-
-
-

Summary

-
- - - - - - - - - - -
Masterlist RevisionN/A
Masterlist DateN/A
- - - - - - - - - - - - - - - -
Warnings0
Errors0
Total Messages0
- - - - - - - - - - - - - - - -
Active Plugins0
Dirty Plugins0
Total Plugins0
-
-
-

General Messages

-
    - -
-
- - - - +
+ + + + + + + + + + + + + + + + + +
+ + + Redate Plugins + + + + Clear All User Metadata + + + + Copy Content + + + + Refresh Content + + + + + Settings + + + + + View Documentation + + + + Open Debug Log Location + + + + About + + + + + Quit + +
+
+
+
+
+
+

Summary

+ + + + + + + + + + + +
Masterlist RevisionN/A
Masterlist DateN/A
+ + + + + + + + + + + + + + + +
Warnings0
Errors0
Total Messages0
+ + + + + + + + + + + + + + + +
Active Plugins0
Dirty Plugins0
Total Plugins0
+
+
+

General Messages

+
    + +
+
+ + + + +
From ffe40cee01a193529e19f34a46f42f80f57f2994 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 19 Nov 2014 19:30:06 +0000 Subject: [PATCH 09/14] Hack for sidebar plugin list being sized too small. --- resources/report/js/script.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/report/js/script.js b/resources/report/js/script.js index a355e1af..a90de494 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -1174,7 +1174,11 @@ function initVars() { document.getElementById('cardsNav').lastElementChild.data = loot.game.plugins; document.getElementById('main').lastElementChild.data = loot.game.plugins; - closeProgressDialog(); + setTimeout(function() { + document.getElementById('cardsNav').lastElementChild.updateSize(); + closeProgressDialog(); + }, 100); + return ''; }).catch(processCefError); } From b65f91468c7c858ec554d0e30d12b7ed283eb615 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 19 Nov 2014 19:33:59 +0000 Subject: [PATCH 10/14] Tooltips no longer show arrows. For better matching the Material Design spec. It looks better too, and avoids the issue with the arrows being in the wrong place. --- resources/report/html/loot-plugin-card.html | 8 ++++---- resources/report/html/loot-plugin-editor.html | 8 ++++---- resources/report/html/loot-plugin-item.html | 4 ++-- resources/report/report.html | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/resources/report/html/loot-plugin-card.html b/resources/report/html/loot-plugin-card.html index b564bcc3..660b41ab 100644 --- a/resources/report/html/loot-plugin-card.html +++ b/resources/report/html/loot-plugin-card.html @@ -132,7 +132,7 @@ loot-clear-metadata
- +
@@ -140,13 +140,13 @@ loot-clear-metadata
- + - + - + diff --git a/resources/report/html/loot-plugin-editor.html b/resources/report/html/loot-plugin-editor.html index 144e5c25..f7b7f9f2 100644 --- a/resources/report/html/loot-plugin-editor.html +++ b/resources/report/html/loot-plugin-editor.html @@ -146,22 +146,22 @@ loot-editor-close } - +

{{data.name}}

{{data.version}} {{data.computed.crc}} - + - +
- +
diff --git a/resources/report/html/loot-plugin-item.html b/resources/report/html/loot-plugin-item.html index 34c76de4..86284c6e 100644 --- a/resources/report/html/loot-plugin-item.html +++ b/resources/report/html/loot-plugin-item.html @@ -28,10 +28,10 @@ - + - +
diff --git a/resources/report/report.html b/resources/report/report.html index 1a071cb9..d2c36d5c 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -84,7 +84,7 @@
- +
@@ -95,10 +95,10 @@ - + - + @@ -262,7 +262,7 @@ along with LOOT. If not, see <http://www.gnu.org/licenses/>.
- + From a91859f127cd115d21fb2ce859a6586fab9b7c3a Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 1 Dec 2014 19:33:09 +0000 Subject: [PATCH 11/14] Added drop shadow to header toolbar. --- resources/report/css/overrides.css | 5 +++++ resources/report/css/style.css | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/resources/report/css/overrides.css b/resources/report/css/overrides.css index 86ffbd94..e016f85e 100644 --- a/resources/report/css/overrides.css +++ b/resources/report/css/overrides.css @@ -1,5 +1,10 @@ /* These styles override Polymer's own internal styling for certain elements. */ +/* The following stops the main toolbar from overshadowing into the drawer. */ +#container::shadow #drawer { + z-index: 1; +} + /* The following is for setting the size of the drawer in narrow mode. */ #container::shadow .narrow-layout #drawer { width: 50% !important; diff --git a/resources/report/css/style.css b/resources/report/css/style.css index 5c36c344..3b0419a9 100644 --- a/resources/report/css/style.css +++ b/resources/report/css/style.css @@ -35,6 +35,10 @@ core-toolbar { color: white; height: 56px; } +#mainToolbar { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); + z-index: 1; +} #mainToolbar paper-dropdown { color: black; } From 944ff1a3cfe8eac9737b5a179961fe87faf1d8fd Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 1 Dec 2014 20:16:41 +0000 Subject: [PATCH 12/14] Improved editor layout. Tabs are now part of the toolbar, the priority and enable edits controls are in a "Main" tab, and the accept/cancel buttons have been made icon buttons and moved into the toolbar. --- resources/report/css/overrides.css | 5 + resources/report/html/loot-plugin-editor.html | 217 +++++++++--------- 2 files changed, 114 insertions(+), 108 deletions(-) diff --git a/resources/report/css/overrides.css b/resources/report/css/overrides.css index e016f85e..e72b2014 100644 --- a/resources/report/css/overrides.css +++ b/resources/report/css/overrides.css @@ -107,4 +107,9 @@ html /deep/ paper-item > core-icon { /* This makes checkboxes have the same padding as icons in lists. */ html /deep/ paper-checkbox::shadow #checkboxLabel { padding-left: 1em; +} + +/* This makes the medium-tall toolbars 2x the 56px height, rather than the 64px height. */ +html /deep/ core-toolbar.medium-tall { + height: 112px; } \ No newline at end of file diff --git a/resources/report/html/loot-plugin-editor.html b/resources/report/html/loot-plugin-editor.html index f7b7f9f2..8e1b66aa 100644 --- a/resources/report/html/loot-plugin-editor.html +++ b/resources/report/html/loot-plugin-editor.html @@ -15,7 +15,7 @@ loot-editor-close - + @@ -36,6 +36,12 @@ loot-editor-close #activeTick { color: green; } + #accept { + color: #4285f4; + } + #cancel { + color: red; + } /* Content styling. */ h1 { @@ -57,7 +63,7 @@ loot-editor-close } /* Editor input styling. */ - #editor > div > paper-checkbox, #editor > div > core-tooltip { + #main > paper-checkbox, #main > core-tooltip { display: table; } #enableEdits { @@ -81,7 +87,7 @@ loot-editor-close border-collapse: collapse; width: 100%; } - table:not(.core-selected) { + table:not(.core-selected), #main:not(.core-selected) { display: none; } td input { @@ -112,7 +118,7 @@ loot-editor-close /* Misc Styling. */ core-toolbar { - background: white; + background: #f1f1f1; height: 56px; } core-toolbar > h1, core-toolbar > span { @@ -122,21 +128,15 @@ loot-editor-close #buttons { text-align: right; } - main { + #main { padding: 1em; } - main > core-tooltip, main > paper-checkbox { - display: table; - } core-icon { vertical-align: inherit !important; } #tableTabs { border: 2px solid #f1f1f1; } - paper-tabs { - background: #f1f1f1; - } /* These overrides change the colour of the tab ink effect and their underline. */ paper-tabs::shadow #selectionBar { background-color: #4285f4; @@ -145,7 +145,7 @@ loot-editor-close color: #4285f4; } - + @@ -158,104 +158,105 @@ loot-editor-close - -
- - - + + -
-
Priority Value
- - - + + + + + Main + Load After + Requirements + Incompatibilities + Messages + Bash Tags + Dirty Info + Locations + + + +
+ + + + +
+
Priority Value
+ + + +
-
- - Load After - Requirements - Incompatibilities - Messages - Bash Tags - Dirty Info - Locations - - - - - - - - - - -
FilenameDisplay NameCondition
Add new row...
- - - - - - - - -
FilenameDisplay NameCondition
Add new row...
- - - - - - - - -
FilenameDisplay NameCondition
Add new row...
- - - - - - - - -
TypeContentConditionLanguage
Add new row...
- - - - - - - - -
Add/RemoveBash TagCondition
Add new row...
- - - - - - - - -
CRCITM CountDeleted ReferencesDeleted NavmeshesCleaning Utility
Add new row...
- - - - - - - - -
URLVersion
Add new row...
-
-
-
- Apply - Cancel -
-
+ + + + + + + + +
FilenameDisplay NameCondition
Add new row...
+ + + + + + + + +
FilenameDisplay NameCondition
Add new row...
+ + + + + + + + +
FilenameDisplay NameCondition
Add new row...
+ + + + + + + + +
TypeContentConditionLanguage
Add new row...
+ + + + + + + + +
Add/RemoveBash TagCondition
Add new row...
+ + + + + + + + +
CRCITM CountDeleted ReferencesDeleted NavmeshesCleaning Utility
Add new row...
+ + + + + + + + +
URLVersion
Add new row...
+ From a77226d5f49b821e1d285fede77e66fdd62fb802 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 1 Dec 2014 21:24:18 +0000 Subject: [PATCH 13/14] Use core-dropdown fix repo in bower config. I'm getting some version requirement conflicts, as the core-list and core-dropdown fixes are off Polymer's master branches, and not the 0.5.1 tag. --- resources/report/bower.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/report/bower.json b/resources/report/bower.json index 717766b1..bbb880af 100644 --- a/resources/report/bower.json +++ b/resources/report/bower.json @@ -32,6 +32,7 @@ "paper-progress": "Polymer/paper-progress#~0.5.0", "core-animated-pages": "Polymer/core-animated-pages#~0.5.1", "paper-toast": "Polymer/paper-toast#~0.5.1", - "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a" + "core-list": "WrinklyNinja/core-list#51e27f42c86a91cbbe0933f618b2e82905dda83a", + "core-dropdown": "kysonic/core-dropdown#b2e3b0f37afec1f1447060d7988fb271f46566c2" } } From 0aecb015bc941c3c81f01fa1a8cf276a09384c14 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sun, 7 Dec 2014 18:32:12 +0000 Subject: [PATCH 14/14] Removed Vulcanize bug warning from README. As of v0.7.1, it's no longer a problem. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 698c2419..27caa858 100644 --- a/README.md +++ b/README.md @@ -38,12 +38,10 @@ LOOT's UI relies on a few web libraries: * [Marked](https://github.com/chjj/marked) * [RequireJS](http://requirejs.org/) -These dependencies are most easily managed using [Bower](http://bower.io/), and are built for distribution using [Vulcanize](https://github.com/Polymer/vulcanize). +These dependencies are most easily managed using [Bower](http://bower.io/), and are built for distribution using [Vulcanize](https://github.com/Polymer/vulcanize) (v0.7.1+, earlier versions break LOOT's templates). To install Bower and Vulcanize, first install [Node](http://nodejs.org/), and run `npm install -g bower vulcanize` from the command line (on Windows, it needs to be the Node command prompt). Once they are installed, fetch and build the dependencies by running `bower install ./ && vulcanize -o index.html report.html` from inside this repository's `resources/report` folder (this command doesn't need to be run through Node). -**Note:** There is currently a bug in Vulcanize (#97) that prevents it from correctly building the dependencies, so some manual editing is required to add `` and `` elements back into the row templates originally found in `resources/report/html/editable-table.html`. - ## Packaging Releases Installer and zip archive releases for the main LOOT application can be handled by running the scripts `installer.nsi` and `archive.py` in the `src` folder respectively. The installer script requires [NSIS 3](http://nsis.sourceforge.net/), while the archive script requires [Python](http://www.python.org/) (2 or 3). The installer and archive files are created in the `build/` folder, relative to the repository root.