# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require 'htmlentities' require 'algoliasearch' require 'slugize' require 'dotenv' module Jekyll class GeneratorGuides < Generator priority :highest def initialize(config) end def generate(site) @site = site site.collections['guides'].docs.each do |guide| group = find_group(guide) subgroup = find_subgroup(guide, group) guide.data['group_data'] = group guide.data['subgroup_data'] = subgroup unless subgroup.nil? subgroup['guides'] << { 'title' => guide.data['title'], 'url' => guide.url, 'menu' => guide.data['menu'], 'order' => guide.data['order'], 'summary' => guide.data['description'] } else unless group.nil? group['guides'] << { 'title' => guide.data['title'], 'url' => guide.url, 'menu' => guide.data['menu'], 'order' => guide.data['order'], 'summary' => guide.data['description'] } end end end site.data['guides'] = [] if site.data['guides'].nil? site.data['guides'].each do |id, group| group['url'] = "/guides/#{id}/" if group['subgroups'].nil? group['subgroups'] = [] next end group['subgroups'].each do |id, subgroup| subgroup['url'] = "#{group['url']}#{id}/" end end end def find_group(guide) @site.data['guides'].each do |id, group| if id == guide.data['guide_group'] group['guides'] = [] if group['guides'].nil? return group end end nil end def find_subgroup(guide, group) return if group.nil? || group['subgroups'].nil? group['subgroups'].each do |id, subgroup| if id == guide.data['guide_subgroup'] subgroup['guides'] = [] if subgroup['guides'].nil? return subgroup end end nil end end end