88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | ||
| 
 | ||
| // http://ruhoh.com/docs/2/pages/#toc_41
 | ||
| /*
 | ||
|   If a page has a permalink, that permalink should be respected.
 | ||
|   Otherwise it should use the the permalink for that collection.
 | ||
| */
 | ||
| 
 | ||
| var tags
 | ||
|   , permalinkTransforms
 | ||
|   , cases
 | ||
|   , path    = /*exports.path ||*/ require('path')
 | ||
|   ;
 | ||
|   
 | ||
| tags = {
 | ||
|   year:           "Year from the page’s filename"
 | ||
| , month:          "Month from the page’s filename"
 | ||
| , day:            "Day from the page’s filename"
 | ||
| , path:           "The page file's path relative to the base of your website."
 | ||
| , relative_path:  "The page file's path relative to its name-spaced directory."
 | ||
| , filename:       "The page file's filename (path is not included)."
 | ||
| , categories:     "The specified categories for this page. If more than one category is set, only the first one is used. If no categories exist, the URL omits this parameter."
 | ||
| , i_month:        "Month from the page’s filename without leading zeros."
 | ||
| , i_day:          "Day from the page’s filename without leading zeros."
 | ||
| , title:          "The title, as a slug."
 | ||
| , slug:           "alias of title"
 | ||
| , name:           "alias of title"
 | ||
| , collection:     "i.e. posts/ or essays/ or whatever/"
 | ||
| };
 | ||
| 
 | ||
| function pad(str, n) {
 | ||
|   str = str.toString();
 | ||
|   if (str.length < n) {
 | ||
|     str = '0' + str;
 | ||
|   }
 | ||
| 
 | ||
|   return str;
 | ||
| }
 | ||
| 
 | ||
| // https://www.youtube.com/watch?v=1NryFD9_hR0&list=RDOeLUK4a6Ojc&index=2
 | ||
| cases = {
 | ||
|   "/:title.html"                  : "/my-title.html"
 | ||
| , ":title/"                       : "/my-title/"
 | ||
| , "/:bad/:title/"                 : "/:bad/my-title/"
 | ||
| , "/:slug/"                       : "/my-title/"
 | ||
| , "/:path/:name.html"             : "/posts/fun/my-title.html"
 | ||
| , "/:relative_path/:name/"        : "/fun/my-title/"
 | ||
| , "/:year-:month-:day/:name"      : "/2015-07-04/my-title/"
 | ||
| , "/:year/:i_month/:i_day/:name"  : "/2015/7/4/my-title/"
 | ||
| , "/:filename.html"               : "/my-file-name.html"
 | ||
| , "/:filename"                    : "/my-file-name/"
 | ||
| , "/:filename/"                   : "/my-file-name/"
 | ||
| , "/:collection/:title/"          : "/posts/my-title/"
 | ||
| , "/:collection/:filename"        : "/posts/my-file-name/"
 | ||
| , "/:something/:or/:other"        : "/:something/:or/:other/"
 | ||
| , "/:categories/:title/"          : "/desi/my-title/"
 | ||
| };
 | ||
| 
 | ||
| Object.keys(cases).forEach(function (tpl) {
 | ||
|   var entity
 | ||
|     , tpld
 | ||
|     ;
 | ||
| 
 | ||
|   entity = {
 | ||
|     year          : '2015'
 | ||
|   , month         : '07'
 | ||
|   , day           : '04'
 | ||
|   , title         : "My Title"
 | ||
|   , slug          : "my-title"
 | ||
|   , name          : "My-File-Name.html"
 | ||
|   , relativePath  : "posts/fun"
 | ||
|   , path          : "posts/fun/My-File-Name.html"
 | ||
|   , collection    : "posts"
 | ||
|   , yml           : { categories: ['desi'] }
 | ||
|   };
 | ||
| 
 | ||
|   tpld = permalinker(tpl, entity);
 | ||
| 
 | ||
|   if (cases[tpl] !== tpld) {
 | ||
|     console.error('[ERROR]');
 | ||
|     console.error(tpl + ' ' + tpld + ' ' + cases[tpl]);
 | ||
|     throw new Error(
 | ||
|       "Did not template permalink correctly. "
 | ||
|       + tpl + ' ' + tpld + ' ' + cases[tpl]
 | ||
|     );
 | ||
|   }
 | ||
| });
 |