208 lines
5.3 KiB
JavaScript
208 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));
|
|
}
|
|
};
|
|
}]
|
|
);
|