Merge branch 'Develop' into professorbunbury-sw5e

This commit is contained in:
CK 2021-02-04 15:34:12 -05:00 committed by GitHub
commit 08a5c0be33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 6024 additions and 5848 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

8
CONTRIBUTIONS.md Normal file
View file

@ -0,0 +1,8 @@
Rick Fisto
- [Fisto's Codex](https://www.gmbinder.com/share/-M-qA_FYgTwJjU8yFjjx)
Heresy
- [Heritic's Guide to the Galaxy](https://www.gmbinder.com/share/-M815p5BfQ0wbdKY7zqN)
Erikstormtrooper
- [Englibesh Font](http://www.erikstormtrooper.com/englibesh.htm)

View file

@ -27,3 +27,10 @@ may do this by cloning the repository or downloading a zip archive from the
Code and content contributions are accepted. Please feel free to submit issues to the issue tracker or submit merge Code and content contributions are accepted. Please feel free to submit issues to the issue tracker or submit merge
requests for code changes. Approval for such requests involves code and (if necessary) design review by The Dev Team. requests for code changes. Approval for such requests involves code and (if necessary) design review by The Dev Team.
Please reach out on the SW5E Foundry Dev Discord with any questions. Please reach out on the SW5E Foundry Dev Discord with any questions.
## Compatible Modules and Optimum Settings
- DAE (Dynamic Active Effects) is needed for many automatic features.
-**Please enable: "Include active effects in special traits display" in "Configure Game Settings> Module Settings> Dynamic Active Effects".**
- Midi QoL is compatible with great features
- Token Action Hud has compatibility

View file

@ -23,7 +23,7 @@
flex: 1; flex: 1;
margin: 0; margin: 0;
line-height: 36px; line-height: 36px;
.bungeeInline(); .engli-Besh();
color: @colorOlive; color: @colorOlive;
&:hover { &:hover {
color: #111; color: #111;

View file

@ -1,146 +1,146 @@
//override Primary Red //override Primary Red
@colorRed: #E81111; @colorRed: #E81111;
@colorDarkBg: #2b2b2b; @colorDarkBg: #2b2b2b;
//Background //Background
@primaryBackground: linear-gradient(90deg,#626262 0,#4d4d4d 30%,#4d4d4d 70%,#626262); @primaryBackground: linear-gradient(90deg,#626262 0,#4d4d4d 30%,#4d4d4d 70%,#626262);
//Typography //Typography
@headingColor: @colorRed; @headingColor: @colorRed;
@headerBorderColor: @colorBlue; @headerBorderColor: @colorBlue;
@bodyFontColor: white; @bodyFontColor: white;
@linkColor: @colorRed; @linkColor: @colorRed;
@linkSecondaryColor: @colorPaleGray; @linkSecondaryColor: @colorPaleGray;
@blockquoteBackground: @colorPaleRed; @blockquoteBackground: @colorPaleRed;
@blockquoteBorder: @colorRed; @blockquoteBorder: @colorRed;
@blockquoteShadow: 0 0 20px rgba(@colorRed, 0.8); @blockquoteShadow: 0 0 20px rgba(@colorRed, 0.8);
//forms //forms
@inputBackgroundColor: @colorDarkGray; @inputBackgroundColor: @colorDarkGray;
@inputBorderNormal: @colorLightGray; @inputBorderNormal: @colorLightGray;
@inputBorderHover: @colorGray; @inputBorderHover: @colorGray;
@inputBorderFocus: @colorRed; @inputBorderFocus: @colorRed;
@inputTextColor: white; @inputTextColor: white;
@buttonBackground: @colorRed; @buttonBackground: @colorRed;
@buttonTextColor: white; @buttonTextColor: white;
@buttonHoverBackground: lighten(@colorRed, 5); @buttonHoverBackground: lighten(@colorRed, 5);
@buttonSecondaryBackground: @colorLightGray; @buttonSecondaryBackground: @colorLightGray;
@buttonSecondaryTextColor: white; @buttonSecondaryTextColor: white;
@buttonSecondaryHoverBackground: lighten(@colorLightGray, 5); @buttonSecondaryHoverBackground: lighten(@colorLightGray, 5);
//other bits //other bits
@hrColor: @colorBlue; @hrColor: @colorBlue;
@tableTextColor: white; @tableTextColor: white;
@tableHeaderTextColor: @colorPaleGray; @tableHeaderTextColor: @colorPaleGray;
@tableBackground: @colorGray; @tableBackground: @colorGray;
@tableRowHoverBackground: lighten(@colorLightGray, 10); @tableRowHoverBackground: lighten(@colorLightGray, 10);
@tableRowBorderColor: @colorLightGray; @tableRowBorderColor: @colorLightGray;
//universalColors //universalColors
@windowHeaderBackground: @colorDarkBg; @windowHeaderBackground: @colorDarkBg;
@windowHeaderLinkColor: @colorRed; @windowHeaderLinkColor: @colorRed;
//Sidebar //Sidebar
@sidebarTabBackground: @windowHeaderBackground; @sidebarTabBackground: @windowHeaderBackground;
@sidebarTabLinkColor: @windowHeaderLinkColor; @sidebarTabLinkColor: @windowHeaderLinkColor;
@sidebarTabLinkUnderline: @colorRed; @sidebarTabLinkUnderline: @colorRed;
@chatBackground: @colorDarkGray; @chatBackground: @colorDarkGray;
@chatHeaderColor: @colorRed; @chatHeaderColor: @colorRed;
@chatHeaderBottomBorderColor: @colorBlue; @chatHeaderBottomBorderColor: @colorBlue;
@chatNotificationColor: @colorBlue; @chatNotificationColor: @colorBlue;
@cardButtonBorder: @colorLightGray; @cardButtonBorder: @colorLightGray;
@cardFooterBorder: @colorLightBlue; @cardFooterBorder: @colorLightBlue;
@cardFooterSeparator: @colorPaleGray; @cardFooterSeparator: @colorPaleGray;
@diceFormulaBackground: @colorGray; @diceFormulaBackground: @colorGray;
@diceFormualColor: white; @diceFormualColor: white;
@diceTotalBackground: @colorPaleRed; @diceTotalBackground: @colorPaleRed;
@diceTotalBorder: @colorRed; @diceTotalBorder: @colorRed;
@diceTotalShadow: @colorRed; @diceTotalShadow: @colorRed;
@diceSuccessColor: @colorGreen; @diceSuccessColor: @colorGreen;
@diceFailureColor: @colorRed; @diceFailureColor: @colorRed;
@diceCriticalBackground: @colorPaleGreen; @diceCriticalBackground: @colorPaleGreen;
@diceCriticalColor: @colorGreen; @diceCriticalColor: @colorGreen;
@diceFumbleBackground: @colorPaleRed; @diceFumbleBackground: @colorPaleRed;
@diceFumbleColor: @colorRed; @diceFumbleColor: @colorRed;
@altRowBackground: @colorGray; @altRowBackground: @colorGray;
@combatRoundColor: @colorRed; @combatRoundColor: @colorRed;
@combatRoundBorder: @colorBlue; @combatRoundBorder: @colorBlue;
@combatCombatantControlColor: @colorPaleGray; @combatCombatantControlColor: @colorPaleGray;
@combatCombatantControlColorActive: @colorRed; @combatCombatantControlColorActive: @colorRed;
@combatActiveCombatantColor: @colorBlue; @combatActiveCombatantColor: @colorBlue;
@combatTokenResourceColor: white; @combatTokenResourceColor: white;
@combatTokenResouceBorder: @colorLightGray; @combatTokenResouceBorder: @colorLightGray;
@combatControlsBorder: @colorBlue; @combatControlsBorder: @colorBlue;
@folderSearchIconColor: @colorBlue; @folderSearchIconColor: @colorBlue;
@folderSubdirectoryBackground: @colorDarkBg; @folderSubdirectoryBackground: @colorDarkBg;
@folderSubdirectoryBorder: @colorLightGray; @folderSubdirectoryBorder: @colorLightGray;
@directoryListItemBorder: @colorBlue; @directoryListItemBorder: @colorBlue;
@folderHeaderBackground: @colorDarkBg; @folderHeaderBackground: @colorDarkBg;
@folderHeaderColor: white; @folderHeaderColor: white;
@folderIconColor: @colorBlue; @folderIconColor: @colorBlue;
@entityBackgroundColor: @colorDarkBg; @entityBackgroundColor: @colorDarkBg;
@entityNameColor: @colorBlack; @entityNameColor: @colorBlack;
@sceneBorderColor: @colorBlue; @sceneBorderColor: @colorBlue;
@sceneBackgroundColor: @colorDarkBg; @sceneBackgroundColor: @colorDarkBg;
@playlistBackgroundColor: @colorDarkBg; @playlistBackgroundColor: @colorDarkBg;
@playlistHeaderBorder: @colorBlue; @playlistHeaderBorder: @colorBlue;
@playlistSoundColor: @colorBlack; @playlistSoundColor: @colorBlack;
@compendiumEntityBackground: @colorDarkBg; @compendiumEntityBackground: @colorDarkBg;
@compendiumStatusIcon: @colorLightGray; @compendiumStatusIcon: @colorLightGray;
@foundryNavBgColor: rgba(@colorLightBlue, 0.4); @foundryNavBgColor: rgba(@colorLightBlue, 0.4);
@foundryNavTextColor: white; @foundryNavTextColor: white;
@foundryNavBorderColor: @colorBlue; @foundryNavBorderColor: @colorBlue;
@foundryNavBgColorGM: @colorBlue; @foundryNavBgColorGM: @colorBlue;
@foundryNavBorderColorGM: @colorPaleBlue; @foundryNavBorderColorGM: @colorPaleBlue;
@foundryNavSceneLinkColor: white; @foundryNavSceneLinkColor: white;
@foundryNavActiveBgColor: rgba(@colorRed, 0.6); @foundryNavActiveBgColor: rgba(@colorRed, 0.6);
@foundryNavActiveBorderColor: lighten(@colorRed, 20); @foundryNavActiveBorderColor: lighten(@colorRed, 20);
@foundryNavActiveGlow: darken(@colorRed, 20); @foundryNavActiveGlow: darken(@colorRed, 20);
@foundryNavContextShadow: darken(@colorBlue, 20); @foundryNavContextShadow: darken(@colorBlue, 20);
@foundryNavContextBorderColor: @colorBlue; @foundryNavContextBorderColor: @colorBlue;
@foundryPlayersArrowColor: @colorLightGray; @foundryPlayersArrowColor: @colorLightGray;
@actorPanelBgColor: white; @actorPanelBgColor: white;
@actorNameColor: @colorRed; @actorNameColor: @colorRed;
@actorXPBarBorder: @colorGray; @actorXPBarBorder: @colorGray;
@actorXPBarBackground: @colorPaleBlue; @actorXPBarBackground: @colorPaleBlue;
@actorXPBarColor: @colorBlue; @actorXPBarColor: @colorBlue;
@actorProficiencyTextColor: @colorGray; @actorProficiencyTextColor: @colorGray;
@actorAttributeInputColor: @colorGray; @actorAttributeInputColor: @colorGray;
@actorSeparatorColor: @colorLightGray; @actorSeparatorColor: @colorLightGray;
@actorAttributeButtonBorder: @colorPaleGray; @actorAttributeButtonBorder: @colorPaleGray;
@actorAttributeButtonBorderHover: @colorRed; @actorAttributeButtonBorderHover: @colorRed;
@actorNavigationTabsColor: @colorGray; @actorNavigationTabsColor: @colorGray;
@actorNavigationTabsActiveColor: @colorRed; @actorNavigationTabsActiveColor: @colorRed;
@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); @actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1);
@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); @actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1);
@actorFilterBorderColor: @colorLightGray; @actorFilterBorderColor: @colorLightGray;
@actorFilterHoverColor: @colorRed; @actorFilterHoverColor: @colorRed;
@actorFilterActiveColor: @colorRed; @actorFilterActiveColor: @colorRed;
@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); @actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10);
@actorGroupListTitleBorderColor: @colorBlue; @actorGroupListTitleBorderColor: @colorBlue;
@actorGroupListColumnBorderColor: @colorPaleGray; @actorGroupListColumnBorderColor: @colorPaleGray;
@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); @actorGroupListAltRowColor: lighten(@colorPaleGray, 10);
@actorItemRollableD20Color: @colorGray; @actorItemRollableD20Color: @colorGray;
@actorItemRollableD20HoverColor: @colorRed; @actorItemRollableD20HoverColor: @colorRed;
@actorItemControlToggleColor: @colorLightGray; @actorItemControlToggleColor: @colorLightGray;
@actorAbilityScoreColor: @colorGray; @actorAbilityScoreColor: @colorGray;
@actorAbilityBorderColor: @colorPaleGray; @actorAbilityBorderColor: @colorPaleGray;
@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); @actorSkillsAltRowColor: lighten(@colorPaleGray, 10);
@actorEncumbranceLabelBackground: @colorPaleGray; @actorEncumbranceLabelBackground: @colorPaleGray;
@actorEncumbranceTextColor: @colorBlack; @actorEncumbranceTextColor: @colorBlack;
@actorEncumbranceBorderColor: @colorBlack; @actorEncumbranceBorderColor: @colorBlack;
@actorEncumbranceBarBgColor: @colorPaleBlue; @actorEncumbranceBarBgColor: @colorPaleBlue;
@actorEncumbranceBarColor: @colorBlue; @actorEncumbranceBarColor: @colorBlue;

View file

