89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.5 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]
 | ||
|     );
 | ||
|   }
 | ||
| });
 |