From f1ee2937cdba11db9e127230d5cbed4c77eb8b03 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Tue, 24 Dec 2013 14:15:07 +1100 Subject: [PATCH] Feature: New Theme New icon, theme, and fuzzy time. Add moment.js --- Disco.BI/BI/Extensions/UtilityExtensions.cs | 111 - Disco.Models/UI/Job/JobShowModel.cs | 2 +- Disco.Services/Disco.Services.csproj | 3 +- .../Extensions/DateTimeExtensions.cs | 150 ++ Disco.Web/App_Code/AjaxHelpers.generated.cs | 2 +- Disco.Web/App_Code/CommonHelpers.cshtml | 19 +- Disco.Web/App_Code/CommonHelpers.generated.cs | 248 +- .../Areas/API/Controllers/DeviceController.cs | 2 +- .../Controllers/DocumentTemplateController.cs | 2 +- .../API/Models/Attachment/_AttachmentModel.cs | 2 +- .../Areas/API/Models/Job/_CommentModel.cs | 2 +- .../Areas/API/Models/Job/_DateChangeModel.cs | 6 +- .../AuthorizationRole/Create.generated.cs | 3 +- .../AuthorizationRole/Index.generated.cs | 3 +- .../Views/AuthorizationRole/Show.generated.cs | 3 +- .../Config/Views/Config/Index.generated.cs | 1 + .../Views/DeviceBatch/Create.generated.cs | 3 +- .../Views/DeviceBatch/Index.generated.cs | 3 +- .../Views/DeviceBatch/Show.generated.cs | 1 + .../Views/DeviceBatch/Timeline.generated.cs | 1 + .../GenericComponents.generated.cs | 3 +- .../Views/DeviceModel/Index.generated.cs | 3 +- .../Views/DeviceModel/Show.generated.cs | 3 +- .../_DeviceComponentsTable.generated.cs | 3 +- .../Views/DeviceProfile/Create.generated.cs | 3 +- .../Views/DeviceProfile/Defaults.generated.cs | 3 +- .../Views/DeviceProfile/Index.generated.cs | 3 +- .../Views/DeviceProfile/Show.generated.cs | 1 + .../Views/DeviceProfile/_Table.generated.cs | 3 +- .../DeviceProfile/_TableRender.generated.cs | 3 +- .../DocumentTemplate/Create.generated.cs | 3 +- .../ExpressionBrowser2.generated.cs | 3 +- .../ImportStatus.generated.cs | 3 +- .../Views/DocumentTemplate/Index.generated.cs | 3 +- .../Views/DocumentTemplate/Show.generated.cs | 1 + .../UndetectedPages.generated.cs | 3 +- .../_ExpressionsTable.generated.cs | 3 +- .../Config/Views/Enrolment/Index.generated.cs | 3 +- .../Views/Enrolment/Status.generated.cs | 3 +- .../Views/Expressions/Editor.generated.cs | 3 +- .../Views/JobPreferences/Index.generated.cs | 1 + .../Config/Views/Logging/Index.generated.cs | 3 +- .../Views/Logging/TaskStatus.generated.cs | 3 +- .../Views/Organisation/Index.generated.cs | 3 +- .../Config/Views/Plugins/Index.generated.cs | 3 +- .../Config/Views/Plugins/Install.generated.cs | 3 +- .../ProviderConfiguration.generated.cs | 3 +- .../Views/Shared/LogEvents.generated.cs | 3 +- .../Config/Views/SystemConfig/Index.cshtml | 4 +- .../Views/SystemConfig/Index.generated.cs | 85 +- Disco.Web/Areas/Config/Views/Web.config | 1 + .../Config/Views/_ViewStart.generated.cs | 1 + .../HeldDevices/HeldDeviceQueryModel.cs | 6 +- .../UserHeldDevices/HeldJobDeviceModel.cs | 6 +- .../Views/HeldDevices/Index.generated.cs | 2 +- .../HeldDevices/Noticeboard.generated.cs | 2 +- .../Public/Views/Public/Credits.generated.cs | 2 +- .../Public/Views/Public/Index.generated.cs | 2 +- .../Public/Views/Public/Licence.generated.cs | 2 +- .../Views/UserHeldDevices/Index.generated.cs | 2 +- .../UserHeldDevices/Noticeboard.generated.cs | 2 +- Disco.Web/ClientSource/Scripts/Core.js | 2386 ++++++++++++++++- Disco.Web/ClientSource/Scripts/Core.js.bundle | 3 + Disco.Web/ClientSource/Scripts/Core.min.js | 2 +- .../ClientSource/Scripts/Core.min.js.map | 6 +- .../Scripts/Core/disco.moment.extensions.js | 1 + .../ClientSource/Scripts/Core/disco.uicore.js | 2 +- .../ClientSource/Scripts/Core/moment.en-au.js | 62 + Disco.Web/ClientSource/Scripts/Core/moment.js | 2314 ++++++++++++++++ .../Scripts/Modules/Disco-CreateJob.js | 4 +- .../Scripts/Modules/Disco-CreateJob.min.js | 6 +- .../Modules/Disco-CreateJob.min.js.map | 4 +- .../Disco-CreateJob/disco.createjob.js | 2 +- Disco.Web/ClientSource/Style/BundleSite.css | 978 +++++-- .../ClientSource/Style/BundleSite.css.bundle | 2 + .../ClientSource/Style/BundleSite.min.css | 2 +- Disco.Web/ClientSource/Style/Config.css | 127 +- Disco.Web/ClientSource/Style/Config.less | 47 +- Disco.Web/ClientSource/Style/Config.min.css | 2 +- Disco.Web/ClientSource/Style/Credits.css | 2 +- Disco.Web/ClientSource/Style/Credits.min.css | 2 +- Disco.Web/ClientSource/Style/Declarations.css | 1 - .../ClientSource/Style/Declarations.less | 35 +- .../ClientSource/Style/Declarations.min.css | 1 - Disco.Web/ClientSource/Style/Device.css | 84 +- Disco.Web/ClientSource/Style/Device.less | 14 +- Disco.Web/ClientSource/Style/Device.min.css | 2 +- .../Style/Fancytree/ui.fancytree.min.css | 2 +- .../Style/Images/BackgroundDocument.png | Bin 947 -> 2294 bytes .../ClientSource/Style/Images/Heading.png | Bin 8197 -> 1818 bytes .../Style/Images/Status/loading.gif | Bin 723 -> 723 bytes .../Style/Images/Status/progressBar.png | Bin 0 -> 734 bytes Disco.Web/ClientSource/Style/Job.css | 138 +- Disco.Web/ClientSource/Style/Job.less | 48 +- Disco.Web/ClientSource/Style/Job.min.css | 2 +- Disco.Web/ClientSource/Style/Shared.css | 34 +- Disco.Web/ClientSource/Style/Shared.less | 6 +- Disco.Web/ClientSource/Style/Shared.min.css | 2 +- Disco.Web/ClientSource/Style/Site.css | 391 ++- Disco.Web/ClientSource/Style/Site.less | 208 +- Disco.Web/ClientSource/Style/Site.min.css | 2 +- Disco.Web/ClientSource/Style/User.css | 46 +- Disco.Web/ClientSource/Style/User.less | 16 +- Disco.Web/ClientSource/Style/User.min.css | 2 +- .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 260 -> 0 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 251 -> 0 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 104 -> 0 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 125 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 3762 -> 0 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 90 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 129 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 4369 -> 6922 bytes .../images/ui-icons_228ef1_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../ClientSource/Style/jQueryUI/jquery-ui.css | 110 +- .../ClientSource/Style/jQueryUIExtensions.css | 105 +- .../Style/jQueryUIExtensions.less | 115 +- .../Style/jQueryUIExtensions.min.css | 2 +- Disco.Web/ClientSource/Style/normalize.css | 406 +++ Disco.Web/Controllers/JobController.cs | 7 +- Disco.Web/Disco.Web.csproj | 37 +- Disco.Web/Models/Job/ShowModel.cs | 2 +- .../Views/Device/AddOffline.generated.cs | 3 +- .../_AssignmentHistory.generated.cs | 3 +- .../DeviceParts/_Certificates.generated.cs | 3 +- .../Device/DeviceParts/_Details.generated.cs | 1 + .../Device/DeviceParts/_Jobs.generated.cs | 3 +- .../Device/DeviceParts/_Resources.cshtml | 2 +- .../DeviceParts/_Resources.generated.cs | 3 +- .../Views/Device/DeviceParts/_Subject.cshtml | 2 +- .../Device/DeviceParts/_Subject.generated.cs | 5 +- .../Views/Device/ImportExport.generated.cs | 3 +- .../Views/Device/ImportReview.generated.cs | 3 +- Disco.Web/Views/Device/Index.generated.cs | 3 +- Disco.Web/Views/Device/Show.generated.cs | 3 +- .../Views/Device/_DeviceTable.generated.cs | 3 +- .../Views/Device/_ViewStart.generated.cs | 3 +- .../Views/InitialConfig/Complete.generated.cs | 3 +- .../Views/InitialConfig/Database.generated.cs | 3 +- .../InitialConfig/FileStore.generated.cs | 3 +- .../InitialConfig/RestartWebApp.generated.cs | 3 +- .../Views/InitialConfig/Welcome.generated.cs | 3 +- .../Views/InitialConfig/_Layout.generated.cs | 3 +- .../InitialConfig/_ViewStart.generated.cs | 1 + Disco.Web/Views/Job/Create.generated.cs | 1 + .../Views/Job/Create_Redirect.generated.cs | 3 +- Disco.Web/Views/Job/Index.cshtml | 2 +- Disco.Web/Views/Job/Index.generated.cs | 5 +- .../Job/JobParts/Components.generated.cs | 3 +- .../Views/Job/JobParts/Flags.generated.cs | 3 +- Disco.Web/Views/Job/JobParts/Insurance.cshtml | 2 +- .../Views/Job/JobParts/Insurance.generated.cs | 5 +- .../JobParts/JobMetaAdditions1.generated.cs | 3 +- .../Job/JobParts/NonWarranty.generated.cs | 3 +- .../Job/JobParts/NonWarrantyFinance.cshtml | 2 +- .../JobParts/NonWarrantyFinance.generated.cs | 5 +- Disco.Web/Views/Job/JobParts/Repairs.cshtml | 2 +- .../Views/Job/JobParts/Repairs.generated.cs | 5 +- Disco.Web/Views/Job/JobParts/Resources.cshtml | 4 +- .../Views/Job/JobParts/Resources.generated.cs | 5 +- .../Views/Job/JobParts/Warranty.generated.cs | 3 +- Disco.Web/Views/Job/JobParts/_Subject.cshtml | 6 +- .../Views/Job/JobParts/_Subject.generated.cs | 9 +- Disco.Web/Views/Job/List.generated.cs | 3 +- Disco.Web/Views/Job/LogWarranty.generated.cs | 3 +- .../Job/LogWarrantyDisclose.generated.cs | 3 +- .../Views/Job/LogWarrantyError.generated.cs | 3 +- Disco.Web/Views/Job/Show.cshtml | 4 +- Disco.Web/Views/Job/Show.generated.cs | 16 +- .../WarrantyProviderJobDetails.generated.cs | 3 +- .../Views/Job/_CreateSubject.generated.cs | 3 +- Disco.Web/Views/Job/_ViewStart.generated.cs | 3 +- Disco.Web/Views/Search/Query.generated.cs | 3 +- .../AccessDeniedException.generated.cs | 1 + .../DisplayTemplates/Exception.generated.cs | 1 + Disco.Web/Views/Shared/Error.generated.cs | 1 + .../Views/Shared/_DialogLayout.generated.cs | 3 +- .../Views/Shared/_EmptyLayout.generated.cs | 3 +- Disco.Web/Views/Shared/_JobTable.generated.cs | 3 +- Disco.Web/Views/Shared/_JobTableRender.cshtml | 113 +- .../Views/Shared/_JobTableRender.generated.cs | 502 ++-- Disco.Web/Views/Shared/_Layout.cshtml | 27 +- Disco.Web/Views/Shared/_Layout.generated.cs | 288 +- Disco.Web/Views/Shared/_PublicLayout.cshtml | 11 +- .../Views/Shared/_PublicLayout.generated.cs | 64 +- .../Views/Shared/_SearchDialog.generated.cs | 3 +- Disco.Web/Views/Update/Index.generated.cs | 1 + Disco.Web/Views/User/Index.generated.cs | 3 +- Disco.Web/Views/User/Show.generated.cs | 3 +- .../UserParts/_AssignmentHistory.generated.cs | 3 +- .../UserParts/_Authorization.generated.cs | 3 +- .../Views/User/UserParts/_Jobs.generated.cs | 3 +- .../Views/User/UserParts/_Resources.cshtml | 2 +- .../User/UserParts/_Resources.generated.cs | 3 +- .../User/UserParts/_Subject.generated.cs | 3 +- Disco.Web/Views/User/_UserTable.generated.cs | 3 +- Disco.Web/Views/User/_ViewStart.generated.cs | 3 +- Disco.Web/Views/Web.config | 1 + Disco.Web/Views/_ViewStart.generated.cs | 1 + Disco.Web/favicon.ico | Bin 32988 -> 32988 bytes Disco.Web/packages.config | 1 + 216 files changed, 7816 insertions(+), 1948 deletions(-) create mode 100644 Disco.Services/Extensions/DateTimeExtensions.cs create mode 100644 Disco.Web/ClientSource/Scripts/Core/disco.moment.extensions.js create mode 100644 Disco.Web/ClientSource/Scripts/Core/moment.en-au.js create mode 100644 Disco.Web/ClientSource/Scripts/Core/moment.js create mode 100644 Disco.Web/ClientSource/Style/Images/Status/progressBar.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_diagonals-thick_18_b81900_40x40.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_flat_10_000000_40x100.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_100_f6f6f6_1x400.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_gloss-wave_35_f6a828_500x100.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-bg_highlight-soft_75_ffe45c_1x100.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_228ef1_256x240.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_2e83ff_256x240.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_454545_256x240.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_888888_256x240.png create mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_cd0a0a_256x240.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_ef8c08_256x240.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_ffd27a_256x240.png delete mode 100644 Disco.Web/ClientSource/Style/jQueryUI/images/ui-icons_ffffff_256x240.png create mode 100644 Disco.Web/ClientSource/Style/normalize.css diff --git a/Disco.BI/BI/Extensions/UtilityExtensions.cs b/Disco.BI/BI/Extensions/UtilityExtensions.cs index f5eac231..e80e740c 100644 --- a/Disco.BI/BI/Extensions/UtilityExtensions.cs +++ b/Disco.BI/BI/Extensions/UtilityExtensions.cs @@ -23,117 +23,6 @@ namespace Disco.BI.Extensions } } - #region Date/Time Extensions - public static string ToFuzzy(this DateTime d) - { - var n = DateTime.Now; - - // Today - if (d.Date == n.Date) - { - if (d < n) - { - // Earlier - if (d > n.AddMinutes(-1)) - return "A moment ago"; - - if (d > n.AddMinutes(-10)) - return "A few minutes ago"; - } - else - { - // Later - if (d < n.AddMinutes(1)) - return "In a moment"; - - if (d < n.AddMinutes(10)) - return "In a few minutes"; - } - - return string.Format("Today at {0:h:mm tt}", d); - } - - if (d.Date < n.Date) - { - // PAST - var dif = n.Subtract(d); - - // Yesterday - if (d.Date == n.Date.AddDays(-1)) - return string.Format("Yesterday at {0:h:mm tt}", d); - // Last Week - if (dif.TotalDays <= 7) - return string.Format("Last {0:dddd} at {0:h:mm tt}", d); - // Within 8 Weeks - if (d > n.Date.AddMonths(-2)) - return string.Format("{0} Weeks ago, {1:ddd, d MMM}", (int)(dif.TotalDays / 7), d); - // Same Year - if (d.Year == n.Year) - return string.Format("{0} Months ago, {1:ddd, d MMM}", (int)(dif.TotalDays / 30), d); - } - else - { - // Future - var dif = d.Subtract(n); - - // Tomorrow - if (d.Date == n.Date.AddDays(1)) - return string.Format("Tomorrow at {0:h:mm tt}", d); - // Next Week - if (dif.TotalDays <= 7) - return string.Format("Next {0:dddd} at {0:h:mm tt}", d); - // < 2 Month - if (d < n.Date.AddMonths(2)) - return string.Format("In {0} Weeks, {1:ddd, d MMM}", (int)(dif.TotalDays / 7), d); - // Same Year - if (d.Year == n.Year) - return string.Format("In {0} Months, {1:ddd, d MMM}", (int)(dif.TotalDays / 30), d); - } - - return d.ToString("ddd, d MMM yyyy"); - } - public static string ToFuzzy(this DateTime? d, string NullValue = "N/A") - { - if (d.HasValue) - return ToFuzzy(d.Value); - else - return NullValue; - } - public static string ToFullDateTime(this DateTime d) - { - return d.ToString("ddd, d MMM yyyy @ h:mm:sstt"); - } - public static string ToFullDateTime(this DateTime? d, string NullValue = "N/A") - { - if (d.HasValue) - return ToFullDateTime(d.Value); - else - return NullValue; - } - public static long ToSortableDateTime(this DateTime? d) - { - if (d.HasValue) - return d.Value.ToBinary(); - else - return -1; - } - public static long ToSortableDateTime(this DateTime d) - { - return d.ToBinary(); - } - public static string ToJavascriptDateTime(this DateTime d) - { - return d.ToString("yyyy/MM/dd hh:mm tt"); - } - public static string ToJavascriptDateTime(this DateTime? d) - { - if (d.HasValue) - return d.Value.ToString("yyyy/MM/dd hh:mm tt"); - else - return null; - } - #endregion - #region Image Extensions public static Bitmap RotateImage(this Image Source, float Angle, Brush BackgroundColor = null, bool ResizeIfOver45Deg = true) diff --git a/Disco.Models/UI/Job/JobShowModel.cs b/Disco.Models/UI/Job/JobShowModel.cs index bd2dea52..c19e39f0 100644 --- a/Disco.Models/UI/Job/JobShowModel.cs +++ b/Disco.Models/UI/Job/JobShowModel.cs @@ -9,7 +9,7 @@ namespace Disco.Models.UI.Job public interface JobShowModel : BaseUIModel { Repository.Job Job { get; set; } - bool IsLongRunning { get; set; } + TimeSpan? LongRunning { get; set; } List AvailableDocumentTemplates { get; set; } List UpdatableJobSubTypes { get; set; } } diff --git a/Disco.Services/Disco.Services.csproj b/Disco.Services/Disco.Services.csproj index 4ef369f7..848e0ebe 100644 --- a/Disco.Services/Disco.Services.csproj +++ b/Disco.Services/Disco.Services.csproj @@ -155,6 +155,7 @@ + @@ -253,7 +254,7 @@ - + diff --git a/Disco.Services/Extensions/DateTimeExtensions.cs b/Disco.Services/Extensions/DateTimeExtensions.cs new file mode 100644 index 00000000..d951ac59 --- /dev/null +++ b/Disco.Services/Extensions/DateTimeExtensions.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Disco +{ + public static class DateTimeExtensions + { + + public static string From(this DateTime moment, DateTime to, bool withoutSuffix) + { + var duration = to - moment; + return duration.Humanize(!withoutSuffix); + } + public static string From(this DateTime moment, DateTime to) + { + return moment.From(to, false); + } + public static string From(this DateTime? moment, DateTime to, bool withoutSuffix, string nullValue) + { + if (moment.HasValue) + return moment.Value.From(to, withoutSuffix); + else + return nullValue; + } + public static string From(this DateTime? moment, DateTime to, string nullValue) + { + if (moment.HasValue) + return moment.Value.From(to); + else + return nullValue; + } + public static string From(this DateTime? moment, DateTime to) + { + return moment.From(to, "n/a"); + } + public static string FromNow(this DateTime moment, bool withoutSuffix) + { + return DateTime.Now.From(moment, withoutSuffix); + } + public static string FromNow(this DateTime moment) + { + return moment.FromNow(false); + } + public static string FromNow(this DateTime? moment, bool withoutSuffix, string nullValue) + { + if (moment.HasValue) + return moment.Value.FromNow(withoutSuffix); + else + return nullValue; + } + public static string FromNow(this DateTime? moment, string nullValue) + { + if (moment.HasValue) + return moment.Value.FromNow(); + else + return nullValue; + } + public static string FromNow(this DateTime? moment) + { + return moment.FromNow("n/a"); + } + + public static string Humanize(this TimeSpan duration, bool withSuffix) + { + string output = RelativeTime(duration.Ticks > 0 ? duration : duration.Negate(), true); + + if (withSuffix) + if (duration.TotalMilliseconds > 0) + output = "in " + output; + else + output = output + " ago"; + + return output; + } + + private static string RelativeTime(this TimeSpan difference, bool withoutSuffix) + { + string output; + + if (Math.Round(difference.TotalSeconds) < 45) + output = "a few seconds"; + else if (Math.Round(difference.TotalMinutes) == 1) + output = "a minute"; + else if (Math.Round(difference.TotalMinutes) < 45) + output = (int)Math.Round(difference.TotalMinutes) + " minutes"; + else if (Math.Round(difference.TotalHours) == 1) + output = "an hour"; + else if (Math.Round(difference.TotalHours) < 22) + output = (int)Math.Round(difference.TotalHours) + " hours"; + else if (Math.Round(difference.TotalDays) == 1) + output = "a day"; + else if (Math.Round(difference.TotalDays) <= 25) + output = (int)Math.Round(difference.TotalDays) + " days"; + else if (Math.Round(difference.TotalDays) <= 45) + output = "a month"; + else if (Math.Round(difference.TotalDays) < 345) + output = (int)Math.Round(difference.TotalDays / 30) + " months"; + else if (Math.Round(difference.TotalDays / 365) == 1) + output = "a year"; + else + output = (int)Math.Round(difference.TotalDays / 365) + " years"; + + if (!withoutSuffix) + if (difference.TotalMilliseconds > 0) + output = "in " + output; + else + output = output + " ago"; + + return output; + } + + public static string ToFullDateTime(this DateTime d) + { + return d.ToString("ddd, d MMM yyyy h:mm:sstt"); + } + public static string ToFullDateTime(this DateTime? d, string NullValue = "N/A") + { + if (d.HasValue) + return ToFullDateTime(d.Value); + else + return NullValue; + } + public static long ToSortable(this DateTime? d) + { + if (d.HasValue) + return d.Value.ToBinary(); + else + return -1; + } + public static long ToSortable(this DateTime d) + { + return d.ToBinary(); + } + public static string ToJavaScript(this DateTime d) + { + return d.ToString("yyyy/MM/dd hh:mm tt"); + } + public static string ToJavaScript(this DateTime? d) + { + if (d.HasValue) + return d.Value.ToString("yyyy/MM/dd hh:mm tt"); + else + return null; + } + + } +} diff --git a/Disco.Web/App_Code/AjaxHelpers.generated.cs b/Disco.Web/App_Code/AjaxHelpers.generated.cs index 280d7a4b..cb0a9a50 100644 --- a/Disco.Web/App_Code/AjaxHelpers.generated.cs +++ b/Disco.Web/App_Code/AjaxHelpers.generated.cs @@ -2,7 +2,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18051 +// Runtime Version:4.0.30319.34003 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/Disco.Web/App_Code/CommonHelpers.cshtml b/Disco.Web/App_Code/CommonHelpers.cshtml index 578f9204..f3fe5b13 100644 --- a/Disco.Web/App_Code/CommonHelpers.cshtml +++ b/Disco.Web/App_Code/CommonHelpers.cshtml @@ -1,4 +1,5 @@ @* Generator: WebPagesHelper *@ +@using Disco; @using Disco.BI.Extensions; @using Disco.Models.Repository; @using Disco.Web; @@ -6,13 +7,9 @@ @using System.Web.Mvc.Html; @using Disco.Services.Web; @helper FriendlyDate(DateTime d, string ElementId = null) -{ - @d.ToFuzzy() -} -@helper FriendlyDate(DateTime? d, string NullValue = "N/A", string ElementId = null) -{ - @d.ToFuzzy(NullValue) -} +{@d.FromNow()} +@helper FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null) +{@d.FromNow(NullValue)} @helper RadioButtonList(string id, List items, int columns = 1) { @ItemList("radio", id, items, columns) @@ -49,7 +46,7 @@ } -@helper FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "N/A") +@helper FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a") { @FriendlyDate(d, DateNullValue); @FriendlyUser(u, null, "by"); @@ -59,13 +56,13 @@ @FriendlyDate(d); @FriendlyUser(u, null, "by"); } -@helper FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "N/A") +@helper FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a") { - @d.ToFuzzy(DateNullValue) + @d.FromNow(DateNullValue) } @helper FriendlyDateAndTitleUser(DateTime d, User u) { - @d.ToFuzzy() + @d.FromNow() } @helper FriendlyUser(User u, string nullValue = null, string prepend = null) { diff --git a/Disco.Web/App_Code/CommonHelpers.generated.cs b/Disco.Web/App_Code/CommonHelpers.generated.cs index bbf21a4c..8e2f0729 100644 --- a/Disco.Web/App_Code/CommonHelpers.generated.cs +++ b/Disco.Web/App_Code/CommonHelpers.generated.cs @@ -20,13 +20,13 @@ namespace Disco.Web using System.Web; using System.Web.Helpers; - #line 5 "..\..\App_Code\CommonHelpers.cshtml" + #line 6 "..\..\App_Code\CommonHelpers.cshtml" using System.Web.Mvc; #line default #line hidden - #line 6 "..\..\App_Code\CommonHelpers.cshtml" + #line 7 "..\..\App_Code\CommonHelpers.cshtml" using System.Web.Mvc.Html; #line default @@ -37,24 +37,30 @@ namespace Disco.Web using System.Web.WebPages.Html; #line 2 "..\..\App_Code\CommonHelpers.cshtml" - using Disco.BI.Extensions; + using Disco; #line default #line hidden #line 3 "..\..\App_Code\CommonHelpers.cshtml" - using Disco.Models.Repository; - - #line default - #line hidden - - #line 7 "..\..\App_Code\CommonHelpers.cshtml" - using Disco.Services.Web; + using Disco.BI.Extensions; #line default #line hidden #line 4 "..\..\App_Code\CommonHelpers.cshtml" + using Disco.Models.Repository; + + #line default + #line hidden + + #line 8 "..\..\App_Code\CommonHelpers.cshtml" + using Disco.Services.Web; + + #line default + #line hidden + + #line 5 "..\..\App_Code\CommonHelpers.cshtml" using Disco.Web; #line default @@ -70,13 +76,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 9 "..\..\App_Code\CommonHelpers.cshtml" - - -#line default -#line hidden - -WriteLiteralTo(@__razor_helper_writer, " \r\n"); +WriteLiteralTo(@__razor_helper_writer, ""); -#line 11 "..\..\App_Code\CommonHelpers.cshtml" - +#line 10 "..\..\App_Code\CommonHelpers.cshtml" + #line default #line hidden }); -} + } -public static System.Web.WebPages.HelperResult FriendlyDate(DateTime? d, string NullValue = "N/A", string ElementId = null) +public static System.Web.WebPages.HelperResult FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 13 "..\..\App_Code\CommonHelpers.cshtml" - - -#line default -#line hidden - -WriteLiteralTo(@__razor_helper_writer, " \r\n"); +WriteLiteralTo(@__razor_helper_writer, ""); -#line 15 "..\..\App_Code\CommonHelpers.cshtml" - +#line 12 "..\..\App_Code\CommonHelpers.cshtml" + #line default #line hidden }); -} + } public static System.Web.WebPages.HelperResult RadioButtonList(string id, List items, int columns = 1) @@ -222,21 +216,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 17 "..\..\App_Code\CommonHelpers.cshtml" +#line 14 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 18 "..\..\App_Code\CommonHelpers.cshtml" +#line 15 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, ItemList("radio", id, items, columns)); #line default #line hidden -#line 18 "..\..\App_Code\CommonHelpers.cshtml" +#line 15 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -253,21 +247,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 21 "..\..\App_Code\CommonHelpers.cshtml" +#line 18 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 22 "..\..\App_Code\CommonHelpers.cshtml" +#line 19 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, ItemList("checkbox", id, items, columns, alignEven, forceUniqueIds)); #line default #line hidden -#line 22 "..\..\App_Code\CommonHelpers.cshtml" +#line 19 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -284,7 +278,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 25 "..\..\App_Code\CommonHelpers.cshtml" +#line 22 "..\..\App_Code\CommonHelpers.cshtml" int itemsPerColumn = items.Count / columns; int columnWidth = (100 / columns); @@ -297,7 +291,7 @@ WriteLiteralTo(@__razor_helper_writer, " \r\n \r\n
    i ? 1 : 0); for (int i2 = 0; i2 < itemsForThisColumn && itemNextId < items.Count; i2++) @@ -334,7 +328,7 @@ WriteLiteralTo(@__razor_helper_writer, "
  • \r\n -#line 43 "..\..\App_Code\CommonHelpers.cshtml" +#line 40 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, itemId); #line default @@ -344,7 +338,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" name=\""); -#line 43 "..\..\App_Code\CommonHelpers.cshtml" +#line 40 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, id); #line default @@ -354,7 +348,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" value=\""); -#line 43 "..\..\App_Code\CommonHelpers.cshtml" +#line 40 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, item.Value); #line default @@ -364,7 +358,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" type=\""); -#line 43 "..\..\App_Code\CommonHelpers.cshtml" +#line 40 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, inputType); #line default @@ -374,7 +368,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" "); -#line 43 "..\..\App_Code\CommonHelpers.cshtml" +#line 40 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, item.Selected ? new HtmlString("checked=\"checked\" ") : null); #line default @@ -384,7 +378,7 @@ WriteLiteralTo(@__razor_helper_writer, "/>
  • \r\n"); -#line 44 "..\..\App_Code\CommonHelpers.cshtml" +#line 41 "..\..\App_Code\CommonHelpers.cshtml" } @@ -415,7 +409,7 @@ WriteLiteralTo(@__razor_helper_writer, "
\r\n -#line 48 "..\..\App_Code\CommonHelpers.cshtml" +#line 45 "..\..\App_Code\CommonHelpers.cshtml" } #line default @@ -425,7 +419,7 @@ WriteLiteralTo(@__razor_helper_writer, " \r\n
\r\n"); -#line 51 "..\..\App_Code\CommonHelpers.cshtml" +#line 48 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden @@ -435,41 +429,41 @@ WriteLiteralTo(@__razor_helper_writer, " \r\n \r\n"); } -public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "N/A") +public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a") { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 53 "..\..\App_Code\CommonHelpers.cshtml" +#line 50 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 54 "..\..\App_Code\CommonHelpers.cshtml" +#line 51 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, FriendlyDate(d, DateNullValue)); #line default #line hidden -#line 54 "..\..\App_Code\CommonHelpers.cshtml" +#line 51 "..\..\App_Code\CommonHelpers.cshtml" ; #line default #line hidden -#line 55 "..\..\App_Code\CommonHelpers.cshtml" +#line 52 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by")); #line default #line hidden -#line 55 "..\..\App_Code\CommonHelpers.cshtml" +#line 52 "..\..\App_Code\CommonHelpers.cshtml" ; #line default @@ -486,35 +480,35 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 58 "..\..\App_Code\CommonHelpers.cshtml" +#line 55 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 59 "..\..\App_Code\CommonHelpers.cshtml" +#line 56 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, FriendlyDate(d)); #line default #line hidden -#line 59 "..\..\App_Code\CommonHelpers.cshtml" +#line 56 "..\..\App_Code\CommonHelpers.cshtml" ; #line default #line hidden -#line 60 "..\..\App_Code\CommonHelpers.cshtml" +#line 57 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by")); #line default #line hidden -#line 60 "..\..\App_Code\CommonHelpers.cshtml" +#line 57 "..\..\App_Code\CommonHelpers.cshtml" ; #line default @@ -525,13 +519,13 @@ WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by")); } -public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "N/A") +public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a") { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 63 "..\..\App_Code\CommonHelpers.cshtml" +#line 60 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -541,7 +535,7 @@ WriteLiteralTo(@__razor_helper_writer, " \r\n"); -#line 65 "..\..\App_Code\CommonHelpers.cshtml" +#line 62 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden @@ -597,7 +591,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 67 "..\..\App_Code\CommonHelpers.cshtml" +#line 64 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -607,7 +601,7 @@ WriteLiteralTo(@__razor_helper_writer, " \r\n"); -#line 69 "..\..\App_Code\CommonHelpers.cshtml" +#line 66 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden @@ -663,7 +657,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 71 "..\..\App_Code\CommonHelpers.cshtml" +#line 68 "..\..\App_Code\CommonHelpers.cshtml" if (u != null) { @@ -672,7 +666,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { #line hidden -#line 74 "..\..\App_Code\CommonHelpers.cshtml" +#line 71 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, prepend); #line default @@ -683,7 +677,7 @@ WriteLiteralTo(@__razor_helper_writer, " "); -#line 74 "..\..\App_Code\CommonHelpers.cshtml" +#line 71 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, u.Id); #line default @@ -703,7 +697,7 @@ WriteLiteralTo(@__razor_helper_writer, "\r\n"); -#line 75 "..\..\App_Code\CommonHelpers.cshtml" +#line 72 "..\..\App_Code\CommonHelpers.cshtml" } else { @@ -715,7 +709,7 @@ WriteLiteralTo(@__razor_helper_writer, " "); -#line 78 "..\..\App_Code\CommonHelpers.cshtml" +#line 75 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, nullValue); #line default @@ -725,7 +719,7 @@ WriteLiteralTo(@__razor_helper_writer, "\r\n"); -#line 79 "..\..\App_Code\CommonHelpers.cshtml" +#line 76 "..\..\App_Code\CommonHelpers.cshtml" } #line default @@ -742,7 +736,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 82 "..\..\App_Code\CommonHelpers.cshtml" +#line 79 "..\..\App_Code\CommonHelpers.cshtml" for (int index = 0; index < BreadCrumbs.Count; index++) { @@ -757,7 +751,7 @@ WriteLiteralTo(@__razor_helper_writer, " >\r\n"); -#line 89 "..\..\App_Code\CommonHelpers.cshtml" +#line 86 "..\..\App_Code\CommonHelpers.cshtml" } if (breadCrumb.Item2 == null) { @@ -766,14 +760,14 @@ WriteLiteralTo(@__razor_helper_writer, " >\r\n"); #line hidden -#line 92 "..\..\App_Code\CommonHelpers.cshtml" +#line 89 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, breadCrumb.Item1); #line default #line hidden -#line 92 "..\..\App_Code\CommonHelpers.cshtml" +#line 89 "..\..\App_Code\CommonHelpers.cshtml" } else @@ -783,14 +777,14 @@ WriteTo(@__razor_helper_writer, breadCrumb.Item1); #line hidden -#line 96 "..\..\App_Code\CommonHelpers.cshtml" +#line 93 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, Html.GetPageHelper().ActionLink(breadCrumb.Item1, breadCrumb.Item2)); #line default #line hidden -#line 96 "..\..\App_Code\CommonHelpers.cshtml" +#line 93 "..\..\App_Code\CommonHelpers.cshtml" } } @@ -809,21 +803,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 101 "..\..\App_Code\CommonHelpers.cshtml" +#line 98 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 102 "..\..\App_Code\CommonHelpers.cshtml" +#line 99 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, Title); #line default #line hidden -#line 102 "..\..\App_Code\CommonHelpers.cshtml" +#line 99 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -840,7 +834,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 105 "..\..\App_Code\CommonHelpers.cshtml" +#line 102 "..\..\App_Code\CommonHelpers.cshtml" for (int index = 0; index < BreadCrumbs.Count; index++) { @@ -852,14 +846,14 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { #line hidden -#line 111 "..\..\App_Code\CommonHelpers.cshtml" +#line 108 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, new HtmlString(" > ")); #line default #line hidden -#line 111 "..\..\App_Code\CommonHelpers.cshtml" +#line 108 "..\..\App_Code\CommonHelpers.cshtml" } @@ -867,14 +861,14 @@ WriteTo(@__razor_helper_writer, new HtmlString(" > ")); #line hidden -#line 113 "..\..\App_Code\CommonHelpers.cshtml" +#line 110 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, breadCrumb.Item1); #line default #line hidden -#line 113 "..\..\App_Code\CommonHelpers.cshtml" +#line 110 "..\..\App_Code\CommonHelpers.cshtml" } @@ -892,21 +886,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 117 "..\..\App_Code\CommonHelpers.cshtml" +#line 114 "..\..\App_Code\CommonHelpers.cshtml" #line default #line hidden -#line 118 "..\..\App_Code\CommonHelpers.cshtml" +#line 115 "..\..\App_Code\CommonHelpers.cshtml" WriteTo(@__razor_helper_writer, Title); #line default #line hidden -#line 118 "..\..\App_Code\CommonHelpers.cshtml" +#line 115 "..\..\App_Code\CommonHelpers.cshtml" #line default @@ -923,7 +917,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => { -#line 121 "..\..\App_Code\CommonHelpers.cshtml" +#line 118 "..\..\App_Code\CommonHelpers.cshtml" Html.GetPageHelper().BundleDeferred("~/ClientScripts/Modules/Disco-jQueryExtensions"); #line default @@ -933,7 +927,7 @@ WriteLiteralTo(@__razor_helper_writer, " \r -#line 126 "..\..\App_Code\CommonHelpers.cshtml" +#line 123 "..\..\App_Code\CommonHelpers.cshtml" } else { @@ -976,7 +970,7 @@ WriteLiteralTo(@__razor_helper_writer, "