@ -1,143 +1,143 @@
//Background //Background
@primaryBackground: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);// linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue); @primaryBackground: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);// linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue);
//Typography //Typography
@headingColor: @colorRed; @headingColor: @colorRed;
@headerBorderColor: @colorBlue; @headerBorderColor: @colorBlue;
@bodyFontColor: @colorBlack; @bodyFontColor: @colorBlack;
@linkColor: @colorRed; @linkColor: @colorRed;
@linkSecondaryColor: @colorGray; @linkSecondaryColor: @colorGray;
@blockquoteBackground: @colorPaleBlue; @blockquoteBackground: @colorPaleBlue;
@blockquoteBorder: @colorBlue; @blockquoteBorder: @colorBlue;
@blockquoteShadow: 0 0 20px rgba(@colorBlue, 0.8); @blockquoteShadow: 0 0 20px rgba(@colorBlue, 0.8);
//forms //forms
@inputBackgroundColor: @colorGray; @inputBackgroundColor: @colorGray;
@inputBorderNormal: @colorLightGray; @inputBorderNormal: @colorLightGray;
@inputBorderHover: @colorGray; @inputBorderHover: @colorGray;
@inputBorderFocus: @colorRed; @inputBorderFocus: @colorRed;
@inputTextColor: @colorBlack; @inputTextColor: @colorBlack;
@buttonBackground: @colorRed; @buttonBackground: @colorRed;
@buttonTextColor: white; @buttonTextColor: white;
@buttonHoverBackground: lighten(@colorRed, 5); @buttonHoverBackground: lighten(@colorRed, 5);
@buttonSecondaryBackground: @colorPaleGray; @buttonSecondaryBackground: @colorPaleGray;
@buttonSecondaryTextColor: @colorBlack; @buttonSecondaryTextColor: @colorBlack;
@buttonSecondaryHoverBackground: lighten(@colorPaleGray, 5); @buttonSecondaryHoverBackground: lighten(@colorPaleGray, 5);
//other bits //other bits
@hrColor: @colorBlue; @hrColor: @colorBlue;
@tableTextColor: @colorBlack; @tableTextColor: @colorBlack;
@tableHeaderTextColor: @colorLightGray; @tableHeaderTextColor: @colorLightGray;
@tableBackground: white; @tableBackground: white;
@tableRowHoverBackground: lighten(@colorPaleGray, 10); @tableRowHoverBackground: lighten(@colorPaleGray, 10);
@tableRowBorderColor: @colorPaleGray; @tableRowBorderColor: @colorPaleGray;
//universalColors //universalColors
@windowHeaderBackground: white; @windowHeaderBackground: white;
@windowHeaderLinkColor: @colorRed; @windowHeaderLinkColor: @colorRed;
//Sidebar //Sidebar
@sidebarTabBackground: @windowHeaderBackground; @sidebarTabBackground: @windowHeaderBackground;
@sidebarTabLinkColor: @windowHeaderLinkColor; @sidebarTabLinkColor: @windowHeaderLinkColor;
@sidebarTabLinkUnderline: @colorRed; @sidebarTabLinkUnderline: @colorRed;
@chatBackground: white; @chatBackground: white;
@chatHeaderColor: @colorRed; @chatHeaderColor: @colorRed;
@chatHeaderBottomBorderColor: @colorBlue; @chatHeaderBottomBorderColor: @colorBlue;
@chatNotificationColor: @colorBlue; @chatNotificationColor: @colorBlue;
@cardButtonBorder: @colorLightGray; @cardButtonBorder: @colorLightGray;
@cardFooterBorder: @colorLightBlue; @cardFooterBorder: @colorLightBlue;
@cardFooterSeparator: @colorPaleGray; @cardFooterSeparator: @colorPaleGray;
@diceFormulaBackground: @colorPaleGray; @diceFormulaBackground: @colorPaleGray;
@diceFormualColor: @colorBlack; @diceFormualColor: @colorBlack;
@diceTotalBackground: @colorPaleBlue; @diceTotalBackground: @colorPaleBlue;
@diceTotalBorder: @colorBlue; @diceTotalBorder: @colorBlue;
@diceTotalShadow: @colorBlue; @diceTotalShadow: @colorBlue;
@diceSuccessColor: @colorGreen; @diceSuccessColor: @colorGreen;
@diceFailureColor: @colorRed; @diceFailureColor: @colorRed;
@diceCriticalBackground: @colorPaleGreen; @diceCriticalBackground: @colorPaleGreen;
@diceCriticalColor: @colorGreen; @diceCriticalColor: @colorGreen;
@diceFumbleBackground: @colorPaleRed; @diceFumbleBackground: @colorPaleRed;
@diceFumbleColor: @colorRed; @diceFumbleColor: @colorRed;
@altRowBackground: @colorPaleBlue; @altRowBackground: @colorPaleBlue;
@combatRoundColor: @colorRed; @combatRoundColor: @colorRed;
@combatRoundBorder: @colorBlue; @combatRoundBorder: @colorBlue;
@combatCombatantControlColor: @colorLightGray; @combatCombatantControlColor: @colorLightGray;
@combatCombatantControlColorActive: @colorDarkGray; @combatCombatantControlColorActive: @colorDarkGray;
@combatActiveCombatantColor: @colorBlue; @combatActiveCombatantColor: @colorBlue;
@combatTokenResourceColor: @colorGray; @combatTokenResourceColor: @colorGray;
@combatTokenResouceBorder: @colorLightGray; @combatTokenResouceBorder: @colorLightGray;
@combatControlsBorder: @colorBlue; @combatControlsBorder: @colorBlue;
@folderSearchIconColor: @colorBlue; @folderSearchIconColor: @colorBlue;
@folderSubdirectoryBackground: white; @folderSubdirectoryBackground: white;
@folderSubdirectoryBorder: @colorBlack; @folderSubdirectoryBorder: @colorBlack;
@directoryListItemBorder: @colorBlue; @directoryListItemBorder: @colorBlue;
@folderHeaderBackground: white; @folderHeaderBackground: white;
@folderHeaderColor: @colorBlack; @folderHeaderColor: @colorBlack;
@folderIconColor: @colorBlue; @folderIconColor: @colorBlue;
@entityBackgroundColor: white; @entityBackgroundColor: white;
@entityNameColor: @colorBlack; @entityNameColor: @colorBlack;
@sceneBorderColor: @colorBlue; @sceneBorderColor: @colorBlue;
@sceneBackgroundColor: white; @sceneBackgroundColor: white;
@playlistBackgroundColor: white; @playlistBackgroundColor: white;
@playlistHeaderBorder: @colorBlue; @playlistHeaderBorder: @colorBlue;
@playlistSoundColor: @colorBlack; @playlistSoundColor: @colorBlack;
@compendiumEntityBackground: white; @compendiumEntityBackground: white;
@compendiumStatusIcon: @colorLightGray; @compendiumStatusIcon: @colorLightGray;
@foundryNavBgColor: rgba(@colorLightBlue, 0.4); @foundryNavBgColor: rgba(@colorLightBlue, 0.4);
@foundryNavTextColor: white; @foundryNavTextColor: white;
@foundryNavBorderColor: @colorBlue; @foundryNavBorderColor: @colorBlue;
@foundryNavBgColorGM: @colorBlue; @foundryNavBgColorGM: @colorBlue;
@foundryNavBorderColorGM: @colorPaleBlue; @foundryNavBorderColorGM: @colorPaleBlue;
@foundryNavSceneLinkColor: white; @foundryNavSceneLinkColor: white;
@foundryNavActiveBgColor: rgba(@colorRed, 0.6); @foundryNavActiveBgColor: rgba(@colorRed, 0.6);
@foundryNavActiveBorderColor: lighten(@colorRed, 20); @foundryNavActiveBorderColor: lighten(@colorRed, 20);
@foundryNavActiveGlow: darken(@colorRed, 20); @foundryNavActiveGlow: darken(@colorRed, 20);
@foundryNavContextShadow: darken(@colorBlue, 20); @foundryNavContextShadow: darken(@colorBlue, 20);
@foundryNavContextBorderColor: @colorBlue; @foundryNavContextBorderColor: @colorBlue;
@foundryPlayersArrowColor: @colorLightGray; @foundryPlayersArrowColor: @colorLightGray;
@actorPanelBgColor: white; @actorPanelBgColor: white;
@actorNameColor: @colorRed; @actorNameColor: @colorRed;
@actorXPBarBorder: @colorGray; @actorXPBarBorder: @colorGray;
@actorXPBarBackground: @colorPaleBlue; @actorXPBarBackground: @colorPaleBlue;
@actorXPBarColor: @colorBlue; @actorXPBarColor: @colorBlue;
@actorProficiencyTextColor: @colorGray; @actorProficiencyTextColor: @colorGray;
@actorAttributeInputColor: @colorGray; @actorAttributeInputColor: @colorGray;
@actorSeparatorColor: @colorLightGray; @actorSeparatorColor: @colorLightGray;
@actorAttributeButtonBorder: @colorPaleGray; @actorAttributeButtonBorder: @colorPaleGray;
@actorAttributeButtonBorderHover: @colorRed; @actorAttributeButtonBorderHover: @colorRed;
@actorNavigationTabsColor: @colorGray; @actorNavigationTabsColor: @colorGray;
@actorNavigationTabsActiveColor: @colorRed; @actorNavigationTabsActiveColor: @colorRed;
@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); @actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1);
@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); @actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1);
@actorFilterBorderColor: @colorLightGray; @actorFilterBorderColor: @colorLightGray;
@actorFilterHoverColor: @colorRed; @actorFilterHoverColor: @colorRed;
@actorFilterActiveColor: @colorRed; @actorFilterActiveColor: @colorRed;
@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); @actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10);
@actorGroupListTitleBorderColor: @colorBlue; @actorGroupListTitleBorderColor: @colorBlue;
@actorGroupListColumnBorderColor: @colorPaleGray; @actorGroupListColumnBorderColor: @colorPaleGray;
@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); @actorGroupListAltRowColor: lighten(@colorPaleGray, 10);
@actorItemRollableD20Color: @colorGray; @actorItemRollableD20Color: @colorGray;
@actorItemRollableD20HoverColor: @colorRed; @actorItemRollableD20HoverColor: @colorRed;
@actorItemControlToggleColor: @colorLightGray; @actorItemControlToggleColor: @colorLightGray;
@actorAbilityScoreColor: @colorGray; @actorAbilityScoreColor: @colorGray;
@actorAbilityBorderColor: @colorPaleGray; @actorAbilityBorderColor: @colorPaleGray;
@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); @actorSkillsAltRowColor: lighten(@colorPaleGray, 10);
@actorEncumbranceLabelBackground: @colorPaleGray; @actorEncumbranceLabelBackground: @colorPaleGray;
@actorEncumbranceTextColor: @colorBlack; @actorEncumbranceTextColor: @colorBlack;
@actorEncumbranceBorderColor: @colorBlack; @actorEncumbranceBorderColor: @colorBlack;
@actorEncumbranceBarBgColor: @colorPaleBlue; @actorEncumbranceBarBgColor: @colorPaleBlue;
@actorEncumbranceBarColor: @colorBlue; @actorEncumbranceBarColor: @colorBlue;

File diff suppressed because it is too large Load diff

View file

@ -1,416 +1,416 @@
.panel { .panel {
background: @actorPanelBgColor; background: @actorPanelBgColor;
} }
.sw5e.sheet .window-content { .sw5e.sheet .window-content {
color: @colorBlack; color: @colorBlack;
background: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6); background: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);
input, input,
select { select {
color: @colorBlack; color: @colorBlack;
&:hover { &:hover {
border-color: @inputBorderHover; border-color: @inputBorderHover;
} }
&:focus { &:focus {
border-color: @inputBorderFocus; border-color: @inputBorderFocus;
} }
} }
button { button {
&:hover, &:hover,
&:focus { &:focus {
border-color: @inputBorderFocus; border-color: @inputBorderFocus;
} }
} }
} }
.sw5e.sheet.actor { .sw5e.sheet.actor {
color: @colorBlack; color: @colorBlack;
input, select, textarea { input, select, textarea {
&:hover { &:hover {
border-color: @inputBorderFocus; border-color: @inputBorderFocus;
} }
&:focus { &:focus {
border-color: @inputBorderFocus; border-color: @inputBorderFocus;
} }
} }
.swalt-sheet { .swalt-sheet {
section>h1 { section>h1 {
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
} }
header { header {
h1.character-name { h1.character-name {
color: @actorNameColor; color: @actorNameColor;
input[type="text"] { input[type="text"] {
color: @actorNameColor; color: @actorNameColor;
} }
} }
.level-experience { .level-experience {
.xpbar { .xpbar {
border: 1px solid @actorXPBarBorder; border: 1px solid @actorXPBarBorder;
background-color: @actorXPBarBackground; background-color: @actorXPBarBackground;
.bar { .bar {
background-color: @actorXPBarColor; background-color: @actorXPBarColor;
} }
} }
} }
.summary { .summary {
input, input,
.proficiency { .proficiency {
color: @actorProficiencyTextColor; color: @actorProficiencyTextColor;
} }
} }
.attributes { .attributes {
.attribute-value, .attribute-value,
.attribute-value input { .attribute-value input {
color: @actorAttributeInputColor; color: @actorAttributeInputColor;
} }
.attribute-value { .attribute-value {
.value-separator { .value-separator {
color: @actorSeparatorColor; color: @actorSeparatorColor;
} }
} }
footer { footer {
button { button {
border: 1px solid @actorAttributeButtonBorder; border: 1px solid @actorAttributeButtonBorder;
&:hover { &:hover {
color: @actorAttributeButtonBorderHover; color: @actorAttributeButtonBorderHover;
} }
} }
&.hit-points, &.hit-points,
&.hit-dice, &.hit-dice,
&.initiative { &.initiative {
button { button {
border: 1px solid @actorAttributeButtonBorder; border: 1px solid @actorAttributeButtonBorder;
color: @colorRed; color: @colorRed;
&:hover { &:hover {
border-color: @actorAttributeButtonBorderHover; border-color: @actorAttributeButtonBorderHover;
} }
} }
} }
} }
} }
} }
nav.sheet-navigation { nav.sheet-navigation {
.item { .item {
color: @actorNavigationTabsColor; color: @actorNavigationTabsColor;
&.active { &.active {
color: @actorNavigationTabsActiveColor; color: @actorNavigationTabsActiveColor;
border-bottom-color: @actorNavigationTabsActiveColor; border-bottom-color: @actorNavigationTabsActiveColor;
&:hover { &:hover {
background: @actorNavigationTabsHoverBgColor; background: @actorNavigationTabsHoverBgColor;
} }
} }
&:hover { &:hover {
background: @actorNavigationTabsHoverBgColor; background: @actorNavigationTabsHoverBgColor;
} }
} }
} }
.tab { .tab {
.filter-list { .filter-list {
.filter-item { .filter-item {
border-bottom: 2px solid @actorFilterBorderColor; border-bottom: 2px solid @actorFilterBorderColor;
&:hover { &:hover {
color: @actorFilterHoverColor; color: @actorFilterHoverColor;
} }
&.active { &.active {
color: @actorFilterActiveColor; color: @actorFilterActiveColor;
border-bottom-color: @actorFilterActiveColor; border-bottom-color: @actorFilterActiveColor;
} }
} }
} }
.group-list-header { .group-list-header {
background: @actorGroupListHeaderBgColor; background: @actorGroupListHeaderBgColor;
} }
.group-list-title { .group-list-title {
border-bottom: 1px solid @actorGroupListTitleBorderColor; border-bottom: 1px solid @actorGroupListTitleBorderColor;
} }
.group-list-header, .group-list-header,
.group-list { .group-list {
.item-detail { .item-detail {
border-left: 1px solid @actorGroupListColumnBorderColor; border-left: 1px solid @actorGroupListColumnBorderColor;
} }
} }
.group-list, .group-list,
.group-list ol { .group-list ol {
li.item { li.item {
&:nth-child(even) { &:nth-child(even) {
background-color: @actorGroupListAltRowColor; background-color: @actorGroupListAltRowColor;
} }
h4 { h4 {
color: @colorBlack; color: @colorBlack;
} }
.item-name { .item-name {
.item-image { .item-image {
&::before { &::before {
color: @actorItemRollableD20Color; color: @actorItemRollableD20Color;
} }
} }
&.rollable:hover { &.rollable:hover {
.item-image { .item-image {
&:hover { &:hover {
&::before { &::before {
color: @actorItemRollableD20HoverColor; color: @actorItemRollableD20HoverColor;
} }
} }
} }
} }
} }
.item-control { .item-control {
&:hover { &:hover {
color: @linkColor !important; color: @linkColor !important;
} }
&.item-toggle { &.item-toggle {
color: @actorItemControlToggleColor; color: @actorItemControlToggleColor;
&.active { &.active {
color: @colorBlack; color: @colorBlack;
} }
} }
} }
} }
} }
} }
.tab.attributes { .tab.attributes {
.abilities { .abilities {
.scores { .scores {
li { li {
border: 1px solid @actorAbilityBorderColor; border: 1px solid @actorAbilityBorderColor;
h2 { h2 {
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
.ability-score { .ability-score {
color: @actorAbilityScoreColor; color: @actorAbilityScoreColor;
} }
.ability-modifiers { .ability-modifiers {
.ability-mod, .ability-mod,
.ability-save { .ability-save {
border-color: @actorAbilityBorderColor; border-color: @actorAbilityBorderColor;
} }
} }
} }
} }
.skills { .skills {
li { li {
&:nth-child(even) { &:nth-child(even) {
background-color: @actorSkillsAltRowColor; background-color: @actorSkillsAltRowColor;
} }
.proficiency-toggle { .proficiency-toggle {
color: @colorBlack; color: @colorBlack;
} }
.skill-name { .skill-name {
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
} }
} }
} }
.traits-resources { .traits-resources {
nav { nav {
button { button {
color: @actorNavigationTabsColor; color: @actorNavigationTabsColor;
&.active { &.active {
color: @actorNavigationTabsActiveColor; color: @actorNavigationTabsActiveColor;
border-bottom-color: @actorNavigationTabsActiveColor; border-bottom-color: @actorNavigationTabsActiveColor;
&:hover { &:hover {
background: @actorNavigationTabsActiveHoverBgColor; background: @actorNavigationTabsActiveHoverBgColor;
} }
} }
&:hover { &:hover {
background: @actorNavigationTabsHoverBgColor; background: @actorNavigationTabsHoverBgColor;
} }
} }
} }
section.traits { section.traits {
.trait-selector { .trait-selector {
i.fas { i.fas {
color: @linkColor; color: @linkColor;
} }
} }
.languages { .languages {
label { label {
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
} }
} }
section.resources { section.resources {
.resource-items { .resource-items {
.resource { .resource {
h1 { h1 {
input { input {
color: @headingColor; color: @headingColor;
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
} }
.attribute-value, .attribute-value,
.attribute-value input { .attribute-value input {
color: @actorAttributeInputColor; color: @actorAttributeInputColor;
} }
.attribute-value { .attribute-value {
.value-separator { .value-separator {
color: @actorSeparatorColor; color: @actorSeparatorColor;
} }
} }
} }
} }
.counters { .counters {
.counter { .counter {
h4 { h4 {
&.rollable { &.rollable {
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
} }
.death-success { .death-success {
i { i {
color: @colorGreen; color: @colorGreen;
} }
} }
.death-fail { .death-fail {
i { i {
color: @colorRed; color: @colorRed;
} }
} }
} }
} }
} }
} }
} }
.tab.inventory { .tab.inventory {
.currency { .currency {
color: @headingColor; color: @headingColor;
} }
.encumbrance-wrapper { .encumbrance-wrapper {
.encumbrance-label { .encumbrance-label {
background: @actorEncumbranceLabelBackground; background: @actorEncumbranceLabelBackground;
color: @actorEncumbranceTextColor; color: @actorEncumbranceTextColor;
border: 1px solid @actorEncumbranceBorderColor; border: 1px solid @actorEncumbranceBorderColor;
} }
.encumbrance { .encumbrance {
background: @actorEncumbranceBarBgColor; background: @actorEncumbranceBarBgColor;
.encumbrance-bar { .encumbrance-bar {
background: @actorEncumbranceBarColor; background: @actorEncumbranceBarColor;
} }
} }
} }
} }
.tab.powerbook { .tab.powerbook {
.powercasting-ability { .powercasting-ability {
label, label,
h3 { h3 {
color: @headingColor; color: @headingColor;
span { span {
color: @colorBlack; color: @colorBlack;
} }
} }
} }
} }
.tab.notes { .tab.notes {
section { section {
&>input { &>input {
color: @headingColor; color: @headingColor;
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
} }
} }
} }
&.npc { &.npc {
.swalt-sheet { .swalt-sheet {
header { header {
.experience { .experience {
color: @actorProficiencyTextColor; color: @actorProficiencyTextColor;
} }
} }
} }
} }
} }

View file

@ -1,105 +1,105 @@
input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea {
border-radius: 4px; border-radius: 4px;
transition: all 0.3s; transition: all 0.3s;
&:hover { &:hover {
box-shadow: none; box-shadow: none;
} }
&:focus { &:focus {
box-shadow: none; box-shadow: none;
} }
} }
input[type=range] { input[type=range] {
-webkit-appearance: none; /* Hides the slider so that custom slider can be made */ -webkit-appearance: none; /* Hides the slider so that custom slider can be made */
width: 100%; /* Specific width is required for Firefox. */ width: 100%; /* Specific width is required for Firefox. */
background: transparent; /* Otherwise white in Chrome */ background: transparent; /* Otherwise white in Chrome */
} }
input[type=range]::-webkit-slider-thumb{ input[type=range]::-webkit-slider-thumb{
-webkit-appearance: none; -webkit-appearance: none;
background: @colorRed; background: @colorRed;
width: 12px; width: 12px;
height: 12px; height: 12px;
border-radius: 32px; border-radius: 32px;
cursor: pointer; cursor: pointer;
box-shadow: none; box-shadow: none;
} }
input[type=range]::-moz-range-thumb{ input[type=range]::-moz-range-thumb{
-webkit-appearance: none; -webkit-appearance: none;
background: @colorRed; background: @colorRed;
width: 12px; width: 12px;
height: 12px; height: 12px;
border-radius: 32px; border-radius: 32px;
cursor: pointer; cursor: pointer;
box-shadow: none; box-shadow: none;
} }
input[type=range]::-ms-thumb { input[type=range]::-ms-thumb {
-webkit-appearance: none; -webkit-appearance: none;
background: @colorRed; background: @colorRed;
width: 12px; width: 12px;
height: 12px; height: 12px;
border-radius: 32px; border-radius: 32px;
cursor: pointer; cursor: pointer;
box-shadow: none; box-shadow: none;
} }
input[type=range]::-webkit-slider-runnable-track { input[type=range]::-webkit-slider-runnable-track {
width: 100%; width: 100%;
height: 6px; height: 6px;
cursor: pointer; cursor: pointer;
background: @colorLightBlue; background: @colorLightBlue;
border-radius: 4px; border-radius: 4px;
border: 1px solid @colorBlue; border: 1px solid @colorBlue;
box-shadow: none; box-shadow: none;
} }
input[type=range]:focus::-webkit-slider-runnable-track { input[type=range]:focus::-webkit-slider-runnable-track {
background: @colorBlue; background: @colorBlue;
} }
input[type=range]::-moz-range-track { input[type=range]::-moz-range-track {
width: 100%; width: 100%;
height: 6px; height: 6px;
cursor: pointer; cursor: pointer;
background: @colorLightBlue; background: @colorLightBlue;
border-radius: 4px; border-radius: 4px;
border: 1px solid @colorBlue; border: 1px solid @colorBlue;
box-shadow: none; box-shadow: none;
} }
input[type=range]::-ms-track { input[type=range]::-ms-track {
width: 100%; width: 100%;
height: 6px; height: 6px;
cursor: pointer; cursor: pointer;
background: @colorLightBlue; background: @colorLightBlue;
border-radius: 4px; border-radius: 4px;
border: 1px solid @colorBlue; border: 1px solid @colorBlue;
box-shadow: none; box-shadow: none;
} }
input[type=range]:focus { input[type=range]:focus {
outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */ outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
} }
input[type=range]::-ms-track { input[type=range]::-ms-track {
width: 100%; width: 100%;
cursor: pointer; cursor: pointer;
/* Hides the slider so custom styles can be added */ /* Hides the slider so custom styles can be added */
background: transparent; background: transparent;
border-color: transparent; border-color: transparent;
color: transparent; color: transparent;
} }
button, input[type="button"], input[type="submit"], input[type="reset"] { button, input[type="button"], input[type="submit"], input[type="reset"] {
.openSans(13px, 700); .openSans(13px, 700);
text-align: center; text-align: center;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
cursor: pointer; cursor: pointer;
transition: all 0.3s; transition: all 0.3s;
&:hover, &:focus { &:hover, &:focus {
box-shadow: none; box-shadow: none;
} }
&:disabled { &:disabled {
opacity: 0.6; opacity: 0.6;
cursor: default; cursor: default;
} }
} }

View file

@ -1,53 +1,53 @@
input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea {
border: 1px solid @inputBorderNormal; border: 1px solid @inputBorderNormal;
color: @inputTextColor; color: @inputTextColor;
&:hover { &:hover {
border-color: @inputBorderHover; border-color: @inputBorderHover;
} }
&:focus { &:focus {
border-color: @inputBorderFocus; border-color: @inputBorderFocus;
} }
&::placeholder { &::placeholder {
color: @inputTextColor; color: @inputTextColor;
opacity: 0.5; opacity: 0.5;
} }
::-ms-input-placeholder { /* Microsoft Edge */ ::-ms-input-placeholder { /* Microsoft Edge */
color: @inputTextColor; color: @inputTextColor;
opacity: 0.5; opacity: 0.5;
} }
} }
button, input[type="button"], input[type="submit"], input[type="reset"] { button, input[type="button"], input[type="submit"], input[type="reset"] {
background: @buttonBackground; background: @buttonBackground;
color: @buttonTextColor; color: @buttonTextColor;
&:hover, &:focus { &:hover, &:focus {
background: @buttonHoverBackground; background: @buttonHoverBackground;
} }
&:disabled { &:disabled {
&:hover, &:focus { &:hover, &:focus {
background: @buttonBackground; background: @buttonBackground;
} }
} }
} }
input[type="reset"], button.secondary, button[type="reset"], input[type="button"].secondary, input[type="submit"].secondary { input[type="reset"], button.secondary, button[type="reset"], input[type="button"].secondary, input[type="submit"].secondary {
background: @buttonSecondaryBackground; background: @buttonSecondaryBackground;
color: @buttonSecondaryTextColor; color: @buttonSecondaryTextColor;
&:hover { &:hover {
background: @buttonSecondaryHoverBackground; background: @buttonSecondaryHoverBackground;
} }
&:disabled { &:disabled {
&:hover, &:focus { &:hover, &:focus {
background: @buttonSecondaryBackground; background: @buttonSecondaryBackground;
} }
} }
} }
form { form {
button { button {
border: none; border: none;
} }
.notes, .hint { .notes, .hint {
color: rgba(@bodyFontColor, 0.8); color: rgba(@bodyFontColor, 0.8);
} }
} }

View file

@ -1,76 +1,76 @@
.window-app { .window-app {
border-radius: 4px; border-radius: 4px;
border: none; border: none;
.dropShadow2(); .dropShadow2();
& > header { & > header {
background: @windowHeaderBackground; background: @windowHeaderBackground;
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
border: none; border: none;
.dropShadow1(); .dropShadow1();
margin-bottom: 4px; margin-bottom: 4px;
} }
.window-content { .window-content {
background: @primaryBackground; background: @primaryBackground;
color: @bodyFontColor; color: @bodyFontColor;
footer { footer {
margin-top: 8px; margin-top: 8px;
} }
} }
&.minimized { &.minimized {
& > header, & > .window-header { & > header, & > .window-header {
border: none; border: none;
border-radius: 4px; border-radius: 4px;
margin: 0; margin: 0;
} }
} }
} }
#client-settings { #client-settings {
nav.tabs { nav.tabs {
border: none; border: none;
font-size: 17px; font-size: 17px;
line-height: 1.6; line-height: 1.6;
a.item { a.item {
border-bottom: 3px solid transparent; border-bottom: 3px solid transparent;
color: @bodyFontColor; color: @bodyFontColor;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
} }
&.active { &.active {
text-shadow: none; text-shadow: none;
border-bottom-color: @sidebarTabLinkUnderline; border-bottom-color: @sidebarTabLinkUnderline;
} }
} }
} }
section.content { section.content {
border: none; border: none;
margin-top: 4px; margin-top: 4px;
} }
} }
.dialog-buttons { .dialog-buttons {
margin-top: 8px; margin-top: 8px;
button:last-child { button:last-child {
margin-right: 0; margin-right: 0;
} }
button:not(.default) { button:not(.default) {
border: 1px solid @buttonBackground; border: 1px solid @buttonBackground;
margin-right: 4px; margin-right: 4px;
background: @buttonSecondaryBackground; background: @buttonSecondaryBackground;
color: @buttonSecondaryTextColor; color: @buttonSecondaryTextColor;
&:hover { &:hover {
background: @buttonSecondaryHoverBackground; background: @buttonSecondaryHoverBackground;
} }
} }
button.normal.default { button.normal.default {
border: none; border: none;
background: @buttonBackground; background: @buttonBackground;
color: @buttonTextColor; color: @buttonTextColor;
&:hover { &:hover {
background: @buttonHoverBackground; background: @buttonHoverBackground;
} }
} }
} }

View file

@ -1,84 +1,84 @@
#navigation { #navigation {
#nav-toggle { #nav-toggle {
background: @foundryNavBgColor; background: @foundryNavBgColor;
color: @foundryNavTextColor; color: @foundryNavTextColor;
transform: rotate(-90deg); transform: rotate(-90deg);
} }
.nav-item { .nav-item {
border: 1px solid @foundryNavBorderColor; border: 1px solid @foundryNavBorderColor;
} }
#scene-list { #scene-list {
.scene { .scene {
border: 1px solid @foundryNavBorderColor; border: 1px solid @foundryNavBorderColor;
background: rgba(@foundryNavBgColor, 0.4); background: rgba(@foundryNavBgColor, 0.4);
a { a {
color: @foundryNavSceneLinkColor; color: @foundryNavSceneLinkColor;
} }
&.gm { &.gm {
border: 1px solid @foundryNavBorderColorGM; border: 1px solid @foundryNavBorderColorGM;
background: rgba(@foundryNavBgColorGM, 0.4); background: rgba(@foundryNavBgColorGM, 0.4);
} }
&.view, &.context { &.view, &.context {
box-shadow: 0 0 8px @foundryNavContextShadow; box-shadow: 0 0 8px @foundryNavContextShadow;
border-color: @foundryNavContextBorderColor; border-color: @foundryNavContextBorderColor;
} }
&.active { &.active {
border-color: @foundryNavActiveBorderColor; border-color: @foundryNavActiveBorderColor;
background: @foundryNavActiveBgColor; background: @foundryNavActiveBgColor;
box-shadow: 0 0 8px @foundryNavActiveGlow; box-shadow: 0 0 8px @foundryNavActiveGlow;
} }
} }
} }
} }
#controls { #controls {
.scene-control, .control-tool { .scene-control, .control-tool {
background: @foundryNavBgColor; background: @foundryNavBgColor;
color: @foundryNavTextColor; color: @foundryNavTextColor;
border: 1px solid @foundryNavBorderColor; border: 1px solid @foundryNavBorderColor;
box-shadow: none; box-shadow: none;
&:hover { &:hover {
background: @foundryNavBgColor; background: @foundryNavBgColor;
box-shadow: 0 0 8px @foundryNavContextShadow; box-shadow: 0 0 8px @foundryNavContextShadow;
} }
&.active { &.active {
border-color: @foundryNavActiveBorderColor; border-color: @foundryNavActiveBorderColor;
background: @foundryNavActiveBgColor; background: @foundryNavActiveBgColor;
box-shadow: 0 0 8px @foundryNavActiveGlow; box-shadow: 0 0 8px @foundryNavActiveGlow;
} }
} }
} }
#players { #players {
border: none; border: none;
border-radius: 4px; border-radius: 4px;
h3 { h3 {
background: @sidebarTabBackground; background: @sidebarTabBackground;
border: none; border: none;
margin: 0; margin: 0;
padding: 0 8px; padding: 0 8px;
font-size: 17px; font-size: 17px;
line-height: 30px; line-height: 30px;
.dropShadow1(); .dropShadow1();
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
.players-mode { .players-mode {
color: @foundryPlayersArrowColor; color: @foundryPlayersArrowColor;
} }
} }
ol { ol {
margin: 4px 0; margin: 4px 0;
.player-name.self { .player-name.self {
color: inherit; color: inherit;
font-weight: 700; font-weight: 700;
} }
.player { .player {
color: @bodyFontColor; color: @bodyFontColor;
} }
.player-active { .player-active {
margin-top: 7px; margin-top: 7px;
&.active { &.active {
box-shadow: none; box-shadow: none;
} }
} }
} }
} }

