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)); |