From a5a72538553e76a10a322360e847d89f5242f37c Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Wed, 4 Nov 2020 07:25:21 +0100 Subject: [PATCH] Update project --- CHANGELOG.md | 24 -- LICENSE | 277 ------------------------ README.md | 24 +- config.yaml | 8 + doc/intro.md | 3 - project.clj | 45 +++- resources/public/css/main.css | 63 ++++++ resources/public/img/tadam.svg | 27 +++ resources/public/js/main.js | 3 + resources/templates/layouts/base.html | 29 +++ resources/templates/public/404.html | 9 + resources/templates/public/welcome.html | 12 + src/rsspaper/config.clj | 5 + src/rsspaper/core.clj | 28 ++- src/rsspaper/urls.clj | 20 ++ src/rsspaper/views/public.clj | 20 ++ test/rsspaper/core_test.clj | 7 - 17 files changed, 267 insertions(+), 337 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 LICENSE create mode 100644 config.yaml delete mode 100644 doc/intro.md create mode 100644 resources/public/css/main.css create mode 100644 resources/public/img/tadam.svg create mode 100644 resources/public/js/main.js create mode 100644 resources/templates/layouts/base.html create mode 100644 resources/templates/public/404.html create mode 100644 resources/templates/public/welcome.html create mode 100644 src/rsspaper/config.clj create mode 100644 src/rsspaper/urls.clj create mode 100644 src/rsspaper/views/public.clj delete mode 100644 test/rsspaper/core_test.clj diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 127a306..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). - -## [Unreleased] -### Changed -- Add a new arity to `make-widget-async` to provide a different widget shape. - -## [0.1.1] - 2020-11-03 -### Changed -- Documentation on how to make the widgets. - -### Removed -- `make-widget-sync` - we're all async, all the time. - -### Fixed -- Fixed widget maker to keep working when daylight savings switches over. - -## 0.1.0 - 2020-11-03 -### Added -- Files from the new template. -- Widget maker public API - `make-widget-sync`. - -[Unreleased]: https://github.com/your-name/rsspaper/compare/0.1.1...HEAD -[0.1.1]: https://github.com/your-name/rsspaper/compare/0.1.0...0.1.1 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d3087e4..0000000 --- a/LICENSE +++ /dev/null @@ -1,277 +0,0 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. diff --git a/README.md b/README.md index 4b2401b..b90e654 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,14 @@ # rsspaper -A Clojure library designed to ... well, that part is up to you. - ## Usage -FIXME +```sh +lein run +``` -## License +## Testing -Copyright © 2020 FIXME - -This program and the accompanying materials are made available under the -terms of the Eclipse Public License 2.0 which is available at -http://www.eclipse.org/legal/epl-2.0. - -This Source Code may also be made available under the following Secondary -Licenses when the conditions for such availability set forth in the Eclipse -Public License, v. 2.0 are satisfied: GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or (at your -option) any later version, with the GNU Classpath Exception which is available -at https://www.gnu.org/software/classpath/license.html. +``` sh +lein check-idiomatic +lein check-format +``` diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..069769f --- /dev/null +++ b/config.yaml @@ -0,0 +1,8 @@ +title: RSSPaper +# Options: light or dark +theme: dark +# Options: daily, yesterday or weekly +edition: yesterday +feeds: + - https://programadorwebvalencia.com/feed/ + - https://republicaweb.es/feed/ diff --git a/doc/intro.md b/doc/intro.md deleted file mode 100644 index bf3b793..0000000 --- a/doc/intro.md +++ /dev/null @@ -1,3 +0,0 @@ -# Introduction to rsspaper - -TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) diff --git a/project.clj b/project.clj index 31ad289..465d314 100644 --- a/project.clj +++ b/project.clj @@ -1,7 +1,42 @@ -(defproject rsspaper "0.1.0-SNAPSHOT" - :description "FIXME: write description" - :url "http://example.com/FIXME" +(defproject rsspaper "0.1.0" + :description "rsspaper" + :url "" :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0" - :url "https://www.eclipse.org/legal/epl-2.0/"} - :dependencies [[org.clojure/clojure "1.10.0"]] + :url "https://www.eclipse.org/legal/epl-2.0/"} + :dependencies [;; Clojure + [org.clojure/clojure "1.10.1"] + ;; Tadam core + [tadam-core "0.3.2"] + ;; HTTP Server + [ring "1.8.0"] + ;; Ring middleware that prevents CSRF attacks + [ring/ring-defaults "0.3.2"] + [ring/ring-anti-forgery "1.3.0"] + ;; Routing + [compojure "1.6.1"] + ;; Cors + [ring-cors "0.1.13"] + ;; Templates + [selmer "1.12.12"] + ;; Validations + [jkkramer/verily "0.6.0"] + ;; Yaml + [clj-yaml "0.4.0"] + ;; JSON encoding + [cheshire "5.9.0"]] + :plugins [;; DEV TOOLS + ;;; Check idiomatic bug + [lein-kibit "0.1.7"] + ;;; Check format + [lein-cljfmt "0.6.4"] + ;;; Generate documentation + [lein-codox "0.10.7"]] + ;; Map configuration for Ring + :ring {:handler rsspaper.core.wrapped-handler} + ;; ALIAS + :aliases {"check-idiomatic" ["kibit" "src"] + "check-format" ["cljfmt" "check"]} + ;; LEIN + :main ^:skip-aot rsspaper.core + :aot [rsspaper.core] :repl-options {:init-ns rsspaper.core}) diff --git a/resources/public/css/main.css b/resources/public/css/main.css new file mode 100644 index 0000000..0b3f754 --- /dev/null +++ b/resources/public/css/main.css @@ -0,0 +1,63 @@ +@import url(https://fonts.googleapis.com/css?family=Raleway); +body { + font-family: Raleway, arial; + margin: 0; + background: #09f; + height: calc(100vh - 8rem); + margin-top: 8rem; +} +header { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #6c3; + position: fixed; + top: 0; + left: 0; + right: 0; +} +header > a { + margin: 1rem; +} +header > a > img { + height: 3rem; +} +header ul { + display: flex; + justify-content: flex-end; + list-style: none; + padding: 0; + margin: 0; +} +header ul a { + display: block; + margin: 1rem; + padding: 1rem; + color: white; + text-decoration: initial; +} +header ul a:hover { + background-color: white; + color: #6c3; +} +main { + max-width: 800px; + margin: 3rem auto; +} +footer { + text-align: center; +} + +.title-welcome { + text-align: center; + color: #6c3; +} + +.logo-welcome { + text-align: center; +} + +.logo-welcome img { + width: 20rem; + margin: 4rem auto; +} diff --git a/resources/public/img/tadam.svg b/resources/public/img/tadam.svg new file mode 100644 index 0000000..8efd814 --- /dev/null +++ b/resources/public/img/tadam.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/public/js/main.js b/resources/public/js/main.js new file mode 100644 index 0000000..b082f22 --- /dev/null +++ b/resources/public/js/main.js @@ -0,0 +1,3 @@ +document.addEventListener('DOMContentLoaded', () => { + +}); diff --git a/resources/templates/layouts/base.html b/resources/templates/layouts/base.html new file mode 100644 index 0000000..3d3ba43 --- /dev/null +++ b/resources/templates/layouts/base.html @@ -0,0 +1,29 @@ + + + + + + + + + {% block title %}{% endblock %} | Tadam Framework + + +
+ + brand + + +
+
+ {% block content %}{% endblock %} +
+ + + diff --git a/resources/templates/public/404.html b/resources/templates/public/404.html new file mode 100644 index 0000000..3c7952a --- /dev/null +++ b/resources/templates/public/404.html @@ -0,0 +1,9 @@ +{% extends "layouts/base.html" %} + +{% block title %} +404 +{% endblock %} + +{% block content %} +

