deardesi.js/components/desirae/desirae.js

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