203 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| angular.module("myApp.services", []).factory("Desirae", [
 | |
|   "$q",
 | |
|   "$http",
 | |
|   function ($q, $http) {
 | |
|     var Desi = window.Desirae || require("./deardesi").Desirae,
 | |
|       desi = {
 | |
|         /*TODO api_base: '/api'*/
 | |
|       };
 | |
|     //
 | |
|     // 1. Transform (yml, slug, etc)
 | |
|     //
 | |
|     Desi.registerTransform("lint", window.DesiraeTransformCore.lint, {
 | |
|       collections: true,
 | |
|     });
 | |
|     Desi.registerTransform("root", window.DesiraeTransformCore.root, {
 | |
|       root: true,
 | |
|     });
 | |
|     Desi.registerTransform("normalize", window.DesiraeTransformCore.normalize, {
 | |
|       root: true,
 | |
|       collections: true,
 | |
|     });
 | |
|     Desi.registerTransform("disqus", window.DesiraeTransformCore.disqus, {
 | |
|       collections: true,
 | |
|     });
 | |
| 
 | |
|     //
 | |
|     // 2. Aggregate (rss, categories, tags, etc)
 | |
|     //
 | |
|     Desi.registerAggregator(window.DesiraeAggregateCore.collate);
 | |
| 
 | |
|     //
 | |
|     // 3. Datamap (ruhoh, desirae, jade, mustache, liquid)
 | |
|     //
 | |
|     Desi.registerDataMapper("desirae", window.DesiraeDatamapCore);
 | |
|     Desi.registerDataMapper("desirae@1.0", window.DesiraeDatamapCore);
 | |
|     Desi.registerDataMapper("ruhoh", window.DesiraeDatamapRuhoh);
 | |
|     Desi.registerDataMapper("ruhoh@1.0", window.DesiraeDatamapRuhoh);
 | |
|     Desi.registerDataMapper("ruhoh@2.6", window.DesiraeDatamapRuhoh);
 | |
| 
 | |
|     //
 | |
|     // 4. Render (md -> html, less -> css, etc)
 | |
|     //
 | |
|     Desi.registerRenderer("js", window.DesiraeRenderCss, {
 | |
|       themes: true,
 | |
|       assets: true,
 | |
|     });
 | |
|     Desi.registerRenderer("css", window.DesiraeRenderCss, {
 | |
|       themes: true,
 | |
|       assets: true,
 | |
|     });
 | |
| 
 | |
|     ["html", "htm", "xhtm", "xhtml"].forEach(function (ext) {
 | |
|       Desi.registerRenderer(ext, window.DesiraeRenderHtml, {
 | |
|         root: true,
 | |
|         collections: true,
 | |
|         themes: true,
 | |
|         assets: true,
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     [
 | |
|       "md",
 | |
|       "markdown",
 | |
|       "mdown",
 | |
|       "mkdn",
 | |
|       "mkd",
 | |
|       "mdwn",
 | |
|       "mdtxt",
 | |
|       "mdtext",
 | |
|     ].forEach(function (ext) {
 | |
|       Desi.registerRenderer(ext, window.DesiraeRenderMarkdown, {
 | |
|         root: true,
 | |
|         collections: true,
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     Desi.registerRenderer("jade", window.DesiraeRenderJade, {
 | |
|       root: true,
 | |
|       collections: true,
 | |
|       themes: true,
 | |
|     });
 | |
| 
 | |
|     function gdrive2host(str) {
 | |
|       // https://drive.google.com/folderview?id=0ByLnfhJOd1-baUh1Wms0US16QkE&usp=sharing
 | |
|       // https://googledrive.com/host/0ByLnfhJOd1-baUh1Wms0US16QkE
 | |
| 
 | |
|       var m;
 | |
| 
 | |
|       str = str || "";
 | |
|       m = str.match(/(?=drive.*google|google.*drive).*folderview.*id=([^&]+)/i);
 | |
|       console.log(m);
 | |
|       if (m && m[1]) {
 | |
|         return "https://googledrive.com/host/" + m[1];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     function dropbox2host(str) {
 | |
|       if (!/dropbox/.test(str)) {
 | |
|         return;
 | |
|       }
 | |
|       // https://dl.dropboxusercontent.com/u/146173/index.html
 | |
| 
 | |
|       // https://www.dropbox.com/s/3n20djtrs2p0j9k
 | |
|       // https://www.dropbox.com/s/3n20djtrs2p0j9k/index.html?dl=0
 | |
|       // https://dl.dropboxusercontent.com/s/3n20djtrs2p0j9k/index.html
 | |
| 
 | |
|       str = str || "";
 | |
|       if (!str.match(/dropboxusercontent\.com\/u\/([^\/]+)\/index.html/)) {
 | |
|         window.alert(
 | |
|           "Sorry, Desi can't use that type of dropbox link." +
 | |
|             "\n\n1. Open the Dropbox folder on your computer" +
 | |
|             "\n   (The DropBox app must be installed)" +
 | |
|             "\n\n2. Open the Public folder" +
 | |
|             "\n   (if you don't have a Public folder, your account doesn't support hosting websites and you're simply out of luck)" +
 | |
|             "\n\n2. Create a new file called index.html" +
 | |
|             "\n\n3. Right-click on index.html" +
 | |
|             "\n\n4. Select 'Copy Public Link'" +
 | |
|             "\n\n5. Paste that link as the URL for Desi"
 | |
|         );
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       return str.replace(/\/index\.html$/, "");
 | |
|     }
 | |
| 
 | |
|     function splitUrl(str) {
 | |
|       var m;
 | |
| 
 | |
|       str = str || "";
 | |
|       m = str.match(/(https?:\/\/)?([^\.\/?#]+\.[^\/?#]+)(\/[^#?]+)?/i);
 | |
|       console.log(m);
 | |
|       if (!m || !m[2]) {
 | |
|         return;
 | |
|       }
 | |
|       return {
 | |
|         baseUrl: (m[1] || "http://") + m[2],
 | |
|         basePath: (m[3] && m[3].replace(/\/$/, "")) || "/",
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     function getBlogdir() {
 | |
|       return $http.get("/api/fs/rootdir").then(function (resp) {
 | |
|         desi.blogdir = resp.data;
 | |
|         return resp.data;
 | |
|       });
 | |
|     }
 | |
|     getBlogdir();
 | |
| 
 | |
|     return {
 | |
|       splitUrl: splitUrl,
 | |
|       gdrive2host: gdrive2host,
 | |
|       dropbox2host: dropbox2host,
 | |
|       reset: function () {
 | |
|         desi = {};
 | |
|         return getBlogdir();
 | |
|       },
 | |
|       toDesiDate: Desi.toLocaleDate,
 | |
|       meta: function () {
 | |
|         var d = $q.defer();
 | |
|         if (desi.meta) {
 | |
|           d.resolve(desi);
 | |
|           return d.promise;
 | |
|         }
 | |
| 
 | |
|         Desi.init(desi).then(function () {
 | |
|           d.resolve(desi);
 | |
|         });
 | |
| 
 | |
|         return d.promise;
 | |
|       },
 | |
|       build: function (env) {
 | |
|         var d = $q.defer();
 | |
|         if (desi.built) {
 | |
|           d.resolve(desi);
 | |
|           return d.promise;
 | |
|         }
 | |
| 
 | |
|         Desi.buildAll(desi, env).then(function () {
 | |
|           d.resolve(desi);
 | |
|         });
 | |
| 
 | |
|         return d.promise;
 | |
|       },
 | |
|       write: function (env) {
 | |
|         var d = $q.defer();
 | |
|         if (desi.written) {
 | |
|           d.resolve(desi);
 | |
|           return d.promise;
 | |
|         }
 | |
| 
 | |
|         Desi.write(desi, env).then(function () {
 | |
|           d.resolve(desi);
 | |
|         });
 | |
| 
 | |
|         return d.promise;
 | |
|       },
 | |
|       putFiles: function (files) {
 | |
|         return $q.when(Desi.fsapi.putFiles(files));
 | |
|       },
 | |
|     };
 | |
|   },
 | |
| ]);
 |