diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index ae65407a..585fcc7a 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,7 +1,7 @@
[
[
"2016-02-28",
- "New documentation: CodeIgniter"
+ "New documentations: CodeIgniter and nginx Lua Module"
], [
"2016-02-15",
"New documentations: CakePHP, Chef and Ramda"
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 16b27f0c..97c37c5f 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -284,6 +284,11 @@ credits = [
'2002-2016 Igor Sysoev
© 2011-2016 Nginx, Inc.',
'BSD',
'http://nginx.org/LICENSE'
+ ], [
+ 'nginx / Lua Module',
+ '2009-2016 Xiaozhe Wang (chaoslawful)
© 2009-2016 Yichun "agentzh" Zhang (章亦春), CloudFlare Inc.',
+ 'BSD',
+ 'https://github.com/openresty/lua-nginx-module#copyright-and-license'
], [
'Node.js',
'Joyent, Inc. and other Node contributors
Node.js is a trademark of Joyent, Inc.',
diff --git a/assets/javascripts/views/pages/github.coffee b/assets/javascripts/views/pages/github.coffee
new file mode 100644
index 00000000..8d65a2a4
--- /dev/null
+++ b/assets/javascripts/views/pages/github.coffee
@@ -0,0 +1,6 @@
+#= require views/pages/base
+
+class app.views.GithubPage extends app.views.BasePage
+ prepare: ->
+ @highlightCode @findAll('pre.highlight-source-lua'), 'lua'
+ return
diff --git a/assets/javascripts/views/pages/lua_nginx_module.coffee b/assets/javascripts/views/pages/lua_nginx_module.coffee
deleted file mode 100644
index 16a0bac2..00000000
--- a/assets/javascripts/views/pages/lua_nginx_module.coffee
+++ /dev/null
@@ -1,8 +0,0 @@
-#= require views/pages/base
-
-# this may be used for all GitHub pages
-
-class app.views.LuaNginxModulePage extends app.views.BasePage
- prepare: ->
- @highlightCode @findAll('div.highlight-source-lua pre'), 'lua'
- return
diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss
index e049947a..75579c36 100644
--- a/assets/stylesheets/global/_icons.scss
+++ b/assets/stylesheets/global/_icons.scss
@@ -76,7 +76,8 @@
._icon-markdown:before { background-position: -1rem -5rem; @extend %darkIconFix !optional; }
._icon-django:before { background-position: -2rem -5rem; }
._icon-xpath:before { background-position: -3rem -5rem; }
-._icon-nginx:before { background-position: -4rem -5rem; }
+._icon-nginx:before,
+._icon-nginx_lua_module:before { background-position: -4rem -5rem; }
._icon-svg:before { background-position: -5rem -5rem; }
._icon-marionette:before { background-position: -6rem -5rem; }
._icon-mongoose:before { background-position: -7rem -5rem; }
diff --git a/assets/stylesheets/pages/_base.scss b/assets/stylesheets/pages/_base.scss
index ef7d422d..21c8fb71 100644
--- a/assets/stylesheets/pages/_base.scss
+++ b/assets/stylesheets/pages/_base.scss
@@ -17,6 +17,7 @@
}
._cordova,
+._github,
._grunt,
._less,
._lodash,
diff --git a/lib/docs/filters/github/clean_html.rb b/lib/docs/filters/github/clean_html.rb
new file mode 100644
index 00000000..c252101a
--- /dev/null
+++ b/lib/docs/filters/github/clean_html.rb
@@ -0,0 +1,20 @@
+module Docs
+ class Github
+ class CleanHtmlFilter < Filter
+ def call
+ css('.anchor').each do |node|
+ node.parent['id'] = node['href'].remove('#')
+ node.remove
+ end
+
+ css('.highlight > pre').each do |node|
+ node['class'] = node.parent['class']
+ node.content = node.content.strip_heredoc.gsub(' ', ' ')
+ node.parent.replace(node)
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/lua_nginx_module/clean_html.rb b/lib/docs/filters/lua_nginx_module/clean_html.rb
deleted file mode 100644
index 7f82c98f..00000000
--- a/lib/docs/filters/lua_nginx_module/clean_html.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-module Docs
- class LuaNginxModule
- class CleanHtmlFilter < Filter
- def call
- type = nil
- doc.children.each do |node|
- if node.name == 'h1'
- section = node.content.strip
- type = section.in?(['Directives', 'Nginx API for Lua']) ? section : nil
- end
-
- if type == nil || (node.name == 'ul' && node.previous_element.name == 'h1') || node.content.strip == 'Back to TOC'
- node.remove()
- elsif node.name == 'h2'
- node["id"] = /^user-content-(.+)/.match(node.css('a.anchor').first["id"])[1]
- end
- end
- doc
- end
- end
- end
-end
diff --git a/lib/docs/filters/lua_nginx_module/entries.rb b/lib/docs/filters/lua_nginx_module/entries.rb
deleted file mode 100644
index 24d9725b..00000000
--- a/lib/docs/filters/lua_nginx_module/entries.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module Docs
- class LuaNginxModule
- class EntriesFilter < Docs::EntriesFilter
- def additional_entries
- type = nil
-
- doc.children.each_with_object [] do |node, entries|
- if node.name == 'h1'
- type = node.content.strip
- elsif node.name == 'h2'
- entries << [ node.content, node["id"], type ]
- end
- end
- end
- end
- end
-end
diff --git a/lib/docs/filters/nginx_lua_module/clean_html.rb b/lib/docs/filters/nginx_lua_module/clean_html.rb
new file mode 100644
index 00000000..4acceeb9
--- /dev/null
+++ b/lib/docs/filters/nginx_lua_module/clean_html.rb
@@ -0,0 +1,15 @@
+module Docs
+ class NginxLuaModule
+ class CleanHtmlFilter < Filter
+ def call
+ css('a[href="#table-of-contents"]', 'a:contains("Back to TOC")').remove
+
+ css('h1, h2, h3').each do |node|
+ node.name = node.name.sub(/\d/) { |i| i.to_i + 1 }
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/nginx_lua_module/entries.rb b/lib/docs/filters/nginx_lua_module/entries.rb
new file mode 100644
index 00000000..e4b12856
--- /dev/null
+++ b/lib/docs/filters/nginx_lua_module/entries.rb
@@ -0,0 +1,20 @@
+module Docs
+ class NginxLuaModule
+ class EntriesFilter < Docs::EntriesFilter
+ def additional_entries
+ entries = []
+
+ css('#directives + ul > li > a').each do |node|
+ entries << [node.content, node['href'].remove('#'), 'Directives']
+ end
+
+ css('#nginx-api-for-lua + ul > li > a').each do |node|
+ next if node.content == 'Introduction'
+ entries << [node.content, node['href'].remove('#'), 'Nginx API for Lua']
+ end
+
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/github.rb b/lib/docs/scrapers/github.rb
new file mode 100644
index 00000000..f6014a0a
--- /dev/null
+++ b/lib/docs/scrapers/github.rb
@@ -0,0 +1,8 @@
+module Docs
+ class Github < UrlScraper
+ self.abstract = true
+ self.type = 'github'
+
+ html_filters.push 'github/clean_html'
+ end
+end
diff --git a/lib/docs/scrapers/lua_nginx_module.rb b/lib/docs/scrapers/lua_nginx_module.rb
deleted file mode 100644
index a1094d9e..00000000
--- a/lib/docs/scrapers/lua_nginx_module.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-module Docs
- class LuaNginxModule < UrlScraper
- self.type = 'LuaNginxModule'
- self.root_path = 'README.markdown'
-
- html_filters.push 'lua_nginx_module/clean_html', 'lua_nginx_module/entries'
-
- options[:container] = '#readme > article'
-
- options[:attribution] = <<-HTML
- Copyright (C) 2009-2015, by Xiaozhe Wang (chaoslawful) chaoslawful@gmail.com.
- Copyright (C) 2009-2015, by Yichun "agentzh" Zhang (章亦春) agentzh@gmail.com, CloudFlare Inc.
- Licensed under the BSD License.
- HTML
-
- self.release = '0.10.0'
- self.base_url = 'https://github.com/openresty/lua-nginx-module/tree/v0.10.0/'
- end
-end
diff --git a/lib/docs/scrapers/nginx_lua_module.rb b/lib/docs/scrapers/nginx_lua_module.rb
new file mode 100644
index 00000000..7ae2ac9d
--- /dev/null
+++ b/lib/docs/scrapers/nginx_lua_module.rb
@@ -0,0 +1,19 @@
+module Docs
+ class NginxLuaModule < Github
+ self.name = 'nginx / Lua Module'
+ self.slug = 'nginx_lua_module'
+ self.release = '0.10.0'
+ self.base_url = 'https://github.com/openresty/lua-nginx-module/tree/v0.10.0/'
+
+ html_filters.push 'nginx_lua_module/clean_html', 'nginx_lua_module/entries', 'title'
+
+ options[:root_title] = 'ngx_http_lua_module'
+ options[:container] = '#readme > article'
+
+ options[:attribution] = <<-HTML
+ © 2009–2016 Xiaozhe Wang (chaoslawful)
+ © 2009–2016 Yichun "agentzh" Zhang (章亦春), CloudFlare Inc.
+ Licensed under the BSD License.
+ HTML
+ end
+end