404

+{% endblock %} diff --git a/resources/templates/public/welcome.html b/resources/templates/public/welcome.html new file mode 100644 index 0000000..033d714 --- /dev/null +++ b/resources/templates/public/welcome.html @@ -0,0 +1,12 @@ +{% extends "layouts/base.html" %} + +{% block title %} +Welcome to Tadam +{% endblock %} + +{% block content %} +

Welcome to Tadam Framework

+

+ Tadam +

+{% endblock %} diff --git a/src/rsspaper/config.clj b/src/rsspaper/config.clj new file mode 100644 index 0000000..1f026ca --- /dev/null +++ b/src/rsspaper/config.clj @@ -0,0 +1,5 @@ +(ns rsspaper.config + (:require + [clj-yaml.core :as yaml])) + +(def config (yaml/parse-string (slurp "config.yaml"))) diff --git a/src/rsspaper/core.clj b/src/rsspaper/core.clj index 22f0293..83d9a07 100644 --- a/src/rsspaper/core.clj +++ b/src/rsspaper/core.clj @@ -1,6 +1,24 @@ -(ns rsspaper.core) +(ns rsspaper.core + (:require + [rsspaper.config :refer [config]] + [ring.middleware.defaults :refer [site-defaults wrap-defaults]] + [ring.middleware.reload :refer [wrap-reload]] + [ring.middleware.cors :refer [wrap-cors]] + [rsspaper.urls :refer [all-routes]] + [ring.adapter.jetty :refer [run-jetty]]) (:gen-class)) -(defn foo - "I don't do a whole lot." - [x] - (println x "Hello, World!")) +(def wrapped-handler + ;; Handler middlewares + (-> all-routes + (wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false)) + (wrap-cors + :access-control-allow-origin [(re-pattern (if (config :debug) ".*" (config :domain)))] + :access-control-allow-methods [:get]) + (#(if (config :debug) (wrap-reload %) %)))) + +(defn -main [& args] + ;; Main + ;; Welcome + (prn (str "Open " (config :domain) ":" (config :port))) + ;; Run web server + (run-jetty wrapped-handler {:port (config :port)})) diff --git a/src/rsspaper/urls.clj b/src/rsspaper/urls.clj new file mode 100644 index 0000000..1092e12 --- /dev/null +++ b/src/rsspaper/urls.clj @@ -0,0 +1,20 @@ +(ns rsspaper.urls + (:require + [compojure.core :refer [defroutes GET]] + [compojure.route :as route] + [rsspaper.views.public :as view-public])) + +(defroutes public + ;; Urls public pages + (GET "/" [] view-public/index) + (GET "/api" [] view-public/api)) + + +(defroutes resources-routes + ;; Resources (statics) + (route/resources "/") + (route/not-found view-public/page-404)) + +(def all-routes + ;; Wrap routers. "resources-routes" should always be the last. + (compojure.core/routes public resources-routes)) diff --git a/src/rsspaper/views/public.clj b/src/rsspaper/views/public.clj new file mode 100644 index 0000000..77c7d63 --- /dev/null +++ b/src/rsspaper/views/public.clj @@ -0,0 +1,20 @@ +;;;; Views public web +(ns rsspaper.views.public + (:require + [tadam.templates :refer [render-HTML render-JSON render-404]] + )) + +(defn index + ;; View HTML + [req] + (render-HTML req "public/welcome.html" {})) + +(defn api + ;; View JSON + [req] + (render-JSON req {:result true})) + +(defn page-404 + ;; View page 404 + [req] + (render-404 req "public/404.html" {})) diff --git a/test/rsspaper/core_test.clj b/test/rsspaper/core_test.clj deleted file mode 100644 index c15979b..0000000 --- a/test/rsspaper/core_test.clj +++ /dev/null @@ -1,7 +0,0 @@ -(ns rsspaper.core-test - (:require [clojure.test :refer :all] - [rsspaper.core :refer :all])) - -(deftest a-test - (testing "FIXME, I fail." - (is (= 0 1))))