-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmultiplelayouts.plugin.js
More file actions
125 lines (116 loc) · 4.29 KB
/
multiplelayouts.plugin.js
File metadata and controls
125 lines (116 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Generated by CoffeeScript 1.6.3
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
module.exports = function(BasePlugin) {
var MultipleLayoutsPlugin, TaskGroup, _ref;
TaskGroup = require('taskgroup').TaskGroup;
return MultipleLayoutsPlugin = (function(_super) {
__extends(MultipleLayoutsPlugin, _super);
function MultipleLayoutsPlugin() {
_ref = MultipleLayoutsPlugin.__super__.constructor.apply(this, arguments);
return _ref;
}
MultipleLayoutsPlugin.prototype.name = 'multiplelayouts';
MultipleLayoutsPlugin.prototype.extendCollections = function(opts) {
var docpad, files, me;
me = this;
docpad = this.docpad;
files = docpad.getFiles({
additionalLayouts: {
$exists: true
}
});
files.on('remove', function(document) {
return me.removeAdditionalLayoutsFor(document);
});
return this;
};
MultipleLayoutsPlugin.prototype.contextualizeBefore = function(opts, next) {
var collection, database, docpad, me, sourcePageDocuments, tasks;
me = this;
docpad = this.docpad;
database = docpad.getDatabase();
tasks = new TaskGroup().once('complete', next);
collection = opts.collection;
sourcePageDocuments = collection.findAll({
additionalLayouts: {
$exists: true
}
});
sourcePageDocuments.forEach(function(document) {
return tasks.addTask(function(complete) {
return me.removeAdditionalLayoutsFor(document, collection, complete);
});
});
sourcePageDocuments.forEach(function(document) {
return tasks.addGroup(function(addGroup, addTask) {
var layouts;
layouts = document.get('additionalLayouts');
if (layouts == null) {
return;
}
if (!Array.isArray(layouts)) {
layouts = [layouts];
}
return layouts.forEach(function(layout) {
return addTask(function(complete) {
var newDoc;
newDoc = docpad.cloneModel(document);
newDoc.set({
filename: null
});
newDoc.setMeta({
fullPath: null,
relativePath: (document.get('additionalLayoutsRelativeOutDirPath') || document.get('relativeOutDirPath')) + '/' + document.get('basename') + '-' + layout + '.' + document.get('extensions').join('.'),
layout: layout,
additionalLayoutFor: document.id,
additionalLayouts: null
});
return newDoc.normalize(function(err) {
var _ref1;
if (err) {
return complete(err);
}
database.add(newDoc);
if ((_ref1 = opts.collection) != null) {
_ref1.add(newDoc);
}
return complete();
});
});
});
});
});
tasks.run();
return this;
};
MultipleLayoutsPlugin.prototype.removeAdditionalLayoutsFor = function(document, collection, next) {
var database, docpad, files, tasks;
docpad = this.docpad;
database = docpad.getDatabase();
tasks = new TaskGroup().setConfig({
concurreny: 0
});
if (next) {
tasks.once('complete', next);
}
files = docpad.getFiles({
additionalLayoutFor: document.id
});
files.forEach(function(file) {
return tasks.addTask(function(complete) {
if (collection != null) {
collection.remove(file);
}
database.remove(file);
return file["delete"](complete);
});
});
tasks.run();
return this;
};
return MultipleLayoutsPlugin;
})(BasePlugin);
};
}).call(this);