diff --git a/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor b/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor index 05912a30869..689bced45ad 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor @@ -9,6 +9,10 @@ + + + + @@ -74,7 +78,9 @@ - + diff --git a/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor.cs index a0f1ec8a1ce..d29fc0b4652 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/FlipClocks.razor.cs @@ -48,12 +48,20 @@ private Task OnCompletedAsync() /// GetAttributes /// /// - private static AttributeItem[] GetAttributes() => + private AttributeItem[] GetAttributes() => [ + new() + { + Name = nameof(FlipClock.ShowDay), + Description = Localizer["ShowDay_Description"], + Type = "boolean", + ValueList = "true|false", + DefaultValue = "false" + }, new() { Name = nameof(FlipClock.ShowHour), - Description = "是否显示小时", + Description = Localizer["ShowHour_Description"], Type = "boolean", ValueList = "true|false", DefaultValue = "true" @@ -61,7 +69,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.ShowMinute), - Description = "是否显示分钟", + Description = Localizer["ShowMinute_Description"], Type = "boolean", ValueList = "true|false", DefaultValue = "true" @@ -69,7 +77,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.ViewMode), - Description = "是否显示分钟", + Description = Localizer["ViewMode_Description"], Type = "FlipClockViewMode", ValueList = "DateTime|Count|CountDown", DefaultValue = "DateTime" @@ -77,7 +85,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.StartValue), - Description = "开始时间", + Description = Localizer["StartValue_Description"], Type = "TimeSpan", ValueList = " — ", DefaultValue = " — " @@ -85,7 +93,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.OnCompletedAsync), - Description = "计时结束回调方法", + Description = Localizer["OnCompletedAsync_Description"], Type = "Func", ValueList = " — ", DefaultValue = " — " @@ -93,7 +101,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.Height), - Description = "组件高度", + Description = Localizer["Height_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -101,7 +109,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.BackgroundColor), - Description = "组件背景色", + Description = Localizer["BackgroundColor_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -109,7 +117,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.FontSize), - Description = "组件字体大小", + Description = Localizer["FontSize_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -117,7 +125,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardWidth), - Description = "组件卡片宽度", + Description = Localizer["CardWidth_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -125,7 +133,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardHeight), - Description = "组件卡片高度", + Description = Localizer["CardHeight_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -133,7 +141,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardColor), - Description = "组件卡片字体颜色", + Description = Localizer["CardColor_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -141,7 +149,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardBackgroundColor), - Description = "组件卡片背景颜色", + Description = Localizer["CardBackgroundColor_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -149,7 +157,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardDividerHeight), - Description = "组件卡片分割线高度", + Description = Localizer["CardDividerHeight_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -157,7 +165,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardDividerColor), - Description = "组件卡片分割线颜色", + Description = Localizer["CardDividerColor_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -165,7 +173,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardMargin), - Description = "组件卡片间隔", + Description = Localizer["CardMargin_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " @@ -173,7 +181,7 @@ private static AttributeItem[] GetAttributes() => new() { Name = nameof(FlipClock.CardGroupMargin), - Description = "组件卡片组间隔", + Description = Localizer["CardGroupMargin_Description"], Type = "string?", ValueList = " — ", DefaultValue = " — " diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 3fc431ea4ed..a11c69dabc7 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -6802,6 +6802,8 @@ "FlipClocksDescription": "Used for website timing or countdown", "BaseUsageText": "Basic usage", "BaseUsageIntro": "Synchronize display of current time", + "ShowDayText": "Show Day", + "ShowDayIntro": "Display day information by setting ShowDay=\"true\"", "ShowMinuteText": "not display hours and minutes", "ShowMinuteIntro": "By setting ShowHour=\"false\" ShowMinute=\"false\" to not display hour and minute information", "ShowSecondText": "not display seconds", @@ -6818,7 +6820,24 @@ "CardHeight": "Card Height", "CardWidth": "Card Width", "CardMargin": "Card Margin", - "CardGroupMargin": "Card Group Margin" + "CardGroupMargin": "Card Group Margin", + "ShowDay_Description": "Show day", + "ShowHour_Description": "Show hour", + "ShowMinute_Description": "Show minute", + "ViewMode_Description": "View mode", + "StartValue_Description": "Start time", + "OnCompletedAsync_Description": "Callback when timer completed", + "Height_Description": "Height", + "BackgroundColor_Description": "Background color", + "FontSize_Description": "Font size", + "CardWidth_Description": "Card width", + "CardHeight_Description": "Card height", + "CardColor_Description": "Card font color", + "CardBackgroundColor_Description": "Card background color", + "CardDividerHeight_Description": "Card divider height", + "CardDividerColor_Description": "Card divider color", + "CardMargin_Description": "Card margin", + "CardGroupMargin_Description": "Card group margin" }, "BootstrapBlazor.Server.Components.Samples.Icons.BootstrapIcons": { "Title": "Bootstrap Icons", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index 5b1aaa81fb2..9891436cae4 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -1178,7 +1178,7 @@ }, "BootstrapBlazor.Server.Components.Components.InstallContent": { "P5": "使用 BootstrapBlazor Project Template 扩展创建项目", - "InstallByTemplate":"您可以通过 [传送门] 下载安装扩展后,通过扩展创建项目, 强烈推荐", + "InstallByTemplate": "您可以通过 [传送门] 下载安装扩展后,通过扩展创建项目, 强烈推荐", "P9": "使用 Visual Studio 创建项目", "P10": "步骤一、创建项目", "P11": "打开 Visual Studio", @@ -6802,6 +6802,8 @@ "FlipClocksDescription": "用于网站计时,或者倒计时使用", "BaseUsageText": "基本功能", "BaseUsageIntro": "同步显示当前时间", + "ShowDayText": "显示日", + "ShowDayIntro": "通过设置 ShowDay=\"true\" 显示日信息", "ShowMinuteText": "不显示时、分", "ShowMinuteIntro": "通过设置 ShowHour=\"false\" ShowMinute=\"false\" 不显示小时、分钟信息", "ShowSecondText": "不显示秒", @@ -6818,7 +6820,24 @@ "CardHeight": "卡片高度", "CardWidth": "卡片宽度", "CardMargin": "卡片边距", - "CardGroupMargin": "卡片组边距" + "CardGroupMargin": "卡片组边距", + "ShowDay_Description": "是否显示日", + "ShowHour_Description": "是否显示小时", + "ShowMinute_Description": "是否显示分钟", + "ViewMode_Description": "显示模式", + "StartValue_Description": "开始时间", + "OnCompletedAsync_Description": "计时结束回调方法", + "Height_Description": "高度", + "BackgroundColor_Description": "背景色", + "FontSize_Description": "字体大小", + "CardWidth_Description": "卡片宽度", + "CardHeight_Description": "卡片高度", + "CardColor_Description": "卡片字体颜色", + "CardBackgroundColor_Description": "卡片背景颜色", + "CardDividerHeight_Description": "卡片分割线高度", + "CardDividerColor_Description": "卡片分割线颜色", + "CardMargin_Description": "卡片间隔", + "CardGroupMargin_Description": "卡片组间隔" }, "BootstrapBlazor.Server.Components.Samples.Icons.BootstrapIcons": { "Title": "Bootstrap Icons", diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index ed1dd0cd382..6dc7a210d30 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.7.4-beta02 + 9.7.4-beta03 diff --git a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor index 370e13c52c2..f1211578b84 100644 --- a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor +++ b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor @@ -3,6 +3,14 @@ @attribute [BootstrapModuleAutoLoader(JSObjectReference = true)]
+ @if (ShowDay) + { +
+ @RenderItem(10) + @RenderItem(10) +
+ } + @if (ShowHour) {
diff --git a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.cs b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.cs index 97c1e1af2bd..570cd8b06ff 100644 --- a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.cs +++ b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.cs @@ -11,6 +11,12 @@ namespace BootstrapBlazor.Components; /// public partial class FlipClock { + /// + /// 获得/设置 是否显示 Day 默认 false + /// + [Parameter] + public bool ShowDay { get; set; } + /// /// 获得/设置 是否显示 Hour 默认 true /// diff --git a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.js b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.js index 32ed2bbd0a5..f8680bc31b6 100644 --- a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.js +++ b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.js @@ -14,6 +14,7 @@ export function init(id, options) { return; } + const listDay = el.querySelector('.bb-flip-clock-list.day'); const listHour = el.querySelector('.bb-flip-clock-list.hour'); const listMinute = el.querySelector('.bb-flip-clock-list.minute'); const listSecond = el.querySelector('.bb-flip-clock-list.second'); @@ -21,26 +22,41 @@ export function init(id, options) { let counter = 0; const getDate = () => { + let totalMilliseconds = 0; let now; + if (options.viewMode === "Count") { counter += 1000; - now = new Date(new Date().getTimezoneOffset() * 60 * 1000 - options.startValue + counter); + totalMilliseconds = counter - options.startValue; } else if (countDown) { counter += 1000; - now = new Date(new Date().getTimezoneOffset() * 60 * 1000 + options.startValue - counter); + totalMilliseconds = options.startValue - counter; + if (totalMilliseconds < 0) totalMilliseconds = 0; } else { now = new Date(); + return { + days: now.getDate(), + hours: now.getHours(), + minutes: now.getMinutes(), + seconds: now.getSeconds() + }; } - return { hours: now.getHours(), minutes: now.getMinutes(), seconds: now.getSeconds() }; + + const seconds = Math.floor(totalMilliseconds / 1000) % 60; + const minutes = Math.floor(totalMilliseconds / (1000 * 60)) % 60; + const hours = Math.floor(totalMilliseconds / (1000 * 60 * 60)) % 24; + const days = Math.floor(totalMilliseconds / (1000 * 60 * 60 * 24)); + return { days, hours, minutes, seconds }; } + let lastDay; let lastHour; let lastMinute; let lastSecond; const go = () => { - const { hours, minutes, seconds } = getDate(); + const { days, hours, minutes, seconds } = getDate(); if (lastSecond !== seconds) { lastSecond = seconds; @@ -54,7 +70,11 @@ export function init(id, options) { lastHour = hours; setTime(listHour, hours, countDown); } - return { hours, minutes, seconds } + if (lastDay !== days) { + lastDay = days; + setTime(listDay, days, countDown); + } + return { days, hours, minutes, seconds } } let start = void 0 @@ -78,7 +98,6 @@ export function init(id, options) { } requestAnimationFrame(flip); - Data.set(id, { el, options }); } diff --git a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.scss b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.scss index 87ac84264da..e14d4508795 100644 --- a/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.scss +++ b/src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.scss @@ -1,4 +1,4 @@ -.bb-flip-clock { +.bb-flip-clock { --bb-flip-clock-height: #{$bb-flip-clock-height}; --bb-flip-clock-bg: #{$bb-flip-clock-bg}; --bb-flip-clock-font-size: #{$bb-flip-clock-font-size}; @@ -25,6 +25,7 @@ position: relative; width: 100%; flex-shrink: 0; + overflow: auto; .bb-flip-clock-list { display: flex; diff --git a/test/UnitTest/Components/FlipClockTest.cs b/test/UnitTest/Components/FlipClockTest.cs index 9af609f14fa..a67e697115e 100644 --- a/test/UnitTest/Components/FlipClockTest.cs +++ b/test/UnitTest/Components/FlipClockTest.cs @@ -46,6 +46,19 @@ public void ShowSecond_Ok() cut.DoesNotContain("bb-flip-clock-list second"); } + [Fact] + public void ShowDay_Ok() + { + var cut = Context.RenderComponent(); + cut.DoesNotContain("bb-flip-clock-list day"); + + cut.SetParametersAndRender(pb => + { + pb.Add(a => a.ShowDay, true); + }); + cut.Contains("bb-flip-clock-list day"); + } + [Fact] public async Task ViewMode_Ok() {