122 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.4 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
 | |
|         , yindex = 3000 - f.year
 | |
|         , mindex = 12 - f.month
 | |
|         ;
 | |
| 
 | |
|       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: months[parseInt(f.month, 10)], pages: [] };
 | |
|       }
 | |
|       set = set.months[mindex];
 | |
| 
 | |
|       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));
 |