Created
July 7, 2013 09:30
-
-
Save tekei/5942922 to your computer and use it in GitHub Desktop.
HTML キーボード入力を考慮したフィールド制御 まずは、カレンダフィールドの日付補完部分 (モジュール化前の動作仕様の検討版)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# キーボード入力向け日付補完 | |
# 動作検討版 | |
# | |
# sugar.jsに依存しています | |
class DateSuggest | |
now: new Date() | |
japan_year: | |
"m": 1867, | |
"t": 1911, | |
"s": 1925, | |
"h": 1988 | |
constructor: () -> | |
[@year, @month, @day] = @parse_date(@now) unless @year? | |
parse_date: (d) -> | |
[String(now.getFullYear()), String(now.getMonth() + 1), String(now.getDate())] | |
str_to_date: (str) -> | |
return [@year, @month, @day] if (str == '0' || str == 't') | |
return [@year, @month, new Date(@year, @month, 0).getDate()] if (str == '31' || str == 'l') | |
if (r = /^([mtsh])(\d{1,2})([\/\.].*)$/.exec(str)) | |
return @str_to_date((@japan_year[r[1]] + parseInt(r[2], 10)) + r[3]) | |
return [@year, @month, r[1]] if (r = /^(\d{1,2})$/.exec(str)) | |
return [@year, r[1], r[2]] if (r = /^(\d{1,2})(\d{2})$/.exec(str)) | |
return [@year.slice(0, 2) + r[1], r[2], r[3]] if (r = /^(\d{2})(\d{2})(\d{2})$/.exec(str)) | |
return [r[1], r[2], r[3]] if (r = /^(\d{4})(\d{2})(\d{2})$/.exec(str)) | |
return [@year, r[1], r[2]] if (r = /^(\d{1,2})[\/\.](\d{1,2})$/.exec(str)) | |
if (r = /^(\d{1,4})[\/\.](\d{1,2})[\/\.](\d{1,2})$/.exec(str)) | |
return [@year.slice(0, (4 - r[1].length)) + r[1], r[2], r[3]] | |
if ((r = /^[\+]?(\d+)[d]?$/.exec(str)) || (r = /^(-\d+)[d]?$/.exec(str))) | |
return @parse_date(@now.addDays(parseInt(r[1], 10))) | |
if ((r = /^[\+]?(\d+)w$/.exec(str)) || (r = /^(-\d+)w$/.exec(str))) | |
return @parse_date(@now.addWeeks(parseInt(r[1], 10))) | |
if ((r = /^[\+]?(\d+)m$/.exec(str)) || (r = /^(-\d+)m$/.exec(str))) | |
return @parse_date(@now.addMonths(parseInt(r[1], 10))) | |
null | |
check_format: (str) -> | |
d = new Date(parseInt(str[0], 10), parseInt(str[1], 10) - 1, parseInt(str[2], 10)) | |
!isNaN(d) | |
get: (str) -> | |
return null unless str? | |
d = @str_to_date(str.toLowerCase()) | |
return null if (!d? || !@check_format(d)) | |
"#{d[0]}#{('0' + d[1]).slice(-2)}#{('0' + d[2]).slice(-2)}" | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
suggest = new DateSuggest | |
# 1. 区切り文字無しパターン | |
console.log "5 : #{suggest.get('5')}" | |
console.log "10 : #{suggest.get('10')}" | |
console.log "123 : #{suggest.get('123')}" | |
console.log "1231 : #{suggest.get('1231')}" | |
console.log "20100310 : #{suggest.get('20110310')}" | |
console.log "130310 : #{suggest.get('130310')}" | |
# 2. 区切り文字有りパターン | |
console.log "---------------------------------" | |
console.log "1/2 : #{suggest.get('1/2')}" | |
console.log "10/28 : #{suggest.get('10/28')}" | |
console.log "11/6 : #{suggest.get('11/6')}" | |
console.log "05/6/1 : #{suggest.get('05/6/1')}" | |
console.log "13/3/11 : #{suggest.get('13/3/11')}" | |
console.log "2012/12/4 : #{suggest.get('2012/12/4')}" | |
console.log "2008/1/2 : #{suggest.get('2008/1/2')}" | |
console.log "1.2 : #{suggest.get('1.2')}" | |
console.log "05.6.1 : #{suggest.get('05.6.1')}" | |
console.log "2012.12.4 : #{suggest.get('2012.12.4')}" | |
# 3. 差分入力 | |
console.log "---------------------------------" | |
console.log "0 : #{suggest.get('0')}" | |
console.log "0d : #{suggest.get('0d')}" | |
console.log "+1 : #{suggest.get('+1')}" | |
console.log "-1 : #{suggest.get('-1')}" | |
console.log "+1d : #{suggest.get('+1d')}" | |
console.log "1d : #{suggest.get('1d')}" | |
console.log "-1d : #{suggest.get('-1d')}" | |
console.log "+13 : #{suggest.get('+13')}" | |
console.log "13d : #{suggest.get('13d')}" | |
console.log "-14 : #{suggest.get('-14')}" | |
console.log "-14d : #{suggest.get('-14d')}" | |
console.log "+1w : #{suggest.get('+1w')}" | |
console.log "1w : #{suggest.get('1w')}" | |
console.log "-1w : #{suggest.get('-1w')}" | |
console.log "+1m : #{suggest.get('+1m')}" | |
console.log "1m : #{suggest.get('1m')}" | |
console.log "-1m : #{suggest.get('-1m')}" | |
# 4. 和暦入力 | |
console.log "---------------------------------" | |
console.log "s2/12/4 : #{suggest.get('s2/12/4')}" | |
console.log "t13/1/2 : #{suggest.get('t13/1/2')}" | |
console.log "s53.6.1 : #{suggest.get('s53.6.1')}" | |
console.log "S10.12.13 : #{suggest.get('S10.12.13')}" | |
console.log "h11.12.4 : #{suggest.get('h11.12.4')}" | |
# 5. 特殊 | |
# 月末 | |
console.log "---------------------------------" | |
console.log "31 : #{suggest.get('31')}" | |
console.log "l : #{suggest.get('l')}" | |
# 5. 入力エラー | |
console.log "---------------------------------" | |
console.log "12/ : #{suggest.get('12/')}" | |
console.log "/23 : #{suggest.get('/23')}" | |
console.log " : #{suggest.get('')}" | |
console.log "null : #{suggest.get(null)}" | |
console.log "abc : #{suggest.get('abc')}" | |
console.log "aaaaaaaa : #{suggest.get('aaaaaaaa')}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment