magix-components
Version:
116 lines • 3.13 kB
JavaScript
/*
ver:1.3.1
*/
/*
author:xinglie.lkf@alibaba-inc.com
*/
let Magix = require('magix');
let $ = require('$');
let DefaultSizes = [10, 20, 30, 40, 50, 100];
Magix.applyStyle('@index.less');
module.exports = Magix.View.extend({
tmpl: '@index.html',
init(extra) {
let me = this;
me.updater.set({
sizes: DefaultSizes
});
me.assign(extra);
},
assign(ops) {
let me = this;
let total = (ops.total | 0) || 0;
let size = ops.size || 20;
let page = ops.page || 1;
me.updater.set({
step: ops.step || 7,
simplify: (ops.simplify + '') === 'true',
mini: (ops.mini + '') === 'true',
page: page,
total: total,
size: size
});
return true;
},
render() {
let me = this;
let info = me['@{cal.page.info}']();
me.updater.digest(info);
},
'@{cal.page.info}'() {
let me = this;
let data = me.updater.get();
let page = data.page | 0;
let pages = Math.ceil((data.total || 1) / data.size);
if (page > pages) page = pages;
let step = data.step | 0;
let middle = step / 2 | 0;
let start = Math.max(1, page - middle);
let end = Math.min(pages, start + step - 1);
start = Math.max(1, end - step + 1);
let offset;
if (start <= 2) { //=2 +1 =1 +2
offset = 3 - start;
if (end + offset < pages) {
end += offset;
}
}
if (end + 2 > pages) {
offset = 2 - (pages - end);
if ((start - offset) > 1) {
start -= offset;
}
}
if (start == 3) {
start -= 1;
}
if (end + 2 == pages) {
end += 1;
}
let offsetStart = (page - 1) * data.size + 1;
let offsetEnd = Math.min(data.total, page * data.size);
return {
pages,
offsetStart: offsetStart,
offsetEnd: offsetEnd,
startSpace: (data.total + '').length - (offsetStart + '').length,
endSpace: (data.total + '').length - (offsetEnd + '').length,
pageSpace: (pages + '').length - (page + '').length,
page,
start,
end
};
},
'@{fire.event}'() {
let me = this;
let node = $('#' + me.id);
let data = me.updater.get();
node.trigger({
type: 'change',
page: data.page,
size: data.size
});
},
'@{toPage}<click>'(e) {
e.preventDefault();
let me = this;
me.updater.set({
page: e.params.page
});
me.render();
me['@{fire.event}']();
},
'@{changeSize}<change>'(e) {
e.stopPropagation();
let me = this;
me.updater.set({
page: 1,
size: e.item
});
me.render();
me['@{fire.event}']();
},
'@{prevent}<click>'(e) {
e.preventDefault();
}
});