Преглед изворни кода

pass separator thru to formatting api

Adam Shaw пре 7 година
родитељ
комит
ffdb2143c5
4 измењених фајлова са 22 додато и 21 уклоњено
  1. 4 11
      src/View.ts
  2. 5 3
      src/datelib/formatting-cmd.ts
  3. 1 1
      src/datelib/formatting-native.ts
  4. 12 6
      src/datelib/formatting.ts

+ 4 - 11
src/View.ts

@@ -99,20 +99,13 @@ export default abstract class View extends DateComponent {
       range = dateProfile.activeRange
     }
 
-    // TODO: precompute
-    // TODO: how will moment plugin deal with this?
-    let rawTitleFormat = this.opt('titleFormat') || this.computeTitleFormat(dateProfile)
-    if (typeof rawTitleFormat === 'object') {
-      rawTitleFormat = assignTo(
-        { separator: this.opt('titleRangeSeparator') },
-        rawTitleFormat
-      )
-    }
-
     return dateEnv.formatRange(
       range.start,
       range.end,
-      createFormatter(rawTitleFormat),
+      createFormatter(
+        this.opt('titleFormat') || this.computeTitleFormat(dateProfile),
+        this.opt('titleRangeSeparator')
+      ),
       { isEndExclusive: dateProfile.isRangeAllDay }
     )
   }

+ 5 - 3
src/datelib/formatting-cmd.ts

@@ -18,17 +18,19 @@ export function registerCmdFormatter(name, input: CmdFormatterFunc) {
 export class CmdFormatter implements DateFormatter {
 
   cmdStr: string
+  separator: string
 
-  constructor(cmdStr: string) {
+  constructor(cmdStr: string, separator?: string) {
     this.cmdStr = cmdStr
+    this.separator = separator
   }
 
   format(date: ZonedMarker, context: DateFormattingContext) {
-    return soleCmdFunc(this.cmdStr, createVerboseFormattingArg(date, null, context))
+    return soleCmdFunc(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator))
   }
 
   formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext) {
-    return soleCmdFunc(this.cmdStr, createVerboseFormattingArg(start, end, context))
+    return soleCmdFunc(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator))
   }
 
 }

+ 1 - 1
src/datelib/formatting-native.ts

@@ -10,7 +10,7 @@ const EXTENDED_SETTINGS_AND_SEVERITIES = {
   week: 3,
   separator: 0, // 0 = not applicable
   omitZeroTime: 0,
-  meridiem: 0,
+  meridiem: 0, // like am/pm
   omitCommas: 0
 }
 const STANDARD_DATE_PROP_SEVERITIES = {

+ 12 - 6
src/datelib/formatting.ts

@@ -5,6 +5,7 @@ import { Locale } from './locale'
 import { NativeFormatter } from './formatting-native'
 import { CmdFormatter } from './formatting-cmd'
 import { FuncFormatter, FuncFormatterFunc } from './formatting-func'
+import { assignTo } from '../util/object'
 
 export interface ZonedMarker {
   marker: DateMarker,
@@ -27,7 +28,8 @@ export interface VerboseFormattingArg {
   start: ExpandedZonedMarker
   end?: ExpandedZonedMarker
   timeZone: string
-  localeCodes: string[]
+  localeCodes: string[],
+  separator: string
 }
 
 export interface DateFormattingContext {
@@ -49,12 +51,15 @@ export type FormatterInput = object | string | FuncFormatterFunc
 
 // Formatter Object Creation
 
-export function createFormatter(input: FormatterInput): DateFormatter {
-  if (typeof input === 'object') {
+export function createFormatter(input: FormatterInput, defaultSeparator?: string): DateFormatter {
+  if (typeof input === 'object' && input) { // non-null object
+    if (typeof defaultSeparator === 'string') {
+      input = assignTo({ separator: defaultSeparator }, input)
+    }
     return new NativeFormatter(input)
   }
   else if (typeof input === 'string') {
-    return new CmdFormatter(input)
+    return new CmdFormatter(input, defaultSeparator)
   }
   else if (typeof input === 'function') {
     return new FuncFormatter(input)
@@ -108,7 +113,7 @@ export function formatTimeZoneOffset(minutes: number, doIso = false) {
 
 // Arg Utils
 
-export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext) {
+export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, separator?: string): VerboseFormattingArg {
   let startInfo = expandZonedMarker(start, context.calendarSystem)
   let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null
 
@@ -117,7 +122,8 @@ export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker,
     start: startInfo,
     end: endInfo,
     timeZone: context.timeZone,
-    localeCodes: context.locale.codes
+    localeCodes: context.locale.codes,
+    separator
   }
 }