UNPKG

vesh-cli

Version:

码农村nodejs版本VESH框架脚手架搭建器

217 lines (215 loc) 11.5 kB
(function (V, W, $) { //识别 defaultValue value等值 V.registScript(function (path, vm) { var _ = this, __ = {}; { V.inherit.apply(_, [W.Control, [path || '<div><span class="p_calender_buttons"><span class="p_calender_buttonleft">&lt;</span><span class="p_calender_title"></span><span class="p_calender_buttonright">&gt;</span></span><table><thead></thead><tbody></tbody></table></div>', vm || { data: {}}]]); __.onLoad = _.onLoad; __.render = _.render; } _.onLoad = function (node) { _.head = node.find('thead'); _.body = node.find('tbody'); _.title = node.find('span.p_calender_title'); _.left = node.find('span.p_calender_buttonleft'); _.right = node.find('span.p_calender_buttonright'); V.forC(_.events, function (k, v) { switch (k.toLowerCase()) { case 'click': _.body.on('click', 'td', function (e) { var _this = $(this); if (_this.hasClass('p_calender_month') && __.isSame(__.Date, new Date(__.Year, __.Month, _this.text()))) { //同一天不做处理 return; } _.body.find('td.p_calender_selectday').removeClass('p_calender_selectday'); _this.addClass('p_calender_selectday'); _.call('click', { e: e, value: (function () { if (_this.hasClass('p_calender_month')) { var ret = new Date(__.Year, __.Month - 1, _this.text()); return ret; } else if (_this.hasClass('p_calender_premonth')) { var ret = new Date(__.Date.getTime()).add('m', -1); ret.setDate(parseInt(_this.text())); __.setDate(ret); _.call('change', { Month: ret }); return ret; } else { var ret = new Date(__.Date.getTime()).add('m', 1); ret.setDate(parseInt(_this.text())); __.setDate(ret); _.call('change', { Month: ret }); return ret; } })() }); V.stopProp(e); }); break; case 'change': break; default: _.bindEvent(_.node, k, v); break; } }, function () { _.title.click(function (e) { _.render({ value: 'today' }); V.stopProp(e); }); _.left.click(function (e) { _.render({ prev: true }); V.stopProp(e); }); _.right.click(function (e) { _.render({ next: true }); V.stopProp(e); }); _.head.append('<tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>'); __.initialize(_.body, { Date: new Date(), onSelectDay: function (cell) { cell.className = cell.className + " p_calender_selectday"; }, onToday: function (cell) { cell.className = cell.className + " p_calender_today"; } }); }); }; _.fill = function () { return { value: _.node.val() }; }; _.render = function (data) { data = __.render(data); V.forC(data, function (k, v) { switch (k.toLowerCase()) { case 'value': if ('today' == v) { if (!__.isSameMonth(__.Date, new Date())) { __.setDate(new Date()); _.call('change', { Month: new Date(__.Date.getTime()) }) } } else { __.setDate(v); } break; case 'prev': if (true == v) { __.preMonth(); _.call('change', { Month: new Date(__.Date.getTime()) }); } break; case 'next': if (true == v) { __.nextMonth(); _.call('change', { Month: new Date(__.Date.getTime()) }); } break; case 'points': //todo更新成红色的点 _.body.find('td.p_calender_points').removeClass('p_calender_points'); var sb = V.sb(); V.each(v, function (v2) { sb.appendFormat('td[val={v2}],', { v2: v2 }); }, function () { _.body.find(sb.append('td[val=a]').clear()).addClass('p_calender_points'); sb = null; }); break; case 'success': //todo更新成对勾按钮 _.body.find('td.p_calender_success').removeClass('p_calender_success'); var sb = V.sb(); V.each(v, function (v2) { sb.appendFormat('td[val={v2}],', { v2: v2 }); }, function () { _.body.find(sb.append('td[val=a]').clear()).addClass('p_calender_success'); sb = null; }); break; } }); }; __.initialize = function (container, options) { __.Container = container; //容器(table结构) __.Days = []; //日期对象列表 __.setOptions(options); __.Year = __.options.Year; __.Month = __.options.Month; __.Date = __.options.Date; __.onSelectDay = __.options.onSelectDay; __.onToday = __.options.onToday; __.onFinish = __.options.onFinish; __.Draw(); }; //设置默认属性 __.setOptions = function (options) { __.options = V.merge({ Date: new Date(), //默认值 Year: new Date().getFullYear(), //显示年 Month: new Date().getMonth() + 1, //显示月 onSelectDay: function (cell) { }, //在选择日期触发 onToday: function (cell) { }, //在当天日期触发 onFinish: function () { } //日历画完后触发 }, options || {}); }; __.setDate = function (d) { if (__.isSame(__.Date, d)) { } else if (__.isSameMonth(__.Date, d)) { __.Container.find('td.p_calender_selectday').removeClass('p_calender_selectday'); __.Container.find('td.p_calender_month:contains("' + d.getDate() + '")').addClass('p_calender_selectday'); __.Date = d; } else { __.Date = d; __.Year = d.getFullYear(); __.Month = d.getMonth() + 1; //重新画日历 __.Draw(); } }; //上一个月 __.preMonth = function () { __.setDate(__.Date.add('m', -1)); }; //下一个月 __.nextMonth = function () { __.setDate(__.Date.add('m', 1)); }; //画日历 __.Draw = function () { //用来保存日期列表 var arr = []; var today = new Date(new Date().toString().split(' ')[0]); //用当月第一天在一周中的日期值作为当月离第一天的天数 for (var i = 1, firstDay = new Date(__.Year, __.Month - 1, 1).getDay(), lastDay = new Date(__.Year, __.Month - 1, 0).getDate() - firstDay; i <= firstDay; i++) { arr.push(-1 * (lastDay + i)); } //用当月最后一天在一个月中的日期值作为当月的天数 for (var i = 1, monthDay = new Date(__.Year, __.Month, 0).getDate(); i <= monthDay; i++) { arr.push(i); } if ((monthDay + firstDay) % 7 > 0) for (var i = 1, firstDay = new Date(__.Year, __.Month - 1, 1).getDay(), monthDay = new Date(__.Year, __.Month, 0).getDate(); i <= 7 - ((monthDay + firstDay) % 7); i++) { arr.push("+" + i); } var frag = document.createDocumentFragment(); __.Days = []; while (arr.length > 0) { //每个星期插入一个tr var row = document.createElement("tr"); //每个星期有7天 for (var i = 1; i <= 7; i++) { var cell = document.createElement("td"); cell.innerHTML = " "; if (arr.length > 0) { var d = arr.shift(); var val = parseInt(d); if (typeof (d.indexOf) == 'undefined' && val > 0) cell.setAttribute('val', Math.abs(val)); cell.innerHTML = V.format("<div>{val}</div>", { val: Math.abs(val) }); cell.className = val < 0 ? "p_calender_premonth" : ((d.indexOf && d.indexOf('+') >= 0) ? "p_calender_nextmonth" : "p_calender_month"); if ('p_calender_month' == cell.className) { __.Days[d] = cell; //判断是否今日 if (__.isSame(new Date(__.Year, __.Month - 1, d), today)) { console.log('today'); __.onToday(cell); } //判断是否选择日期 if (__.Date && __.isSame(new Date(__.Year, __.Month - 1, d), __.Date)) { __.onSelectDay(cell); } } } row.appendChild(cell); } frag.appendChild(row); } //先清空内容再插入(ie的table不能用innerHTML) //while (__.Container.hasChildNodes()) { __.Container.removeChild(__.Container.firstChild); } __.Container.empty()[0].appendChild(frag); _.title.html(__.Year + "&nbsp;" + __.Month); __.onFinish(); }; //判断是否同一日 __.isSame = function (d1, d2) { return (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth() && d1.getDate() == d2.getDate()); }; //判断是否同一月 __.isSameMonth = function (d1, d2) { return (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth()); }; }); })(VJ, VJ.view, jQuery);