125 lines
2.6 KiB
JavaScript
125 lines
2.6 KiB
JavaScript
/*jshint -W054 */
|
|
(function (exports) {
|
|
"use strict";
|
|
|
|
var path = exports.path || require("path"),
|
|
months,
|
|
cores = {};
|
|
months = {
|
|
1: "January",
|
|
2: "February",
|
|
3: "March",
|
|
4: "April",
|
|
5: "May",
|
|
6: "June",
|
|
7: "July",
|
|
8: "August",
|
|
9: "September",
|
|
10: "October",
|
|
11: "November",
|
|
12: "December",
|
|
};
|
|
|
|
function byDate(a, b) {
|
|
a.year = parseInt(a.year, 10) || 0;
|
|
b.year = parseInt(b.year, 10) || 0;
|
|
if (a.year > b.year) {
|
|
return -1;
|
|
} else if (a.year < b.year) {
|
|
return 1;
|
|
}
|
|
|
|
a.month = parseInt(a.month, 10) || 0;
|
|
b.month = parseInt(b.month, 10) || 0;
|
|
if (a.month > b.month) {
|
|
return -1;
|
|
} else if (a.month < b.month) {
|
|
return 1;
|
|
}
|
|
|
|
a.day = parseInt(a.day, 10) || 0;
|
|
b.day = parseInt(b.day, 10) || 0;
|
|
if (a.day > b.day) {
|
|
return -1;
|
|
} else if (a.day < b.day) {
|
|
return 1;
|
|
}
|
|
|
|
if (a.hour > b.hour) {
|
|
return -1;
|
|
} else if (a.hour < b.hour) {
|
|
return 1;
|
|
}
|
|
|
|
if (a.minute > b.minute) {
|
|
return -1;
|
|
} else if (a.minute < b.minute) {
|
|
return 1;
|
|
}
|
|
|
|
if (a.title.toLowerCase() <= b.title.toLowerCase()) {
|
|
return -1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
function collate(entities, env) {
|
|
var yearsArr = [];
|
|
entities.forEach(function (f) {
|
|
var set;
|
|
var yindex = 3000 - f.year;
|
|
var mindex = 12 - f.month;
|
|
var monthName = months[parseInt(f.month, 10)];
|
|
|
|
f.url = path.join(env.base_path, f.permalink);
|
|
|
|
if (!yearsArr[yindex]) {
|
|
yearsArr[yindex] = { year: f.year, months: [] };
|
|
}
|
|
set = yearsArr[yindex];
|
|
|
|
if (!set.months[mindex]) {
|
|
set.months[mindex] = {
|
|
month_name: monthName,
|
|
month_number: mindex,
|
|
month: monthName,
|
|
pages: [],
|
|
};
|
|
}
|
|
set = set.months[mindex];
|
|
|
|
f.month_name = months[parseInt(f.month, 10)];
|
|
f.month_number = parseInt(f.month, 10);
|
|
set.pages.push(f);
|
|
});
|
|
|
|
yearsArr = yearsArr.filter(function (y) {
|
|
if (!y) {
|
|
return false;
|
|
}
|
|
|
|
y.months = y.months.filter(function (m) {
|
|
return m && m.pages.length;
|
|
});
|
|
|
|
if (!y.months.length) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
|
|
return { years: yearsArr };
|
|
}
|
|
|
|
cores.collate = function (desi, env) {
|
|
// TODO categories
|
|
// TODO tags
|
|
desi.content.collections.sort(byDate);
|
|
desi.collated = collate(desi.content.collections, env);
|
|
};
|
|
|
|
exports.DesiraeAggregateCore = cores.DesiraeAggregateCore = cores;
|
|
})(("undefined" !== typeof exports && exports) || window);
|