View file

@ -1,382 +1,382 @@
#sidebar { #sidebar {
border: none; //1px solid @colorBlue; border: none; //1px solid @colorBlue;
&.collapsed { &.collapsed {
#sidebar-tabs { #sidebar-tabs {
min-height: 370px; min-height: 370px;
justify-content: center; justify-content: center;
& > .item.active { & > .item.active {
border: none; border: none;
} }
} }
} }
} }
#sidebar-tabs { #sidebar-tabs {
border: none; border: none;
box-shadow: none; box-shadow: none;
justify-content: space-between; justify-content: space-between;
.dropShadow1(); .dropShadow1();
.item { .item {
font-size: 16px; font-size: 16px;
} }
.item.active { .item.active {
border: none; border: none;
box-shadow: none; box-shadow: none;
background: none; background: none;
text-shadow: none; text-shadow: none;
} }
} }
/*----------- /*-----------
** Chat Tab ** Chat Tab
-----------*/ -----------*/
#chat-log { #chat-log {
.chat-message { .chat-message {
border: none; border: none;
border-radius: 4px; border-radius: 4px;
margin-bottom: 8px; margin-bottom: 8px;
.dropShadow1(); .dropShadow1();
& > header { & > header {
color: @colorRed; color: @colorRed;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
margin-bottom: 4px; margin-bottom: 4px;
span { span {
color: @colorBlack; color: @colorBlack;
} }
} }
} }
} }
.notification-pip { .notification-pip {
color: @colorBlue; color: @colorBlue;
} }
.sw5e.chat-card, .sw5e.chat-card,
.midi-qol-item-card { .midi-qol-item-card {
.card-header { .card-header {
padding: 0; padding: 0;
border: none; border: none;
img { img {
flex: 0 0 36px; flex: 0 0 36px;
margin-right: 4px; margin-right: 4px;
} }
h3 { h3 {
flex: 1; flex: 1;
margin: 0; margin: 0;
line-height: 36px; line-height: 36px;
.russoOne(17px); .russoOne(17px);
border-bottom: none; border-bottom: none;
&:hover { &:hover {
text-shadow: none; text-shadow: none;
} }
} }
} }
.card-content { .card-content {
margin: 4px 0; margin: 4px 0;
h3 { h3 {
font-size: 12px; font-size: 12px;
margin: 0; margin: 0;
font-weight: bold; font-weight: bold;
} }
> * { > * {
-webkit-user-select: text; -webkit-user-select: text;
-moz-user-select: text; -moz-user-select: text;
-ms-user-select: text; -ms-user-select: text;
user-select: text; user-select: text;
} }
} }
.card-buttons { .card-buttons {
margin: 4px 0; margin: 4px 0;
span { span {
display: block; display: block;
line-height: 28px; line-height: 28px;
text-align: center; text-align: center;
} }
button { button {
.openSans(13px, 700); .openSans(13px, 700);
padding: 4px 0; padding: 4px 0;
height: auto; height: auto;
line-height: 1.6; line-height: 1.6;
margin: 4px 0; margin: 4px 0;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
&:hover, &:focus { &:hover, &:focus {
box-shadow: none; box-shadow: none;
} }
} }
} }
.card-footer { .card-footer {
padding: 4px 0 0; padding: 4px 0 0;
span { span {
padding: 0 4px 0 0; padding: 0 4px 0 0;
font-size: 10px; font-size: 10px;
&:last-child { &:last-child {
border-right: none; border-right: none;
padding-right: 0; padding-right: 0;
} }
} }
} }
} }
.dice-roll { .dice-roll {
.dice-formula { .dice-formula {
border: none; border: none;
box-shadow: none; box-shadow: none;
border-radius: 4px; border-radius: 4px;
} }
.dice-total { .dice-total {
border-radius: 0; border-radius: 0;
padding: 4px 0; padding: 4px 0;
} }
} }
#chat-controls { #chat-controls {
padding-top: 4px; padding-top: 4px;
} }
#chat-form textarea { #chat-form textarea {
&:focus { &:focus {
box-shadow: none; box-shadow: none;
outline: none; outline: none;
} }
} }
/*----------- /*-----------
** Combat Tab ** Combat Tab
-----------*/ -----------*/
#combat { #combat {
h3 { h3 {
border: none; border: none;
} }
#combat-tracker { #combat-tracker {
li.combatant { li.combatant {
padding: 4px 0; padding: 4px 0;
background: none; background: none;
.token-name { .token-name {
text-shadow: none; text-shadow: none;
} }
h4 { h4 {
color: @colorBlack; color: @colorBlack;
} }
.roll { .roll {
background: none; background: none;
&::before { &::before {
content: "\f6cf"; content: "\f6cf";
.fontAwesome(); .fontAwesome();
font-size: 28px; font-size: 28px;
} }
} }
.initiative { .initiative {
text-shadow: none; text-shadow: none;
} }
&.hidden { &.hidden {
opacity: 0.5; opacity: 0.5;
} }
} }
} }
#combat-controls { #combat-controls {
padding-top: 0; padding-top: 0;
} }
} }
/* /*
** Folders ** Folders
*/ */
.sidebar-tab { .sidebar-tab {
.directory-header { .directory-header {
margin-bottom: 4px; margin-bottom: 4px;
.header-search { .header-search {
position: relative; position: relative;
i.fa-search { i.fa-search {
position: absolute; position: absolute;
left: 8px; left: 8px;
} }
input { input {
text-align: left; text-align: left;
padding-left: 22px; padding-left: 22px;
&:focus { &:focus {
box-shadow: none; box-shadow: none;
} }
} }
} }
} }
.subdirectory { .subdirectory {
border: none; border: none;
margin-left: 8px; margin-left: 8px;
min-height: 8px; min-height: 8px;
} }
.directory-list { .directory-list {
padding-bottom: 4px; padding-bottom: 4px;
.folder { .folder {
& > .folder-header { & > .folder-header {
line-height: default; line-height: default;
padding: 0 0 0 8px; padding: 0 0 0 8px;
position: relative; position: relative;
border: none; border: none;
h3 { h3 {
padding: 8px 4px; padding: 8px 4px;
.openSans(13px, 700); .openSans(13px, 700);
line-height: 1.6; line-height: 1.6;
& > i { & > i {
margin-right: 4px; margin-right: 4px;
} }
} }
a { a {
position: absolute; position: absolute;
top: 0; top: 0;
right: 4px; right: 4px;
height: 100%; height: 100%;
padding: 0 4px; padding: 0 4px;
i { i {
margin-top: 12px; margin-top: 12px;
} }
&.create-folder { &.create-folder {
right: 28px; right: 28px;
} }
} }
} }
} }
.directory-item img { .directory-item img {
flex: 0 0 32px; flex: 0 0 32px;
height: 32px; height: 32px;
width: 32px; width: 32px;
align-self: center; align-self: center;
} }
.actor, .item, .journal, .table { .actor, .item, .journal, .table {
border: none; border: none;
.entity-name { .entity-name {
.openSans(13px, 700); .openSans(13px, 700);
} }
} }
} }
} }
#scenes { #scenes {
.subdirectory { .subdirectory {
border-left: none; border-left: none;
} }
.scene { .scene {
border: none; border: none;
box-shadow: none; box-shadow: none;
position: relative; position: relative;
height: 128px; height: 128px;
& + .scene { & + .scene {
margin-top: 4px; margin-top: 4px;
} }
&::after { &::after {
content: ''; content: '';
display: block; display: block;
width: 100%; width: 100%;
height: 99px; height: 99px;
position: absolute; position: absolute;
top: 28px; top: 28px;
left: 0; left: 0;
} }
h3 { h3 {
.openSans(13px, 700); .openSans(13px, 700);
text-align: left; text-align: left;
text-shadow: none; text-shadow: none;
padding: 4px 4px 4px 12px; padding: 4px 4px 4px 12px;
line-height: 1.6; line-height: 1.6;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
} }
} }
} }
#playlists { #playlists {
.directory-list { .directory-list {
padding: 0 8px; padding: 0 8px;
li.playlist { li.playlist {
padding: 8px; padding: 8px;
border-radius: 4px; border-radius: 4px;
margin-bottom: 8px; margin-bottom: 8px;
border-top: inherit; border-top: inherit;
.dropShadow1(); .dropShadow1();
.playlist-header { .playlist-header {
text-decoration: none; text-decoration: none;
} }
li.sound { li.sound {
border: none; border: none;
h4 { h4 {
.openSans(13px, 400); .openSans(13px, 400);
} }
} }
} }
} }
} }
#compendium { #compendium {
.compendium-entity { .compendium-entity {
margin: 0 4px; margin: 0 4px;
padding: 8px; padding: 8px;
.dropShadow1(); .dropShadow1();
border-radius: 4px; border-radius: 4px;
border: none; border: none;
&+ .compendium-entity { &+ .compendium-entity {
margin-top: 4px; margin-top: 4px;
} }
h3 { h3 {
background: none; background: none;
border: none; border: none;
.russoOne(17px); .russoOne(17px);
padding: 0; padding: 0;
margin-bottom: 4px; margin-bottom: 4px;
} }
ol.compendium-list { ol.compendium-list {
li.compendium-pack { li.compendium-pack {
margin: 0; margin: 0;
padding: 4px; padding: 4px;
border: none; border: none;
.pack-title { .pack-title {
margin: 0; margin: 0;
position: relative; position: relative;
a { a {
.openSans(13px, 700); .openSans(13px, 700);
i { i {
display: none; display: none;
} }
} }
.status-icons { .status-icons {
top: 4px; top: 4px;
font-size: 13px; font-size: 13px;
} }
} }
} }
} }
} }
} }
#settings { #settings {
h2 { h2 {
border: none; border: none;
margin: 0 8px; margin: 0 8px;
padding: 0; padding: 0;
background: none; background: none;
} }
#game-details, #settings-game, #settings-documentation, #settings-access { #game-details, #settings-game, #settings-documentation, #settings-access {
padding: 0 8px; padding: 0 8px;
margin: 0 0 8px; margin: 0 0 8px;
} }
} }

