#!/usr/bin/env ruby # frozen_string_literal: true require "ryo" require "nanoc-gunzip" require "nanoc-webpack" locales = %w[ar en] surah_id_to_name = Ryo.from( JSON.parse( File.read(File.join(Dir.getwd, "src", "slugs.json")) ) ) def require_rules(rules, locals = {}, target = binding) locals.each { target.local_variable_set(_1, _2) } path = File.join(Dir.getwd, rules) target.eval( if File.readable?(path) File.read(path) elsif File.readable?("#{path}.rb") File.read("#{path}.rb") elsif File.readable?("#{path}.rules") File.read("#{path}.rules") else raise LoadError, "#{path} is not readable" end ) end ## # Require rules require_rules "rules/assets" require_rules "rules/pages/surah/random", {locales:, surah_id_to_name:} require_rules "rules/pages/surah/stream", {locales:, surah_id_to_name:} require_rules "rules/pages/surah/index", {locales:} require_rules "rules/pages/surah/redirect" require_rules "rules/pages/surah/id_redirect", {locales:} ## # Inline CSS / JSON rules compile "/i18n.json" do filter(:minify_json) write(nil) end compile "/surahs.json" do filter(:minify_json) write(nil) end compile "/slugs.json" do filter(:minify_json) write(nil) end compile "/css/webpackage.scss" do filter :sass, syntax: :scss, style: :compact filter :rainpress write(nil) end ## # /sitemap.xml compile "/sitemap.xml.erb" do filter(:erb, locals: {locales:, surah_id_to_name:}) filter(:strip) write("/sitemap.xml") end ## # Defaults compile("/**/*") { write(nil) } layout("**/*", :erb)