Add 'Mixin'

This commit is contained in:
0x1eef 2023-10-07 03:21:48 -03:00
parent 600f5cb799
commit 4850546eb1
6 changed files with 58 additions and 48 deletions

19
nanoc/lib/mixin.rb Normal file
View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module Mixin
require_relative "mixin/t"
require_relative "mixin/inline"
require_relative "mixin/erb"
require_relative "mixin/opengraph"
def build_dir
nanoc = Ryo.from YAML.load_file(File.join(Dir.getwd, "nanoc.yaml"))
nanoc.output_dir
end
include T
include Inline
include ERB
include OpenGraph
end
use_helper Mixin

8
nanoc/lib/mixin/erb.rb Normal file
View file

@ -0,0 +1,8 @@
module Mixin::ERB
def erb(partial, local_assigns = {})
erb = File.binread File.join(Dir.getwd, "src", "html", "partials", partial)
scope = binding
local_assigns.each { scope.local_variable_set(_1, _2) }
::ERB.new(erb).result(scope)
end
end

15
nanoc/lib/mixin/inline.rb Normal file
View file

@ -0,0 +1,15 @@
module Mixin::Inline
def inline_json(path)
class_name = File.basename(path, File.extname(path))
"<script class='json #{class_name}' type='application/json'>" \
"#{items[path].compiled_content}" \
"</script>"
end
def inline_css(path)
class_name = File.basename(path, File.extname(path))
"<style class='css #{class_name}'>" \
"#{File.binread(File.join(build_dir, "css", "postman.css"))}" \
"</style>"
end
end

View file

@ -1,9 +1,6 @@
# frozen_string_literal: true
use_helper Module.new {
require_relative "helper"
include Helper
module Mixin::OpenGraph
def opengraph(context)
erb "opengraph.html.erb", local_assigns(context)
end
@ -17,4 +14,4 @@ use_helper Module.new {
image: "https://al-quran.reflectslight.io/images/opengraph/#{context.surah.id}.png"}
end
end
}
end

14
nanoc/lib/mixin/t.rb Normal file
View file

@ -0,0 +1,14 @@
module Mixin::T
def t(locale, key, locals = {})
str = [locale, *key.split(".")].inject(i18n) { |h, k| h[k] }
format(str, locals)
end
def i18n
@i18n ||= Ryo.from(
JSON.parse(
File.read(File.join(Dir.getwd, "src", "i18n.json"))
)
)
end
end

View file

@ -1,43 +0,0 @@
# frozen_string_literal: true
module Helper
def inline_json(path)
class_name = File.basename(path, File.extname(path))
"<script class='json #{class_name}' type='application/json'>" \
"#{items[path].compiled_content}" \
"</script>"
end
def inline_css(path)
class_name = File.basename(path, File.extname(path))
"<style class='css #{class_name}'>" \
"#{File.binread(File.join(build_dir, "css", "postman.css"))}" \
"</style>"
end
def build_dir
nanoc = Ryo.from YAML.load_file(File.join(Dir.getwd, "nanoc.yaml"))
nanoc.output_dir
end
def t(locale, key, locals = {})
str = [locale, *key.split(".")].inject(i18n) { |h, k| h[k] }
format(str, locals)
end
def i18n
@i18n ||= Ryo.from(
JSON.parse(
File.read(File.join(Dir.getwd, "src", "i18n.json"))
)
)
end
def erb(partial, local_assigns = {})
erb = File.binread File.join(Dir.getwd, "src", "html", "partials", partial)
scope = binding
local_assigns.each { scope.local_variable_set(_1, _2) }
ERB.new(erb).result(scope)
end
end
use_helper Helper