/// <inheritdoc /> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is string) { return((string)value); } if (value is DateTime) { var ps = parameter as string; switch (ps) { case "T": return(Tx.Time((DateTime)value, TxTime.HourMinuteSecond)); case "TS": return(Tx.Time((DateTime)value, TxTime.HourMinute)); case null: default: return(Tx.Time((DateTime)value, TxTime.YearMonthDay | TxTime.HourMinuteSecond)); } } if (value is TimeSpan) { return(Tx.TimeSpan((TimeSpan)value)); } throw new NotSupportedException(); }
public DetailedWikiPageCompletionData(string title, PageInfo pageInfo) : base(title, pageInfo.Title) { if (pageInfo == null) { throw new ArgumentNullException(nameof(pageInfo)); } _Description = pageInfo.Title + "\n\n" + Utility.TruncateString(pageInfo.Description ?? "", 300) + "\n\n" + Tx.TC("page.content length") + Tx.DataSize(pageInfo.ContentLength) + "\n" + Tx.TC("page.last revision by") + pageInfo.LastRevisionUser + " " + Tx.Time(pageInfo.LastRevisionTime, TxTime.YearMonthDay | TxTime.HourMinuteSecond); if (pageInfo.RedirectPath != null && pageInfo.RedirectPath.Count > 0) { _Description += "\n" + Tx.TC("page.redirect") + string.Join("→", pageInfo.RedirectPath); } if (pageInfo.TemplateArguments.Count > 0) { _Description += "\n\n" + Tx.TC("page.arguments") + "\n" + string.Join("\n", pageInfo.TemplateArguments.Select(ta => ta.Name)); } }
public async Task DetectExternalRevisionAsync() { if (WikiPage == null) { return; } var revision = WikiPage.LastRevisionId; if (revision == 0) { return; } await RefetchPageAsync(false); if (WikiPage.LastRevisionId != revision) { AlertText = Tx.T("editor.external revision detected", "time", Tx.Time(WikiPage.LastRevision.TimeStamp, TxTime.YearMonthDay | TxTime.HourMinuteSecond), "user", WikiPage.LastRevision.UserName); await RefetchPageAsync(true); } }
public string GetValueString() { switch (Value) { case var value when value is TextValueDto val: return(val.Value); case var value when value is TranslatedTextValueDto val: return(Tx.T($"SystemInformation:Labels.{val.TranslationKey}")); case var value when value is NumberValueDto val: return(Tx.Number(val.Value)); case var value when value is DataSizeValueDto val: return(Tx.DataSize(val.Value)); case var value when value is ProgressValueDto val: return($"{val.Value} / {val.Maximum}"); case var value when value is CultureValueDto val: var culture = CultureInfo.GetCultureInfo(val.Value); return($"{culture.DisplayName} ({culture.TwoLetterISOLanguageName})"); case var value when value is DateTimeValueDto val: return(Tx.Time(val.Value.LocalDateTime, TxTime.YearMonthLong | TxTime.HourMinuteSecond)); case var value when value is BoolValueDto val: return(val.ToString()); case var value when value is HeaderValueDto val: return(string.Empty); default: return(string.Empty); } }
protected void ReloadPageInformation() { Title = WikiPage.Title; ToolTip = WikiPage.Title + " - " + SiteContext.DisplayName; if (!WikiPage.Exists) { AlertText = Tx.T("editor.page inexistent"); } if ((WikiPage.Protections?.Count ?? 0) == 0) { ProtectionAlertText = null; } else { ProtectionAlertText = Tx.T("page.protected prompt") + string.Join(null, WikiPage.Protections.Select(p => Tx.T("page.protected prompt.1", "expiry", Tx.Time(p.Expiry, TxTime.YearMonthDay | TxTime.HourMinute), "group", p.Level, "action", Tx.SafeText("page actions:" + p.Type)))); } // Notifies VM that the "content" of wikipage has been changed. OnPropertyChanged(nameof(WikiPage)); }
public void UpdateView() { timerDc.Cancel(); DateTime d = DateTimeSelector.SelectedTime; CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; try { // Copy the Tx:* keys from the loaded dictionary file into TxLib and restore them later Tx.ReplaceSystemTexts(MainViewModel.Instance.GetSystemTexts()); Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); // .NET formats YearMonthLabel.Text = d.ToString(CultureInfo.CurrentCulture.DateTimeFormat.YearMonthPattern); YearMonthFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.YearMonthPattern + " [Y]"; ShortDateLabel.Text = d.ToShortDateString(); ShortDateFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + " [d]"; LongDateLabel.Text = d.ToLongDateString(); LongDateFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern + " [D]"; MonthDayLabel.Text = d.ToString(CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern); MonthDayFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern + " [M]"; ShortTimeLabel.Text = d.ToShortTimeString(); ShortTimeFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern + " [t]"; LongTimeLabel.Text = d.ToLongTimeString(); LongTimeFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern + " [T]"; // Tx formats TxTime addDow = 0; if (TxDowAbbrCheckBox.IsChecked == true) { addDow = TxTime.DowAbbr; } if (TxDowLongCheckBox.IsChecked == true) { addDow = TxTime.DowLong; } // First only the format strings // (They should be finished if the data can't be displayed because of format string // errors, possibly while the user is currently editing them.) TxYMShortFormatLabel.Text = Tx.Time(d, TxTime.YearMonth | addDow, true); TxYMTabFormatLabel.Text = Tx.Time(d, TxTime.YearMonthTab | addDow, true); TxYMAbbrFormatLabel.Text = Tx.Time(d, TxTime.YearMonthAbbr | addDow, true); TxYMLongFormatLabel.Text = Tx.Time(d, TxTime.YearMonthLong | addDow, true); TxYMDShortFormatLabel.Text = Tx.Time(d, TxTime.YearMonthDay | addDow, true); TxYMDTabFormatLabel.Text = Tx.Time(d, TxTime.YearMonthDayTab | addDow, true); TxYMDAbbrFormatLabel.Text = Tx.Time(d, TxTime.YearMonthDayAbbr | addDow, true); TxYMDLongFormatLabel.Text = Tx.Time(d, TxTime.YearMonthDayLong | addDow, true); TxMShortFormatLabel.Text = Tx.Time(d, TxTime.Month | addDow, true); TxMTabFormatLabel.Text = Tx.Time(d, TxTime.MonthTab | addDow, true); TxMAbbrFormatLabel.Text = Tx.Time(d, TxTime.MonthAbbr | addDow, true); TxMLongFormatLabel.Text = Tx.Time(d, TxTime.MonthLong | addDow, true); TxMDShortFormatLabel.Text = Tx.Time(d, TxTime.MonthDay | addDow, true); TxMDTabFormatLabel.Text = Tx.Time(d, TxTime.MonthDayTab | addDow, true); TxMDAbbrFormatLabel.Text = Tx.Time(d, TxTime.MonthDayAbbr | addDow, true); TxMDLongFormatLabel.Text = Tx.Time(d, TxTime.MonthDayLong | addDow, true); TxDShortFormatLabel.Text = Tx.Time(d, TxTime.Day | addDow, true); TxDTabFormatLabel.Text = Tx.Time(d, TxTime.DayTab | addDow, true); TxHShortFormatLabel.Text = Tx.Time(d, TxTime.Hour, true); TxHTabFormatLabel.Text = Tx.Time(d, TxTime.HourTab, true); TxHMShortFormatLabel.Text = Tx.Time(d, TxTime.HourMinute, true); TxHMTabFormatLabel.Text = Tx.Time(d, TxTime.HourMinuteTab, true); TxHMSShortFormatLabel.Text = Tx.Time(d, TxTime.HourMinuteSecond, true); TxHMSTabFormatLabel.Text = Tx.Time(d, TxTime.HourMinuteSecondTab, true); // Now the data TxYMShortLabel.Text = Tx.Time(d, TxTime.YearMonth | addDow); TxYMTabLabel.Text = Tx.Time(d, TxTime.YearMonthTab | addDow); TxYMAbbrLabel.Text = Tx.Time(d, TxTime.YearMonthAbbr | addDow); TxYMLongLabel.Text = Tx.Time(d, TxTime.YearMonthLong | addDow); TxYMDShortLabel.Text = Tx.Time(d, TxTime.YearMonthDay | addDow); TxYMDTabLabel.Text = Tx.Time(d, TxTime.YearMonthDayTab | addDow); TxYMDAbbrLabel.Text = Tx.Time(d, TxTime.YearMonthDayAbbr | addDow); TxYMDLongLabel.Text = Tx.Time(d, TxTime.YearMonthDayLong | addDow); TxMShortLabel.Text = Tx.Time(d, TxTime.Month | addDow); TxMTabLabel.Text = Tx.Time(d, TxTime.MonthTab | addDow); TxMAbbrLabel.Text = Tx.Time(d, TxTime.MonthAbbr | addDow); TxMLongLabel.Text = Tx.Time(d, TxTime.MonthLong | addDow); TxMDShortLabel.Text = Tx.Time(d, TxTime.MonthDay | addDow); TxMDTabLabel.Text = Tx.Time(d, TxTime.MonthDayTab | addDow); TxMDAbbrLabel.Text = Tx.Time(d, TxTime.MonthDayAbbr | addDow); TxMDLongLabel.Text = Tx.Time(d, TxTime.MonthDayLong | addDow); TxDShortLabel.Text = Tx.Time(d, TxTime.Day | addDow); TxDTabLabel.Text = Tx.Time(d, TxTime.DayTab | addDow); TxHShortLabel.Text = Tx.Time(d, TxTime.Hour); TxHTabLabel.Text = Tx.Time(d, TxTime.HourTab); TxHMShortLabel.Text = Tx.Time(d, TxTime.HourMinute); TxHMTabLabel.Text = Tx.Time(d, TxTime.HourMinuteTab); TxHMSShortLabel.Text = Tx.Time(d, TxTime.HourMinuteSecond); TxHMSTabLabel.Text = Tx.Time(d, TxTime.HourMinuteSecondTab); RelativeTimeLabel.Text = Tx.RelativeTime(d); RelativeTimeSpanLabel.Text = Tx.TimeSpan(d); } catch (FormatException) { // Ignore invalid date formats, but clear any already displayed or now outdated data TxYMShortLabel.Text = ""; TxYMTabLabel.Text = ""; TxYMAbbrLabel.Text = ""; TxYMLongLabel.Text = ""; TxYMDShortLabel.Text = ""; TxYMDTabLabel.Text = ""; TxYMDAbbrLabel.Text = ""; TxYMDLongLabel.Text = ""; TxMShortLabel.Text = ""; TxMTabLabel.Text = ""; TxMAbbrLabel.Text = ""; TxMLongLabel.Text = ""; TxMDShortLabel.Text = ""; TxMDTabLabel.Text = ""; TxMDAbbrLabel.Text = ""; TxMDLongLabel.Text = ""; TxDShortLabel.Text = ""; TxDTabLabel.Text = ""; TxHShortLabel.Text = ""; TxHTabLabel.Text = ""; TxHMShortLabel.Text = ""; TxHMTabLabel.Text = ""; TxHMSShortLabel.Text = ""; TxHMSTabLabel.Text = ""; RelativeTimeLabel.Text = ""; RelativeTimeSpanLabel.Text = ""; } finally { Thread.CurrentThread.CurrentCulture = originalCulture; Tx.RestoreSystemTexts(); } timerDc.Start(); }
/// <inheritdoc /> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return(Tx.Time((DateTime)value, TxTime.YearMonthDay | TxTime.DowLong)); }
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string text; // Return the text key only in design mode. Nothing better to do for now. if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) { switch (relKind) { case RelativeTimeKind.None: text = Tx.Time(DateTime.Now, details); break; case RelativeTimeKind.PointInTime: text = Tx.RelativeTime(DateTime.Now.AddHours(2).AddMinutes(34)); break; case RelativeTimeKind.CurrentTimeSpan: text = Tx.TimeSpan(DateTime.Now.AddHours(2).AddMinutes(34)); break; case RelativeTimeKind.TimeSpan: text = Tx.TimeSpan(TimeSpan.FromHours(2) + TimeSpan.FromMinutes(34)); break; default: text = "{Error: Invalid relKind}"; // Should not happen break; } } else { // values[0] is the dictionary Dummy binding, don't use it // values[1] is the timer Dummy binding, don't use it // Read the time value from binding number three. if (values[2] == DependencyProperty.UnsetValue) { return(DependencyProperty.UnsetValue); } DateTime ConvertToDateTime(object obj) => obj is DateTimeOffset dtos ? dtos.LocalDateTime : System.Convert.ToDateTime(obj); DateTime dt; TimeSpan ts; switch (relKind) { case RelativeTimeKind.None: dt = ConvertToDateTime(values[2]); text = Tx.Time(dt, details); break; case RelativeTimeKind.PointInTime: dt = ConvertToDateTime(values[2]); text = Tx.RelativeTime(dt); break; case RelativeTimeKind.CurrentTimeSpan: dt = ConvertToDateTime(values[2]); text = Tx.TimeSpan(dt); break; case RelativeTimeKind.TimeSpan: if (values[2] is TimeSpan) { ts = (TimeSpan)values[2]; text = Tx.TimeSpan(ts); } else { text = ""; } break; default: text = "{Error: Invalid relKind}"; // Should not happen break; } } if (upperCase) { text = Tx.UpperCase(text); } return(text); }