mirror of
https://github.com/edufeed-org/edufeed-web.git
synced 2025-12-07 23:34:34 +00:00
Remove some console printing
This commit is contained in:
parent
f5767a56b2
commit
977adfe617
4 changed files with 208 additions and 15 deletions
196
README.md
Normal file
196
README.md
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
# Edufeed-Web
|
||||
|
||||
A [re-frame](https://github.com/day8/re-frame) application designed to ... well, that part is up to
|
||||
you.
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Project Overview
|
||||
|
||||
* Architecture:
|
||||
[Single Page Application (SPA)](https://en.wikipedia.org/wiki/Single-page_application)
|
||||
* Languages
|
||||
- Front end is [ClojureScript](https://clojurescript.org/) with ([re-frame](https://github.com/day8/re-frame))
|
||||
* Dependencies
|
||||
- UI framework: [re-frame](https://github.com/day8/re-frame)
|
||||
([docs](https://github.com/day8/re-frame/blob/master/docs/README.md),
|
||||
[FAQs](https://github.com/day8/re-frame/blob/master/docs/FAQs/README.md)) ->
|
||||
[Reagent](https://github.com/reagent-project/reagent) ->
|
||||
[React](https://github.com/facebook/react)
|
||||
- Client-side routing: [bidi](https://github.com/juxt/bidi) and [pushy](https://github.com/clj-commons/pushy)
|
||||
* Build tools
|
||||
- CLJS compilation, dependency management, REPL, & hot reload: [`shadow-cljs`](https://github.com/thheller/shadow-cljs)
|
||||
* Development tools
|
||||
- Debugging: [CLJS DevTools](https://github.com/binaryage/cljs-devtools),
|
||||
[`re-frame-10x`](https://github.com/day8/re-frame-10x)
|
||||
|
||||
#### Directory structure
|
||||
|
||||
* [`/`](/../../): project config files
|
||||
* [`dev/`](dev/): source files compiled only with the [dev](#running-the-app) profile
|
||||
- [`user.cljs`](dev/cljs/user.cljs): symbols for use during development in the
|
||||
[ClojureScript REPL](#connecting-to-the-browser-repl-from-a-terminal)
|
||||
* [`resources/public/`](resources/public/): SPA root directory;
|
||||
[dev](#running-the-app) / [prod](#production) profile depends on the most recent build
|
||||
- [`index.html`](resources/public/index.html): SPA home page
|
||||
- Dynamic SPA content rendered in the following `div`:
|
||||
```html
|
||||
<div id="app"></div>
|
||||
```
|
||||
- Customizable; add headers, footers, links to other scripts and styles, etc.
|
||||
- Generated directories and files
|
||||
- Created on build with either the [dev](#running-the-app) or [prod](#production) profile
|
||||
- `js/compiled/`: compiled CLJS (`shadow-cljs`)
|
||||
- Not tracked in source control; see [`.gitignore`](.gitignore)
|
||||
* [`src/ied/`](src/ied/): SPA source files (ClojureScript,
|
||||
[re-frame](https://github.com/Day8/re-frame))
|
||||
- [`core.cljs`](src/ied/core.cljs): contains the SPA entry point, `init`
|
||||
* [`.github/workflows/`](.github/workflows/): contains the
|
||||
[github actions](https://github.com/features/actions) pipelines.
|
||||
- [`test.yaml`](.github/workflows/test.yaml): Pipeline for testing.
|
||||
|
||||
|
||||
### Editor/IDE
|
||||
|
||||
Use your preferred editor or IDE that supports Clojure/ClojureScript development. See
|
||||
[Clojure tools](https://clojure.org/community/resources#_clojure_tools) for some popular options.
|
||||
|
||||
### Environment Setup
|
||||
|
||||
1. Install [JDK 8 or later](https://openjdk.java.net/install/) (Java Development Kit)
|
||||
2. Install [Node.js](https://nodejs.org/) (JavaScript runtime environment) which should include
|
||||
[NPM](https://docs.npmjs.com/cli/npm) or if your Node.js installation does not include NPM also install it.
|
||||
5. Clone this repo and open a terminal in the `ied` project root directory
|
||||
|
||||
### Browser Setup
|
||||
|
||||
Browser caching should be disabled when developer tools are open to prevent interference with
|
||||
[`shadow-cljs`](https://github.com/thheller/shadow-cljs) hot reloading.
|
||||
|
||||
Custom formatters must be enabled in the browser before
|
||||
[CLJS DevTools](https://github.com/binaryage/cljs-devtools) can display ClojureScript data in the
|
||||
console in a more readable way.
|
||||
|
||||
#### Chrome/Chromium
|
||||
|
||||
1. Open [DevTools](https://developers.google.com/web/tools/chrome-devtools/) (Linux/Windows: `F12`
|
||||
or `Ctrl-Shift-I`; macOS: `⌘-Option-I`)
|
||||
2. Open DevTools Settings (Linux/Windows: `?` or `F1`; macOS: `?` or `Fn+F1`)
|
||||
3. Select `Preferences` in the navigation menu on the left, if it is not already selected
|
||||
4. Under the `Network` heading, enable the `Disable cache (while DevTools is open)` option
|
||||
5. Under the `Console` heading, enable the `Enable custom formatters` option
|
||||
|
||||
#### Firefox
|
||||
|
||||
1. Open [Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) (Linux/Windows: `F12` or
|
||||
`Ctrl-Shift-I`; macOS: `⌘-Option-I`)
|
||||
2. Open [Developer Tools Settings](https://developer.mozilla.org/en-US/docs/Tools/Settings)
|
||||
(Linux/macOS/Windows: `F1`)
|
||||
3. Under the `Advanced settings` heading, enable the `Disable HTTP Cache (when toolbox is open)`
|
||||
option
|
||||
|
||||
Unfortunately, Firefox does not yet support custom formatters in their devtools. For updates, follow
|
||||
the enhancement request in their bug tracker:
|
||||
[1262914 - Add support for Custom Formatters in devtools](https://bugzilla.mozilla.org/show_bug.cgi?id=1262914).
|
||||
|
||||
## Development
|
||||
|
||||
### Running the App
|
||||
|
||||
Start a temporary local web server, build the app with the `dev` profile, and serve the app,
|
||||
browser test runner and karma test runner with hot reload:
|
||||
|
||||
```sh
|
||||
npm install
|
||||
npx shadow-cljs watch app
|
||||
```
|
||||
|
||||
Please be patient; it may take over 20 seconds to see any output, and over 40 seconds to complete.
|
||||
|
||||
When `[:app] Build completed` appears in the output, browse to
|
||||
[http://localhost:8280/](http://localhost:8280/).
|
||||
|
||||
[`shadow-cljs`](https://github.com/thheller/shadow-cljs) will automatically push ClojureScript code
|
||||
changes to your browser on save. To prevent a few common issues, see
|
||||
[Hot Reload in ClojureScript: Things to avoid](https://code.thheller.com/blog/shadow-cljs/2019/08/25/hot-reload-in-clojurescript.html#things-to-avoid).
|
||||
|
||||
Opening the app in your browser starts a
|
||||
[ClojureScript browser REPL](https://clojurescript.org/reference/repl#using-the-browser-as-an-evaluation-environment),
|
||||
to which you may now connect.
|
||||
|
||||
#### Connecting to the browser REPL from your editor
|
||||
|
||||
See
|
||||
[Shadow CLJS User's Guide: Editor Integration](https://shadow-cljs.github.io/docs/UsersGuide.html#_editor_integration).
|
||||
Note that `npm run watch` runs `npx shadow-cljs watch` for you, and that this project's running build ids is
|
||||
`app`, `browser-test`, `karma-test`, or the keywords `:app`, `:browser-test`, `:karma-test` in a Clojure context.
|
||||
|
||||
Alternatively, search the web for info on connecting to a `shadow-cljs` ClojureScript browser REPL
|
||||
from your editor and configuration.
|
||||
|
||||
For example, in Vim / Neovim with `fireplace.vim`
|
||||
1. Open a `.cljs` file in the project to activate `fireplace.vim`
|
||||
2. In normal mode, execute the `Piggieback` command with this project's running build id, `:app`:
|
||||
```vim
|
||||
:Piggieback :app
|
||||
```
|
||||
|
||||
#### Connecting to the browser REPL from a terminal
|
||||
|
||||
1. Connect to the `shadow-cljs` nREPL:
|
||||
```sh
|
||||
lein repl :connect localhost:8777
|
||||
```
|
||||
The REPL prompt, `shadow.user=>`, indicates that is a Clojure REPL, not ClojureScript.
|
||||
|
||||
2. In the REPL, switch the session to this project's running build id, `:app`:
|
||||
```clj
|
||||
(shadow.cljs.devtools.api/nrepl-select :app)
|
||||
```
|
||||
The REPL prompt changes to `cljs.user=>`, indicating that this is now a ClojureScript REPL.
|
||||
3. See [`user.cljs`](dev/cljs/user.cljs) for symbols that are immediately accessible in the REPL
|
||||
without needing to `require`.
|
||||
|
||||
### Running `shadow-cljs` Actions
|
||||
|
||||
See a list of [`shadow-cljs CLI`](https://shadow-cljs.github.io/docs/UsersGuide.html#_command_line)
|
||||
actions:
|
||||
```sh
|
||||
npx shadow-cljs --help
|
||||
```
|
||||
|
||||
Please be patient; it may take over 10 seconds to see any output. Also note that some actions shown
|
||||
may not actually be supported, outputting "Unknown action." when run.
|
||||
|
||||
Run a shadow-cljs action on this project's build id (without the colon, just `app`):
|
||||
```sh
|
||||
npx shadow-cljs <action> app
|
||||
```
|
||||
### Debug Logging
|
||||
|
||||
The `debug?` variable in [`config.cljs`](src/cljs/ied/config.cljs) defaults to `true` in
|
||||
[`dev`](#running-the-app) builds, and `false` in [`prod`](#production) builds.
|
||||
|
||||
Use `debug?` for logging or other tasks that should run only on `dev` builds:
|
||||
|
||||
```clj
|
||||
(ns ied.example
|
||||
(:require [ied.config :as config])
|
||||
|
||||
(when config/debug?
|
||||
(println "This message will appear in the browser console only on dev builds."))
|
||||
```
|
||||
|
||||
## Production
|
||||
|
||||
Build the app with the `prod` profile:
|
||||
|
||||
```sh
|
||||
npm install
|
||||
npm run release
|
||||
```
|
||||
|
||||
Please be patient; it may take over 15 seconds to see any output, and over 30 seconds to complete.
|
||||
|
||||
The `resources/public/js/compiled` directory is created, containing the compiled `app.js` and
|
||||
`manifest.edn` files.
|
||||
|
|
@ -13,13 +13,12 @@
|
|||
(doall
|
||||
(for [about (nostr/get-about-names-from-metadata-event event)]
|
||||
[:div {:class "badge badge-primary m-1 truncate "
|
||||
:key about} about])))
|
||||
:key (str (:id event) about)} about])))
|
||||
|
||||
(defn grouped-about-tags [[group-key values]]
|
||||
;; group key is the identifier of the concept
|
||||
;; values is an array of events that referenced the concept
|
||||
(let [_ (println "values " values)
|
||||
pubkeys (->> values
|
||||
(let [pubkeys (->> values
|
||||
(filter #(= "de" (:label-language %)))
|
||||
(map :pubkey))
|
||||
profiles (re-frame/subscribe [::subs/profiles pubkeys])
|
||||
|
|
@ -46,8 +45,7 @@
|
|||
:about-label {(keyword (nth e 3 "")) (nth e 2)}
|
||||
:pubkey (:pubkey event)
|
||||
:id (:id event)})
|
||||
tags)
|
||||
_ (.log js/console "abouts " (clj->js abouts))]
|
||||
tags)]
|
||||
abouts))
|
||||
|
||||
;; Flatten and group by `about-id`
|
||||
|
|
@ -70,7 +68,6 @@
|
|||
```
|
||||
"
|
||||
[events name]
|
||||
(println "events array" events)
|
||||
(let [tags-array (map
|
||||
(fn [e]
|
||||
(filter #(= name (first %)) e))
|
||||
|
|
|
|||
|
|
@ -106,8 +106,6 @@
|
|||
|
||||
(defn d-id-not-in-deleted-list-ids
|
||||
[d-id deleted-list-ids]
|
||||
(println d-id
|
||||
deleted-list-ids)
|
||||
(not (contains? deleted-list-ids d-id)))
|
||||
|
||||
(defn most-recent-event-by-d-tag
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
[ied.events :as events]
|
||||
[ied.components.icons :as icons]
|
||||
[ied.routes :as routes]
|
||||
[ied.components.skos-multiselect :refer [skos-multiselect-component ]]))
|
||||
[ied.components.skos-multiselect :refer [skos-multiselect-component]]))
|
||||
|
||||
(def md-scheme-map
|
||||
{:amblight {:name {:title "Name"
|
||||
|
|
@ -82,8 +82,6 @@
|
|||
:about {:type :skos
|
||||
:schemes ["https://w3id.org/kim/hochschulfaechersystematik/scheme"]}}})
|
||||
|
||||
|
||||
|
||||
(defn array-fields-component [selected-md-scheme field field-title]
|
||||
(let [array-items-type (get-in selected-md-scheme [field :items :type])
|
||||
fields (re-frame/subscribe [::subs/md-form-array-input-fields field])]
|
||||
|
|
@ -187,15 +185,17 @@
|
|||
(doall
|
||||
(for [cs (keys concept-schemes)]
|
||||
^{:key cs} [skos-multiselect-component [(get concept-schemes cs)
|
||||
field
|
||||
field-title]])))
|
||||
field
|
||||
field-title]])))
|
||||
(= :array field-type)
|
||||
^{:key field} [array-fields-component selected-md-scheme field field-title]
|
||||
:else
|
||||
[:p {:key field} "field type not found"]))))])
|
||||
|
||||
[:button {:class "btn btn-warning w-1/2 mx-auto"
|
||||
:on-click #(re-frame/dispatch [::events/publish-resource])}
|
||||
:on-click #(do
|
||||
(re-frame/dispatch [::events/publish-resource])
|
||||
(re-frame/dispatch [::events/navigate [:home]]))}
|
||||
"Publish Resource"]])))
|
||||
|
||||
(defn add-resource-by-json []
|
||||
|
|
@ -209,7 +209,9 @@
|
|||
:on-change (fn [e]
|
||||
(swap! s assoc :json-string (-> e .-target .-value)))}]
|
||||
[:button {:class "btn btn-warning"
|
||||
:on-click #(re-frame/dispatch [::events/convert-amb-string-and-publish-as-nostr-event (:json-string @s)])}
|
||||
:on-click #(do
|
||||
(re-frame/dispatch [::events/convert-amb-string-and-publish-as-nostr-event (:json-string @s)])
|
||||
(re-frame/dispatch [::events/navigate [:home]]))}
|
||||
"Publish as Nostr Event"]]])))
|
||||
|
||||
;; TODO try again using xhrio
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue