# 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 'zip' module Pebble # Rock.js documentation processing class. class DocumentationJs < Documentation def initialize(site, source, root, language, preview = false) super(site) @url_root = root @language = language @preview = preview json = site.data[source] json.each { |js_module| process_module(js_module) } end private def process_module(js_module) js_module[:path] = js_module['name'] js_module[:url] = module_url(js_module) js_module[:processed_functions] = [] js_module[:processed_members] = [] js_module[:processed_typedefs] = [] js_module[:children] = [] process_members(js_module) add_to_tree(js_module) # Create and add the page page = PageDocJS.new(@site, module_url(js_module), js_module) page.set_data(@language, @preview) @pages << page end def process_members(js_module) js_module['members'].each do |type, members| members.each do |member| kind = member.key?('kind') ? member['kind'] : 'member' processed_type = 'processed_' + kind + 's' url = child_url(js_module, member) symbol = { :name => member['name'], :description => member['description'], :type => member['type'], :returns => member['returns'], :params => member['params'], :properties => member['properties'], :url => url, :kind => kind, :summary => member['summary'] } add_symbol(symbol) js_module[:children].push(symbol) js_module[processed_type.to_sym].push(symbol) end end end def add_to_tree(js_module) @tree << js_module end def module_url(js_module) "#{@url_root}#{js_module['name']}/" end def child_url(js_module, child) "#{module_url(js_module)}##{child['name']}" end def child_path(js_module, child) [js_module['name'], child['name']].join('.') end def language @language end end # Jekyll Page subclass for rendering the JS documentation pages. class PageDocJS < Jekyll::Page attr_reader :js_module def initialize(site, url, js_module) @site = site @base = site.source @dir = url @name = 'index.html' @js_module = JSON.parse(js_module.to_json) process(@name) read_yaml(File.join(@base, '_layouts', 'docs'), 'js.html') data['title'] = js_module['name'] end def set_data(language, preview) data['docs_language'] = language data['preview'] = preview end def to_liquid(attrs = ATTRIBUTES_FOR_LIQUID) super(attrs + %w(js_module)) end end end