static-cms/src/backends/test-repo/implementation.js

62 lines
1.6 KiB
JavaScript
Raw Normal View History

import AuthenticationPage from './AuthenticationPage';
2016-08-24 21:36:44 -03:00
import { createEntry } from '../../valueObjects/Entry';
function getSlug(path) {
2016-05-30 16:55:32 -07:00
const m = path.match(/([^\/]+?)(\.[^\/\.]+)?$/);
return m && m[1];
}
export default class TestRepo {
constructor(config) {
this.config = config;
if (window.repoFiles == null) {
throw 'The TestRepo backend needs a "window.repoFiles" object.';
}
}
setUser() {}
authComponent() {
return AuthenticationPage;
}
authenticate(state) {
return Promise.resolve({ email: state.email });
}
entries(collection) {
const entries = [];
const folder = collection.get('folder');
if (folder) {
for (var path in window.repoFiles[folder]) {
2016-08-24 21:36:44 -03:00
entries.push(createEntry(folder + '/' + path, getSlug(path), window.repoFiles[folder][path].content));
}
}
return Promise.resolve({
pagination: {},
entries
});
}
entry(collection, slug) {
return this.entries(collection).then((response) => (
response.entries.filter((entry) => entry.slug === slug)[0]
2016-05-30 16:55:32 -07:00
));
}
persistEntry(entry, mediaFiles = [], options) {
const newEntry = options.newEntry || false;
2016-07-19 17:11:22 -03:00
const folder = entry.path.substring(0, entry.path.lastIndexOf('/'));
2016-06-10 00:16:01 -03:00
const fileName = entry.path.substring(entry.path.lastIndexOf('/') + 1);
if (newEntry) {
window.repoFiles[folder][fileName] = { content: entry.raw };
} else {
window.repoFiles[folder][fileName]['content'] = entry.raw;
}
mediaFiles.forEach(media => media.uploaded = true);
return Promise.resolve();
}
2016-09-06 13:04:17 -03:00
}