diff options
author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2023-03-04 14:09:16 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2023-03-04 14:09:16 +0900 |
commit | 320feb3eae1a5eb3beea38a381ff153c5e6eb190 (patch) | |
tree | 68fa69a1dea262efbf7e3673f945d67a93ac7f26 /xhtml.cr | |
parent | 2be9ea60d7f171ee3375258b774191f4cf911752 (diff) | |
download | hybring-320feb3eae1a5eb3beea38a381ff153c5e6eb190.tar.gz |
Add applicant table
Diffstat (limited to 'xhtml.cr')
-rw-r--r-- | xhtml.cr | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/xhtml.cr b/xhtml.cr deleted file mode 100644 index 4749af1..0000000 --- a/xhtml.cr +++ /dev/null @@ -1,185 +0,0 @@ -# XHTML generation -# Copyright (C) 2023 Nguyễn Gia Phong -# -# This file if part of hybring. -# -# Hybring is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Hybring is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with hybring. If not, see <https://www.gnu.org/licenses/>. - -require "uri" -require "xml" - -CSS = " - html { - margin: auto; - max-width: 72ch; - } - body { margin-bottom: 2rem } - h1, h2, h3, h4, h5, h6 { margin: 1ex 0 } - form { - display: grid; - grid-template-columns: max-content 1fr 0; - } - form label { margin-right: 1ch } - form input { margin-bottom: 1ex } - .error { color: red } - " - -class Page - def initialize(static_dir : String, static_url : String, api_url : String) - Dir.mkdir_p static_dir - @static_file = Path[static_dir] / "index.xhtml" - @static_url = static_url - @static_host = URI.parse(static_url).host - @api_url = api_url - end - - def criteria(xml) - xml.element "h2" do xml.text "criteria" end - xml.element "p" do - xml.text "We accept pretty much any site" - xml.text " served under an OpenNIC domain" - xml.text " meeting the following requirements." - end - xml.element "ul" do - xml.element "li" do xml.text "Family-friendly content" end - xml.element "li" do xml.text "No violence incitation or doxing" end - xml.element "li" do xml.text "No user tracking" end - xml.element "li" do - xml.text "ICANN counterpart accessible via HTTPS" - end - xml.element "li" do - xml.text "Both linking to neighboring members" - end - end - xml.element "p" do - xml.text "Note that the two sites needn't be the same, as long as" - xml.text " they represent the same entity, e.g. person or organization." - xml.text " The clear net site is for serving visitors" - xml.text " without OpenNIC access or preferring secure connections." - end - end - - def input(xml, name, label, hint, error, value) - if error - xml.element "span" - xml.element "span", class: "error" do xml.text error end - end - xml.element "label", for: name do xml.text label end - xml.element "input", name: name, placeholder: hint, value: value, - required: "required" - xml.element "br" - end - - def form(xml, errors = {} of String => String, - params = {} of String => String) - xml.element "p" do xml.text "Then, please fill out the form below." end - xml.element "form", action: @api_url, method: "POST" do - input xml, "nick", "Nickname", "digits and lowercase letters", - errors.fetch("nick", nil), params.fetch("nick", nil) - input xml, "opennic", "OpenNIC URL", "e.g. http://example.null", - errors.fetch("opennic", nil), params.fetch("opennic", nil) - input xml, "icann", "ICANN URL", "e.g. https://example.net", - errors.fetch("icann", nil), params.fetch("icann", nil) - xml.element "span" do - xml.element "input", type: "hidden", name: "host", value: @static_host - end - xml.element "input", type: "submit", value: "Let me in!" - xml.element "br" - end - end - - def member(xml, nick, opennic, icann, feed? = false) - xml.element "p" do - xml.text "The following membership is pending for approval." - xml.text " Please subscribe to this " - xml.element "a", href: "#{@static_url}/#{nick}.atom" do - xml.text "web feed" - end - xml.text " for further instructions." - end if feed? - xml.element "h3" do xml.text nick end - xml.text "OpenNIC: " - xml.element "a", href: opennic do xml.text opennic end - xml.element "br" - xml.text "ICANN: " - xml.element "a", href: icann do xml.text icann end - xml.element "br" - end - - def build(members, errors = {} of String => String, - params = {} of String => String) : String - XML.build encoding: "UTF-8", indent: " " do |xml| - xml.element "html", xmlns: "http://www.w3.org/1999/xhtml", lang: "en" do - xml.element "head" do - xml.element "meta", name: "viewport", - content: "width=device-width,initial-scale=1.0" - xml.element "link", rel: "icon", href: "data:," - xml.element "style" do xml.text CSS end - xml.element "title" do xml.text "le cercle libre" end - end - xml.element "body" do - xml.element "h1" do xml.text "le cercle libre" end - xml.element "p" do - xml.text "The Free Circle is a web ring for sites" - xml.text " with an OpenNIC domain." - end - criteria xml - - xml.element "h2" do xml.text "joining" end - xml.element "p" do - xml.text "First, add " - xml.element "a", - href: "https://html.spec.whatwg.org/#the-a-element" do - xml.text "anchors" - end - xml.text " refering to the following neighbors to your sites" - xml.text " on both OpenNIC and ICANN domains." - xml.text " Your neighbors will change as people come and go," - xml.text " so you will be given an Atom feed with instructions" - xml.text " to keep the hyperlinks up to date." - end - xml.element "ul" do - xml.element "li" do - xml.text "Left: " - _, left, _ = members[-1] - xml.element "a", href: left do xml.text left end - end - xml.element "li" do - xml.text "Right: " - _, right, _ = members[0] - xml.element "a", href: right do xml.text right end - end - end - - if params.empty? # static page - form xml - elsif errors.empty? - member xml, params["nick"], params["opennic"], params["icann"], true - else - form xml, errors, params - end - - xml.element "h2" do xml.text "members" end - members.each do |nick, opennic, icann| - member xml, nick, opennic, icann - end - end - end - end - end - - def write(members) - File.write @static_file, self.build members - end -end |