From 026674bc2c4eb5f53bcb38e7efce2fe2dfebe974 Mon Sep 17 00:00:00 2001 From: f0x52 Date: Mon, 13 Sep 2021 14:45:33 +0200 Subject: [PATCH] Thread views on the web (#207) * Webviews for status threads * fix up templates * add ForkAwesome and gotosocial-styling into repo * clean up gotosocial-styling, old styling * update CONTRIBUTING with new css building, and nodemon recommendation * update Dockerfile with new css bundling * those weren't supposed to make it in * upgrade gotosocial-styling deps * update authorize template with main wrapper * update css pipeline * abstract status from thread to avoid copy-pasting * basic CW implementation * fix PR review suggestions * fix no-image-desc icon alignment * remove template loading println * remove println * remove changes to testmodels * reset changes to testmodels --- CONTRIBUTING.md | 4 +- Dockerfile | 4 +- internal/router/template.go | 43 +- internal/web/base.go | 10 +- internal/web/thread.go | 83 +++ web/assets/Fork-Awesome | 1 + web/assets/{bundle.css => base.css} | 78 ++- web/assets/colors.css | 1 + web/assets/logo.png | Bin 0 -> 144838 bytes web/assets/status.css | 230 ++++++ web/gotosocial-styling/.eslintrc.js | 5 + web/gotosocial-styling/.gitignore | 3 + web/gotosocial-styling/LICENSE | 661 ++++++++++++++++++ web/gotosocial-styling/README.md | 18 + web/gotosocial-styling/colors.css | 9 + web/gotosocial-styling/index.js | 71 ++ web/gotosocial-styling/package.json | 20 + .../templates/base.css} | 76 +- web/gotosocial-styling/templates/status.css | 227 ++++++ web/{source => gotosocial-styling}/yarn.lock | 125 +++- web/source/build.js | 23 - web/source/package.json | 11 - web/template/404.tmpl | 14 +- web/template/authorize.tmpl | 28 +- web/template/header.tmpl | 23 +- web/template/index.tmpl | 70 +- web/template/sign-in.tmpl | 24 +- web/template/status.tmpl | 36 + web/template/thread.tmpl | 34 + 29 files changed, 1742 insertions(+), 190 deletions(-) create mode 100644 internal/web/thread.go create mode 160000 web/assets/Fork-Awesome rename web/assets/{bundle.css => base.css} (79%) create mode 100644 web/assets/colors.css create mode 100644 web/assets/logo.png create mode 100644 web/assets/status.css create mode 100644 web/gotosocial-styling/.eslintrc.js create mode 100644 web/gotosocial-styling/.gitignore create mode 100644 web/gotosocial-styling/LICENSE create mode 100644 web/gotosocial-styling/README.md create mode 100644 web/gotosocial-styling/colors.css create mode 100644 web/gotosocial-styling/index.js create mode 100644 web/gotosocial-styling/package.json rename web/{source/style.css => gotosocial-styling/templates/base.css} (80%) create mode 100644 web/gotosocial-styling/templates/status.css rename web/{source => gotosocial-styling}/yarn.lock (68%) delete mode 100644 web/source/build.js delete mode 100644 web/source/package.json create mode 100644 web/template/status.tmpl create mode 100644 web/template/thread.tmpl diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f6c2fcf4f..253a40310 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,11 +46,11 @@ To get started, you first need to have Go installed. GtS is currently using Go 1 Once you've got go installed, clone this repository into your Go path. Normally, this should be `~/go/src/github.com/superseriousbusiness/gotosocial`. -Once that's done, you can try building the project: `./scripts/build.sh`. This will build the `gotosocial` binary. +Once that's done, you can try building the project: `./scripts/build.sh`. This will build the `gotosocial` binary. For automatic re-compiling during development, you can use [nodemon](https://www.npmjs.com/package/nodemon): `nodemon -e go --signal SIGTERM --exec "go run ./cmd/gotosocial --host localhost testrig start || exit 1"` If there are no errors, great, you're good to go! -To work with the stylesheet for templates, you need [Node.js](https://nodejs.org/en/download/), then run `yarn install` in `web/source/`. Recompiling the bundle.css is `node build.js` but can be automated with [nodemon](https://www.npmjs.com/package/nodemon) on file change: `nodemon -w style.css build.js`. +To work with the stylesheet for templates, you need [Node.js](https://nodejs.org/en/download/), then run `yarn install` in `web/gotosocial-styling/`. Recompiling the bundles is done with `BUILD_DIR=../assets node index.js` but can be automatically live-reloaded with `BUILD_DIR=../assets NODE_ENV=development node index.js`. ### Golang forking quirks diff --git a/Dockerfile b/Dockerfile index c38f2a610..df2988368 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,10 +33,10 @@ FROM node:16.9.0-alpine3.14 AS web_builder RUN apk update && apk upgrade --no-cache COPY web /web -WORKDIR /web/source +WORKDIR /web/gotosocial-styling RUN yarn install -RUN node build.js +RUN BUILD_DIR=../assets node index.js # STEP THREE: bundle the admin webapp FROM node:16.9.0-alpine3.14 AS admin_builder diff --git a/internal/router/template.go b/internal/router/template.go index e7bdc3edf..2beee63c0 100644 --- a/internal/router/template.go +++ b/internal/router/template.go @@ -23,8 +23,10 @@ "html/template" "os" "path/filepath" + "time" "github.com/gin-gonic/gin" + "github.com/superseriousbusiness/gotosocial/internal/api/model" "github.com/superseriousbusiness/gotosocial/internal/config" ) @@ -41,12 +43,51 @@ func loadTemplates(cfg *config.Config, engine *gin.Engine) error { return nil } +func oddOrEven(n int) string { + if n%2 == 0 { + return "even" + } else { + return "odd" + } +} + func noescape(str string) template.HTML { return template.HTML(str) } +func timestamp(stamp string) string { + t, _ := time.Parse(time.RFC3339, stamp) + return t.Format("January 2, 2006, 15:04:05") +} + +type IconWithLabel struct { + faIcon string + label string +} + +func visibilityIcon(visibility model.Visibility) template.HTML { + var icon IconWithLabel + + if visibility == model.VisibilityPublic { + icon = IconWithLabel{"globe", "public"} + } else if visibility == model.VisibilityUnlisted { + icon = IconWithLabel{"unlock", "unlisted"} + } else if visibility == model.VisibilityPrivate { + icon = IconWithLabel{"lock", "private"} + } else if visibility == model.VisibilityMutualsOnly { + icon = IconWithLabel{"handshake-o", "mutuals only"} + } else if visibility == model.VisibilityDirect { + icon = IconWithLabel{"envelope", "direct"} + } + + return template.HTML(fmt.Sprintf(``, icon.label, icon.faIcon)) +} + func loadTemplateFunctions(engine *gin.Engine) { engine.SetFuncMap(template.FuncMap{ - "noescape": noescape, + "noescape": noescape, + "oddOrEven": oddOrEven, + "visibilityIcon": visibilityIcon, + "timestamp": timestamp, }) } diff --git a/internal/web/base.go b/internal/web/base.go index eabde676c..2759c3f9e 100644 --- a/internal/web/base.go +++ b/internal/web/base.go @@ -57,13 +57,8 @@ func (m *Module) baseHandler(c *gin.Context) { return } - // FIXME: fill in more variables? c.HTML(http.StatusOK, "index.tmpl", gin.H{ - "instance": instance, - "countUsers": 3, - "countStatuses": 42069, - "version": "1.0.0", - "adminUsername": "@admin", + "instance": instance, }) } @@ -101,6 +96,9 @@ func (m *Module) Route(s router.Router) error { // serve front-page s.AttachHandler(http.MethodGet, "/", m.baseHandler) + // serve statuses + s.AttachHandler(http.MethodGet, "/:user/statuses/:id", m.threadTemplateHandler) + // 404 handler s.AttachNoRouteHandler(m.NotFoundHandler) diff --git a/internal/web/thread.go b/internal/web/thread.go new file mode 100644 index 000000000..69c9674ff --- /dev/null +++ b/internal/web/thread.go @@ -0,0 +1,83 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program 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. + + This program 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 this program. If not, see . +*/ + +package web + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/superseriousbusiness/gotosocial/internal/oauth" +) + +type statusLink struct { + User string `uri:"user" binding:"required"` + ID string `uri:"id" binding:"required"` +} + +func (m *Module) threadTemplateHandler(c *gin.Context) { + l := m.log.WithField("func", "threadTemplateGET") + l.Trace("rendering thread template") + + ctx := c.Request.Context() + + var uriParts statusLink + + if err := c.ShouldBindUri(&uriParts); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + authed, err := oauth.Authed(c, false, false, false, false) + if err != nil { + l.Errorf("error authing status GET request: %s", err) + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + instance, err := m.processor.InstanceGet(ctx, m.config.Host) + if err != nil { + l.Debugf("error getting instance from processor: %s", err) + c.JSON(http.StatusInternalServerError, gin.H{"error": "internal server error"}) + return + } + + status, err := m.processor.StatusGet(ctx, authed, uriParts.ID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + if uriParts.User[:1] != "@" || uriParts.User[1:] != status.Account.Username { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + context, err := m.processor.StatusGetContext(ctx, authed, uriParts.ID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + c.HTML(http.StatusOK, "thread.tmpl", gin.H{ + "instance": instance, + "status": status, + "context": context, + "stylesheets": []string{"/assets/Fork-Awesome/css/fork-awesome.min.css", "/assets/status.css"}, + }) +} diff --git a/web/assets/Fork-Awesome b/web/assets/Fork-Awesome new file mode 160000 index 000000000..5c126c4fb --- /dev/null +++ b/web/assets/Fork-Awesome @@ -0,0 +1 @@ +Subproject commit 5c126c4fb5ce9c78d24148afc514f9c4ccbe4051 diff --git a/web/assets/bundle.css b/web/assets/base.css similarity index 79% rename from web/assets/bundle.css rename to web/assets/base.css index 7d4eae172..b28cf2533 100644 --- a/web/assets/bundle.css +++ b/web/assets/base.css @@ -1,46 +1,71 @@ html, body { padding: 0; margin: 0; - background: #525c66; + background: rgb(70, 79, 88); color: #fafaff; font-family: sans-serif; } body { display: grid; - grid-template-columns: 1fr 50% 1fr; - grid-template-columns: 1fr 90ch 1fr; - line-height: 1.5em; + grid-template-rows: auto 1fr auto; min-height: 100vh; - grid-auto-rows: auto; - grid-auto-flow: dense; + line-height: 1.5em; } -body > * { +main { + background: #525c66; + display: grid; + padding-top: 2rem; + grid-template-columns: 1fr 50% 1fr; + grid-template-columns: auto min(92%, 90ch) auto; +} + +main .left { + grid-column: 1; + } + +main .right { + grid-column: 3; + } + +main.lightgray { + background: #525c66; + } + +main > * { align-self: start; grid-column: 2; } -body header, body footer, body .fullWidth { - grid-column: 1/4; - grid-column: 1/-1; - } - -body .left { - grid-column: 1; - } - -body .right { - grid-column: 3; - } - header { background: rgb(70, 79, 88); - padding: 2rem; - margin-bottom: 4rem; + padding: 2rem 0; + padding-bottom: 0; + display: flex; + flex-wrap: wrap; } +header img { + height: 4rem; + padding-left: 2rem; + padding-bottom: 2rem; + } + +header div { + height: 100%; + margin: 0 2rem; + margin-top: -2rem; + flex-grow: 1; + align-self: center; + display: flex; + } + +header div h1 { + align-self: center; + } + h1 { /* color: $acc1; */ margin: 0; @@ -160,26 +185,21 @@ footer a { } @media screen and (orientation: portrait) { - body { + main { grid-template-columns: 1fr 92% 1fr; } - body footer, body .left, body .right { - grid-column: 2; - } - header { text-align: center; } footer { - padding: 0; margin-top: 2rem; grid-template-columns: 1fr; } footer div { - margin: 1rem 0; + margin: 0.3rem 0; } section.apps .applist { diff --git a/web/assets/colors.css b/web/assets/colors.css new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/web/assets/colors.css @@ -0,0 +1 @@ + diff --git a/web/assets/logo.png b/web/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d485df190a11dc977a12fa663a42c7cde9e54d GIT binary patch literal 144838 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 i`y`I^lLDWeGO(bt}s!y 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

q0~mYHop1#H>6 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 literal 0 HcmV?d00001 diff --git a/web/assets/status.css b/web/assets/status.css new file mode 100644 index 000000000..9dd788a9e --- /dev/null +++ b/web/assets/status.css @@ -0,0 +1,230 @@ +main { + background: transparent; + grid-auto-rows: auto; +} + +.thread { + display: flex; + flex-direction: column; +} + +.toot { + position: relative; + background: rgb(75, 84, 93); + padding: 2rem; + /* padding-bottom: 0; */ + display: grid; + grid-template-columns: 3.2rem auto 1fr; + column-gap: 0.5rem; + margin-bottom: 0.2rem; +} + +.toot a { + position: relative; + z-index: 1; + color: inherit; + text-decoration: none; + } + +.toot .avatar { + grid-row: span 2; + } + +.toot .avatar img { + height: 3.2rem; + width: 3.2rem; + object-fit: cover; + } + +.toot .displayname { + font-weight: bold; + font-size: 1.2rem; + align-self: start; + } + +.toot .username { + color: #b0b0b5; + justify-self: start; + } + +.toot input.spoiler:checked ~ .content { + display: none; + } + +.toot .spoiler label { + background: #de8957; + border-radius: 0.3rem; + padding: 0.3rem; + margin-left: 0.4rem; + position: relative; + z-index: 2; + cursor: pointer; + } + +.toot .text { + margin: 0; + grid-column: span 2; + } + +.toot .text a { + color: #de8957; + text-decoration: underline; + } + +.toot .media { + margin-top: 0.6rem; + border-radius: 0.2rem; + grid-column: span 3; + display: grid; + grid-template-columns: 50% 50%; + grid-auto-rows: 10rem; + overflow: hidden; + gap: 0.3rem; + } + +.toot .media a { + position: relative; + } + +.toot .media .no-image-desc { + display: flex; + position: absolute; + bottom: 0.1rem; + right: 0.4rem; + color: white; + background: #5897df; + padding: 0.2rem 0.4rem; + border-radius: 100%; + z-index: 3; + } + +.toot .media .no-image-desc i.fa { + display: block; + line-height: 1.3rem; + } + +.toot .media .no-image-desc span { + margin-left: 0.3rem; + display: none; + } + +.toot .media .no-image-desc:hover span { + display: block; + } + +.toot .media .no-image-desc:hover { + border-radius: 0.2rem; +} + +.toot .media img { + width: 100%; + height: 100%; + object-fit: cover; + } + +.toot .media.single a { + grid-column: span 2; + } + +.toot .media.odd a:first-child, .toot .media.double a { + grid-row: span 2; + } + +.toot .info { + display: none; + } + +.toot .info div { + position: relative; + padding-right: 1.3rem; + } + +.toot .info .stats { + display: flex; + } + +.toot .info { + + color: #b0b0b5; + grid-column: span 3; + margin-top: 0.5rem; + flex-wrap: wrap; +} + +.toot .info div.stats::after { + display: none; + } + +.toot .info div::after { + display: block; + background: #b0b0b5; + height: 0.25rem; + width: 0.25rem; + content: ""; + position: absolute; + top: calc((1.5rem - 0.25rem) / 2); + right: 0.55rem; + border-radius: 1rem; + } + +.toot .info div:last-child::after { + display: none; + } + +.toot .info div:last-child { + margin-right: 0; +} + +.toot .toot-link { + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + + position: absolute; + z-index: 0; + } + +.toot {} + +.toot:first-child { + /* top left, top right */ + border-radius: 0.3rem 0.3rem 0 0; + } + +.toot:last-child { + /* bottom left, bottom right */ + border-radius: 0 0 0.3rem 0.3rem; + padding-bottom: 1.5rem; + } + +.toot.expanded { + background: #525c66; + padding-bottom: 1.5rem; + } + +.toot.expanded .displayname { + grid-column: span 2; + } + +.toot.expanded .text { + grid-column: span 3; + grid-row: span 1; + margin-top: 0.3rem; + } + +.toot.expanded .info { + display: flex; + } + +.toot.expanded .media { + grid-auto-rows: 1fr; + max-height: 120rem; + } + +footer + div { /* something weird from the devstack.. */ + display: none; +} \ No newline at end of file diff --git a/web/gotosocial-styling/.eslintrc.js b/web/gotosocial-styling/.eslintrc.js new file mode 100644 index 000000000..376c92936 --- /dev/null +++ b/web/gotosocial-styling/.eslintrc.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + "extends": "@f0x52/eslint-config" +}; diff --git a/web/gotosocial-styling/.gitignore b/web/gotosocial-styling/.gitignore new file mode 100644 index 000000000..ee48c081f --- /dev/null +++ b/web/gotosocial-styling/.gitignore @@ -0,0 +1,3 @@ +node_modules +yarn-error.log +build/* diff --git a/web/gotosocial-styling/LICENSE b/web/gotosocial-styling/LICENSE new file mode 100644 index 000000000..be3f7b28e --- /dev/null +++ b/web/gotosocial-styling/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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. + + This program 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 this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/web/gotosocial-styling/README.md b/web/gotosocial-styling/README.md new file mode 100644 index 000000000..71314e838 --- /dev/null +++ b/web/gotosocial-styling/README.md @@ -0,0 +1,18 @@ +# GoToSocial Styling + +Common package for the PostCSS styling of GoToSocial (related) pages. + +## Bundle +Source in `src/style.css` is bundled by running `node index.js`. Output appears in `build/bundle.css`, and can be required from other packages with `require("gotosocial-styling/build/bundle.css")`. + +## Development +You can run `NODE_ENV=development node index.js` to start a livereloading setup that automatically re-bundles on file changes in `src/`. + +## License, donations +[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html). If you want to support my work, you can: +Donate using Liberapay + + +## Changelog +### v0.0.1 (August 29th, 2021) +initial release diff --git a/web/gotosocial-styling/colors.css b/web/gotosocial-styling/colors.css new file mode 100644 index 000000000..8dfcd4a09 --- /dev/null +++ b/web/gotosocial-styling/colors.css @@ -0,0 +1,9 @@ +$bg: #525c66; +$fg: #fafaff; +$fg_dark: #b0b0b5; + +$bg_accent: color($bg lightness(-5%)); + +$acc1: #de8957; // sloth light orange +$acc2: #c76d33; // sloth dark orange +$blue: #5897df; diff --git a/web/gotosocial-styling/index.js b/web/gotosocial-styling/index.js new file mode 100644 index 000000000..88d9398b2 --- /dev/null +++ b/web/gotosocial-styling/index.js @@ -0,0 +1,71 @@ +"use strict"; + +const Promise = require("bluebird"); +const fs = require("fs").promises; +const postcss = require('postcss'); +const {parse} = require("postcss-scss"); + +/* + Bundle all postCSS files under the `templates/` directory separately, each prepended with the (variable) contents of ./colors.css + Outputs in plain CSS are in `build/`, split by template +*/ + +const postcssPlugins = ["postcss-strip-inline-comments", "postcss-nested", "postcss-simple-vars", "postcss-color-function"].map((plugin) => require(plugin)()); + +function getTemplates() { + return fs.readdir(`${__dirname}/templates`).then((templates) => { + return templates.map((a) => { + return [a, `${__dirname}/templates/${a}`]; + }); + }); +} + +getTemplates(); + +function bundle([template, path]) { + return Promise.try(() => { + return Promise.all([ + fs.readFile(`${__dirname}/colors.css`, "utf-8"), + fs.readFile(path, "utf-8") + ]); + }).then(([colors, style]) => { + return parse(colors + "\n" + style); + }).then((ast) => { + return postcss(postcssPlugins).process(ast, { + from: template, + to: template + }); + }).then((bundle) => { + return fs.writeFile(`${buildDir}/${template}`, bundle.css); + }).then(() => { + console.log(`Finished writing CSS to ${buildDir}/${template}`); + }); +} + +let buildDir = process.env.BUILD_DIR; +if (buildDir == undefined) { + buildDir = `${__dirname}/build`; +} +console.log("bundling to", buildDir); + +function bundleAll() { + return getTemplates().then((templates) => { + return Promise.map(templates, bundle); + }); +} + +if (process.env.NODE_ENV != "development") { + bundleAll(); +} else { + const chokidar = require("chokidar"); + console.log("Watching for changes"); + chokidar.watch(`${__dirname}/templates`).on("all", (_, path) => { + if (path.endsWith(".css")) { + bundle([path.split("/").slice(-1)[0], path]); + } + }); + chokidar.watch(`${__dirname}/colors.css`).on("all", () => { + console.log("colors.css updated, rebuilding all templates"); + bundleAll(); + }); +} \ No newline at end of file diff --git a/web/gotosocial-styling/package.json b/web/gotosocial-styling/package.json new file mode 100644 index 000000000..ae3d73e93 --- /dev/null +++ b/web/gotosocial-styling/package.json @@ -0,0 +1,20 @@ +{ + "name": "gotosocial-styling", + "version": "0.0.1", + "description": "PostCSS source for the https://github.com/superseriousbusiness/gotosocial common styling", + "repository": "https://github.com/superseriousbusiness/gotosocial-styling", + "author": "f0x", + "license": "AGPL-3.0", + "dependencies": { + "bluebird": "^3.7.2", + "postcss": "^8.3.5", + "postcss-color-function": "^4.1.0", + "postcss-nested": "^4.2.1", + "postcss-scss": "^4.0.0", + "postcss-simple-vars": "^5.0.2", + "postcss-strip-inline-comments": "^0.1.5" + }, + "devDependencies": { + "chokidar": "^3.5.2" + } +} diff --git a/web/source/style.css b/web/gotosocial-styling/templates/base.css similarity index 80% rename from web/source/style.css rename to web/gotosocial-styling/templates/base.css index 992e538b0..8b2f14fbe 100644 --- a/web/source/style.css +++ b/web/gotosocial-styling/templates/base.css @@ -1,38 +1,25 @@ -$bg: #525c66; -$fg: #fafaff; - -$bg_accent: color($bg lightness(-5%)); - -$acc1: #de8957; // sloth light orange -$acc2: #c76d33; // sloth dark orange - html, body { padding: 0; margin: 0; - background: $bg; + background: $bg_accent; color: $fg; font-family: sans-serif; } body { display: grid; - grid-template-columns: 1fr 50% 1fr; - grid-template-columns: 1fr 90ch 1fr; - line-height: 1.5em; + grid-template-rows: auto 1fr auto; min-height: 100vh; - grid-auto-rows: auto; - grid-auto-flow: dense; + line-height: 1.5em; +} - & > * { - align-self: start; - grid-column: 2; - } - - header, footer, .fullWidth { - grid-column: 1/4; - grid-column: 1/-1; - } +main { + background: $bg; + display: grid; + padding-top: 2rem; + grid-template-columns: 1fr 50% 1fr; + grid-template-columns: auto min(92%, 90ch) auto; .left { grid-column: 1; @@ -41,12 +28,42 @@ body { .right { grid-column: 3; } + + &.lightgray { + background: $bg; + } + + & > * { + align-self: start; + grid-column: 2; + } } header { background: $bg_accent; - padding: 2rem; - margin-bottom: 4rem; + padding: 2rem 0; + padding-bottom: 0; + display: flex; + flex-wrap: wrap; + + img { + height: 4rem; + padding-left: 2rem; + padding-bottom: 2rem; + } + + div { + height: 100%; + margin: 0 2rem; + margin-top: -2rem; + flex-grow: 1; + align-self: center; + display: flex; + + h1 { + align-self: center; + } + } } h1 { @@ -168,12 +185,8 @@ footer { } @media screen and (orientation: portrait) { - body { + main { grid-template-columns: 1fr 92% 1fr; - - footer, .left, .right { - grid-column: 2; - } } header { @@ -181,12 +194,11 @@ footer { } footer { - padding: 0; margin-top: 2rem; grid-template-columns: 1fr; div { - margin: 1rem 0; + margin: 0.3rem 0; } } diff --git a/web/gotosocial-styling/templates/status.css b/web/gotosocial-styling/templates/status.css new file mode 100644 index 000000000..b71a7c9f7 --- /dev/null +++ b/web/gotosocial-styling/templates/status.css @@ -0,0 +1,227 @@ +main { + background: transparent; + grid-auto-rows: auto; +} + +.thread { + display: flex; + flex-direction: column; +} + +.toot { + position: relative; + background: color($bg lightness(-3%)); + padding: 2rem; + /* padding-bottom: 0; */ + display: grid; + grid-template-columns: 3.2rem auto 1fr; + column-gap: 0.5rem; + margin-bottom: 0.2rem; + + a { + position: relative; + z-index: 1; + color: inherit; + text-decoration: none; + } + + .avatar { + grid-row: span 2; + + img { + height: 3.2rem; + width: 3.2rem; + object-fit: cover; + } + } + + .displayname { + font-weight: bold; + font-size: 1.2rem; + align-self: start; + } + + .username { + color: $fg_dark; + justify-self: start; + } + + input.spoiler:checked ~ .content { + display: none; + } + + .spoiler { + label { + background: $acc1; + border-radius: 0.3rem; + padding: 0.3rem; + margin-left: 0.4rem; + position: relative; + z-index: 2; + cursor: pointer; + } + } + + .text { + margin: 0; + grid-column: span 2; + + a { + color: $acc1; + text-decoration: underline; + } + } + + .media { + margin-top: 0.6rem; + border-radius: 0.2rem; + grid-column: span 3; + display: grid; + grid-template-columns: 50% 50%; + grid-auto-rows: 10rem; + overflow: hidden; + gap: 0.3rem; + + a { + position: relative; + } + + .no-image-desc { + display: flex; + position: absolute; + bottom: 0.1rem; + right: 0.4rem; + color: white; + background: $blue; + padding: 0.2rem 0.4rem; + border-radius: 100%; + z-index: 3; + + i.fa { + display: block; + line-height: 1.3rem; + } + + span { + margin-left: 0.3rem; + display: none; + } + + &:hover { + span { + display: block; + } + border-radius: 0.2rem; + } + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + + &.single a { + grid-column: span 2; + } + + &.odd a:first-child, &.double a { + grid-row: span 2; + } + } + + .info { + display: none; + + div { + position: relative; + padding-right: 1.3rem; + } + + .stats { + display: flex; + } + + color: #b0b0b5; + grid-column: span 3; + margin-top: 0.5rem; + flex-wrap: wrap; + + div.stats::after { + display: none; + } + + div::after { + $size: 0.25rem; + display: block; + background: $fg_dark; + height: $size; + width: $size; + content: ""; + position: absolute; + top: calc((1.5rem - $size) / 2); + right: 0.55rem; + border-radius: 1rem; + } + + div:last-child { + &::after { + display: none; + } + margin-right: 0; + } + } + + .toot-link { + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + + position: absolute; + z-index: 0; + } + + $border-radius: 0.3rem; + &:first-child { + /* top left, top right */ + border-radius: $border-radius $border-radius 0 0; + } + + &:last-child { + /* bottom left, bottom right */ + border-radius: 0 0 $border-radius $border-radius; + padding-bottom: 1.5rem; + } + + &.expanded { + background: $bg; + padding-bottom: 1.5rem; + + .displayname { + grid-column: span 2; + } + + .text { + grid-column: span 3; + grid-row: span 1; + margin-top: 0.3rem; + } + + .info { + display: flex; + } + + .media { + grid-auto-rows: 1fr; + max-height: 120rem; + } + } +} + +footer + div { /* something weird from the devstack.. */ + display: none; +} \ No newline at end of file diff --git a/web/source/yarn.lock b/web/gotosocial-styling/yarn.lock similarity index 68% rename from web/source/yarn.lock rename to web/gotosocial-styling/yarn.lock index 0ae871aa9..f61a02a53 100644 --- a/web/source/yarn.lock +++ b/web/gotosocial-styling/yarn.lock @@ -19,11 +19,36 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + balanced-match@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" integrity sha1-tQS9BYabOSWd0MXvw12EMXbczEo= +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -44,6 +69,21 @@ chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chokidar@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -83,9 +123,9 @@ color@^0.11.0: color-string "^0.3.0" colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== css-color-function@~1.3.3: version "1.3.3" @@ -114,6 +154,25 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -131,6 +190,30 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + js-base64@^2.1.9: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" @@ -142,9 +225,19 @@ ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + version "3.1.25" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== postcss-color-function@^4.1.0: version "4.1.0" @@ -230,14 +323,21 @@ postcss@^7.0.14, postcss@^7.0.32: supports-color "^6.1.0" postcss@^8.3.5: - version "8.3.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" - integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== + version "8.3.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" + integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== dependencies: colorette "^1.2.2" nanoid "^3.1.23" source-map-js "^0.6.2" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rgb@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" @@ -291,6 +391,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" diff --git a/web/source/build.js b/web/source/build.js deleted file mode 100644 index e32fa6da5..000000000 --- a/web/source/build.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -const fs = require("fs").promises; -const postcss = require('postcss'); -const {parse} = require("postcss-scss"); - -const postcssPlugins = ["postcss-strip-inline-comments", "postcss-nested", "postcss-simple-vars", "postcss-color-function"].map((plugin) => require(plugin)()); - -let inputFile = `${__dirname}/style.css`; -let outputFile = `${__dirname}/../assets/bundle.css`; - -fs.readFile(inputFile, "utf-8").then((input) => { - return parse(input); -}).then((ast) => { - return postcss(postcssPlugins).process(ast, { - from: "style.css", - to: "bundle.css" - }); -}).then((bundle) => { - return fs.writeFile(outputFile, bundle.css); -}).then(() => { - console.log("Finished writing CSS bundle"); -}); diff --git a/web/source/package.json b/web/source/package.json deleted file mode 100644 index d58091118..000000000 --- a/web/source/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "license": "AGPL-3.0", - "dependencies": { - "postcss": "^8.3.5", - "postcss-color-function": "^4.1.0", - "postcss-scss": "^4.0.0", - "postcss-nested": "^4.2.1", - "postcss-simple-vars": "^5.0.2", - "postcss-strip-inline-comments": "^0.1.5" - } -} diff --git a/web/template/404.tmpl b/web/template/404.tmpl index 633ed65cf..096f7f364 100644 --- a/web/template/404.tmpl +++ b/web/template/404.tmpl @@ -1,11 +1,9 @@ {{ template "header.tmpl" .}} - -

-
-

404: Page Not Found

- If you believe this was an error, you can contact an admin -
+
+
+

404: Page Not Found

+ If you believe this was an error, you can contact an admin +
+
{{ template "footer.tmpl" .}} \ No newline at end of file diff --git a/web/template/authorize.tmpl b/web/template/authorize.tmpl index bc609ed66..b6eef9561 100644 --- a/web/template/authorize.tmpl +++ b/web/template/authorize.tmpl @@ -1,15 +1,17 @@ {{ template "header.tmpl" .}} -
-

Hi {{.user}}!

-

Application {{.appname}} {{if len .appwebsite | eq 0 | not}}({{.appwebsite}}) {{end}}would like to perform actions on your behalf, with scope {{.scope}}.

-

The application will redirect to {{.redirect}} to continue.

-

- -

-
+
+
+

Hi {{.user}}!

+

Application {{.appname}} {{if len .appwebsite | eq 0 | not}}({{.appwebsite}}) {{end}}would like to perform actions on your behalf, with scope {{.scope}}.

+

The application will redirect to {{.redirect}} to continue.

+

+ +

+
+
{{ template "footer.tmpl" .}} \ No newline at end of file diff --git a/web/template/header.tmpl b/web/template/header.tmpl index 45d375ab8..0f224cf95 100644 --- a/web/template/header.tmpl +++ b/web/template/header.tmpl @@ -1,19 +1,26 @@ - + + - - - - + + + + {{range .stylesheets}} + {{end}} + {{.instance.Title}} - GoToSocial
-

- {{.instance.Title}} -

+ Instance Logo +
+

+ {{.instance.Title}} +

+
+
\ No newline at end of file diff --git a/web/template/index.tmpl b/web/template/index.tmpl index 6751c9bd2..52581d3aa 100644 --- a/web/template/index.tmpl +++ b/web/template/index.tmpl @@ -1,40 +1,40 @@ {{ template "header.tmpl" .}} - -
-

Home to {{.instance.Stats.user_count}} users - who posted {{.instance.Stats.status_count}} statuses, - federating with {{.instance.Stats.domain_count}} other instances.

-
- {{.instance.ShortDescription |noescape}} -
-
+
-
-

- GoToSocial does not provide its own frontend, but implements the Mastodon client API. - You can use this server through a variety of clients: -

-
-
- -
-

Pinafore

-

Pinafore is a web client designed for speed and simplicity.

- Use Pinafore +
+

Home to {{.instance.Stats.user_count}} users + who posted {{.instance.Stats.status_count}} statuses, + federating with {{.instance.Stats.domain_count}} other instances.

+
+ {{.instance.ShortDescription |noescape}} +
+
+ +
+

+ GoToSocial does not provide its own frontend, but implements the Mastodon client API. + You can use this server through a variety of clients: +

+
+
+ +
+

Pinafore

+

Pinafore is a web client designed for speed and simplicity.

+ Use Pinafore +
+
+
+ +
+

Tusky

+

Tusky is a lightweight mobile client for Android

+ Get Tusky +
-
- -
-

Tusky

-

Tusky is a lightweight mobile client for Android

- Get Tusky -
-
-
-
+ +
{{ template "footer.tmpl" .}} \ No newline at end of file diff --git a/web/template/sign-in.tmpl b/web/template/sign-in.tmpl index cfe932b3a..48a833cee 100644 --- a/web/template/sign-in.tmpl +++ b/web/template/sign-in.tmpl @@ -1,13 +1,15 @@ {{ template "header.tmpl" .}} - +
+ +
{{ template "footer.tmpl" .}} diff --git a/web/template/status.tmpl b/web/template/status.tmpl new file mode 100644 index 000000000..343eb2d0a --- /dev/null +++ b/web/template/status.tmpl @@ -0,0 +1,36 @@ + +{{if .Account.DisplayName}}{{.Account.DisplayName}}{{else}}{{.Account.Username}}{{end}} +@{{.Account.Username}} +
+ {{if .SpoilerText}} + +
+ {{.SpoilerText}} +
+ {{end}} +
+ {{.Content |noescape}} +
+
+{{with .MediaAttachments}} + +{{end}} +
+
{{.CreatedAt | timestamp}}
+
+
{{.Visibility | visibilityIcon}}
+
{{.RepliesCount}}
+
{{.ReblogsCount}}
+
{{.FavouritesCount}}
+
+
+View toot \ No newline at end of file diff --git a/web/template/thread.tmpl b/web/template/thread.tmpl new file mode 100644 index 000000000..b6b91fd31 --- /dev/null +++ b/web/template/thread.tmpl @@ -0,0 +1,34 @@ +{{ template "header.tmpl" .}} +
+
+ {{range .context.Ancestors}} +
+ {{ template "status.tmpl" .}} +
+ {{end}} +
+ {{ template "status.tmpl" .status}} +
+ {{range .context.Descendants}} +
+ {{ template "status.tmpl" .}} +
+ {{end}} +
+
+ +{{ template "footer.tmpl" .}} \ No newline at end of file