UNPKG

magix-components

Version:
180 lines 5.43 kB
/* ver:1.3.1 */ /* author:xinglie.lkf@alibaba-inc.com */ let Magix = require('magix'); let $ = require('$'); let Monitor = require('../mx-monitor/index'); Magix.applyStyle('@week.less'); let Weeks = '一二三四五六日'; let Core = require('./index'); let All = '111111111111111111111111'; let None = '000000000000000000000000'; let ImproveDays = (days) => { let start = 0; let end = 7; while (start < end) { days[start] = Core.improve(days[start]); start++; } return days; }; module.exports = Magix.View.extend({ tmpl: '@week.html', init(extra) { let me = this; me['@{days}'] = ImproveDays(extra.days || [None, None, None, None, None, None, None]); Monitor['@{setup}'](); me.on('destroy', () => { Monitor['@{remove}'](me); Monitor['@{teardown}'](); }); }, render() { let me = this; me.updater.digest({ viewId: me.id, days: Weeks }); me.val(me['@{days}']); }, '@{inside}'(node) { let me = this; let inView = Magix.inside(node, 'dlg_' + me.id); if (!inView && me['@{ref.node}']) { let parent = me['@{ref.node}'].parent(); inView = Magix.inside(node, parent[0]); } return inView; }, '@{sync.shortcuts}'() { let me = this; let weekdays = me['@{days}'].slice(0, 5).join(''); let weekends = me['@{days}'].slice(-2).join(''); let weekdaysHas = weekdays.indexOf('1') > -1; let weekendsHas = weekends.indexOf('1') > -1; let weekdaysChecked = weekdays.indexOf('0') == -1; let weekendsChekced = weekends.indexOf('0') == -1; let allDaysChecked = weekdaysChecked && weekendsChekced; me.updater.digest({ allDays: allDaysChecked, weekdays: !weekendsHas && weekdaysChecked, weekends: weekendsChekced && !weekdaysHas }); }, '@{sync.ui}'() { let me = this; let ws = me['@{days}']; for (let i = 0, w, vf; i < ws.length; i++) { w = ws[i]; vf = Magix.Vframe.get('hours_' + me.id + '_' + i); if (vf) { vf.invoke('val', [w]); } } }, val(days) { let me = this; if (days) { me['@{days}'] = ImproveDays(days); me['@{sync.ui}'](); me['@{sync.shortcuts}'](); } return me['@{days}']; }, '@{show}'() { let me = this; if (!me['@{ui.show}']) { me['@{ui.show}'] = true; Monitor['@{add}'](me); let ref = me['@{ref.node}']; let dlg = $('#dlg_' + me.id); dlg.show(); let offset = ref.offset(); let left = offset.left + ref.outerWidth() - dlg.outerWidth(); let top = offset.top + ref.outerHeight() + 10; dlg.offset({ left: left, top: top }); ref.parent().addClass('@week.less:opshow'); } }, '@{hide}'() { let me = this; if (me['@{ui.show}']) { me['@{ui.show}'] = false; Monitor['@{remove}'](me); $('#dlg_' + me.id).hide(); let ref = me['@{ref.node}']; if (ref) { ref.parent().removeClass('@week.less:opshow'); } } }, '@{shortcuts.processor}<click>'(e) { let me = this; switch (e.params.type) { case 0: me['@{days}'] = [All, All, All, All, All, All, All]; break; case 1: me['@{days}'] = [All, All, All, All, All, None, None]; break; case 2: me['@{days}'] = [None, None, None, None, None, All, All]; break; } me['@{sync.shortcuts}'](); me['@{sync.ui}'](); }, '@{hour}<change>'(e) { e.stopPropagation(); let me = this; me['@{days}'][e.params.day] = e.range; clearTimeout(me['@{change.delay.timer}']); me['@{change.delay.timer}'] = setTimeout(me.wrapAsync(() => { me['@{sync.shortcuts}'](); }), 100); }, '@{toggle}<click>'(e) { let day = e.params.day; let me = this; let vf = Magix.Vframe.get('hours_' + me.id + '_' + day); if (vf) { let val = vf.invoke('val'); if (val.indexOf('0') > -1) { vf.invoke('val', [me['@{days}'][day] = All]); } else { vf.invoke('val', [me['@{days}'][day] = None]); } me['@{sync.shortcuts}'](); } }, '@{copy}<click>'(e) { e.preventDefault(); let me = this; let ref = $(e.eventTarget); me['@{ref.node}'] = ref; me['@{show}'](); me.updater.digest({ currentClone: e.params.day }); }, '@{closeDlg}<click>'() { this['@{hide}'](); }, '@{apply}<click>'() { let me = this; let day = me.updater.get('currentClone'); let val = me['@{days}'][day]; $('#dlg_' + me.id + ' input:checked').each((idx, item) => { me['@{days}'][item.value] = val; }); me['@{hide}'](); me['@{sync.ui}'](); me['@{sync.shortcuts}'](); } });