View file

@ -1,297 +1,297 @@
#sidebar-tabs { #sidebar-tabs {
background: @sidebarTabBackground; background: @sidebarTabBackground;
& > .collapse { & > .collapse {
color: @sidebarTabLinkColor; color: @sidebarTabLinkColor;
} }
.item.active { .item.active {
color: @sidebarTabLinkColor; color: @sidebarTabLinkColor;
border-bottom: 3px solid @sidebarTabLinkUnderline; border-bottom: 3px solid @sidebarTabLinkUnderline;
} }
} }
/*----------- /*-----------
** Chat Tab ** Chat Tab
-----------*/ -----------*/
#chat-log { #chat-log {
.chat-message { .chat-message {
background: @chatBackground; background: @chatBackground;
color: @bodyFontColor; color: @bodyFontColor;
& > header { & > header {
color: @chatHeaderColor; color: @chatHeaderColor;
border-bottom: 2px solid @chatHeaderBottomBorderColor; border-bottom: 2px solid @chatHeaderBottomBorderColor;
span { span {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }
} }
} }
.notification-pip { .notification-pip {
color: @chatNotificationColor; color: @chatNotificationColor;
} }
.sw5e.chat-card, .sw5e.chat-card,
.midi-qol-item-card { .midi-qol-item-card {
.card-header { .card-header {
h3 { h3 {
color: @bodyFontColor; color: @bodyFontColor;
&:hover { &:hover {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }
} }
.card-buttons { .card-buttons {
span { span {
border: 1px solid @cardButtonBorder; border: 1px solid @cardButtonBorder;
} }
} }
.card-footer { .card-footer {
border-top: 1px solid @cardFooterBorder; border-top: 1px solid @cardFooterBorder;
span { span {
border-right: 1px solid @cardFooterSeparator; border-right: 1px solid @cardFooterSeparator;
&:last-child { &:last-child {
border-right: none; border-right: none;
} }
} }
} }
} }
.dice-roll { .dice-roll {
.dice-formula { .dice-formula {
background: @diceFormulaBackground; background: @diceFormulaBackground;
color: @diceFormualColor; color: @diceFormualColor;
box-shadow: none; box-shadow: none;
border-radius: 4px; border-radius: 4px;
} }
.dice-total { .dice-total {
background: @diceTotalBackground; background: @diceTotalBackground;
border: 1px solid @diceTotalBorder; border: 1px solid @diceTotalBorder;
box-shadow: 0 0 12px rgba(@diceTotalShadow,.8); box-shadow: 0 0 12px rgba(@diceTotalShadow,.8);
&.success { &.success {
color: @diceSuccessColor; color: @diceSuccessColor;
} }
&.failure { &.failure {
color: @diceFailureColor; color: @diceFailureColor;
} }
&.critical { &.critical {
color: @diceCriticalColor; color: @diceCriticalColor;
background: @diceCriticalBackground; background: @diceCriticalBackground;
box-shadow: 0 0 12px rgba(@diceCriticalColor,.5); box-shadow: 0 0 12px rgba(@diceCriticalColor,.5);
} }
&.fumble { &.fumble {
color: @diceFumbleColor; color: @diceFumbleColor;
background: @diceFumbleBackground; background: @diceFumbleBackground;
box-shadow: 0 0 12px rgba(@diceFumbleColor,.5); box-shadow: 0 0 12px rgba(@diceFumbleColor,.5);
} }
} }
} }
#chat-controls { #chat-controls {
.roll-type-select { .roll-type-select {
background: #4f4f4f; background: #4f4f4f;
color: #FFFFFF; color: #FFFFFF;
} }
label { label {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }
#chat-form textarea { #chat-form textarea {
background: #4f4f4f; background: #4f4f4f;
} }
/*----------- /*-----------
** Combat Tab ** Combat Tab
-----------*/ -----------*/
#combat { #combat {
#combat-round { #combat-round {
color: @combatRoundColor; color: @combatRoundColor;
border-bottom: 2px solid @combatRoundColor; border-bottom: 2px solid @combatRoundColor;
.encounters { .encounters {
h4 { h4 {
color: @combatRoundColor; color: @combatRoundColor;
} }
a { a {
color: @linkSecondaryColor; color: @linkSecondaryColor;
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
} }
} }
#combat-tracker { #combat-tracker {
//padding-top: 4px; //padding-top: 4px;
li.combatant { li.combatant {
color: @bodyFontColor; color: @bodyFontColor;
&:nth-child(even) { &:nth-child(even) {
background: rgba(@altRowBackground, 0.5); background: rgba(@altRowBackground, 0.5);
} }
h4 { h4 {
color: @bodyFontColor color: @bodyFontColor
} }
.roll { .roll {
color: @linkSecondaryColor; color: @linkSecondaryColor;
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
.combatant-control { .combatant-control {
color: @combatCombatantControlColor; color: @combatCombatantControlColor;
&.active { &.active {
color: @combatCombatantControlColorActive; color: @combatCombatantControlColorActive;
} }
} }
.token-resource { .token-resource {
color: @combatTokenResourceColor; color: @combatTokenResourceColor;
border-right: 1px solid @combatTokenResouceBorder; border-right: 1px solid @combatTokenResouceBorder;
} }
&.active { &.active {
color: @combatActiveCombatantColor; color: @combatActiveCombatantColor;
.initiative, h4 { .initiative, h4 {
color: @combatActiveCombatantColor; color: @combatActiveCombatantColor;
} }
} }
&.hidden { &.hidden {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }
} }
#combat-controls { #combat-controls {
border-top: 1px solid @combatControlsBorder; border-top: 1px solid @combatControlsBorder;
} }
} }
/* /*
** Folders ** Folders
*/ */
.sidebar-tab { .sidebar-tab {
.directory-header { .directory-header {
.header-search { .header-search {
i.fa-search { i.fa-search {
color: @folderSearchIconColor; color: @folderSearchIconColor;
} }
input { input {
background: @inputBackgroundColor; background: @inputBackgroundColor;
} }
} }
} }
.subdirectory { .subdirectory {
background: @folderSubdirectoryBackground; background: @folderSubdirectoryBackground;
.folder { .folder {
border-left: 2px solid rgba(@folderSubdirectoryBorder, 0.4); border-left: 2px solid rgba(@folderSubdirectoryBorder, 0.4);
} }
} }
.directory-list { .directory-list {
li + li { li + li {
border-top: 1px solid @directoryListItemBorder; border-top: 1px solid @directoryListItemBorder;
} }
.folder { .folder {
& > .folder-header { & > .folder-header {
background: @folderHeaderBackground; background: @folderHeaderBackground;
h3 { h3 {
background: @folderHeaderBackground; background: @folderHeaderBackground;
color: @folderHeaderColor; color: @folderHeaderColor;
& > i { & > i {
color: @folderIconColor; color: @folderIconColor;
} }
} }
a { a {
color: @linkSecondaryColor; color: @linkSecondaryColor;
&:hover { &:hover {
color: @linkColor; color: @linkColor;
} }
} }
} }
&.collapsed > .folder-header { &.collapsed > .folder-header {
background: @folderHeaderBackground; background: @folderHeaderBackground;
} }
& + .entity { & + .entity {
border-top: 1px solid @directoryListItemBorder; border-top: 1px solid @directoryListItemBorder;
} }
} }
.actor, .item, .journal, .table { .actor, .item, .journal, .table {
background: @entityBackgroundColor; background: @entityBackgroundColor;
.entity-name { .entity-name {
color: @entityNameColor; color: @entityNameColor;
} }
&:nth-child(even) { &:nth-child(even) {
background: rgba(@altRowBackground, 0.3); background: rgba(@altRowBackground, 0.3);
} }
} }
} }
} }
#scenes { #scenes {
.scene { .scene {
border-top: 1px solid @sceneBorderColor; border-top: 1px solid @sceneBorderColor;
border-left: 4px solid @sceneBorderColor; border-left: 4px solid @sceneBorderColor;
&::after { &::after {
box-shadow: 0 0 20px @sceneBorderColor inset; box-shadow: 0 0 20px @sceneBorderColor inset;
} }
h3 { h3 {
background: @sceneBackgroundColor; background: @sceneBackgroundColor;
} }
} }
} }
#playlists { #playlists {
.directory-list { .directory-list {
li.playlist { li.playlist {
background: @playlistBackgroundColor; background: @playlistBackgroundColor;
.playlist-header { .playlist-header {
background: @playlistBackgroundColor; background: @playlistBackgroundColor;
color: @colorRed; color: @colorRed;
border-bottom: 2px solid @playlistHeaderBorder; border-bottom: 2px solid @playlistHeaderBorder;
} }
li.sound { li.sound {
color: @playlistSoundColor; color: @playlistSoundColor;
} }
a.sound-control { a.sound-control {
color: @linkColor; color: @linkColor;
} }
} }
} }
} }
#compendium { #compendium {
.compendium-entity { .compendium-entity {
background: @compendiumEntityBackground !important; background: @compendiumEntityBackground !important;
h3 { h3 {
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
ol.compendium-list { ol.compendium-list {
li.compendium-pack { li.compendium-pack {
&:nth-child(even) { &:nth-child(even) {
background: rgba(@altRowBackground, 0.3); background: rgba(@altRowBackground, 0.3);
} }
.pack-title { .pack-title {
.status-icons { .status-icons {
color: @compendiumStatusIcon; color: @compendiumStatusIcon;
} }
} }
footer.compendium-footer { footer.compendium-footer {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }
} }
} }
} }
#settings { #settings {
h2 { h2 {
color: @headingColor; color: @headingColor;
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
#game-details, #settings-game, #settings-documentation, #settings-access { #game-details, #settings-game, #settings-documentation, #settings-access {
color: @bodyFontColor; color: @bodyFontColor;
} }
} }

View file

@ -1,500 +1,500 @@
#sidebar { #sidebar {
border: none; //1px solid @colorBlue; border: none; //1px solid @colorBlue;
} }
#sidebar-tabs { #sidebar-tabs {
border: none; border: none;
box-shadow: none; box-shadow: none;
background: white; background: white;
.dropShadow1(); .dropShadow1();
& > .collapse { & > .collapse {
color: @colorRed; color: @colorRed;
} }
.item { .item {
font-size: 16px; font-size: 16px;
} }
.item.active { .item.active {
color: @colorRed; color: @colorRed;
border: none; border: none;
border-bottom: 3px solid @colorRed; border-bottom: 3px solid @colorRed;
box-shadow: none; box-shadow: none;
background: none; background: none;
text-shadow: none; text-shadow: none;
} }
} }
/*----------- /*-----------
** Chat Tab ** Chat Tab
-----------*/ -----------*/
#chat-log { #chat-log {
.chat-message { .chat-message {
background: white; background: white;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
margin-bottom: 8px; margin-bottom: 8px;
.dropShadow1(); .dropShadow1();
& > header { & > header {
color: @colorRed; color: @colorRed;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
margin-bottom: 4px; margin-bottom: 4px;
span { span {
color: @colorBlack; color: @colorBlack;
} }
} }
} }
} }
.notification-pip { .notification-pip {
color: @colorBlue; color: @colorBlue;
text-shadow: none; text-shadow: none;
} }
.sw5e.chat-card, .sw5e.chat-card,
.midi-qol-item-card { .midi-qol-item-card {
font-size: 13px; font-size: 13px;
.card-header { .card-header {
padding: 0; padding: 0;
border: none; border: none;
img { img {
flex: 0 0 36px; flex: 0 0 36px;
margin-right: 4px; margin-right: 4px;
} }
h3 { h3 {
flex: 1; flex: 1;
margin: 0; margin: 0;
line-height: 36px; line-height: 36px;
.russoOne(17px); .russoOne(17px);
color: @colorBlack; color: @colorBlack;
&:hover { &:hover {
color: @colorBlack; color: @colorBlack;
text-shadow: none; text-shadow: none;
} }
} }
} }
.card-content { .card-content {
margin: 4px 0; margin: 4px 0;
h3 { h3 {
font-size: 12px; font-size: 12px;
margin: 0; margin: 0;
font-weight: bold; font-weight: bold;
} }
> * { > * {
-webkit-user-select: text; -webkit-user-select: text;
-moz-user-select: text; -moz-user-select: text;
-ms-user-select: text; -ms-user-select: text;
user-select: text; user-select: text;
} }
} }
.card-buttons { .card-buttons {
margin: 4px 0; margin: 4px 0;
span { span {
display: block; display: block;
line-height: 28px; line-height: 28px;
text-align: center; text-align: center;
border: 1px solid @colorLightGray; border: 1px solid @colorLightGray;
} }
button { button {
.openSans(13px, 700); .openSans(13px, 700);
padding: 4px 0; padding: 4px 0;
height: auto; height: auto;
line-height: 1.6; line-height: 1.6;
margin: 4px 0; margin: 4px 0;
background: @colorRed; background: @colorRed;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
&:hover, &:focus { &:hover, &:focus {
background-color: lighten(@colorRed, 5); background-color: lighten(@colorRed, 5);
box-shadow: none; box-shadow: none;
} }
} }
} }
.card-footer { .card-footer {
padding: 4px 0 0; padding: 4px 0 0;
border-top: 1px solid @colorLightBlue; border-top: 1px solid @colorLightBlue;
span { span {
border-right: 2px groove #FFF; border-right: 2px groove #FFF;
padding: 0 4px 0 0; padding: 0 4px 0 0;
font-size: 10px; font-size: 10px;
&:last-child { &:last-child {
border-right: none; border-right: none;
padding-right: 0; padding-right: 0;
} }
} }
} }
} }
.dice-roll { .dice-roll {
.dice-formula { .dice-formula {
background: none; background: none;
border: none; border: none;
} }
.dice-total { .dice-total {
background: @colorPaleBlue; background: @colorPaleBlue;
border: 1px solid @colorBlue; border: 1px solid @colorBlue;
border-radius: 0; border-radius: 0;
padding: 4px 0; padding: 4px 0;
box-shadow: 0 0 12px rgba(@colorBlue,.5); box-shadow: 0 0 12px rgba(@colorBlue,.5);
&.success { &.success {
color: inherit; color: inherit;
background: #c7d0c0; background: #c7d0c0;
border: 1px solid #006c00; border: 1px solid #006c00;
} }
&.failure { &.failure {
color: inherit; color: inherit;
background: #ffdddd; background: #ffdddd;
border: 1px solid #6e0000; border: 1px solid #6e0000;
} }
&.critical { &.critical {
color: @colorGreen; color: @colorGreen;
background: @colorPaleGreen; background: @colorPaleGreen;
box-shadow: 0 0 12px rgba(@colorGreen,.5); box-shadow: 0 0 12px rgba(@colorGreen,.5);
} }
&.fumble { &.fumble {
color: red; color: red;
} }
} }
} }
#chat-controls { #chat-controls {
&.roll-type-select { &.roll-type-select {
background: #4f4f4f; background: #4f4f4f;
color: #FFFFFF; color: #FFFFFF;
} }
padding-top: 4px; padding-top: 4px;
label { label {
color: @colorBlack; color: @colorBlack;
} }
} }
#chat-form textarea { #chat-form textarea {
background: #4f4f4f; background: #4f4f4f;
&:focus { &:focus {
box-shadow: none; box-shadow: none;
outline: none; outline: none;
} }
} }
/*----------- /*-----------
** Combat Tab ** Combat Tab
-----------*/ -----------*/
#combat { #combat {
#combat-round { #combat-round {
color: @colorRed; color: @colorRed;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
.encounters { .encounters {
h4 { h4 {
color: @colorRed; color: @colorRed;
} }
a { a {
color: @colorGray; color: @colorGray;
&:hover { &:hover {
color: @colorRed; color: @colorRed;
} }
} }
} }
} }
#combat-tracker { #combat-tracker {
//padding-top: 4px; //padding-top: 4px;
li.combatant { li.combatant {
padding: 4px 0; padding: 4px 0;
color: @colorBlack; color: @colorBlack;
background: none; background: none;
&:nth-child(even) { &:nth-child(even) {
background: rgba(@colorPaleBlue, 0.5); background: rgba(@colorPaleBlue, 0.5);
} }
h4 { h4 {
color: @colorBlack; color: @colorBlack;
text-shadow: none; text-shadow: none;
} }
.roll { .roll {
background: none; background: none;
color: @colorGray; color: @colorGray;
&::before { &::before {
content: "\f6cf"; content: "\f6cf";
.fontAwesome(); .fontAwesome();
font-size: 28px; font-size: 28px;
} }
&:hover { &:hover {
color: @colorRed; color: @colorRed;
} }
} }
.combatant-control { .combatant-control {
color: @colorLightGray; color: @colorLightGray;
text-shadow: none; text-shadow: none;
&.active { &.active {
color: @colorDarkGray; color: @colorDarkGray;
} }
} }
.token-resource { .token-resource {
color: @colorGray; color: @colorGray;
border-right: 1px solid @colorLightGray; border-right: 1px solid @colorLightGray;
} }
.initiative { .initiative {
text-shadow: none; text-shadow: none;
} }
&.active { &.active {
color: @colorBlue; color: @colorBlue;
.initiative, h4 { .initiative, h4 {
color: @colorBlue; color: @colorBlue;
} }
} }
&.hidden { &.hidden {
opacity: 0.5; opacity: 0.5;
color: @colorBlack; color: @colorBlack;
} }
} }
} }
#combat-controls { #combat-controls {
padding-top: 0; padding-top: 0;
border-top: 1px solid @colorBlue; border-top: 1px solid @colorBlue;
} }
} }
/* /*
** Folders ** Folders
*/ */
.sidebar-tab { .sidebar-tab {
.directory-header { .directory-header {
margin-bottom: 4px; margin-bottom: 4px;
.header-search { .header-search {
position: relative; position: relative;
i.fa-search { i.fa-search {
position: absolute; position: absolute;
left: 8px; left: 8px;
color: @colorBlue; color: @colorBlue;
} }
input { input {
text-align: left; text-align: left;
padding-left: 22px; padding-left: 22px;
background: white; background: white;
&:focus { &:focus {
box-shadow: none; box-shadow: none;
} }
} }
} }
} }
.subdirectory { .subdirectory {
border: none; border: none;
margin-left: 8px; margin-left: 8px;
background: white; background: white;
min-height: 8px; min-height: 8px;
.folder { .folder {
border-left: 2px solid rgba(@colorBlack, 0.4); border-left: 2px solid rgba(@colorBlack, 0.4);
} }
} }
.directory-list { .directory-list {
padding-bottom: 4px; padding-bottom: 4px;
li + li { li + li {
border-top: 1px solid @colorBlue; border-top: 1px solid @colorBlue;
} }
.folder { .folder {
& > .folder-header { & > .folder-header {
line-height: default; line-height: default;
padding: 0 0 0 8px; padding: 0 0 0 8px;
position: relative; position: relative;
border: none; border: none;
background: white; background: white;
h3 { h3 {
padding: 8px 4px; padding: 8px 4px;
background: white; background: white;
color: @colorBlack; color: @colorBlack;
.openSans(13px, 700); .openSans(13px, 700);
line-height: 1.6; line-height: 1.6;
& > i { & > i {
margin-right: 4px; margin-right: 4px;
color: @colorBlue; color: @colorBlue;
} }
} }
a { a {
position: absolute; position: absolute;
top: 0; top: 0;
right: 4px; right: 4px;
height: 100%; height: 100%;
padding: 0 4px; padding: 0 4px;
color: @colorLightGray; color: @colorLightGray;
&:hover { &:hover {
color: @colorRed; color: @colorRed;
} }
i { i {
margin-top: 12px; margin-top: 12px;
} }
&.create-folder { &.create-folder {
right: 28px; right: 28px;
} }
} }
} }
&.collapsed > .folder-header { &.collapsed > .folder-header {
background: white; background: white;
} }
& + .entity { & + .entity {
border-top: 1px solid @colorBlue; border-top: 1px solid @colorBlue;
} }
} }
.directory-item img { .directory-item img {
flex: 0 0 32px; flex: 0 0 32px;
height: 32px; height: 32px;
width: 32px; width: 32px;
align-self: center; align-self: center;
} }
.actor, .item, .journal, .table { .actor, .item, .journal, .table {
background: white; background: white;
border: none; border: none;
.entity-name { .entity-name {
.openSans(13px, 700); .openSans(13px, 700);
color: @colorBlack; color: @colorBlack;
} }
&:nth-child(even) { &:nth-child(even) {
background: rgba(@colorPaleBlue, 0.3); background: rgba(@colorPaleBlue, 0.3);
} }
} }
} }
} }
#scenes { #scenes {
.subdirectory { .subdirectory {
border-left: none; border-left: none;
} }
.scene { .scene {
border: none; border: none;
border-top: 1px solid @colorBlue; border-top: 1px solid @colorBlue;
border-left: 4px solid @colorBlue; border-left: 4px solid @colorBlue;
box-shadow: none; box-shadow: none;
position: relative; position: relative;
height: 128px; height: 128px;
//margin-bottom: 4px; //margin-bottom: 4px;
& + .scene { & + .scene {
margin-top: 4px; margin-top: 4px;
} }
&::after { &::after {
content: ''; content: '';
display: block; display: block;
width: 100%; width: 100%;
height: 99px; height: 99px;
position: absolute; position: absolute;
top: 28px; top: 28px;
left: 0; left: 0;
box-shadow: 0 0 20px @colorBlue inset; box-shadow: 0 0 20px @colorBlue inset;
} }
h3 { h3 {
.openSans(13px, 700); .openSans(13px, 700);
text-align: left; text-align: left;
text-shadow: none; text-shadow: none;
padding: 4px 4px 4px 12px; padding: 4px 4px 4px 12px;
background: white; background: white;
line-height: 1.6; line-height: 1.6;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
} }
} }
} }
#playlists { #playlists {
.directory-list { .directory-list {
padding: 0 8px; padding: 0 8px;
li.playlist { li.playlist {
padding: 8px; padding: 8px;
border-radius: 4px; border-radius: 4px;
background: white; background: white;
margin-bottom: 8px; margin-bottom: 8px;
border-top: inherit; border-top: inherit;
.dropShadow1(); .dropShadow1();
.playlist-header { .playlist-header {
background: white; background: white;
color: @colorRed; color: @colorRed;
text-decoration: none; text-decoration: none;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
} }
li.sound { li.sound {
border: none; border: none;
color: @colorBlack; color: @colorBlack;
h4 { h4 {
.openSans(13px, 400); .openSans(13px, 400);
} }
} }
a.sound-control { a.sound-control {
color: @colorRed; color: @colorRed;
} }
} }
} }
} }
#compendium { #compendium {
.compendium-entity { .compendium-entity {
margin: 0 4px; margin: 0 4px;
padding: 8px; padding: 8px;
background: white !important; background: white !important;
.dropShadow1(); .dropShadow1();
border-radius: 4px; border-radius: 4px;
border: none; border: none;
&+ .compendium-entity { &+ .compendium-entity {
margin-top: 4px; margin-top: 4px;
} }
h3 { h3 {
border: none; border: none;
color: @colorRed; color: @colorRed;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
.russoOne(17px); .russoOne(17px);
padding: 0; padding: 0;
margin-bottom: 4px; margin-bottom: 4px;
} }
ol.compendium-list { ol.compendium-list {
li.compendium-pack { li.compendium-pack {
margin: 0; margin: 0;
padding: 4px; padding: 4px;
border: none; border: none;
&:nth-child(even) { &:nth-child(even) {
background: rgba(@colorPaleBlue, 0.3); background: rgba(@colorPaleBlue, 0.3);
} }
.pack-title { .pack-title {
margin: 0; margin: 0;
position: relative; position: relative;
a { a {
.openSans(13px, 700); .openSans(13px, 700);
i { i {
display: none; display: none;
} }
} }
.status-icons { .status-icons {
top: 4px; top: 4px;
color: @colorLightGray; color: @colorLightGray;
font-size: 13px; font-size: 13px;
} }
} }
footer.compendium-footer { footer.compendium-footer {
color: @colorBlack; color: @colorBlack;
} }
} }
} }
} }
} }
#settings { #settings {
h2 { h2 {
color: @colorRed; color: @colorRed;
border: none; border: none;
border-bottom: 2px solid @colorBlue; border-bottom: 2px solid @colorBlue;
margin: 0 8px; margin: 0 8px;
padding: 0; padding: 0;
} }
#game-details, #settings-game, #settings-documentation, #settings-access { #game-details, #settings-game, #settings-documentation, #settings-access {
padding: 0 8px; padding: 0 8px;
margin: 0 0 8px; margin: 0 0 8px;
color: @colorBlack; color: @colorBlack;
} }
} }

