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)); }, }; }, ]);