Skip to content

Commit dd464e2

Browse files
committed
progress rewriting the navigation function
1 parent 649b218 commit dd464e2

File tree

3 files changed

+147
-149
lines changed

3 files changed

+147
-149
lines changed

core/lib/object_factory.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,15 @@ var Pattern = function (relPath, data) {
3636
// the top-level pattern group this pattern belongs to. 'atoms'
3737
this.patternGroup = this.subdir.split(path.sep)[0].replace(/^\d*-/, '');
3838

39+
//00-atoms if needed
40+
this.patternType = this.subdir.split(path.sep)[0];
41+
3942
// the sub-group this pattern belongs to.
4043
this.patternSubGroup = path.basename(this.subdir).replace(/^\d*-/, ''); // 'global'
4144

45+
//00-colors if needed
46+
this.patternSubType = path.basename(this.subdir);
47+
4248
// the joined pattern group and subgroup directory
4349
this.flatPatternPath = this.subdir.replace(/[\/\\]/g, '-'); // '00-atoms-00-global'
4450

core/lib/ui_builder.js

Lines changed: 114 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var ui_builder = function () {
3131

3232
function addToViewAllPaths(patternlab, pattern) {
3333

34-
console.log('adding',pattern.patternPartial, pattern.patternGroup, pattern.patternSubGroup, pattern.flatPatternPath, 'to viewallpaths');
34+
console.log('6 adding',pattern.patternPartial, pattern.patternGroup, pattern.patternSubGroup, pattern.flatPatternPath, 'to viewallpaths');
3535

3636
if (!patternlab.viewAllPaths) {
3737
patternlab.viewAllPaths = {};
@@ -45,8 +45,12 @@ var ui_builder = function () {
4545
patternlab.viewAllPaths[pattern.patternGroup][pattern.patternSubGroup] = {};
4646
}
4747

48-
patternlab.viewAllPaths[pattern.patternGroup][pattern.patternSubGroup] = pattern.flatPatternPath;
48+
patternlab.viewAllPaths[pattern.patternGroup][pattern.patternSubGroup] = pattern.subdir.slice(0, pattern.subdir.indexOf(pattern.patternGroup) + pattern.patternGroup.length) + '-' +pattern.patternSubGroup;
4949

50+
51+
if (!patternlab.viewAllPaths[pattern.patternGroup]['all']) {
52+
patternlab.viewAllPaths[pattern.patternGroup]['all'] = pattern.subdir.slice(0, pattern.subdir.indexOf(pattern.patternGroup) + pattern.patternGroup.length);
53+
}
5054
}
5155

5256
function writeFile(filePath, data, callback) {
@@ -128,6 +132,100 @@ var ui_builder = function () {
128132
return docPattern;
129133
}
130134

135+
function createPatternType(patternlab, pattern) {
136+
137+
patternlab.patternTypes.push(
138+
{
139+
patternTypeLC: pattern.patternGroup.toLowerCase(),
140+
patternTypeUC: pattern.patternGroup.charAt(0).toUpperCase() + pattern.patternGroup.slice(1),
141+
patternType: pattern.patternType,
142+
patternTypeDash: pattern.patternGroup, //todo verify
143+
patternTypeItems: []
144+
}
145+
);
146+
}
147+
148+
function getPatternType(patternlab, pattern) {
149+
150+
console.log('10 searching for', pattern.patternType, 'within', patternlab.patternTypes);
151+
152+
var patternType = _.find(patternlab.patternTypes, ['patternType', pattern.patternType]);
153+
154+
if(!patternType) {
155+
console.log('something went wrong looking for patternType');
156+
process.exit(1);
157+
}
158+
console.log('returning', patternType.patternType);
159+
160+
return patternType;
161+
}
162+
163+
function getPatternSubType(patternlab, pattern) {
164+
var patternType = getPatternType(patternlab, pattern);
165+
166+
console.log(14, 'found patternType', patternType.patternType);
167+
168+
if(!patternType) {
169+
console.log('something went wrong looking for patternType');
170+
process.exit(1);
171+
}
172+
173+
174+
console.log(15, 'going to look in ', patternType.patternTypeItems, 'for patternSubType', pattern.patternSubType);
175+
var patternSubType = _.find(patternType.patternTypeItems, ['patternSubtype', pattern.patternSubType]);
176+
177+
if(!patternSubType) {
178+
console.log('something went wrong looking for patternSubType', pattern.patternType, '-', pattern.patternSubType);
179+
process.exit(1);
180+
}
181+
182+
return patternSubType;
183+
}
184+
185+
function createPatternSubType(patternlab, pattern) {
186+
187+
var patternType = getPatternType(patternlab, pattern);
188+
189+
patternType.patternTypeItems.push(
190+
{
191+
patternSubtypeLC: pattern.patternSubGroup.toLowerCase(),
192+
patternSubtypeUC: pattern.patternSubGroup.charAt(0).toUpperCase() + pattern.patternSubGroup.slice(1),
193+
patternSubtype: pattern.patternSubType,
194+
patternSubtypeDash: pattern.patternSubGroup, //todo verify
195+
patternSubtypeItems: []
196+
}
197+
);
198+
199+
console.log(11, patternlab.patternTypes);
200+
}
201+
202+
function createPatternSubTypeItem(patternlab, pattern, createViewAllVariant) {
203+
var patternSubType = getPatternSubType(patternlab, pattern);
204+
205+
if(createViewAllVariant) {
206+
patternSubType.patternSubtypeItems.push(
207+
{
208+
patternPartial: 'viewall-' + pattern.patternPartial,
209+
patternName: 'View All',
210+
patternPath: encodeURI(pattern.flatPatternPath + '/index.html'),
211+
patternType: pattern.patternType,
212+
patternSubtype: pattern.patternSubtype
213+
}
214+
);
215+
} else {
216+
patternSubType.patternSubtypeItems.push(
217+
{
218+
patternPartial: pattern.patternPartial,
219+
patternName: pattern.patternName,
220+
patternState: pattern.patternState,
221+
patternSrcPath: encodeURI(pattern.subdir + pattern.filename),
222+
patternPath: encodeURI(pattern.flatPatternPath + '/' + pattern.flatPatternPath + '.html')
223+
}
224+
);
225+
}
226+
227+
}
228+
131229
/*
132230
* groupPatterns
133231
* returns an object representing how the front end styleguide and navigation is structured
@@ -137,6 +235,10 @@ var ui_builder = function () {
137235
patternGroups: {}
138236
};
139237

238+
if(!patternlab.patternTypes){
239+
patternlab.patternTypes = [];
240+
}
241+
140242
_.forEach(sortPatterns(patternlab.patterns), function (pattern) {
141243

142244
pattern.omitFromStyleguide = isPatternExcluded(pattern, patternlab);
@@ -150,168 +252,34 @@ var ui_builder = function () {
150252

151253
groupedPatterns.patternGroups[pattern.patternGroup] = {};
152254

255+
createPatternType(patternlab, pattern);
256+
153257
//todo: test this
154258
//groupedPatterns.patternGroups[pattern.patternGroup]['viewall-' + pattern.patternGroup] = injectDocumentationBlock(pattern, patternlab, false);
155259
}
156260
if (!groupedPatterns.patternGroups[pattern.patternGroup][pattern.patternSubGroup]) {
261+
262+
createPatternSubType(patternlab, pattern);
263+
157264
pattern.isSubtypePattern = !pattern.isPattern;
158265
groupedPatterns.patternGroups[pattern.patternGroup][pattern.patternSubGroup] = {};
159266
groupedPatterns.patternGroups[pattern.patternGroup][pattern.patternSubGroup]['viewall-' + pattern.patternGroup + '-' + pattern.patternSubGroup] = injectDocumentationBlock(pattern, patternlab, true);
160267

161268
addToViewAllPaths(patternlab, pattern);
269+
createPatternSubTypeItem(patternlab, pattern, true);
162270

163271
}
164272
groupedPatterns.patternGroups[pattern.patternGroup][pattern.patternSubGroup][pattern.patternBaseName] = pattern;
165273

166274
addToPatternPaths(patternlab, pattern);
167-
275+
console.log(12, 'about to create patternsubtypeitem derived from', pattern.patternPartial, pattern.patternGroup, pattern.patternSubGroup);
276+
createPatternSubTypeItem(patternlab, pattern);
168277
});
169278
return groupedPatterns;
170279
}
171280

172-
function buildNavigation(patternlab) {
173-
174-
if(!patternlab.patternTypeIndex) {
175-
patternlab.patternTypeIndex = [];
176-
}
177-
178-
if(!patternlab.patternTypes){
179-
patternlab.patternTypes = [];
180-
}
181-
182-
183-
for (var i = 0; i < patternlab.patterns.length; i++) {
184-
185-
var pattern = patternlab.patterns[i];
186-
var patternSubTypeName;
187-
var patternSubTypeItemName;
188-
var flatPatternItem;
189-
var patternSubType;
190-
var patternSubTypeItem;
191-
var viewAllPatternSubTypeItem;
192-
193-
//get the patternSubType.
194-
//if there is one or more slashes in the subdir, get everything after
195-
//the last slash. if no slash, get the whole subdir string and strip
196-
//any numeric + hyphen prefix
197-
patternSubTypeName = pattern.subdir.split(path.sep).pop().replace(/^\d*\-/, '');
198-
199-
//get the patternSubTypeItem
200-
patternSubTypeItemName = pattern.patternName.replace(/-/g, ' ');
201-
202-
//assume the patternSubTypeItem does not exist.
203-
patternSubTypeItem = new of.oPatternSubTypeItem(patternSubTypeItemName);
204-
patternSubTypeItem.patternPath = pattern.patternLink;
205-
patternSubTypeItem.patternPartial = pattern.patternPartial;
206-
207-
//check if the patternType already exists
208-
var patternTypeIndex = patternlab.patternTypeIndex.indexOf(pattern.patternGroup);
209-
if (patternTypeIndex === -1) {
210-
//add the patternType
211-
var patternType = new of.oPatternType(pattern.patternGroup);
212-
213-
//add patternPath and viewAllPath
214-
patternlab.patternPaths[pattern.patternGroup] = patternlab.patternPaths[pattern.patternGroup] || {};
215-
patternlab.viewAllPaths[pattern.patternGroup] = {};
216-
217-
//test whether the pattern structure is flat or not - usually due to a template or page
218-
flatPatternItem = patternSubTypeName === pattern.patternGroup;
219-
220-
//assume the patternSubType does not exist.
221-
patternSubType = new of.oPatternSubType(patternSubTypeName);
222-
223-
//add the patternState if it exists
224-
if (pattern.patternState) {
225-
patternSubTypeItem.patternState = pattern.patternState;
226-
}
227-
228-
//if it is flat - we should not add the pattern to patternPaths
229-
if (flatPatternItem) {
230-
231-
patternType.patternItems.push(patternSubTypeItem);
232-
233-
234-
} else {
235-
236-
patternType.patternTypeItems.push(patternSubType);
237-
patternType.patternTypeItemsIndex.push(patternSubTypeName);
238-
patternSubType.patternSubtypeItems.push(patternSubTypeItem);
239-
patternSubType.patternSubtypeItemsIndex.push(patternSubTypeItemName);
240-
281+
function buildNavigation(patternlab, patterns) {
241282

242-
//add the view all PatternSubTypeItem
243-
viewAllPatternSubTypeItem = new of.oPatternSubTypeItem("View All");
244-
viewAllPatternSubTypeItem.patternPath = pattern.subdir.slice(0, pattern.subdir.indexOf(pattern.patternGroup) + pattern.patternGroup.length) + "/index.html";
245-
viewAllPatternSubTypeItem.patternPartial = "viewall-" + pattern.patternGroup;
246-
247-
patternType.patternItems.push(viewAllPatternSubTypeItem);
248-
patternlab.viewAllPaths[pattern.patternGroup].viewall = pattern.subdir.slice(0, pattern.subdir.indexOf(pattern.patternGroup) + pattern.patternGroup.length);
249-
250-
}
251-
252-
//add the patternType.
253-
patternlab.patternTypes.push(patternType);
254-
patternlab.patternTypeIndex.push(pattern.patternGroup);
255-
256-
//done
257-
258-
} else {
259-
//find the patternType
260-
patternType = patternlab.patternTypes[patternTypeIndex];
261-
262-
//add the patternState if it exists
263-
if (pattern.patternState) {
264-
patternSubTypeItem.patternState = pattern.patternState;
265-
}
266-
267-
//test whether the pattern structure is flat or not - usually due to a template or page
268-
flatPatternItem = patternSubTypeName === pattern.patternGroup;
269-
270-
//if it is flat - we should not add the pattern to patternPaths
271-
if (flatPatternItem) {
272-
//add the patternSubType to patternItems
273-
patternType.patternItems.push(patternSubTypeItem);
274-
275-
276-
} else {
277-
278-
// only do this if pattern is included
279-
//check to see if patternSubType exists
280-
var patternTypeItemsIndex = patternType.patternTypeItemsIndex.indexOf(patternSubTypeName);
281-
if (patternTypeItemsIndex === -1) {
282-
patternSubType = new of.oPatternSubType(patternSubTypeName);
283-
284-
//add the patternSubType and patternSubTypeItem
285-
patternSubType.patternSubtypeItems.push(patternSubTypeItem);
286-
patternSubType.patternSubtypeItemsIndex.push(patternSubTypeItemName);
287-
patternType.patternTypeItems.push(patternSubType);
288-
patternType.patternTypeItemsIndex.push(patternSubTypeName);
289-
290-
} else {
291-
//add the patternSubTypeItem
292-
patternSubType = patternType.patternTypeItems[patternTypeItemsIndex];
293-
patternSubType.patternSubtypeItems.push(patternSubTypeItem);
294-
patternSubType.patternSubtypeItemsIndex.push(patternSubTypeItemName);
295-
}
296-
297-
//check if we are moving to a new subgroup in the next loop
298-
if (!patternlab.patterns[i + 1] || pattern.patternSubGroup !== patternlab.patterns[i + 1].patternSubGroup) {
299-
300-
//add the viewall SubTypeItem
301-
var viewAllPatternSubTypeItem = new of.oPatternSubTypeItem("View All");
302-
viewAllPatternSubTypeItem.patternPath = pattern.flatPatternPath + "/index.html";
303-
viewAllPatternSubTypeItem.patternPartial = "viewall-" + pattern.patternGroup + "-" + pattern.patternSubGroup;
304-
305-
patternSubType.patternSubtypeItems.push(viewAllPatternSubTypeItem);
306-
patternSubType.patternSubtypeItemsIndex.push("View All");
307-
}
308-
309-
}
310-
}
311-
312-
patternlab.viewAllPaths[pattern.patternGroup][pattern.patternSubGroup] = pattern.flatPatternPath;
313-
}
314-
return patternTypeIndex;
315283
}
316284

317285
function buildFooterHTML(patternlab, patternPartial) {
@@ -334,6 +302,7 @@ var ui_builder = function () {
334302

335303
if (isPatternType) {
336304
patternPartial = patternPartial.substring(patternPartial.indexOf('viewall-'));
305+
console.log(patternPartial);
337306
}
338307

339308
var viewAllHTML = pattern_assembler.renderPattern(patternlab.viewAll,
@@ -493,7 +462,6 @@ var ui_builder = function () {
493462
});
494463

495464
//build the viewall pages
496-
//todo so close
497465
var patterns = buildViewAllPages(headerHTML, patternlab, styleguidePatterns);
498466

499467
//build the main styleguide page
@@ -509,9 +477,6 @@ var ui_builder = function () {
509477

510478
writeFile(path.resolve(paths.public.styleguide, 'html/styleguide.html'), headerHTML + styleguideHtml + footerHTML);
511479

512-
//build the patternlab navigation
513-
buildNavigation(patternlab);
514-
515480
//move the index file from its asset location into public root
516481
var patternlabSiteHtml;
517482
try {

test/ui_builder_tests.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,32 @@ exports['ui_builder'] = {
167167
test.done();
168168
},
169169

170+
'groupPatterns - adds each pattern to the view all paths object': function (test) {
171+
//arrange
172+
var patternlab = createFakePatternLab({
173+
patterns: [],
174+
patternGroups: {},
175+
subtypePatterns: {}
176+
});
177+
178+
patternlab.patterns.push(
179+
new Pattern('00-test/foo.mustache'),
180+
new Pattern('00-test/bar.mustache'),
181+
new Pattern('patternType1/patternSubType1/blue.mustache'),
182+
new Pattern('patternType1/patternSubType1/red.mustache'),
183+
new Pattern('patternType1/patternSubType1/yellow.mustache'),
184+
new Pattern('patternType1/patternSubType2/black.mustache'),
185+
new Pattern('patternType1/patternSubType2/grey.mustache'),
186+
new Pattern('patternType1/patternSubType2/white.mustache')
187+
);
188+
189+
//act
190+
var result = ui.groupPatterns(patternlab);
191+
192+
//assert
193+
test.equals('todo', 'todo');
194+
195+
test.done();
196+
}
170197

171198
};

0 commit comments

Comments
 (0)