View file

@ -1,47 +1,47 @@
@import "_variables.less"; @import "_variables.less";
@import "_variables-dark.less"; @import "_variables-dark.less";
body.dark-theme { body.dark-theme {
.app { .app {
background: @primaryBackground; background: @primaryBackground;
} }
h1, h1,
h2, h2,
h3, h3,
h4, h4,
h5, h5,
h6 { h6 {
color: @headingColor; color: @headingColor;
} }
h3 { h3 {
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
a { a {
color: @linkColor; color: @linkColor;
text-decoration: none; text-decoration: none;
&:hover, &:hover,
&:active { &:active {
text-shadow: none; text-shadow: none;
text-decoration: underline; text-decoration: underline;
} }
} }
blockquote { blockquote {
padding: 4px 8px; padding: 4px 8px;
background-color: @blockquoteBackground; background-color: @blockquoteBackground;
border: 1px solid @blockquoteBorder; border: 1px solid @blockquoteBorder;
box-shadow: @blockquoteShadow; box-shadow: @blockquoteShadow;
} }
hr { hr {
border-width: 0 0 1px 0; border-width: 0 0 1px 0;
border-bottom: 1px solid @hrColor; border-bottom: 1px solid @hrColor;
} }
@import "components/forms-themes.less"; @import "components/forms-themes.less";
@import "components/sidebar-themes.less"; @import "components/sidebar-themes.less";
@import "components/foundry-nav-themes.less"; @import "components/foundry-nav-themes.less";
@import "components/foundry-app-window-themes.less"; @import "components/foundry-app-window-themes.less";
@import "components/actor-themes.less"; @import "components/actor-themes.less";
} }

View file

@ -1,194 +1,194 @@
/* open-sans-regular - latin */ /* open-sans-regular - latin */
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('./fonts/OpenSans-Regular.ttf'); src: url('./fonts/OpenSans-Regular.ttf');
} }
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: url('./fonts/OpenSans-Italic.ttf'); src: url('./fonts/OpenSans-Italic.ttf');
} }
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: url('./fonts/OpenSans-Bold.ttf'); src: url('./fonts/OpenSans-Bold.ttf');
} }
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
font-style: italic; font-style: italic;
font-weight: 700; font-weight: 700;
src: url('./fonts/OpenSans-BoldItalic.ttf'); src: url('./fonts/OpenSans-BoldItalic.ttf');
} }
/* russo-one-regular - latin */ /* russo-one-regular - latin */
@font-face { @font-face {
font-family: 'Russo One'; font-family: 'Russo One';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('./fonts/RussoOne.ttf'); src: url('./fonts/RussoOne.ttf');
} }
@font-face { @font-face {
font-family: 'Russo One'; font-family: 'Russo One';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: url('./fonts/RussoOne.ttf'); src: url('./fonts/RussoOne.ttf');
} }
@font-face { @font-face {
font-family: 'Russo One'; font-family: 'Russo One';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: url('./fonts/RussoOne.ttf'); src: url('./fonts/RussoOne.ttf');
} }
@font-face { @font-face {
font-family: 'Aurebesh'; font-family: 'Aurebesh';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('./fonts/Aurebesh.ttf'); src: url('./fonts/Aurebesh.ttf');
} }
@font-face { @font-face {
font-family: 'Engli-Besh'; font-family: 'Engli-Besh';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('./fonts/EngliBesh-KG3W.ttf'); src: url('./fonts/EngliBesh-KG3W.ttf');
} }
@import "_variables.less"; @import "_variables.less";
html { html {
box-sizing: border-box; box-sizing: border-box;
} }
*, *:before, *:after { *, *:before, *:after {
box-sizing: inherit; box-sizing: inherit;
} }
// ::-webkit-scrollbar { // ::-webkit-scrollbar {
// width: 6px; // width: 6px;
// height: 6px; // height: 6px;
// } // }
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
border: 1px solid @colorBlue; border: 1px solid @colorBlue;
border-radius: 4px; border-radius: 4px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
outline: none; outline: none;
border-radius: 4px; border-radius: 4px;
background: @colorBlue; background: @colorBlue;
border: none; border: none;
} }
:root { :root {
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: @colorBlue @colorPaleBlue; scrollbar-color: @colorBlue @colorPaleBlue;
} }
body { body {
.openSans(13px, 400); .openSans(13px, 400);
background-image: url('./ui/SW5e-logo.svg'); background-image: url('./ui/SW5e-logo.svg');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover; background-size: cover;
} }
h1 { h1 {
.russoOne(34px); .russoOne(34px);
} }
h2 { h2 {
.russoOne(27px); .russoOne(27px);
} }
h3 { h3 {
.russoOne(21px); .russoOne(21px);
} }
h4 { h4 {
.russoOne(17px); .russoOne(17px);
} }
h5, h6 { h5, h6 {
.russoOne(13px); .russoOne(13px);
} }
a { a {
text-decoration: none; text-decoration: none;
&:hover, &:active { &:hover, &:active {
text-shadow: none; text-shadow: none;
text-decoration: underline; text-decoration: underline;
} }
} }
.app { .app {
border: none;// 1px solid @colorBlue; border: none;// 1px solid @colorBlue;
.dropShadow1(); .dropShadow1();
} }
#pause { #pause {
img {display: none;} img {display: none;}
background: none; background: none;
height: 128px; height: 128px;
&::before { &::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
margin-left: -64px; margin-left: -64px;
left: 50%; left: 50%;
width: 128px; width: 128px;
height: 128px; height: 128px;
background: url("ui/pause-inner.svg") no-repeat 50% 50%; background: url("ui/pause-inner.svg") no-repeat 50% 50%;
animation-name: pause-spin; animation-name: pause-spin;
animation-duration: 10000ms; animation-duration: 10000ms;
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-timing-function: linear; animation-timing-function: linear;
} }
&::after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
margin-left: -64px; margin-left: -64px;
left: 50%; left: 50%;
width: 128px; width: 128px;
height: 128px; height: 128px;
background: url("ui/pause-outer.svg") no-repeat 50% 50%; background: url("ui/pause-outer.svg") no-repeat 50% 50%;
animation-name: pause-spin; animation-name: pause-spin;
animation-duration: 5000ms; animation-duration: 5000ms;
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-timing-function: linear; animation-timing-function: linear;
animation-direction: reverse; animation-direction: reverse;
} }
h3 { h3 {
border-bottom: 0; border-bottom: 0;
line-height: 1; line-height: 1;
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
width: 256px; width: 256px;
margin-left: -128px; margin-left: -128px;
margin-top: -13px; margin-top: -13px;
text-shadow: 0 0 24px @colorBlue; text-shadow: 0 0 24px @colorBlue;
&::before, &::after { &::before, &::after {
position: absolute; position: absolute;
font-family: "Aurebesh", sans-serif; font-family: "Aurebesh", sans-serif;
font-size: 13px; font-size: 13px;
color: @colorGray; color: @colorGray;
animation: none; animation: none;
opacity: 0.8; opacity: 0.8;
text-shadow: 0 0 8px @colorBlue; text-shadow: 0 0 8px @colorBlue;
} }
&::before { &::before {
content: "GAME"; content: "GAME";
top: -13px; top: -13px;
left: 42px; left: 42px;
} }
&::after { &::after {
content: "PAUSED"; content: "PAUSED";
bottom: -13px; bottom: -13px;
right: 42px; right: 42px;
} }
} }
} }
@import "components/forms-global.less"; @import "components/forms-global.less";
@import "components/sidebar-global.less"; @import "components/sidebar-global.less";
@import "components/actor-global.less"; @import "components/actor-global.less";
@keyframes pause-spin { @keyframes pause-spin {
from { from {
transform:rotate(0deg); transform:rotate(0deg);
} }
to { to {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }

View file

@ -1,47 +1,47 @@
@import "_variables.less"; @import "_variables.less";
@import "_variables-light.less"; @import "_variables-light.less";
body.light-theme { body.light-theme {
.app { .app {
background: @primaryBackground; background: @primaryBackground;
} }
h1, h1,
h2, h2,
h3, h3,
h4, h4,
h5, h5,
h6 { h6 {
color: @headingColor; color: @headingColor;
} }
h3 { h3 {
border-bottom: 2px solid @headerBorderColor; border-bottom: 2px solid @headerBorderColor;
} }
a { a {
color: @linkColor; color: @linkColor;
text-decoration: none; text-decoration: none;
&:hover, &:hover,
&:active { &:active {
text-shadow: none; text-shadow: none;
text-decoration: underline; text-decoration: underline;
} }
} }
blockquote { blockquote {
padding: 4px 8px; padding: 4px 8px;
background-color: @blockquoteBackground; background-color: @blockquoteBackground;
border: 1px solid @blockquoteBorder; border: 1px solid @blockquoteBorder;
box-shadow: @blockquoteShadow; box-shadow: @blockquoteShadow;
} }
hr { hr {
border-width: 0 0 1px 0; border-width: 0 0 1px 0;
border-bottom: 1px solid @hrColor; border-bottom: 1px solid @hrColor;
} }
@import "components/forms-themes.less"; @import "components/forms-themes.less";
@import "components/sidebar-themes.less"; @import "components/sidebar-themes.less";
@import "components/foundry-nav-themes.less"; @import "components/foundry-nav-themes.less";
@import "components/foundry-app-window-themes.less"; @import "components/foundry-app-window-themes.less";
@import "components/actor-themes.less"; @import "components/actor-themes.less";
} }

View file

@ -1,61 +1,61 @@
@import "variables.less"; @import "variables.less";
a { a {
color: @colorRed; color: @colorRed;
text-decoration: none; text-decoration: none;
&:hover, &:active { &:hover, &:active {
text-shadow: none; text-shadow: none;
text-decoration: underline; text-decoration: underline;
} }
} }
.app { .app {
background: @sheetBackground; background: @sheetBackground;
border: none;// 1px solid @colorBlue; border: none;// 1px solid @colorBlue;
.dropShadow1(); .dropShadow1();
} }
#context-menu { #context-menu {
background: none; background: none;
border: none; border: none;
border-radius: 0; border-radius: 0;
color: @colorBlack; color: @colorBlack;
padding: 0 8px; padding: 0 8px;
ol.context-items { ol.context-items {
background: white; background: white;
border-radius: 4px; border-radius: 4px;
border: 1px solid @colorLightGray; border: 1px solid @colorLightGray;
.dropShadow2(); .dropShadow2();
li.context-item { li.context-item {
&:first-child { &:first-child {
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-top-right-radius: 4px; border-top-right-radius: 4px;
} }
&:last-child { &:last-child {
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px; border-bottom-right-radius: 4px;
} }
i { i {
color: @colorBlue; color: @colorBlue;
} }
&:hover { &:hover {
background: @colorRed; background: @colorRed;
color: white; color: white;
text-shadow: none; text-shadow: none;
cursor: pointer; cursor: pointer;
i { i {
color: white; color: white;
} }
} }
& + li { & + li {
border-top: 1px solid @colorPaleGray; border-top: 1px solid @colorPaleGray;
} }
} }
} }
} }
@import "components/forms.less"; @import "components/forms.less";
@import "components/sidebar.less"; @import "components/sidebar.less";

View file

@ -458,8 +458,8 @@ export default class Actor5e extends Actor {
return weight + (q * w); return weight + (q * w);
}, 0); }, 0);
// [Optional] add Currency Weight // [Optional] add Currency Weight (for non-transformed actors)
if ( game.settings.get("sw5e", "currencyWeight") ) { if ( game.settings.get("sw5e", "currencyWeight") && actorData.data.currency ) {
const currency = actorData.data.currency; const currency = actorData.data.currency;
const numCoins = Object.values(currency).reduce((val, denom) => val += Math.max(denom, 0), 0); const numCoins = Object.values(currency).reduce((val, denom) => val += Math.max(denom, 0), 0);
weight += numCoins / CONFIG.SW5E.encumbrance.currencyPerWeight; weight += numCoins / CONFIG.SW5E.encumbrance.currencyPerWeight;
@ -553,43 +553,56 @@ export default class Actor5e extends Actor {
const isNPC = this.data.type === 'npc'; const isNPC = this.data.type === 'npc';
let initial = {}; let initial = {};
switch ( itemData.type ) { switch ( itemData.type ) {
case "weapon": case "weapon":
initial["data.equipped"] = isNPC; // NPCs automatically equip weapons if ( getProperty(itemData, "data.equipped") === undefined ) {
let hasWeaponProf = isNPC; // NPCs automatically have weapon proficiency initial["data.equipped"] = isNPC; // NPCs automatically equip weapons
if ( !isNPC ) { }
const weaponProf = { if ( getProperty(itemData, "data.proficient") === undefined ) {
"natural": true, if ( isNPC ) {
"simpleVW": "sim", initial["data.proficient"] = true; // NPCs automatically have equipment proficiency
"simpleB": "sim", } else {
"simpleLW": "sim", const weaponProf = {
"martialVW": "mar", "natural": true,
"martialB": "mar", "simpleVW": "sim",
"martialLW": "mar" "simpleB": "sim",
}[itemData.data?.weaponType]; "simpleLW": "sim",
const actorWeaponProfs = this.data.data.traits?.weaponProf?.value || []; "martialVW": "mar",
hasWeaponProf = (weaponProf === true) || actorWeaponProfs.includes(weaponProf); "martialB": "mar",
"martialLW": "mar"
}[itemData.data?.weaponType]; // Player characters check proficiency
const actorWeaponProfs = this.data.data.traits?.weaponProf?.value || [];
const hasWeaponProf = (weaponProf === true) || actorWeaponProfs.includes(weaponProf);
initial["data.proficient"] = hasWeaponProf;
}
} }
initial["data.proficient"] = hasWeaponProf;
break; break;
case "equipment": case "equipment":
initial["data.equipped"] = isNPC; // NPCs automatically equip equipment if ( getProperty(itemData, "data.equipped") === undefined ) {
let hasEquipmentProf = isNPC; // NPCs automatically have equipment proficiency initial["data.equipped"] = isNPC; // NPCs automatically equip equipment
if ( !isNPC ) { }
const armorProf = { if ( getProperty(itemData, "data.proficient") === undefined ) {
"natural": true, if ( isNPC ) {
"clothing": true, initial["data.proficient"] = true; // NPCs automatically have equipment proficiency
"light": "lgt", } else {
"medium": "med", const armorProf = {
"heavy": "hvy", "natural": true,
"shield": "shl" "clothing": true,
}[itemData.data?.armor?.type]; "light": "lgt",
const actorArmorProfs = this.data.data.traits?.armorProf?.value || []; "medium": "med",
hasEquipmentProf = (armorProf === true) || actorArmorProfs.includes(armorProf); "heavy": "hvy",
"shield": "shl"
}[itemData.data?.armor?.type]; // Player characters check proficiency
const actorArmorProfs = this.data.data.traits?.armorProf?.value || [];
const hasEquipmentProf = (armorProf === true) || actorArmorProfs.includes(armorProf);
initial["data.proficient"] = hasEquipmentProf;
}
} }
initial["data.proficient"] = hasEquipmentProf;
break; break;
case "power": case "power":
initial["data.prepared"] = true; // NPCs automatically prepare powers initial["data.prepared"] = true; // automatically prepare powers for everyone
break; break;
} }
mergeObject(itemData, initial); mergeObject(itemData, initial);
@ -1103,7 +1116,7 @@ export default class Actor5e extends Actor {
// Recover power slots // Recover power slots
for ( let [k, v] of Object.entries(data.powers) ) { for ( let [k, v] of Object.entries(data.powers) ) {
updateData[`data.powers.${k}.value`] = !Number.isNaN(v.override) ? v.override : (v.max ?? 0); updateData[`data.powers.${k}.value`] = Number.isNumeric(v.override) ? v.override : (v.max ?? 0);
} }
// Recover pact slots. // Recover pact slots.
@ -1210,10 +1223,10 @@ export default class Actor5e extends Actor {
} }
// Get the original Actor data and the new source data // Get the original Actor data and the new source data
const o = this.toJSON(); const o = duplicate(this.toJSON());
o.flags.sw5e = o.flags.sw5e || {}; o.flags.sw5e = o.flags.sw5e || {};
o.flags.sw5e.transformOptions = {mergeSkills, mergeSaves}; o.flags.sw5e.transformOptions = {mergeSkills, mergeSaves};
const source = target.toJSON(); const source = duplicate(target.toJSON());
// Prepare new data to merge from the source // Prepare new data to merge from the source
const d = { const d = {
@ -1244,7 +1257,7 @@ export default class Actor5e extends Actor {
// Handle wildcard // Handle wildcard
if ( source.token.randomImg ) { if ( source.token.randomImg ) {
const images = await target.getTokenImages(); const images = await target.getTokenImages();
d.token.img = images[0]; d.token.img = images[Math.floor(Math.random() * images.length)];
} }
// Keep Token configurations // Keep Token configurations
@ -1328,7 +1341,7 @@ export default class Actor5e extends Actor {
newTokenData.actorId = newActor.id; newTokenData.actorId = newActor.id;
return newTokenData; return newTokenData;
}); });
return canvas.scene.updateEmbeddedEntity("Token", updates); return canvas.scene?.updateEmbeddedEntity("Token", updates);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View file

@ -33,10 +33,10 @@ export default class ActorSheet5e extends ActorSheet {
static get defaultOptions() { static get defaultOptions() {
return mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
scrollY: [ scrollY: [
".inventory .inventory-list", ".inventory .group-list",
".features .inventory-list", ".features .group-list",
".powerbook .inventory-list", ".powerbook .group-list",
".effects .inventory-list" ".effects .effects-list"
], ],
tabs: [{navSelector: ".tabs", contentSelector: ".sheet-body", initial: "description"}] tabs: [{navSelector: ".tabs", contentSelector: ".sheet-body", initial: "description"}]
}); });
@ -619,6 +619,11 @@ export default class ActorSheet5e extends ActorSheet {
itemData = scroll.data; itemData = scroll.data;
} }
// Ignore certain statuses
if ( itemData.data ) {
["attunement", "equipped", "proficient", "prepared"].forEach(k => delete itemData.data[k]);
}
// Create the owned item as normal // Create the owned item as normal
return super._onDropItemCreate(itemData); return super._onDropItemCreate(itemData);
} }

