diff --git a/frame.js b/frame.js index b6e63375..d97ad1be 100644 --- a/frame.js +++ b/frame.js @@ -323,8 +323,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { ]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}]) }, input: function(can, item, value, target, style) { if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) } - var icon = [] - var _item = can.base.Copy({className: "", type: "", name: ""}, item) + var icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item) var input = can.page.input(can, _item, value); input.title = can.Conf(can.core.Keys(ctx.FEATURE, chat.TITLE, item.name))||"" if (item.type == html.SELECT && (value || _item.value)) { input._init = function(target) { target.value = value||_item.value } } if (item.type == html.TEXT) { input.onkeydown = item.onkeydown||function(event) { @@ -337,22 +336,12 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } } - /* - if (item.type == html.SELECT) { var ui = can.page.Append(can, target, [{view: [[html.ITEM, item.type, item.name].concat(style)], - list: [input].concat([{type: html.INPUT, value: _item.value||_item.values[0], data: {type: html.BUTTON}, onclick: function(event) { var target = event.target - var carte = can.user.carte(event, can, {}, _item.values, function(event, button) { target.value = button, ui.select.value = button, ui.select.onchange({target: ui.select}) }) - can.onappend.style(can, [html.SELECT, item.name], carte._target), can.page.style(can, carte._target, html.MIN_WIDTH, event.target.offsetWidth) - }, _init: function(target) { can.onmotion.delay(can, function() { - target.value = ui.select.value, can.page.style(can, target, html.WIDTH, ui.select.offsetWidth+10), can.onappend.style(can, html.HIDE, ui.select) - }) }}, {text: ["\u25BF", html.SPAN, html.ICON]}]) - }]); return ui[item.name] } - */ var _input = can.page.Append(can, target, [{view: [[html.ITEM, item.type, item.name].concat(style)], list: [input].concat(icon), _init: function(target, _input) { item.type == html.SELECT && can.onappend.select(can, _input.select, _item) }}])[item.name]; return _input }, select: function(can, select, item) { - return can.page.Append(can, select.parentNode, [{view: [html.SELECT, html.INPUT], value: item.value||item.values[0], data: {type: html.BUTTON}, onclick: function(event) { var target = event.target + return can.page.Append(can, select.parentNode, [{type: html.INPUT, value: item.value||item.values[0], data: {className: html.SELECT, type: html.BUTTON, name: item.name}, onclick: function(event) { var target = event.target var carte = can.user.carte(event, can, {}, item.values, function(event, button) { if (target.value == button) { return } target.value = button, select.value = button, select.onchange && select.onchange({target: select}) }) can.onappend.style(can, [html.SELECT, item.name], carte._target), can.page.style(can, carte._target, html.MIN_WIDTH, event.target.offsetWidth) diff --git a/lib/date.js b/lib/date.js index 099fa46a..1082faba 100644 --- a/lib/date.js +++ b/lib/date.js @@ -1,3 +1,18 @@ +Volcanos("date", { + List: function(can, cb, now, head) { var list = [{th: head||(can.user.info.language == "en"? ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]: ["日", "一", "二", "三", "四", "五", "六"])}] + var tr; function _cb(day, type) { if (day.getDay() == 0) { list.push(tr = {type: html.TR, list: []}) } var lunar = can.date.solar2lunar(day), _day = new Date(day) + tr.list.push({view: [can.base.isIn(can.base.Time(day, "%y-%m-%d"), can.base.Time(now, "%y-%m-%d"))? html.SELECT: type, html.TD], + onclick: function(event) { cb(event, _day) }, list: [{text: day.getDate()+""}, {text: [lunar.autoDay, "", lunar.autoClass]}], + }) + } + var first = new Date(now); first.setDate(1); var last = new Date(first); last.setMonth(last.getMonth()+1) + var begin = new Date(first); begin.setDate(first.getDate()-first.getDay()); var end = new Date(last); end.setDate(last.getDate()+7-last.getDay()) + for (var day = new Date(begin); day < first; day.setDate(day.getDate()+1)) { _cb(day, mdb.PREV) } + for (var day = new Date(first); day < last; day.setDate(day.getDate()+1)) { _cb(day, mdb.MAIN) } + for (var day = new Date(last); day < end; day.setDate(day.getDate()+1)) { _cb(day, mdb.NEXT) } + return list + }, +}) Volcanos("date", { // @1900-2100区间内的公历转农历 solar2lunar: function(date) { var y = date.getFullYear(), m = date.getMonth()+1, d = date.getDate() var day = (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(1900,0,31))/86400000 diff --git a/lib/page.js b/lib/page.js index 6e3eae34..915d13a0 100644 --- a/lib/page.js +++ b/lib/page.js @@ -16,8 +16,8 @@ Volcanos("page", { if (can.base.isUndefined(key)) { var value = {}; can.page.SelectArgs(can, target, "", function(item) { item.name && item.value && (value[item.name] = item.value) }); return [value] } if (can.base.isObject(key)) { return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, target, key, value) }), [key] } if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { return item.name && (can.base.isUndefined(value)? item.value: (item.value = value))||"" } } - if (key.indexOf(ice.PT) > -1) { return [""]} - return can.page.Select(can, target, key? "select[name="+key+"],"+"input[name="+key+"],"+"textarea[name="+key+"]": ".args", cb) + if (key.indexOf(ice.PT) > -1) { return [""] } + return can.page.Select(can, target, key? "select[name="+key+"],"+"input.select[type=button][name="+key+"],"+"input[name="+key+"],"+"textarea[name="+key+"]": ".args", cb) }, SelectInput: function(can, target, name, cb) { return can.page.Select(can, target, "input[name="+name+"]", cb)[0] }, SelectChild: function(can, target, key, cb) { var i = 0; return can.page.Select(can, target, key, function(node) { if (node.parentNode == target) { return cb(node, i++) } }) }, diff --git a/plugin/input/date.js b/plugin/input/date.js index 32f312e5..030ed287 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -21,29 +21,9 @@ Volcanos(chat.ONFIGURE, {date: { chat._TRANS, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月", "over", "去年", "come", "今年"), )), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}])._target target.value == "" && (now.setMinutes(now.getMinutes()>30? 30: 0), now.setSeconds(0)) - function show(now) { - can.Action(YEAR, now.getFullYear()) - can.Action(MONTH, now.getMonth()+1) - can.Action(HOUR, now.getHours()) - can.Action(MINUTE, parseInt(now.getMinutes()/5)*5) - can.Action(SECOND, parseInt(now.getSeconds()/5)*5) - - can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}]) - var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last } var _day = new Date(day) - var l = can.date.solar2lunar(day) - can.page.Append(can, tr, [{view: [can.base.isIn(can.base.Time(day, "%y-%m-%d"), can.base.Time(now, "%y-%m-%d"), can.base.Time(today, "%y-%m-%d"))? html.SELECT: type, html.TD], - onclick: function(event) { _day.setHours(now.getHours()), _day.setMinutes(now.getMinutes()), _day.getSeconds(now.getSeconds()), _cb(_day), meta._hold? show(_day): can.close() }, - list: [{text: day.getDate()+""}, {text: l.autoDay, "className": l.autoClass}]}]) - } - - var one = new Date(now); one.setDate(1) - var end = new Date(now); end.setMonth(end.getMonth()+1), end.setDate(1) - var head = new Date(one); head.setDate(one.getDate()-one.getDay()) - var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay()) - - for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) { add(day, mdb.PREV) } - for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) { add(day, mdb.MAIN) } - for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) } + function show(now) { can.Action(YEAR, now.getFullYear()), can.Action(MONTH, now.getMonth()+1) + can.Action(HOUR, now.getHours()), can.Action(MINUTE, parseInt(now.getMinutes()/5)*5), can.Action(SECOND, parseInt(now.getSeconds()/5)*5) + can.page.Appends(can, can._table, can.date.List(can, function(event, day) { day.setHours(now.getHours()), day.setMinutes(now.getMinutes()), day.getSeconds(now.getSeconds()), _cb(day), can.close() }, now)) var l = can.date.solar2lunar(now); can.page.Appends(can, can._status, [{view: "today", inner: [l.gzYear, l.Animal+"年", l.cnMonth, l.cnDay, l.lunarFestival||l.festival||l.Term, l.Astro].join(ice.SP)}]) return now }