View file

@ -619,6 +619,11 @@ export default class ActorSheet5e extends ActorSheet {
itemData = scroll.data; itemData = scroll.data;
} }
// Ignore certain statuses
if ( itemData.data ) {
["attunement", "equipped", "proficient", "prepared"].forEach(k => delete itemData.data[k]);
}
// Create the owned item as normal // Create the owned item as normal
return super._onDropItemCreate(itemData); return super._onDropItemCreate(itemData);
} }

View file

@ -168,6 +168,8 @@ export default class AbilityUseDialog extends Dialog {
type: item.data.consumableType, type: item.data.consumableType,
value: uses.value, value: uses.value,
quantity: item.data.quantity, quantity: item.data.quantity,
max: uses.max,
per: CONFIG.SW5E.limitedUsePeriods[uses.per]
}); });
} }

121
module/characterImporter.js Normal file
View file

@ -0,0 +1,121 @@
export default class CharacterImporter {
// transform JSON from sw5e.com to Foundry friendly format
// and insert new actor
static async transform(rawCharacter){
const sourceCharacter = JSON.parse(rawCharacter); //source character
const details = {
species: sourceCharacter.attribs.find(e => e.name == "race").current,
background: sourceCharacter.attribs.find(e => e.name == "background").current,
alignment: sourceCharacter.attribs.find(e => e.name == "alignment").current
}
const hp = {
value: sourceCharacter.attribs.find(e => e.name == "hp").current,
min: 0,
max: sourceCharacter.attribs.find(e => e.name == "hp").current,
temp: sourceCharacter.attribs.find(e => e.name == "hp_temp").current
};
const ac = {
value: sourceCharacter.attribs.find(e => e.name == "ac").current
};
const abilities = {
str: {
value: sourceCharacter.attribs.find(e => e.name == "strength").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'strength_save_prof').current ? 1 : 0
},
dex: {
value: sourceCharacter.attribs.find(e => e.name == "dexterity").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'dexterity_save_prof').current ? 1 : 0
},
con: {
value: sourceCharacter.attribs.find(e => e.name == "constitution").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'constitution_save_prof').current ? 1 : 0
},
int: {
value: sourceCharacter.attribs.find(e => e.name == "intelligence").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'intelligence_save_prof').current ? 1 : 0
},
wis: {
value: sourceCharacter.attribs.find(e => e.name == "wisdom").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'wisdom_save_prof').current ? 1 : 0
},
cha: {
value: sourceCharacter.attribs.find(e => e.name == "charisma").current,
proficient: sourceCharacter.attribs.find(e => e.name == 'charisma_save_prof').current ? 1 : 0
},
};
const targetCharacter = {
name: sourceCharacter.name,
type: "character",
data: {
abilities: abilities,
details: details,
attributes: {
ac: ac,
hp: hp
}
}
};
let actor = await Actor.create(targetCharacter);
const profession = sourceCharacter.attribs.find(e => e.name == "class").current;
let professionLevel = sourceCharacter.attribs.find(e => e.name == "class_display").current;
professionLevel = parseInt( professionLevel.replace(/[^0-9]/g,'') ); //remove a-z, leaving only integers
CharacterImporter.addClasses(profession, professionLevel, actor);
}
static async addClasses(profession, level, actor){
let classes = await game.packs.get('sw5e.classes').getContent();
let assignedClass = classes.find( c => c.name === profession );
assignedClass.data.data.levels = level;
await actor.createEmbeddedEntity("OwnedItem", assignedClass.data, { displaySheet: false });
}
static addImportButton(html){
const header = $("#actors").find("header.directory-header");
const search = $("#actors").children().find("div.header-search");
const newImportButtonDiv = $("#actors").children().find("div.header-actions").clone();
const newSearch = search.clone();
search.remove();
newImportButtonDiv.attr('id', 'character-sheet-import');
header.append(newImportButtonDiv);
newImportButtonDiv.children("button").remove();
newImportButtonDiv.append("<button class='create-entity' id='cs-import-button'><i class='fas fa-upload'></i> Import Character</button>");
newSearch.appendTo(header);
let characterImportButton = $("#cs-import-button");
characterImportButton.click(ev => {
let content = '<h1>Saved Character JSON Import</h1> '
+ '<label for="character-json">Paste character JSON here:</label> '
+ '</br>'
+ '<textarea id="character-json" name="character-json" rows="10" cols="50"></textarea>';
let importDialog = new Dialog({
title: "Import Character from SW5e.com",
content: content,
buttons: {
"Import": {
icon: '<i class="fas fa-file-import"></i>',
label: "Import Character",
callback: (e) => {
let characterData = $('#character-json').val();
console.log('Parsing Character JSON');
CharacterImporter.transform(characterData);
}
},
"Cancel": {
icon: '<i class="fas fa-times-circle"></i>',
label: "Cancel",
callback: () => {},
}
}
})
importDialog.render(true);
});
}
}

View file

@ -66,7 +66,7 @@ export const displayChatActionButtons = function(message, html, data) {
export const addChatMessageContextOptions = function(html, options) { export const addChatMessageContextOptions = function(html, options) {
let canApply = li => { let canApply = li => {
const message = game.messages.get(li.data("messageId")); const message = game.messages.get(li.data("messageId"));
return message.isRoll && message.isContentVisible && canvas.tokens.controlled.length; return message?.isRoll && message?.isContentVisible && canvas?.tokens.controlled.length;
}; };
options.push( options.push(
{ {
@ -103,15 +103,16 @@ export const addChatMessageContextOptions = function(html, options) {
* Apply rolled dice damage to the token or tokens which are currently controlled. * Apply rolled dice damage to the token or tokens which are currently controlled.
* This allows for damage to be scaled by a multiplier to account for healing, critical hits, or resistance * This allows for damage to be scaled by a multiplier to account for healing, critical hits, or resistance
* *
* @param {HTMLElement} roll The chat entry which contains the roll data * @param {HTMLElement} li The chat entry which contains the roll data
* @param {Number} multiplier A damage multiplier to apply to the rolled damage. * @param {Number} multiplier A damage multiplier to apply to the rolled damage.
* @return {Promise} * @return {Promise}
*/ */
function applyChatCardDamage(roll, multiplier) { function applyChatCardDamage(li, multiplier) {
const amount = roll.find('.dice-total').text(); const message = game.messages.get(li.data("messageId"));
const roll = message.roll;
return Promise.all(canvas.tokens.controlled.map(t => { return Promise.all(canvas.tokens.controlled.map(t => {
const a = t.actor; const a = t.actor;
return a.applyDamage(amount, multiplier); return a.applyDamage(roll.total, multiplier);
})); }));
} }

View file

@ -12,7 +12,7 @@ export const _getInitiativeFormula = function(combatant) {
let nd = 1; let nd = 1;
let mods = ""; let mods = "";
if (actor.getFlag("sw5e", "halflingLucky")) mods += "r1=1"; if (actor.getFlag("sw5e", "halflingLucky")) mods += "r1=1";
if (actor.getFlag("sw5e", "initiativeAdv")) { if (actor.getFlag("sw5e", "initiativeAdv")) {
nd = 2; nd = 2;
@ -26,15 +26,3 @@ export const _getInitiativeFormula = function(combatant) {
if ( tiebreaker ) parts.push(actor.data.data.abilities.dex.value / 100); if ( tiebreaker ) parts.push(actor.data.data.abilities.dex.value / 100);
return parts.filter(p => p !== null).join(" + "); return parts.filter(p => p !== null).join(" + ");
}; };
/**
* When the Combat encounter updates - re-render open Actor sheets for combatants in the encounter.
*/
Hooks.on("updateCombat", (combat, data, options, userId) => {
const updateTurn = ("turn" in data) || ("round" in data);
if ( !updateTurn ) return;
for ( let t of combat.turns ) {
const a = t.actor;
if ( t.actor ) t.actor.sheet.render(false);
}
});

View file

@ -274,7 +274,7 @@ SW5E.consumableTypes = {
"food": "SW5E.ConsumableFood", "food": "SW5E.ConsumableFood",
"medpac": "SW5E.ConsumableMedpac", "medpac": "SW5E.ConsumableMedpac",
"technology": "SW5E.ConsumableTechnology", "technology": "SW5E.ConsumableTechnology",
"ammunition": "SW5E.ConsumableAmmunition", "ammo": "SW5E.ConsumableAmmunition",
"trinket": "SW5E.ConsumableTrinket", "trinket": "SW5E.ConsumableTrinket",
"force": "SW5E.ConsumableForce", "force": "SW5E.ConsumableForce",
"tech": "SW5E.ConsumableTech" "tech": "SW5E.ConsumableTech"

View file

@ -42,7 +42,7 @@ export function simplifyRollFormula(formula, data, {constantFirst = false} = {})
const parts = constantFirst ? // Order the rollable and constant terms, either constant first or second depending on the optional argumen const parts = constantFirst ? // Order the rollable and constant terms, either constant first or second depending on the optional argumen
[constantPart, rollableFormula] : [rollableFormula, constantPart]; [constantPart, rollableFormula] : [rollableFormula, constantPart];
// Join the parts with a + sign, pass them to `Roll` once again to clean up the formula // Join the parts with a + sign, pass them to `Roll` once again to clean up the formula
return new Roll(parts.filterJoin(" + ")).formula; return new Roll(parts.filterJoin(" + ")).formula;
} }
@ -52,7 +52,7 @@ export function simplifyRollFormula(formula, data, {constantFirst = false} = {})
/** /**
* Only some terms are supported by simplifyRollFormula, this method returns true when the term is not supported. * Only some terms are supported by simplifyRollFormula, this method returns true when the term is not supported.
* @param {*} term - A single Dice term to check support on * @param {*} term - A single Dice term to check support on
* @return {Boolean} True when unsupported, false if supported * @return {Boolean} True when unsupported, false if supported
*/ */
function _isUnsupportedTerm(term) { function _isUnsupportedTerm(term) {
const diceTerm = term instanceof DiceTerm; const diceTerm = term instanceof DiceTerm;
@ -110,8 +110,8 @@ export async function d20Roll({parts=[], data={}, event={}, rollMode=null, templ
let adv = 0; let adv = 0;
fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)); fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));
if (fastForward) { if (fastForward) {
if ( advantage || event.altKey ) adv = 1; if ( advantage ?? event.altKey ) adv = 1;
else if ( disadvantage || event.ctrlKey || event.metaKey ) adv = -1; else if ( disadvantage ?? (event.ctrlKey || event.metaKey) ) adv = -1;
} }
// Define the inner roll function // Define the inner roll function

View file

@ -251,12 +251,14 @@ export default class Item5e extends Item {
// Item Actions // Item Actions
if ( data.hasOwnProperty("actionType") ) { if ( data.hasOwnProperty("actionType") ) {
// if this item is owned, we populate the label and saving throw during actor init
if (!this.isOwned) {
// Saving throws
this.getSaveDC();
// Saving throws // To Hit
this.getSaveDC(); this.getAttackToHit();
}
// To Hit
this.getAttackToHit();
// Damage // Damage
let dam = data.damage || {}; let dam = data.damage || {};
@ -312,7 +314,7 @@ export default class Item5e extends Item {
* - item's actor's proficiency bonus if applicable * - item's actor's proficiency bonus if applicable
* - item's actor's global bonuses to the given item type * - item's actor's global bonuses to the given item type
* - item's ammunition if applicable * - item's ammunition if applicable
* *
* @returns {Object} returns `rollData` and `parts` to be used in the item's Attack roll * @returns {Object} returns `rollData` and `parts` to be used in the item's Attack roll
*/ */
getAttackToHit() { getAttackToHit() {
@ -397,7 +399,7 @@ export default class Item5e extends Item {
// Define follow-up actions resulting from the item usage // Define follow-up actions resulting from the item usage
let createMeasuredTemplate = hasArea; // Trigger a template creation let createMeasuredTemplate = hasArea; // Trigger a template creation
let consumeRecharge = !!recharge.value; // Consume recharge let consumeRecharge = !!recharge.value; // Consume recharge
let consumeResource = !!resource.target && (resource.type !== "ammo") // Consume a linked (non-ammo) resource let consumeResource = !!resource.target && resource.type !== "ammo" && !['simpleB', 'martialB'].includes(id.weaponType); // Consume a linked (non-ammo) resource, ignore if use is from a blaster
let consumePowerSlot = requirePowerSlot; // Consume a power slot let consumePowerSlot = requirePowerSlot; // Consume a power slot
let consumeUsage = !!uses.per; // Consume limited uses let consumeUsage = !!uses.per; // Consume limited uses
let consumeQuantity = uses.autoDestroy; // Consume quantity of the item in lieu of uses let consumeQuantity = uses.autoDestroy; // Consume quantity of the item in lieu of uses
@ -915,7 +917,8 @@ export default class Item5e extends Item {
if ( powerLevel ) rollData.item.level = powerLevel; if ( powerLevel ) rollData.item.level = powerLevel;
// Configure the damage roll // Configure the damage roll
const title = `${this.name} - ${game.i18n.localize("SW5E.DamageRoll")}`; const actionFlavor = game.i18n.localize(itemData.actionType === "heal" ? "SW5E.Healing" : "SW5E.DamageRoll");
const title = `${this.name} - ${actionFlavor}`;
const rollConfig = { const rollConfig = {
actor: this.actor, actor: this.actor,
critical: critical ?? event?.altKey ?? false, critical: critical ?? event?.altKey ?? false,

View file

@ -120,8 +120,8 @@ export const migrateCompendium = async function(pack) {
/** /**
* Migrate a single Actor entity to incorporate latest data model changes * Migrate a single Actor entity to incorporate latest data model changes
* Return an Object of updateData to be applied * Return an Object of updateData to be applied
* @param {Actor} actor The actor to Update * @param {object} actor The actor data object to update
* @return {Object} The updateData to apply * @return {Object} The updateData to apply
*/ */
export const migrateActorData = function(actor) { export const migrateActorData = function(actor) {
const updateData = {}; const updateData = {};
@ -232,13 +232,24 @@ export const migrateSceneData = function(scene) {
* Migrate the actor speed string to movement object * Migrate the actor speed string to movement object
* @private * @private
*/ */
function _migrateActorMovement(actor, updateData) { function _migrateActorMovement(actorData, updateData) {
const ad = actor.data; const ad = actorData.data;
const old = actor.type === 'vehicle' ? ad?.attributes?.speed : ad?.attributes?.speed?.value;
if ( typeof old !== "string" ) return; // Work is needed if old data is present
const s = (old || "").split(" "); const old = actorData.type === 'vehicle' ? ad?.attributes?.speed : ad?.attributes?.speed?.value;
if ( s.length > 0 ) updateData["data.attributes.movement.walk"] = Number.isNumeric(s[0]) ? parseInt(s[0]) : null; const hasOld = old !== undefined;
updateData["data.attributes.-=speed"] = null; if ( hasOld ) {
// If new data is not present, migrate the old data
const hasNew = ad?.attributes?.movement?.walk !== undefined;
if ( !hasNew && (typeof old === "string") ) {
const s = (old || "").split(" ");
if ( s.length > 0 ) updateData["data.attributes.movement.walk"] = Number.isNumeric(s[0]) ? parseInt(s[0]) : null;
}
// Remove the old attribute
updateData["data.attributes.-=speed"] = null;
}
return updateData return updateData
} }
@ -254,7 +265,7 @@ function _migrateActorSenses(actor, updateData) {
const original = ad.traits.senses || ""; const original = ad.traits.senses || "";
// Try to match old senses with the format like "Darkvision 60 ft, Blindsight 30 ft" // Try to match old senses with the format like "Darkvision 60 ft, Blindsight 30 ft"
const pattern = /([A-z]+)\s?([0-9]+)\s?([A-z]+)?/ const pattern = /([A-z]+)\s?([0-9]+)\s?([A-z]+)?/;
let wasMatched = false; let wasMatched = false;
// Match each comma-separated term // Match each comma-separated term

View file

@ -14,11 +14,11 @@ export const preloadHandlebarsTemplates = async function() {
"systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html", "systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-features.html", "systems/sw5e/templates/actors/oldActor/parts/actor-features.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html", "systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-notes.html", "systems/sw5e/templates/actors/oldActor/parts/actor-notes.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-biography.html", "systems/sw5e/templates/actors/newActor/parts/swalt-biography.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-core.html", "systems/sw5e/templates/actors/newActor/parts/swalt-core.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-active-effects.html", "systems/sw5e/templates/actors/newActor/parts/swalt-active-effects.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-features.html", "systems/sw5e/templates/actors/newActor/parts/swalt-features.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html", "systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html", "systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html",

File diff suppressed because it is too large Load diff

View file

@ -234,13 +234,14 @@ body.dark-theme .dice-roll .dice-total.fumble {
box-shadow: 0 0 12px rgba(232, 17, 17, 0.5); box-shadow: 0 0 12px rgba(232, 17, 17, 0.5);
} }
body.dark-theme #chat-controls .roll-type-select { body.dark-theme #chat-controls .roll-type-select {
background: #363636; background: #4f4f4f;
color: #FFFFFF;
} }
body.dark-theme #chat-controls label { body.dark-theme #chat-controls label {
color: white; color: white;
} }
body.dark-theme #chat-form textarea { body.dark-theme #chat-form textarea {
background: #363636; background: #4f4f4f;
} }
body.dark-theme #combat #combat-round { body.dark-theme #combat #combat-round {
color: #E81111; color: #E81111;

View file

@ -54,11 +54,6 @@
font-weight: 400; font-weight: 400;
src: url('./fonts/EngliBesh-KG3W.ttf'); src: url('./fonts/EngliBesh-KG3W.ttf');
} }
.engli-Besh {
font-family: 'Engli-Besh';
font-size: 20px;
font-weight: 400;
}
/* ----------------------------------------- */ /* ----------------------------------------- */
/* Fonts */ /* Fonts */
/* ----------------------------------------- */ /* ----------------------------------------- */
@ -768,7 +763,7 @@ input[type="reset"]:disabled {
grid-template-rows: 1fr 26px auto; grid-template-rows: 1fr 26px auto;
grid-template-columns: 128px 1fr; grid-template-columns: 128px 1fr;
column-gap: 8px; column-gap: 8px;
row-gap: 8px; grid-row-gap: 8px;
} }
.sw5e.sheet.actor .swalt-sheet header img { .sw5e.sheet.actor .swalt-sheet header img {
grid-column-start: 1; grid-column-start: 1;
@ -1390,7 +1385,7 @@ input[type="reset"]:disabled {
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
grid-gap: 4px; grid-gap: 4px;
row-gap: 4px; grid-row-gap: 4px;
} }
.sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits ul.passives strong { .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits ul.passives strong {
font-size: 13px; font-size: 13px;
@ -1601,7 +1596,7 @@ input[type="reset"]:disabled {
} }
.sw5e.sheet.actor .swalt-sheet.limited { .sw5e.sheet.actor .swalt-sheet.limited {
grid-template-rows: 144px auto; grid-template-rows: 144px auto;
row-gap: 8px; grid-row-gap: 8px;
} }
.sw5e.sheet.actor .swalt-sheet.limited header { .sw5e.sheet.actor .swalt-sheet.limited header {
grid-template-rows: 1fr; grid-template-rows: 1fr;

View file

@ -508,6 +508,41 @@
height: 24px; height: 24px;
margin: 2px; margin: 2px;
} }
/* ----------------------------------------- */
/* HUD
/* ----------------------------------------- */
.placeable-hud .control-icon {
box-sizing: content-box;
width: 40px;
flex: 0 0 40px;
margin: 8px 0;
font-size: 28px;
line-height: 40px;
text-align: center;
color: #FBF4F4;
background: rgba(0, 0, 0, 0.6);
box-shadow: 0 0 15px #000;
border: 1px solid #333;
border-radius: 8px;
pointer-events: all;
}
#token-hud .status-effects {
visibility: hidden;
position: absolute;
left: 50px;
top: 0;
display: grid;
padding: 3px;
box-sizing: content-box;
width: 100px;
color: #FBF4F4;
grid-template-columns: 25px 25px 25px 25px;
background: rgba(0, 0, 0, 0.6);
box-shadow: 0 0 15px #000;
border: 1px solid #333;
border-radius: 4px;
pointer-events: all;
}
.sw5e.sheet.actor { .sw5e.sheet.actor {
/* ----------------------------------------- */ /* ----------------------------------------- */
/* Sheet Header */ /* Sheet Header */
@ -1557,7 +1592,7 @@
flex: 1; flex: 1;
margin: 0; margin: 0;
line-height: 36px; line-height: 36px;
font-family: 'Bungee Inline'; font-family: 'Engli-Besh';
font-size: 20px; font-size: 20px;
font-weight: 400; font-weight: 400;
color: #4b4a44; color: #4b4a44;
@ -1837,35 +1872,3 @@
max-width: 40px; max-width: 40px;
text-align: right; text-align: right;
} }
.placeable-hud .control-icon {
box-sizing: content-box;
width: 40px;
flex: 0 0 40px;
margin: 8px 0;
font-size: 28px;
line-height: 40px;
text-align: center;
color: #FBF4F4;
background: rgba(0, 0, 0, 0.6);
box-shadow: 0 0 15px #000;
border: 1px solid #333;
border-radius: 8px;
pointer-events: all;
}
#token-hud .status-effects {
visibility: hidden;
position: absolute;
left: 50px;
top: 0;
display: grid;
padding: 3px;
box-sizing: content-box;
width: 100px;
color: #FBF4F4;
grid-template-columns: 25px 25px 25px 25px;
background: rgba(0, 0, 0, 0.6);
box-shadow: 0 0 15px #000;
border: 1px solid #333;
border-radius: 4px;
pointer-events: all;
}

547
sw5e.js
View file

@ -1,270 +1,279 @@
/** /**
* The Star Wars 5th Edition game system for Foundry Virtual Tabletop * The Star Wars 5th Edition game system for Foundry Virtual Tabletop
* Author: Kakeman89 * Author: Kakeman89
* Software License: GNU GPLv3 * Software License: GNU GPLv3
* Content License: https://media.wizards.com/2016/downloads/SW5E/SRD-OGL_V5.1.pdf * Content License: https://media.wizards.com/2016/downloads/SW5E/SRD-OGL_V5.1.pdf
* Repository: https://gitlab.com/foundrynet/sw5e * Repository: https://gitlab.com/foundrynet/sw5e
* Issue Tracker: https://gitlab.com/foundrynet/sw5e/issues * Issue Tracker: https://gitlab.com/foundrynet/sw5e/issues
*/ */
// Import Modules // Import Modules
import { SW5E } from "./module/config.js"; import { SW5E } from "./module/config.js";
import { registerSystemSettings } from "./module/settings.js"; import { registerSystemSettings } from "./module/settings.js";
import { preloadHandlebarsTemplates } from "./module/templates.js"; import { preloadHandlebarsTemplates } from "./module/templates.js";
import { _getInitiativeFormula } from "./module/combat.js"; import { _getInitiativeFormula } from "./module/combat.js";
import { measureDistances, getBarAttribute } from "./module/canvas.js"; import { measureDistances, getBarAttribute } from "./module/canvas.js";
// Import Entities // Import Entities
import Actor5e from "./module/actor/entity.js"; import Actor5e from "./module/actor/entity.js";
import Item5e from "./module/item/entity.js"; import Item5e from "./module/item/entity.js";
import CharacterImporter from "./module/characterImporter.js";
// Import Applications
import AbilityTemplate from "./module/pixi/ability-template.js"; // Import Applications
import AbilityUseDialog from "./module/apps/ability-use-dialog.js"; import AbilityTemplate from "./module/pixi/ability-template.js";
import ActorSheetFlags from "./module/apps/actor-flags.js"; import AbilityUseDialog from "./module/apps/ability-use-dialog.js";
import ActorSheet5eCharacter from "./module/actor/sheets/oldSheets/character.js"; import ActorSheetFlags from "./module/apps/actor-flags.js";
import ActorSheet5eNPC from "./module/actor/sheets/oldSheets/npc.js"; import ActorSheet5eCharacter from "./module/actor/sheets/oldSheets/character.js";
import ActorSheet5eVehicle from "./module/actor/sheets/oldSheets/vehicle.js"; import ActorSheet5eNPC from "./module/actor/sheets/oldSheets/npc.js";
import ActorSheet5eCharacterNew from "./module/actor/sheets/newSheet/character.js"; import ActorSheet5eVehicle from "./module/actor/sheets/oldSheets/vehicle.js";
import ItemSheet5e from "./module/item/sheet.js"; import ActorSheet5eCharacterNew from "./module/actor/sheets/newSheet/character.js";
import ShortRestDialog from "./module/apps/short-rest.js"; import ActorSheet5eNPCNew from "./module/actor/sheets/newSheet/npc.js";
import TraitSelector from "./module/apps/trait-selector.js"; import ItemSheet5e from "./module/item/sheet.js";
import ActorMovementConfig from "./module/apps/movement-config.js"; import ShortRestDialog from "./module/apps/short-rest.js";
import ActorSensesConfig from "./module/apps/senses-config.js"; import TraitSelector from "./module/apps/trait-selector.js";
import ActorMovementConfig from "./module/apps/movement-config.js";
// Import Helpers import ActorSensesConfig from "./module/apps/senses-config.js";
import * as chat from "./module/chat.js";
import * as dice from "./module/dice.js"; // Import Helpers
import * as macros from "./module/macros.js"; import * as chat from "./module/chat.js";
import * as migrations from "./module/migration.js"; import * as dice from "./module/dice.js";
import * as macros from "./module/macros.js";
/* -------------------------------------------- */ import * as migrations from "./module/migration.js";
/* Foundry VTT Initialization */
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */
Hooks.once("init", function() { /* -------------------------------------------- */
console.log(`SW5e | Initializing SW5E System\n${SW5E.ASCII}`);
Hooks.once("init", function() {
// Create a SW5E namespace within the game global console.log(`SW5e | Initializing SW5E System\n${SW5E.ASCII}`);
game.sw5e = {
applications: { // Create a SW5E namespace within the game global
AbilityUseDialog, game.sw5e = {
ActorSheetFlags, applications: {
ActorSheet5eCharacter, AbilityUseDialog,
ActorSheet5eCharacterNew, ActorSheetFlags,
ActorSheet5eNPC, ActorSheet5eCharacter,
ActorSheet5eVehicle, ActorSheet5eCharacterNew,
ItemSheet5e, ActorSheet5eNPC,
ShortRestDialog, ActorSheet5eNPCNew,
TraitSelector, ActorSheet5eVehicle,
ActorMovementConfig ItemSheet5e,
}, ShortRestDialog,
canvas: { TraitSelector,
AbilityTemplate ActorMovementConfig
}, },
config: SW5E, canvas: {
dice: dice, AbilityTemplate
entities: { },
Actor5e, config: SW5E,
Item5e, dice: dice,
}, entities: {
macros: macros, Actor5e,
migrations: migrations, Item5e,
rollItemMacro: macros.rollItemMacro },
}; macros: macros,
migrations: migrations,
// Record Configuration Values rollItemMacro: macros.rollItemMacro
CONFIG.SW5E = SW5E; };
CONFIG.Actor.entityClass = Actor5e;
CONFIG.Item.entityClass = Item5e; // Record Configuration Values
CONFIG.time.roundTime = 6; CONFIG.SW5E = SW5E;
CONFIG.fontFamilies = [ CONFIG.Actor.entityClass = Actor5e;
"Engli-Besh", CONFIG.Item.entityClass = Item5e;
"Open Sans", CONFIG.time.roundTime = 6;
"Russo One" CONFIG.fontFamilies = [
]; "Engli-Besh",
"Open Sans",
// 5e cone RAW should be 53.13 degrees "Russo One"
CONFIG.MeasuredTemplate.defaults.angle = 53.13; ];
// Add DND5e namespace for module compatability // 5e cone RAW should be 53.13 degrees
game.dnd5e = game.sw5e; CONFIG.MeasuredTemplate.defaults.angle = 53.13;
CONFIG.DND5E = CONFIG.SW5E;
// Add DND5e namespace for module compatability
// Register System Settings game.dnd5e = game.sw5e;
registerSystemSettings(); CONFIG.DND5E = CONFIG.SW5E;
// Patch Core Functions // Register System Settings
CONFIG.Combat.initiative.formula = "1d20 + @attributes.init.mod + @attributes.init.prof + @attributes.init.bonus"; registerSystemSettings();
Combat.prototype._getInitiativeFormula = _getInitiativeFormula;
// Patch Core Functions
// Register sheet application classes CONFIG.Combat.initiative.formula = "1d20 + @attributes.init.mod + @attributes.init.prof + @attributes.init.bonus";
Actors.unregisterSheet("core", ActorSheet); Combat.prototype._getInitiativeFormula = _getInitiativeFormula;
Actors.registerSheet("sw5e", ActorSheet5eCharacterNew, {
types: ["character"], // Register sheet application classes
makeDefault: true, Actors.unregisterSheet("core", ActorSheet);
label: "SW5E.SheetClassCharacter" Actors.registerSheet("sw5e", ActorSheet5eCharacterNew, {
}); types: ["character"],
Actors.registerSheet("sw5e", ActorSheet5eCharacter, { makeDefault: true,
types: ["character"], label: "SW5E.SheetClassCharacter"
makeDefault: false, });
label: "SW5E.SheetClassCharacterOld" Actors.registerSheet("sw5e", ActorSheet5eCharacter, {
}); types: ["character"],
Actors.registerSheet("sw5e", ActorSheet5eNPC, { makeDefault: false,
types: ["npc"], label: "SW5E.SheetClassCharacterOld"
makeDefault: true, });
label: "SW5E.SheetClassNPC" Actors.registerSheet("sw5e", ActorSheet5eNPCNew, {
}); types: ["npc"],
Actors.registerSheet('sw5e', ActorSheet5eVehicle, { makeDefault: true,
types: ['vehicle'], label: "SW5E.SheetClassNPC"
makeDefault: true, });
label: "SW5E.SheetClassVehicle" Actors.registerSheet("sw5e", ActorSheet5eNPC, {
}); types: ["npc"],
Items.unregisterSheet("core", ItemSheet); makeDefault: false,
Items.registerSheet("sw5e", ItemSheet5e, { label: "SW5E.SheetClassNPCOld"
types: ['weapon', 'equipment', 'consumable', 'tool', 'loot', 'class', 'power', 'feat', 'species', 'backpack', 'archetype', 'classfeature', 'background', 'fightingmastery', 'fightingstyle', 'lightsaberform'], });
makeDefault: true, Actors.registerSheet('sw5e', ActorSheet5eVehicle, {
label: "SW5E.SheetClassItem" types: ['vehicle'],
}); makeDefault: true,
label: "SW5E.SheetClassVehicle"
// Preload Handlebars Templates });
preloadHandlebarsTemplates(); Items.unregisterSheet("core", ItemSheet);
}); Items.registerSheet("sw5e", ItemSheet5e, {
types: ['weapon', 'equipment', 'consumable', 'tool', 'loot', 'class', 'power', 'feat', 'species', 'backpack', 'archetype', 'classfeature', 'background', 'fightingmastery', 'fightingstyle', 'lightsaberform'],
makeDefault: true,
/* -------------------------------------------- */ label: "SW5E.SheetClassItem"
/* Foundry VTT Setup */ });
/* -------------------------------------------- */
// Preload Handlebars Templates
/** preloadHandlebarsTemplates();
* This function runs after game data has been requested and loaded from the servers, so entities exist });
*/
Hooks.once("setup", function() {
/* -------------------------------------------- */
// Localize CONFIG objects once up-front /* Foundry VTT Setup */
const toLocalize = [ /* -------------------------------------------- */
"abilities", "abilityAbbreviations", "abilityActivationTypes", "abilityConsumptionTypes", "actorSizes", "alignments",
"armorProficiencies", "armorPropertiesTypes", "conditionTypes", "consumableTypes", "cover", "currencies", "damageResistanceTypes", /**
"damageTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes", "languages", * This function runs after game data has been requested and loaded from the servers, so entities exist
"limitedUsePeriods", "movementTypes", "movementUnits", "polymorphSettings", "proficiencyLevels", "senses", "skills", */
"powerComponents", "powerLevels", "powerPreparationModes", "powerScalingModes", "powerSchools", "targetTypes", Hooks.once("setup", function() {
"timePeriods", "toolProficiencies", "weaponProficiencies", "weaponProperties", "weaponTypes"
]; // Localize CONFIG objects once up-front
const toLocalize = [
// Exclude some from sorting where the default order matters "abilities", "abilityAbbreviations", "abilityActivationTypes", "abilityConsumptionTypes", "actorSizes", "alignments",
const noSort = [ "armorProficiencies", "armorPropertiesTypes", "conditionTypes", "consumableTypes", "cover", "currencies", "damageResistanceTypes",
"abilities", "alignments", "currencies", "distanceUnits", "movementUnits", "itemActionTypes", "proficiencyLevels", "damageTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes", "languages",
"limitedUsePeriods", "powerComponents", "powerLevels", "powerPreparationModes", "weaponTypes" "limitedUsePeriods", "movementTypes", "movementUnits", "polymorphSettings", "proficiencyLevels", "senses", "skills",
]; "powerComponents", "powerLevels", "powerPreparationModes", "powerScalingModes", "powerSchools", "targetTypes",
"timePeriods", "toolProficiencies", "weaponProficiencies", "weaponProperties", "weaponTypes"
// Localize and sort CONFIG objects ];
for ( let o of toLocalize ) {
const localized = Object.entries(CONFIG.SW5E[o]).map(e => { // Exclude some from sorting where the default order matters
return [e[0], game.i18n.localize(e[1])]; const noSort = [
}); "abilities", "alignments", "currencies", "distanceUnits", "movementUnits", "itemActionTypes", "proficiencyLevels",
if ( !noSort.includes(o) ) localized.sort((a, b) => a[1].localeCompare(b[1])); "limitedUsePeriods", "powerComponents", "powerLevels", "powerPreparationModes", "weaponTypes"
CONFIG.SW5E[o] = localized.reduce((obj, e) => { ];
obj[e[0]] = e[1];
return obj; // Localize and sort CONFIG objects
}, {}); for ( let o of toLocalize ) {
} const localized = Object.entries(CONFIG.SW5E[o]).map(e => {
// add DND5E translation for module compatability return [e[0], game.i18n.localize(e[1])];
game.i18n.translations.DND5E = game.i18n.translations.SW5E; });
// console.log(game.settings.get("sw5e", "colorTheme")); if ( !noSort.includes(o) ) localized.sort((a, b) => a[1].localeCompare(b[1]));
let theme = game.settings.get("sw5e", "colorTheme") + '-theme'; CONFIG.SW5E[o] = localized.reduce((obj, e) => {
document.body.classList.add(theme); obj[e[0]] = e[1];
}); return obj;
}, {});
/* -------------------------------------------- */ }
// add DND5E translation for module compatability
/** game.i18n.translations.DND5E = game.i18n.translations.SW5E;
* Once the entire VTT framework is initialized, check to see if we should perform a data migration // console.log(game.settings.get("sw5e", "colorTheme"));
*/ let theme = game.settings.get("sw5e", "colorTheme") + '-theme';
Hooks.once("ready", function() { document.body.classList.add(theme);
});
// Wait to register hotbar drop hook on ready so that modules could register earlier if they want to
Hooks.on("hotbarDrop", (bar, data, slot) => macros.create5eMacro(data, slot)); /* -------------------------------------------- */
// Determine whether a system migration is required and feasible /**
if ( !game.user.isGM ) return; * Once the entire VTT framework is initialized, check to see if we should perform a data migration
const currentVersion = game.settings.get("sw5e", "systemMigrationVersion"); */
const NEEDS_MIGRATION_VERSION = "1.2.1"; Hooks.once("ready", function() {
const COMPATIBLE_MIGRATION_VERSION = 0.80;
const needsMigration = currentVersion && isNewerVersion(NEEDS_MIGRATION_VERSION, currentVersion); // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to
if ( !needsMigration ) return; Hooks.on("hotbarDrop", (bar, data, slot) => macros.create5eMacro(data, slot));
// Perform the migration // Determine whether a system migration is required and feasible
if ( currentVersion && isNewerVersion(COMPATIBLE_MIGRATION_VERSION, currentVersion) ) { if ( !game.user.isGM ) return;
const warning = `Your SW5e system data is from too old a Foundry version and cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`; const currentVersion = game.settings.get("sw5e", "systemMigrationVersion");
ui.notifications.error(warning, {permanent: true}); const NEEDS_MIGRATION_VERSION = "1.2.1";
} const COMPATIBLE_MIGRATION_VERSION = 0.80;
migrations.migrateWorld(); const needsMigration = currentVersion && isNewerVersion(NEEDS_MIGRATION_VERSION, currentVersion);
}); if ( !needsMigration ) return;
/* -------------------------------------------- */ // Perform the migration
/* Canvas Initialization */ if ( currentVersion && isNewerVersion(COMPATIBLE_MIGRATION_VERSION, currentVersion) ) {
/* -------------------------------------------- */ const warning = `Your SW5e system data is from too old a Foundry version and cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`;
ui.notifications.error(warning, {permanent: true});
Hooks.on("canvasInit", function() { }
migrations.migrateWorld();
// Extend Diagonal Measurement });
canvas.grid.diagonalRule = game.settings.get("sw5e", "diagonalMovement");
SquareGrid.prototype.measureDistances = measureDistances; /* -------------------------------------------- */
/* Canvas Initialization */
// Extend Token Resource Bars /* -------------------------------------------- */
Token.prototype.getBarAttribute = getBarAttribute;
}); Hooks.on("canvasInit", function() {
// Extend Diagonal Measurement
/* -------------------------------------------- */ canvas.grid.diagonalRule = game.settings.get("sw5e", "diagonalMovement");
/* Other Hooks */ SquareGrid.prototype.measureDistances = measureDistances;
/* -------------------------------------------- */
// Extend Token Resource Bars
Hooks.on("renderChatMessage", (app, html, data) => { Token.prototype.getBarAttribute = getBarAttribute;
});
// Display action buttons
chat.displayChatActionButtons(app, html, data);
/* -------------------------------------------- */
// Highlight critical success or failure die /* Other Hooks */
chat.highlightCriticalSuccessFailure(app, html, data); /* -------------------------------------------- */
// Optionally collapse the content Hooks.on("renderChatMessage", (app, html, data) => {
if (game.settings.get("sw5e", "autoCollapseItemCards")) html.find(".card-content").hide();
}); // Display action buttons
Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); chat.displayChatActionButtons(app, html, data);
Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html));
Hooks.on("renderChatPopout", (app, html, data) => Item5e.chatListeners(html)); // Highlight critical success or failure die
Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions); chat.highlightCriticalSuccessFailure(app, html, data);
Hooks.on("renderSceneDirectory", (app, html, data)=> {
//console.log(html.find("header.folder-header")); // Optionally collapse the content
setFolderBackground(html); if (game.settings.get("sw5e", "autoCollapseItemCards")) html.find(".card-content").hide();
}); });
Hooks.on("renderActorDirectory", (app, html, data)=> { Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
setFolderBackground(html); Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html));
}); Hooks.on("renderChatPopout", (app, html, data) => Item5e.chatListeners(html));
Hooks.on("renderItemDirectory", (app, html, data)=> { Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions);
setFolderBackground(html); Hooks.on("renderSceneDirectory", (app, html, data)=> {
}); //console.log(html.find("header.folder-header"));
Hooks.on("renderJournalDirectory", (app, html, data)=> { setFolderBackground(html);
setFolderBackground(html); });
}); Hooks.on("renderActorDirectory", (app, html, data)=> {
Hooks.on("renderRollTableDirectory", (app, html, data)=> { setFolderBackground(html);
setFolderBackground(html); CharacterImporter.addImportButton(html);
}); });
Hooks.on("ActorSheet5eCharacterNew", (app, html, data) => { Hooks.on("renderItemDirectory", (app, html, data)=> {
console.log("renderSwaltSheet"); setFolderBackground(html);
}); });
// TODO I should remove this Hooks.on("renderJournalDirectory", (app, html, data)=> {
Handlebars.registerHelper('getProperty', function (data, property) { setFolderBackground(html);
return getProperty(data, property); });
}); Hooks.on("renderRollTableDirectory", (app, html, data)=> {
setFolderBackground(html);
});
function setFolderBackground(html) { Hooks.on("ActorSheet5eCharacterNew", (app, html, data) => {
html.find("header.folder-header").each(function() { console.log("renderSwaltSheet");
let bgColor = $(this).css("background-color"); });
if(bgColor == undefined) // TODO I should remove this
bgColor = "rgb(255,255,255)"; Handlebars.registerHelper('getProperty', function (data, property) {
$(this).closest('li').css("background-color", bgColor); return getProperty(data, property);
}) });
function setFolderBackground(html) {
html.find("header.folder-header").each(function() {
let bgColor = $(this).css("background-color");
if(bgColor == undefined)
bgColor = "rgb(255,255,255)";
$(this).closest('li').css("background-color", bgColor);
})
} }

View file

@ -2,7 +2,7 @@
"name": "sw5e", "name": "sw5e",
"title": "SW 5th Edition", "title": "SW 5th Edition",
"description": "A comprehensive game system for running games of SW 5th Edition in the Foundry VTT environment.", "description": "A comprehensive game system for running games of SW 5th Edition in the Foundry VTT environment.",
"version": "1.2.2", "version": "R1-A2",
"author": "Dev Team", "author": "Dev Team",
"scripts": [], "scripts": [],
"esmodules": ["sw5e.js"], "esmodules": ["sw5e.js"],
@ -135,8 +135,8 @@
"gridUnits": "ft", "gridUnits": "ft",
"primaryTokenAttribute": "attributes.hp", "primaryTokenAttribute": "attributes.hp",
"secondaryTokenAttribute": null, "secondaryTokenAttribute": null,
"minimumCoreVersion": "0.7.6", "minimumCoreVersion": "0.7.7",
"compatibleCoreVersion": "0.7.7", "compatibleCoreVersion": "0.7.9",
"url": "https://github.com/unrealkakeman89/sw5e", "url": "https://github.com/unrealkakeman89/sw5e",
"manifest": "https://raw.githubusercontent.com/unrealkakeman89/sw5e/master/system.json", "manifest": "https://raw.githubusercontent.com/unrealkakeman89/sw5e/master/system.json",
"download": "https://github.com/unrealkakeman89/sw5e/archive/master.zip" "download": "https://github.com/unrealkakeman89/sw5e/archive/master.zip"

View file

@ -1,22 +1,22 @@
<div class="panel additional-info"> <div class="panel additional-info">
<section><h1 class="section-titles biopage">Personality Traits</h1> <section><h1 class="section-titles biopage">Personality Traits</h1>
{{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}} {{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}}
</section> </section>
<section><h1 class="section-titles biopage">Ideals</h1> <section><h1 class="section-titles biopage">Ideals</h1>
{{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}} {{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}}
</section> </section>
<section><h1 class="section-titles biopage">Bonds</h1> <section><h1 class="section-titles biopage">Bonds</h1>
{{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}} {{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}}
</section> </section>
<section><h1 class="section-titles biopage">Flaws</h1> <section><h1 class="section-titles biopage">Flaws</h1>
{{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}} {{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}}
</section> </section>
</div> </div>
<div class="panel background"> <div class="panel background">
<section><h1 class="section-titles biopage">Description</h1> <section><h1 class="section-titles biopage">Description</h1>
{{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}} {{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}}
</section> </section>
<section><h1 class="section-titles">Background</h1> <section><h1 class="section-titles">Background</h1>
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}} {{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
</section> </section>
</div> </div>

View file

@ -1,33 +1,33 @@
<div class="panel"> <div class="panel">
<section class="background"> <section class="background">
<input type="text" name="data.details.notesname" value="{{data.details.notesname}}" <input type="text" name="data.details.notesname" value="{{data.details.notesname}}"
placeholder="Personal Journal" /> placeholder="Personal Journal" />
{{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}} {{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}}
</section> </section>
<section> <section>
<input type="text" name="data.details.notes1name" value="{{data.details.notes1name}}" <input type="text" name="data.details.notes1name" value="{{data.details.notes1name}}"
placeholder="Additional Notes" /> placeholder="Additional Notes" />
{{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}} {{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}}
</section> </section>
<section> <section>
<input type="text" name="data.details.notes2name" value="{{data.details.notes2name}}" <input type="text" name="data.details.notes2name" value="{{data.details.notes2name}}"
placeholder="Additional Notes" /> placeholder="Additional Notes" />
{{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}} {{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}}
</section> </section>
<section> <section>
<input type="text" name="data.details.notes3name" value="{{data.details.notes3name}}" <input type="text" name="data.details.notes3name" value="{{data.details.notes3name}}"
placeholder="Additional Notes" /> placeholder="Additional Notes" />
{{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}} {{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}}
</section> </section>
<section> <section>
<input type="text" name="data.details.notes4name" value="{{data.details.notes4name}}" <input type="text" name="data.details.notes4name" value="{{data.details.notes4name}}"
placeholder="Additional Notes" /> placeholder="Additional Notes" />
{{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}} {{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}}
</section> </section>
</section> </section>
</div> </div>

View file

@ -29,7 +29,7 @@
</section> </section>
<section class="counters"> <section class="counters">
<div class="counter"> <div class="counter">
<h4 class="death-save rollable">{{ localize "SW5E.DeathSave" }}</h4> <h4 class="death-save rollable" data-action="rollDeathSave">{{ localize "SW5E.DeathSave" }}</h4>
<div class="counter-value"> <div class="counter-value">
<div class="death-success"> <div class="death-success">
<i class="fas fa-check"></i> <i class="fas fa-check"></i>

View file

@ -1,11 +1,11 @@
<div id="{{id}}" class="app window-app {{classes}} this-is-my-custom-window" data-appid="{{appId}}"> <div id="{{id}}" class="app window-app {{classes}} this-is-my-custom-window" data-appid="{{appId}}">
<header class="window-header flexrow"> <header class="window-header flexrow">
<h4 class="window-title">{{title}}</h4> <h4 class="window-title">{{title}}</h4>
{{#each headerButtons}} {{#each headerButtons}}
<a class="header-button {{this.class}}"><i class="{{this.icon}}"></i></a> <a class="header-button {{this.class}}"><i class="{{this.icon}}"></i></a>
{{/each}} {{/each}}
</header> </header>
<section class="window-content"> <section class="window-content">
</section> </section>
</div> </div>