Compare commits

...

462 Commits

Author SHA1 Message Date
Jeb Rosen 4f904b7ac7 Work around a difficult lifetime interaction between closures and async blocks. 2020-05-25 12:11:14 -07:00
Jeb Rosen e322d9509a Change '&' to '&mut'.
Key changes:
* `find plume-models -name '*.rs' -exec sed -i -e 's/&PlumeRocket/\&mut PlumeRocket/' '{}' \;`
* Remove `let conn = &*rockets.conn;` lines
* Change `conn` to `&mut *rockets.conn` where `conn` was used
2020-05-25 12:07:37 -07:00
Mina Galić b596e77f03 remove redundant use statements 2020-05-25 20:00:57 +02:00
Mina Galić 41f97b01f0 unroll filter_map() to easier .await 2020-05-25 20:00:28 +02:00
Mina Galić a508a4150c remove redundant use statements 2020-05-25 19:18:24 +02:00
Mina Galić 25c40adf20 yet another dubious clippy warnings fix re returns 2020-05-25 19:17:32 +02:00
Mina Galić 7490567a21 fix warnings about unused doc comments
we do this by making the macro parse and generate doc comments
2020-05-25 15:44:32 +02:00
Mina Galić 492bbb1ba6 make clippy happy with a weird quirk wrt return
not happy about this lint or rust behaviour where the return statement
must not have a `;`
2020-05-25 15:23:55 +02:00
Mina Galić cf3708e1c6 make clippy happy by removing unused imports 2020-05-25 13:40:35 +02:00
Mina Galić df442002c2 replace .map().map_err() with a match
so we can .await without worries.
plus, it changes nothing about the code, other than making the intent
clearer at first sight.
2020-05-24 22:16:42 +02:00
Mina Galić 07036b5fad upgrade validator: it now uses types! in macros!! 2020-05-24 22:03:26 +02:00
Mina Galić 0726375859 add another async (and correctly convert followers_count) 2020-05-24 21:03:59 +02:00
Mina Galić cb1c260692 remove an experiment of disabling Send… it makes no sense 2020-05-24 21:03:02 +02:00
Mina Galić de6bfca084 removed a few unused imports 2020-05-24 21:01:16 +02:00
Mina Galić 7aabb9661e upgrade webfinger everywhere, and implement async 2020-05-24 20:27:39 +02:00
Mina Galić 18bb413011 add async/.await until all our errors are the same:
that our Connection is not Send-safe.
2020-05-24 19:40:02 +02:00
Mina Galić d2881ee3f7 add async/.await until all our errors are the same: that our Connection is not Send-safe. 2020-05-23 23:32:10 +02:00
Mina Galić 850b3c1337 add async/.await until all our errors are the same:
that our Connection is not Send-safe.
once we get there, we can start thinking about restructing the way we
pass along our connection, or consider using #[database].
2020-05-22 21:41:33 +02:00
Igor Galić 44ebce516c fix some, break some compiling by adding async/await in front of it
i forgot that we can't `Send` diesel connections over threads, so this
is going to require some rethinking.
2020-05-16 12:06:58 +02:00
Igor Galić 3c830ab0ce move towards using #[rocket::async_trait]
this also upgrades some dependencies
some of that fixes stuff, others breaks stuff.
2020-05-15 22:38:21 +02:00
Igor Galić 097d0ea9ce make plume-models async (again) 2020-05-06 22:33:10 +02:00
Igor Galić 6fe16c9f84 upgrade and use futures… then block_on .await in a trait? 2020-05-06 22:32:59 +02:00
Igor Galić 43cb9f700c update webfinger
as requested in https://github.com/Plume-org/webfinger/issues/8
and provided in https://github.com/Plume-org/webfinger/pull/9

```
meena@76ix ~/s/a/plume (go/async) [101]> cargo update --package webfinger
    Updating crates.io index
    Updating git repository `https://github.com/Plume-org/webfinger`
    Removing bytes v0.4.12
    Removing cookie v0.12.0
    Removing cookie_store v0.7.0
    Removing crossbeam-deque v0.7.2
    Removing crossbeam-epoch v0.8.0
    Removing crossbeam-queue v0.1.2
    Removing crossbeam-utils v0.7.0
    Removing h2 v0.1.26
    Removing http v0.1.21
    Removing http-body v0.1.0
    Removing hyper v0.12.35
    Removing hyper-tls v0.3.2
    Removing publicsuffix v1.5.4
    Removing reqwest v0.9.24
    Removing serde_urlencoded v0.5.5
    Removing string v0.2.1
    Removing tokio v0.1.22
    Removing tokio-buf v0.1.1
    Removing tokio-current-thread v0.1.6
    Removing tokio-executor v0.1.9
    Removing tokio-io v0.1.12
    Removing tokio-reactor v0.1.11
    Removing tokio-sync v0.1.7
    Removing tokio-tcp v0.1.3
    Removing tokio-threadpool v0.1.17
    Removing tokio-timer v0.2.12
    Removing try_from v0.3.2
    Removing want v0.2.0
      Adding webfinger v0.5.0 (https://github.com/Plume-org/webfinger?rev=update-deps#cdaab95e)
    Removing webfinger v0.5.0
meena@76ix ~/s/a/plume (go/async)>
```
2020-05-06 22:30:33 +02:00
Igor Galić 2c285b9aca start async-ifying routes
template utils and error routes
2020-05-06 22:29:36 +02:00
Igor Galić e4bb73d22e cargo clippy 2020-05-06 22:29:36 +02:00
Igor Galić e9c7259ffb cargo fmt 2020-05-06 22:29:35 +02:00
Igor Galić be8c67ee9a move reqwest client out of thread spawning
this way, we only spawn one, and reuse that.
2020-05-06 22:29:34 +02:00
Igor Galić 65b2c38c29 .await? result from read_to_string() 2020-05-06 22:29:33 +02:00
Jeb Rosen 8aa99cea35 move signature outside the spawning
this allows us to actually move stuff into the async block
and we can drop the 'static life-time.
2020-05-06 22:29:32 +02:00
Igor Galić a010025074 asyncify reqwest calls (again?) 2020-05-06 22:29:32 +02:00
Igor Galić 82088596a8 asyncify from_activity calls (i.e.: block_on()) 2020-05-06 22:29:31 +02:00
Igor Galić 87ce3a7b51 asyncify plume-models: media upload is now async
including the use of tokio!
2020-05-06 22:29:27 +02:00
Igor Galić 3472a58299 move ClientBuilder into thread, since we cannot Copy it 2020-05-06 22:26:37 +02:00
Igor Galić a3f165f9f4 Use blocking reqwest API in defer
defer, or, trait functions such as it in general(?) cannot be async (yet)
2020-05-06 22:26:32 +02:00
Igor Galić 25c5da1a7c add tokio (0.2) as dependency to further async-ify our FromData code
i'm using this opportunity to also update reqwest (0.10), but it's
turning out to be a little trickier, as it requires more modern async
setup, and that appears to need a lot of thinking…
2020-05-06 22:23:35 +02:00
Igor Galić 022e037eea when using macros!() we need to import the things that they use 2020-05-06 22:20:49 +02:00
Igor Galić 45c335e17b "manually" create ETag and Cache-Control headers 2020-05-06 22:20:48 +02:00
Igor Galić b51551973a start fixing tests in plume-models 2020-05-06 22:20:47 +02:00
Igor Galić 59e5c49aa8 convert plume-models to all async
where sensible! note that State has no asynchronous work to do, so
wrapping it up in async makes no sense.
2020-05-06 22:20:47 +02:00
Igor Galić ce119ffe50 start making PlumeRocket async 2020-05-06 22:20:46 +02:00
Igor Galić 944f8c42fa plume-models: convert api-tokens. use DbConn::from_request() directly
there doesn't seem to be a request.guard_async (yet?)
2020-05-06 22:17:25 +02:00
Igor Galić 909f677bdd plume-models: convert admin & api-tokens to async
n.b.: I do *not* like the error handling in api_tokens 😒
2020-05-06 22:17:24 +02:00
Igor Galić fd9764ff17 plume-common: also make requests async 2020-05-06 22:17:24 +02:00
Igor Galić 75722abc9e rocket does not need decl_macro anymore 2020-05-06 22:17:23 +02:00
Igor Galić ec9b699c6e convert plume-common to rocket async
it only took 3 hours of @jebrosen's patient help.
2020-05-06 22:17:22 +02:00
Igor Galić bb5c2b69a7 update rocket* everywhere!
and run cargo update
2020-05-06 22:17:17 +02:00
Igor Galić e52944e477 update rocket*; which gets us stuck in dependency conflicts 2020-05-06 21:01:25 +02:00
Igor Galić 928470610e remove csrf for now, so we can update the rest 2020-05-06 21:01:18 +02:00
KITAITI Makoto 3be842c653 Make database connections configurable by environment variables (#768)
* Make env DB_MAX_SIZE and DB_MIN_IDLE recognizable

* Make database max size and minimum idle configurable

* Restore file permission

* Fail fast
2020-05-06 19:27:59 +02:00
KITAITI Makoto dabe904642 Escape expressions in @Html (#767) 2020-05-05 23:48:29 +02:00
KITAITI Makoto 180e34b07c Fix Atom feed datetime format (#766) 2020-05-04 23:46:59 +02:00
KITAITI Makoto 847d6f7fac Fix Atom feed (#764)
* Percent-encode URI segments in ap_url

* Fix invalid Atoms

* Remove redundant clone according to cargo clippy

* Revert "Percent-encode URI segments in ap_url"

This reverts commit 8253aa79bd.
ActivityPub(JSON-LD) accepts URI.
See https://github.com/Plume-org/Plume/pull/764#issuecomment-623105734

* Use absolute IRI for IDs in Atom

* Reuse formatted string

* Use parent element's creation date for Atom updated if there's no post

* Remove uncecessary UTC conversion

* Extract routes::build_atom_feed function
2020-05-04 15:28:52 +02:00
KITAITI Makoto 6a3f210dfc Keep atmarks and hashes in link (#765)
* [REFACTORING]Use DocumentContext during parsing Markdown

* Add test case for hash in link

* Make DocumentContext derive Debug

* Add in_link field in DocumentContext

* Don't make hash words tags in link

* Add test for atmark in link

* Don't make atmark words in link mentions
2020-05-03 14:50:32 +02:00
KITAITI Makoto 73aa301d4a Fix user subscription URI so that plume::routes:interact accept it (#762) 2020-05-02 12:07:45 +02:00
KITAITI Makoto b3d367b174 Use plural form for 0 in French (#760)
See https://github.com/Plume-org/Plume/issues/745
2020-04-30 15:35:12 +02:00
KITAITI Makoto edaccd1a31 Fixes #757 Allow Unicode hashtags (#758)
* Add test for Persian language hashtags

See https://github.com/Plume-org/Plume/issues/757

* Add regex-syntax with unicode-perl feature to dependencies

* Install regex-syntax

* Allow hashtag to use Unicode word characters

* Run cargo fmt
2020-04-29 15:13:31 +02:00
Floréal Toumikian e1bd2eab75 Updated: Cargo.lock (#753) 2020-04-19 09:34:05 +02:00
KITAITI Makoto ac7a05b09a Make blocklist deletion possible (#750) 2020-04-18 11:46:10 +02:00
KITAITI Makoto 71e0a35e06 Use LenientForm instead Form for CSRF protected pages (#751) 2020-04-18 11:45:28 +02:00
KITAITI Makoto c217e5e9b3 Move stylesheets for header from _global.sccss to _header.scss (#749) 2020-04-14 23:32:27 +02:00
KITAITI Makoto 8ba0c17db5 Build app and po files before upload pos to Crowdin (#748) 2020-04-14 20:51:53 +02:00
Floréal Toumikian 4e43c676b4 Fixed: #713: Disply likes and boosts on post cards (#744)
This is a basic and simple way to display them. No interaction possible.

Alos, this patch is not optimised. as everytime a partial post_card is
called, `Post::count_likes()` and `Post::count_reshares()` are called
which means quite a few more quesies are sent to database unless diesel
uses some cache mechanisem.

A way to enhance this this would be to keep a count of likes and reshares
are kept in Post model / table.
2020-04-12 21:29:48 +02:00
KITAITI Makoto b834d1c282 Fix #701 Preferable default theme (#746)
* Make it possible to update users.preferred_theme to NULL

* Make preferred them null when 'Default theme' is selected

* Run cargo fmt
2020-04-12 17:36:00 +02:00
Kenneth Steimel 506fe9955d Fixed #734 , passowrds are now hidden on the remote_interact pages (#741)
* Fixed #734 , passowrds are now hidden on the remote_interact pages

* Update templates/remote_interact_base.rs.html

Co-Authored-By: Floréal Toumikian <floreal+github@nimukaito.net>

Co-authored-by: Floréal Toumikian <floreal+github@nimukaito.net>
2020-04-09 20:55:22 +02:00
KemoNine 02c528cae4 Bump llvm -> 9.0.0 (fixes arm builds) (#737) 2020-01-29 21:37:54 +01:00
Christopher James Halse Rogers 2a58835f92 Snapcraft updates (#731)
* snap: Update rust compiler

* snap: Fix the build.

We now need libclang

* snap: Fix the non-x86 builds.

The goddamned environment variable is SNAPCRAFT_ARCH_TRIPLE*T*

* snap: Mark as stable.

The snap works fine; we don't need to warn people away
2020-01-22 14:10:49 +02:00
Ana Gelez 5f8d6b8e0e Rust 2018! (#726) 2020-01-21 07:02:03 +01:00
fdb-hiroshima 3663bffe5c Update compiler (#725)
* update compiler to recent nightly

* cargo fmt

* fix clippy

but ructe code is still complaining

* update circleci and rocket_csrf

* fix last clippy problems

* cargo fmt

* fix build issue

was caused be improper handling of recursive template (comment) by old ructe, which is fixed on newer version
2020-01-19 12:52:32 +01:00
KemoNine 72464fb428 Add missing dep on clang needed for crate builds (#724) 2020-01-15 10:03:52 +01:00
Wilfried OLLIVIER 23049b638c WIP: Fix RSS issues (#720)
* Add id field to RSS feed

* Add published field to RSS feed
2020-01-13 19:30:32 -05:00
Violet White f3c05dae62 Email blocklisting (#718)
* Interface complete for the email blacklisting

* Everything seems to work

* Neutralize language

* fix clippy warnings

* Add missing spaces

* Added matching test

* Correct primary key datatype for postgresql

* Address review comments

* Add placeholder when empty. Fix missing 'i'
2020-01-12 19:41:35 +01:00
Violet White e6bdeb7c4b Fix #699 (#719) 2020-01-12 13:24:41 +01:00
Violet White 458baf5f78 Syntax highlighting (#691)
* Syntax highlighting mostly... Exists.

* Add dependency to dockerfile

* Handle non-existent languages better

* Make the default a bit nicer

* Improve highlighting. Clean up function

* Add dark theme, add the comment scope to the allowed classes

* update build env

* Address review comments

* Use find_syntax_by_token which produces the desired behavior

* Change flat_map into flatten
(commit cargo.lock)
2019-12-30 14:35:27 +01:00
Ana Gelez 597778fd2f release Alpha 4 (#709)
* Update version numbers

* Update translations again

* Translations?

* This time translations should be here
2019-12-22 15:04:09 +01:00
Violet White e53574970c Fix issue #705 (#708)
* Fix issue #705

* Add canonical links to blogs too
2019-12-16 22:55:02 +01:00
Marek Ľach 9ede06e7a3 Make the comment syntax consistent across all CSS (#707)
* Update _article.scss

* Update _dark_variables.scss

* Update _forms.scss

* Update _global.scss

* Update _header.scss

* Update _variables.scss
2019-12-16 22:28:48 +01:00
fdb-hiroshima a9441a8804 Fix lettre (#706)
* Use lettre from crates.io instead of git

* fix previous migration

they were failing on some versions of sqlite and postgres
2019-12-16 20:22:46 +01:00
fdb-hiroshima 6c8944315a remove use of rust in migration (#704)
* remove use of rust in migration

rewrite use_timelines_for_feed in pure sql
delete tantivy related migration. It will require reintroducing tantivy
initialisation in docs

fix #702

* Fill timeline from migrations

should fix #692 , but probably require some testing
2019-12-14 21:06:07 +01:00
Wilfried OLLIVIER 3bd2305115 Fix #637 : Markdown footnotes (#700)
* Ensure footnotes classes generated are not filtered

pulldown-cmark add somes classes when footnotes html is generated. This commit ensure they are not filtered by html sanitizer

* Add some footnotes styling
2019-11-20 16:16:38 +01:00
Ana Gelez 7f296b2ef2 Use the "classic" editor by default (#697) 2019-11-16 18:53:27 +01:00
Marek Ľach c66ef5f85d Fix the navigation menu not opening on touch (#690)
* Fix iOS menu issue

* Fix burger menu iOS trigger

* Modify the menu script to work on iOS too

* Update main.rs

* Update main.rs

* Update main.rs
2019-11-16 18:52:30 +01:00
Christopher James Halse Rogers df6f398efc Various snap fixes (#698)
* snap: Store media in the proper directory

* snap/set-environment: Exit successfully when not enabled.

This lets us unconditionally run things under `set-environment` and let it
handle the case where the necessary configuration hasn't yet been set.

* snap: Set the version based on git tags

This will make the version something like `0.3.0-alpha-2-65-g29178aa` at the moment,
as that was the most recent tag, but the commit tagged as `0.4.0` will get *that* as
the version

* snap: Force-install cargo-web

This makes building the *second* time work; otherwise there might be
an existing cargo-web install, and cargo will refuse to overwrite it.
2019-11-16 13:19:46 +01:00
fdb-hiroshima c484ca6afe make search items optional (#693)
* make search items optional

cf https://github.com/Plume-org/Plume/issues/692#issuecomment-550224029

* eindente
2019-11-10 15:37:51 +01:00
Violet White f0846ff546 Make the search index creation during migration respect SEARCH_INDEX (#689)
* Make the search index creation during migration respect SEARCH_INDEX

* Make the search subcommand respect it too
2019-11-03 17:51:10 +01:00
Violet White c0469c69c1 Add autosaving to the editor (#688)
* Add autosaving to the editor

* It saves the subtitle, tags, and license now

* Save the cover too

* Fix broken autosave again

* Use set_value instead of a multitude of setters. Implement debouncing

* Remove unsafe code, remove generic getters when possible
2019-11-02 15:14:41 +01:00
Ana Gelez 865f372d5a Add a sample .env file (#687)
* Add a sample .env file

As requested in https://github.com/Plume-org/docs/pull/60

* Keep domain names consistent
2019-10-30 15:38:39 +01:00
Violet White 52d860d402 Paginate the outbox responses. Fixes #669 (#681)
* Paginate the outbox responses. Fixes #669

* Address Ana's review

* Make outbox_fetch page through instance outboxes

* Fix infinite loop in fetch_outbox

* Fix off by one
2019-10-30 11:22:28 +01:00
Violet White 866465c603 Add environmental variable to control path of media (#683) 2019-10-28 22:28:28 +01:00
fdb-hiroshima dd6d39135e re-add empty strings in translation (#682) 2019-10-24 16:44:14 +02:00
Violet white 028c4fdbc6 Fix that bug :D 2019-10-24 12:05:13 +02:00
Ryo Nakano b4882533f8 Escape href quotation marks (#678) 2019-10-17 09:12:24 +02:00
Ryo Nakano fc9e69d811 Don't split sentences for translations (#677) 2019-10-16 20:07:58 +02:00
fdb-hiroshima 006b44f580 Add support for generic timeline (#525)
* Begin adding support for timeline

* fix some bugs with parser

* fmt

* add error reporting for parser

* add tests for timeline query parser

* add rejection tests for parse

* begin adding support for lists

also run migration before compiling, so schema.rs is up to date

* add sqlite migration

* end adding lists

still miss tests and query integration

* cargo fmt

* try to add some tests

* Add some constraint to db, and fix list test

and refactor other tests to use begin_transaction

* add more tests for lists

* add support for lists in query executor

* add keywords for including/excluding boosts and likes

* cargo fmt

* add function to list lists used by query

will make it easier to warn users when creating timeline with unknown lists

* add lang support

* add timeline creation error message when using unexisting lists

* Update .po files

* WIP: interface for timelines

* don't use diesel for migrations

not sure how it passed the ci on the other branch

* add some tests for timeline

add an int representing the order of timelines (first one will be on
top, second just under...)
use first() instead of limit(1).get().into_iter().nth(0)
remove migrations from build artifacts as they are now compiled in

* cargo fmt

* remove timeline order

* fix tests

* add tests for timeline creation failure

* cargo fmt

* add tests for timelines

* add test for matching direct lists and keywords

* add test for language filtering

* Add a more complex test for Timeline::matches, and fix TQ::matches for TQ::Or

* Make the main crate compile + FMT

* Use the new timeline system

- Replace the old "feed" system with timelines
- Display all timelines someone can access on their home page (either their personal ones, or instance timelines)
- Remove functions that were used to get user/local/federated feed
- Add new posts to timelines
- Create a default timeline called "My feed" for everyone, and "Local feed"/"Federated feed" with timelines

@fdb-hiroshima I don't know if that's how you pictured it? If you imagined it differently I can of course make changes.

I hope I didn't forgot anything…

* Cargo fmt

* Try to fix the migration

* Fix tests

* Fix the test (for real this time ?)

* Fix the tests ? + fmt

* Use Kind::Like and Kind::Reshare when needed

* Forgot to run cargo fmt once again

* revert translations

* fix reviewed stuff

* reduce code duplication by macros

* cargo fmt
2019-10-07 19:08:20 +02:00
Christopher James Halse Rogers a0e3fe8c94 snap: Fix build for non-Tier-1 Rust platforms (#672) 2019-10-05 13:28:45 +02:00
Christopher James Halse Rogers e54fffccdf snap: *Another* fix for building (#668) 2019-09-20 09:26:04 +02:00
Christopher James Halse Rogers b36e12b654 snap: Ensure cargo-web doesn't erroneously adopt our workspace. (#667) 2019-09-18 16:24:15 +02:00
Christopher James Halse Rogers b5eecbf2e7 Add Snapcraft metadata and install/maintenance hooks (#666)
* Add Snapcraft metadata and install/maintenance hooks

* Move set-environment script into snap/local

* snap: Remove diesel-cli part.

This *was* necessary as of 0.3.0, but now `plm migrations run` does the job.

* snap: Add an actual description

* snap: Add an 'enabled' config item.

Don't try to run until enabled is set, and automatically run the
migrations when we are enabled
2019-09-16 12:33:25 +02:00
Ana Gelez 309e1200d0 Make a distinction between moderators and admins (#619)
* Make a distinction between moderators and admins

And rework the user list in the moderation interface, to be able to run the same action on many users,
and to have a huge list of actions whithout loosing space.

* Make user's role an enum + make it impossible for a moderator to escalate privileges

With the help of diesel-derive-enum (maybe it could be used in other places too?)

Also, moderators are still able to grant or revoke moderation rights to other people, but maybe only admins should be able to do it?

* Cargo fmt

* copy/pasting is bad

* Remove diesel-derive-enum and use an integer instead

It was not compatible with both Postgres and SQlite, because for one it generated a schema
with the "User_role" type, but for the other it was "Text"…

* Reset translations

* Use an enum to avoid magic numbers + fix the tests

* Reset translations

* Fix down.sql
2019-09-13 12:28:36 +02:00
fdb-hiroshima 12c80f9981 delete notification on user deletion (#658)
* delete notification on user deletion

fix #651

* use the correct id for deletion

* add regression test

* push helpers too

* revert CI changes
2019-09-13 11:29:52 +02:00
Ana Gelez d4a1bd6de7 Fix logo URL (#664) 2019-09-06 10:06:16 +02:00
fdb-hiroshima d46af6fe5b order media so that latest added are top (#660)
* order media so that latest added are top

partial fix for #621

* also order paginated medias
2019-08-28 11:37:03 +02:00
fdb-hiroshima ddbec3f204 fill entirely user on creation (#657)
fix #635
2019-08-27 22:28:40 +02:00
fdb-hiroshima 83cad55b22 update default license (#659)
fix #595
2019-08-27 21:47:45 +02:00
fdb-hiroshima bf7603d439 don't index drafts (#656) 2019-08-27 18:40:59 +02:00
Ana Gelez 8ab690001d Replace the input! macro with an Input builder (#646)
* Replace the input! macro with an Input builder

* Use a BTreeMap instead of an HashMap

Followinf @fdb-hiroshima's advice

* Rename Input::to_html to Input::html

To make clippy happy

* Wrap error messages in red paragraphs
2019-08-27 16:50:24 +02:00
Requiem 935d331e97 Fix issue #642, frontend not in english if the user language does not exist (#648)
* syntax and names

* Solve the issue #642, by searching index of english language code in catalog.
2019-08-23 11:02:24 +02:00
Ana Gelez 28fb50438e Fix theme caching (#647) 2019-08-21 21:41:11 +02:00
Ana Gelez a6c84daa1a Theming (#624)
* Theming

- Custom CSS for blogs
- Custom themes for instance
- New dark theme
- UI to choose your instance theme
- Option to disable blog themes if you prefer to only have the instance theme
- UI to choose a blog theme
2019-08-21 00:42:04 +02:00
fdb-hiroshima fb60236a54 update dependancies (#643)
* Bump activitystreams-derive from 0.1.0 to 0.1.1
* Bump tantivy from 0.9.1 to 0.10.1
* Bump rpassword from 3.0.2 to 4.0.1
* Bump num_cpus from 1.10.0 to 1.10.1
* Bump serde_qs from 0.4.6 to 0.5.0
* Bump stdweb-internal-runtime from 0.1.3 to 0.1.4
* [Security] Bump smallvec from 0.6.9 to 0.6.10
* Bump chrono from 0.4.6 to 0.4.7
* Bump bcrypt from 0.4.0 to 0.5.0
* Bump serde_json from 1.0.39 to 1.0.40
* Bump tokio from 0.1.21 to 0.1.22
* Bump scheduled-thread-pool from 0.2.0 to 0.2.2
* Bump stdweb from 0.4.14 to 0.4.18
* Bump hyper from 0.12.29 to 0.12.33
* Bump reqwest from 0.9.17 to 0.9.19
* Bump url from 1.7.2 to 2.1.0
2019-08-14 15:04:30 +02:00
fdb-hiroshima 4f7c20fc26 Fix some federation issue (#573)
* send scheme as part of webfinger remote follow template

fix tsileo/microblog.pub#49

* bump webfinger to 0.4.1

* cargo fmt

* revert translations

* Use group: prefix for blog webfinger queries
2019-07-31 11:38:49 +02:00
Mostafa Ahangarha 54c6d21fc5 WIP - initial RTL support #575 (#577)
* initial RTL support

* fix dir in template-util

* fix dir in blogs new

* fix dir in blogs details

* fix dir in posts new

* fix dir in posts details

* fix dir in posts remote

* Fix dir in partials

some parts should be recheck carefully in real usage
2019-07-11 09:34:27 +02:00
Wilfried OLLIVIER c031804464 Add clap to plume in order to print help and version (#631)
* Add clap in order to print help and version

Related to https://github.com/Plume-org/Plume/issues/594

* Update after_help text message
2019-07-03 19:36:42 +01:00
fdb-hiroshima 5289fe872a don't ignore dotenv errors (#630) 2019-07-03 09:30:44 +02:00
Baptiste Gelez 7ea4acc289 Use futures and tokio to send activities (#620)
* Use futures and tokio to send activities

* Reset .po files

* Cargo fmt + small enhancements

- better error messages
- removed a TODO

* Log all messages at the same time when federation succeeds
2019-06-27 17:46:05 +01:00
Baptiste Gelez 6dbc043a7e Update some documents (#616)
* Redirect to the code of conduct in the docs

To centralize it, and because the version in the docs is more up-to-date

* Remove obsolete issue template

* Rework README
2019-06-15 21:42:24 +01:00
KemoNine fb1668ede7 Update dependencies which depended on nix -- fixes arm32 builds (#615) 2019-06-14 09:35:09 +02:00
Igor Galić 3d27e283ad add enum containing all successful route returns (#614)
* add enum containing all successful route returns

This enum derives `Responder`, so it can be used as route result.
We also implement `From`, so it can be converted

* disable clippy warning about this enum

There's no use trying to chase this warning.
The next warning will be about `Redirect`, which itself is 360 byte,
according to @fdb-hiroshima (thanks for the research!)

So, if anything, we can try to get Rocket to work on that!

* refactor routes/posts to only use one level of Result

* admin settings error is not an ErrorPage, so dont use Result<>

* refactor: use early return to remove indent of main logic

This diff is absolutely atrocious.
but the resulting readability is worth it

* refactor routes/post for early returns & RespondOrRedirect

* refactor routes/session for early returns & use RespondOrRedirect

* refactor routes/user -- add another field to enum

* refactor routes/blogs for early returns & RespondOrRedirect

* refactor routes/blogs for early returns & RespondOrRedirect

This is a final refactor of `pub fn update()` for readability.
We're removing at least one indentation level.
2019-06-14 09:33:30 +02:00
Rob Watson 4b205fa995 Store password reset requests in database (#610)
* Store password reset requests in database

Signed-off-by: Rob Watson <rfwatson@users.noreply.github.com>

* Refactor password reset request expiry handling

* Integrate sqlite

* Fix formatting
2019-06-04 19:55:17 +01:00
KemoNine e7126ae335 Fix arm builds (#612) 2019-06-04 19:18:36 +01:00
Marek Ľach b2312d7f1b Update textarea overflow to scroll (#609)
* Update textarea overflow to scroll

* Update _forms.scss

* Update _forms.scss
2019-06-02 21:35:09 +01:00
Rob Watson bffce041d7 Confirm deletion of blog (#602) 2019-05-29 13:51:53 +01:00
Marek Ľach 037674ae13 Direct follow-up to #578 (#603) 2019-05-29 12:26:37 +01:00
Igor Galić 8c59c822b6 refactor code to use Shrinkwraprs and diesel-derive-newtype (#598)
* add shrinkwraprs and implement Id thru it

This also means we can automatically convert Id to String without using
.into()!

* cleanup with the help of clippy!

* cleanup with the help of cargo fmt!

* remove extra block

* Shrinkwrap Page, ContentLen and RemoteForm

* translations
2019-05-25 19:23:45 +01:00
Marek Ľach 59023e9602 Prevent comment form submit button distortion on iOS (#592)
Forgot about that one the last time :-)
2019-05-20 19:29:23 +01:00
Baptiste Gelez ad3a8b92d1 Theme update (#553)
* Start to update the theme

- Ligther colors
- No more border radius
- Buttons are now always colored
- Start to redesign the post page (according to the Figma mockups)

* Fix build script: it now recompiles everytime a scss file changed

* Make sure the article illustrations are not too big

* Make articles wider (70 characters)

* Better contrast between gray shades

* Various improvements

* Better mobile style

* New style for the footer

* Improve comment style

* Better responsiveness again

* Limit the size of the article cover

* Last details?

- Improve buttons on the media page
- Improve lists

* Pin the stdweb version that we use

It changed because I removed Cargo.lock to handle a merge conflict

I could have updated cargo web too, but it mean I should have re-built
the CI docker image and it was taking forever.

* Better contrast for links in the header of the article

* Add a basic privacy policy

* Remove "also"

* Fix a few issues

- Don't watch static/css in build.rs
- Another shade of white
- Remove useless margin rule for error messages
2019-05-18 13:09:51 +01:00
Marek Ľach c67f65e684 Fix occurrences of 'have been' to 'has been' (#578)
* Update comments.rs

* Update medias.rs

* Update posts.rs

* Update user.rs

* Update posts.rs

* Update user.rs
2019-05-14 11:54:16 +01:00
Baptiste Gelez d78b3a05ec Fix Crowdin upload (#576) 2019-05-12 20:14:59 +01:00
fdb-hiroshima 5579f64dd0 update dependancies (#574)
[Security] Bump ammonia from 2.0.0 to 2.1.1
Bump bcrypt from 0.2.2 to 0.4.0
Bump clap from 2.32.0 to 2.33.0
Bump colored from 1.7.0 to 1.8.0
Bump ctrlc from 3.1.1 to 3.1.2
Bump diesel from 1.4.1 to 1.4.2
Bump dotenv from 0.13.0 to 0.14.0
Bump hyper from 0.12.25 to 0.12.28
Bump openssl from 0.10.19 to 0.10.22
Bump proc-macro2 from 0.4.27 to 0.4.30
Bump reqwest from 0.9.11 to 0.9.16
Bump rpassword from 2.1.0 to 3.0.2
Bump serde_derive from 1.0.80 to 1.0.82
Bump serde_derive from 1.0.89 to 1.0.91
Bump serde from 1.0.89 to 1.0.91
Bump serde_qs from 0.4.5 to 0.4.6
Bump stdweb from 0.4.14 to 0.4.17
Bump syn from 0.11.11 to 0.15.27
Bump whatlang from 0.7.0 to 0.7.1
2019-05-12 10:41:47 +02:00
fdb-hiroshima 773fbfe7c8 cache local instance (#572)
* cache local instance

fix #564

* don't use local instance cache for plm

* use instance cache for plm, but initialize it

* cargo fmt
2019-05-10 21:59:34 +01:00
fdb-hiroshima 5b50f90d2b use openssl instead of sha256sum for build.rs (#568)
* use openssl instead of sha256sum for build.rs

* use a more portable flag for stat
2019-05-10 16:15:30 +02:00
fdb-hiroshima 90f6ef0380 upload artifact of wasm binary (#571)
fix #570
2019-05-10 15:38:43 +02:00
Marek Ľach 33619abdfb Fix certain improper rendering of forms (#560) 2019-05-06 19:18:53 +01:00
fdb-hiroshima c52aac012c make hashtags work in profile summary (#562)
* make hashtags work in profile summary

fix #541

* cargo fmt
2019-05-04 17:33:50 +02:00
fdb-hiroshima c9070930d2 Improve notification management (#561)
* Don't notify for comment when mentioned

fix #505

* Don't save notification for remote users

fix #472
2019-05-04 17:15:41 +02:00
fdb-hiroshima 918bda14ec rewrite circleci config (#558)
* rewrite circleci config with better syntax

and try using grcov for coverage

* attempt to use less memory and to rerun if memory lack

* actually remove use of kcov

* use the right var

* try looping

* run test serialized

* use feature where we should and make macro path independant

* cargo fmt and remove some '"'

* add zip to dependancies

* reduce number of used thread after first failure

* push translations to crowdin on commit to master

* don't cache result of coverage
2019-05-04 15:35:21 +02:00
fdb-hiroshima 33a0c7dcd3 reduce reqwest timeout to 5s (#557) 2019-04-30 23:30:13 +02:00
Baptiste Gelez 8f1ab3485e Add some feedback when performing some actions (#552)
* Add a way to display flash messages

* Make the flash messages look nice

* Add actual feedback messages

* cargo fmt

* Move flash messages to PlumeRocket

And add trait to convert PlumeRocket to BaseContext

* Remove useless lifetime
2019-04-30 11:04:25 +01:00
fdb-hiroshima 18ae6e26b3 remove the new index lock tantivy uses (#556) 2019-04-29 18:08:32 +01:00
fdb-hiroshima 49bb8cb0bc import migrations and don't require diesel_cli for admins (#555)
* import migrations via macro

* panic on database not to the latest migration

* add subcommand to plm

* create migration that run tantivy index creation

* remove diesel_cli from places it was

* use our migration system for tests

* create table __diesel_schema_migrations if needed
2019-04-29 16:30:20 +02:00
Baptiste Gelez ec57f1e687 Remove Canapi (#540)
* Remove Canapi

It added more complexity than it helped.

* Fail if there are many blog, but none was specified

* cargo fmt
2019-04-28 22:17:21 +01:00
Baptiste Gelez 787eb7f399 Federate user deletion (#551)
* Federate user deletion

- When someone deletes their account
- When a local user is banned

Fixes #509

* cargo fmt
2019-04-28 18:01:41 +01:00
Marek Ľach 85aa0883c8 Update follow_remote.rs.html grammar (#548)
* Update follow_remote.rs.html

* Update follow_remote.rs.html
2019-04-26 18:31:43 +01:00
Marek Ľach ff92ac0763 Make comments in styleshhets a bit clearer (#545)
* Update _variables.scss

* Make comments in stylesheets a bit more clear
2019-04-24 18:22:37 +02:00
fdb-hiroshima a20d2df50a Upload artifacts to pull request deploy environment (#539) 2019-04-20 23:07:50 +02:00
Baptiste Gelez 29e11f552f Remove r (#535)
I don't know why it was here 🤷‍♀️
2019-04-19 19:13:11 +01:00
Baptiste Gelez 3ad1f6968c Version bump: 0.3.0 (alpha 2) (#529) 2019-04-19 15:49:46 +01:00
Baptiste Gelez b572a1bd74 Fix #504 (#532)
- Add the `spaced` class to some article cards, to make them wider even on desktop
- Fix the CSS to always have a small margin for cards on mobile
2019-04-19 15:49:22 +01:00
fdb-hiroshima 6acb962e72 strip binary before packing (#533)
reduce by 35-40% size of binaries and archive
2019-04-19 16:13:40 +02:00
fdb-hiroshima 6bb4f8514f remove test after running it, and bump cache version (#531)
fix #523
2019-04-19 14:00:51 +01:00
Baptiste Gelez 68dd8602b2 New Crowdin translations (#479)
Enjoy!
2019-04-19 13:59:03 +01:00
fdb-hiroshima 4d4f2ba6ed increase default character limit (#530)
fix #524
2019-04-19 12:00:39 +01:00
fdb-hiroshima 3d82265b85 try to build release plume&plm on ci (#528)
ref Plume-org/docs#27
I should archive the artifacts before uploading
2019-04-19 11:36:45 +01:00
fdb-hiroshima 0d708e1639 Add support for remote interact (#519)
Add support for remote interaction ([this thing](https://eldritch.cafe/users/Barmaid/remote_follow) in mastodon)

- [x] create the endpoint dispatching remote interactions to local pages
- [x] add this endpoint to web-finger
- [x] propose remote interaction when following and not connected
- [x] propose remote interaction when liking/sharing and not connected
- [x] propose remote interaction when commenting and not connected
- [x] fetch posts/comments we don't know but remote interaction was requested for ?
2019-04-17 21:09:07 +01:00
Baptiste Gelez 12efe721cc Big refactoring of the Inbox (#443)
* Big refactoring of the Inbox

We now have a type that routes an activity through the registered handlers
until one of them matches.

Each Actor/Activity/Object combination is represented by an implementation of AsObject

These combinations are then registered on the Inbox type, which will try to deserialize
the incoming activity in the requested types.

Advantages:
- nicer syntax: the final API is clearer and more idiomatic
- more generic: only two traits (`AsActor` and `AsObject`) instead of one for each kind of activity
- it is easier to see which activities we handle and which one we don't

* Small fixes

- Avoid panics
- Don't search for AP ID infinitely
- Code style issues

* Fix tests

* Introduce a new trait: FromId

It should be implemented for any AP object.

It allows to look for an object in database using its AP ID, or to dereference it if it was not present in database

Also moves the inbox code to plume-models to test it (and write a basic test for each activity type we handle)

* Use if let instead of match

* Don't require PlumeRocket::intl for tests

* Return early and remove a forgotten dbg!

* Add more tests to try to understand where the issues come from

* Also add a test for comment federation

* Don't check creation_date is the same for blogs

* Make user and blog federation more tolerant to errors/missing fields

* Make clippy happy

* Use the correct Accept header when dereferencing

* Fix follow approval with Mastodon

* Add spaces to characters that should not be in usernames

And validate blog names too

* Smarter dereferencing: only do it once for each actor/object

* Forgot some files

* Cargo fmt

* Delete plume_test

* Delete plume_tests

* Update get_id docs + Remove useless : Sized

* Appease cargo fmt

* Remove dbg! + Use as_ref instead of clone when possible + Use and_then instead of map when possible

* Remove .po~

* send unfollow to local instance

* read cover from update activity

* Make sure "cc" and "to" are never empty

and fix a typo in a constant name

* Cargo fmt
2019-04-17 18:31:47 +01:00
fdb-hiroshima c19c094e0c add diverse links and meta to head (#522) 2019-04-09 15:33:34 +02:00
Marek Ľach de296b633f Standard smallest screen is 600px (#520)
For devices that have a screen size so small they have to use the `max-width` property in CSS, the standard of a screen-size that has to be used here is `phones 600px and smaller`, not `900px`, which would have to use the `min-width` property instead, that would mean a widescreen size, because `min-width` means `a screen size of 900px, or more`, including desktops.
2019-04-08 21:48:15 +01:00
Baptiste Gelez d7de09ab81 Fix Atom feed link on user page (#518) 2019-04-07 05:53:38 +02:00
Baptiste Gelez 7645fdbf35 Fix tabs on user page (#516)
The "Articles" tab was always selected.
2019-04-06 19:03:00 +01:00
Baptiste Gelez 1bc2684af1 Run cargo fmt on plume-front (#515)
When `editor-improvements` was merged it was not run, because Travis was still used, but now it makes Circle CI fail on master.
2019-04-06 18:57:25 +01:00
fdb-hiroshima 12c2078c89 Hide cw pictures behind a summary/details (#483)
* Hide cw pictures behind a summary/details
* refactor md_to_html a bit and add cw support
* use random id for cw checkbox
2019-04-06 19:20:33 +02:00
fdb-hiroshima eabe73ddc0 Add tests for plume webserver (#513)
* begin setup front-end test environment with selenium
* run migrations before tests
* use https for tests
2019-04-06 17:41:57 +02:00
Baptiste Gelez 1f7ff62c19 Editor improvements (#486)
- Make it possible to insert new paragraphs in the article body
- Make it impossible to copy formatted HTML (to make media insertion from markdown code work correctly)

TODO:

- [x] make it possible to escape draft mode
- [x] display errors from the server
- [x] button to go back to the "normal" editor
- [x] Avoid publishing placeholders
2019-04-06 14:20:12 +01:00
Marek Ľach 38701c8a40 Corrected grammar pointed out by translators (#514)
The user 'UniqueActive' pointed these issues out on Crowdin.

Thank you!
2019-04-04 20:06:37 +01:00
Marek Ľach 723d2c4600 Grammar corrections followup to #510 (#512)
A very small commit, but let's do all the string corrections while I am already at it :-)

Wraps up #510
2019-04-02 14:08:07 +01:00
fdb-hiroshima 26fc2cde5d use circleci instead of travis (#511)
Upgrade rust-toolchain
Upgrade Tantivy
Warning: tantivy now use a different file format, search index may need to be deleted and recreated to work as intended
try to run compile twice in a row because sometime oomk is evil
2019-04-01 20:28:23 +02:00
Marek Ľach 2d12524cd1 English source strings corrected (#510)
Requires .po/.pot files to be rebuilt

This resolves #508
2019-04-01 19:09:29 +01:00
Hugh a674df3a77 Some corrections to English UI text (#506)
* Update some UI strings for more natural English

* Correct message text

* Correct message text

* Update the strings everywhere

Because they are also used as base messages for other languages
2019-03-29 20:12:21 +01:00
Valentin Brandl c7ee779f51 Delete notifications when deleting comments (#499)
* Implement find_for_comment for notifications

* Delete notifications when deleting a comment

This should tackle #463

* Apply rustfmt

* Implement `find_for_mention` and remove order by from `find_for_comment`

There is no need to order the notifications

* Delete notifications for mentions

* Fix notifications for comments and mentions
2019-03-26 12:45:17 +01:00
Valentin Brandl f0d6b9d1e8 Fix issue with sqlite migrations for comment_seers (#503) 2019-03-26 08:57:46 +01:00
Baptiste Gelez 21cb0ef437 Always use GMT as a timezone for federation (#502)
To prevent a bug with Mastodon
2019-03-25 14:13:54 +01:00
Jean Lucas e93b8f4444 Change "Welcome on" to "Welcome to" (#501)
"Welcome on [noun]" is not grammatically correct as an introduction in
English. Let's fix that.
2019-03-25 08:57:26 +01:00
Baptiste Gelez bdfad844d7 Edit blogs, and add blog icons and banners (#460)
Also adds a parameter to `md_to_html` to only render inline elements (so that we don't have titles or images in blog descriptions). And moves the delete button for the blog on the edition page.

I still have to update the SQLite migration once others PRs with migrations will be merged.

Also, there will be a problem when you edit a blog while not owning its banner or icon: when validating they will be reset to their default values… I don't see a good solution to this until we have a better way to handle uploads with Rocket (the same is probably happening for articles btw).

And the icon/banner are not federated yet, I don't know if I should add it to this PR or if it can come after?

![image](https://user-images.githubusercontent.com/16254623/53894510-7d853300-4030-11e9-8a2c-f5c0b0c7f512.png)
![image](https://user-images.githubusercontent.com/16254623/53894539-8b3ab880-4030-11e9-8113-685a27be8d7c.png)

Fixes #453
Fixes #454
2019-03-22 19:51:36 +01:00
fdb-hiroshima 6cd9c8a01a Print help when subcommand is given without arguments (#498)
Fix #490
2019-03-21 23:25:22 +01:00
fdb-hiroshima ace6181c99 Allow to change logo from .env (#497)
Fix #273
2019-03-21 11:51:41 +01:00
fdb-hiroshima 65bb50e88f Centralize configuration and add some new config (#494)
Ideally, if someone could review the idea in [this comment](https://github.com/Plume-org/Plume/issues/273#issuecomment-474982184), I'd like to add the implementation to this pr too
2019-03-21 10:30:33 +01:00
Atul Bhosale b945d1f602 Run 'cargo fmt' to format code (#489) 2019-03-20 17:56:17 +01:00
Igor Galić 732f514da7 Refactor with the help of Clippy (#462)
We add clippy as our build — also rectifying the missing `plume-cli` build!

In the next step we follow clippy's advise and fix some of the "simple" mistakes in our code, such as style or map usage.

Finally, we refactor some hard bits that need extraction of new types, or refactoring of function call-types, especially those that thread thru macros, and, of course functions with ~15 parameters should probably be rethought.
2019-03-19 14:37:56 +01:00
fdb-hiroshima 570d7fe2d0 Add markdown support for summary (#482)
* Add markdown support for summary

* Save both md and html summary
2019-03-17 20:11:29 +01:00
fdb-hiroshima 191eb89958 Display error message when signin up with unmatching password (#484)
Fix #329
2019-03-17 20:10:45 +01:00
fdb-hiroshima a2b2e37aa0 Caching (#480)
* add basic caching support

* Use hash of static dir instead of rand

* Add support for ETag
2019-03-16 15:33:28 +01:00
Baptiste Gelez 90baf9beb1 Update Crowdin configuration file 2019-03-15 16:45:17 +01:00
Baptiste Gelez 9076dbaadc New editor (#458)
With this PR, when JS is activated and WASM supported, the article editor will be dynamically replaced with `contenteditable`s elements. This makes the editing interface simpler and less like a regular form. It will also allow us to easily add visual formatting with native browser APIs (and to insert images or videos directly). Here is a little demo:

![peek 05-03-2019 16-12](https://user-images.githubusercontent.com/16254623/53815536-1dc05680-3f62-11e9-94d3-b363ed84eb97.gif)

There is still a lot to do, but it is a good first step.

Fixes #255
2019-03-15 16:06:10 +01:00
Baptiste Gelez ffcbc0fde3 Update Crowdin configuration file 2019-03-15 14:41:51 +01:00
Kenneth Steimel 4ff56c6407 Added coloration for selections and contrasting (#476)
color for anchor elements when selected
2019-03-13 21:54:48 +01:00
Baptiste Gelez 42dca3daae Remove some unused #[derive] (#473)
We used to need them, probably when we were using Tera.
2019-03-12 19:40:54 +01:00
Baptiste Gelez 6405bd7261 Update issue templates (#471)
Use two different templates instead of one: one for bugs, one for feature requests.
2019-03-12 17:20:53 +01:00
Baptiste Gelez b52b8fc880 Fix wrong condition, resulting in 404 for valid NodeInfo endpoints (#464)
* Fix wrong condition, resulting in 404 for valid NodeInfo endpoints

* Forgot to remove that dbg!
2019-03-12 17:00:23 +01:00
Baptiste Gelez fe6e69d7c4 Add a fqn field to blogs and users (#457)
Fixes #319
2019-03-06 18:28:10 +01:00
Baptiste Gelez eff2698664 Slightly improve the media experience (#452)
* Slightly improve the media experience

- Use a grid to display the list of media
- Add icons for non-image media preview
- Paginate the gallery
- Add links to the gallery in the editor and in the profile settings to make it more discoverable when you need it

Fixes #432

* Allow video and audio tags in SafeString

Otherwise we can't display their preview, nor show them in articles

Also show controls by default for these two elements

* Show fallback images for audio and unknown files, to make them more visible

* Add a new constructor to SafeString when the input is trusted and doesn't need to be escaped.

And use it to generate media previews.

* Make it possible to insert video/audio in articles
2019-03-06 14:11:36 +01:00
Baptiste Gelez a5e0486da0 Make media extension parsing safer (#459)
Only keep it if contains letters and numbers only, otherwise remove it.

To be merged before #452
2019-03-06 14:09:43 +01:00
Baptiste Gelez 2a188abfa1 Fix follow IDs (#455)
* Generate valid IDs for Follow

Fixes #449

* Use the new post-insert hook for all the models

* Fix plume-cli build
2019-03-04 21:35:03 +01:00
Baptiste Gelez 9b48b8a846 Update dependencies (#456)
(whatlang especially, since it received an update that removes many build dependencies, making our total dependency count go from 512 to 478)
2019-03-04 20:46:26 +01:00
Baptiste Gelez a2b9d7ec44 Password reset (#448)
* Password reset

* Various improvements and fixes for password reset

- Reorganize src/mail.rs to make it  cleaner
- add a build_mail function
- only make the requests invalid after 2 hours
- avoid infintely-growing list of requests by deleting them once completed, or after 24 hours
- avoid sending many requests for the same user
- validate the password reset form

* Avoid locking so many times

Fix durations

* Remove old requests even if the current one is not valid

* Remove unused feature

* Also remove the custom_derive and plugin features while we are at it

* Forgot a 0 è_é

* Avoid panicking while owning a request lock

* Use master branch of lettre so that we can build with the latest OpenSSL

* Fix the debug mailer
2019-02-27 13:29:26 +01:00
Baptiste Gelez e28371bbe4 Add a page listing people someone follows (#444)
Nothing exceptional, the layout is the same as the followers page.

Fixes #325
2019-02-26 13:13:00 +01:00
zcdunn 7bac70a483 Update nodeinfo (#446)
Fix #433

I added the repo link to Cargo.toml so that `software.repository` could be configurable like @rhaamo suggested. I don't know if it's ok to include `software.repository` without bumping the schema version, but I didn't know if that would break any clients that parse nodeinfo with a hardcoded schema version.
2019-02-17 13:42:59 +01:00
fdb-hiroshima 64d1944715 Upgrade tantivy to 0.8.2 (#445)
Fix arm build
2019-02-14 08:46:37 +01:00
Baptiste Gelez 576a4ed499 Pull i18n from Funkwhale's weblate (#439)
* Added translation using Weblate (Arabic)

* Translated using Weblate (Arabic)

Currently translated at 66.7% (124 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/ar/

* Translated using Weblate (English)

Currently translated at 100.0% (186 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/en/

* Translated using Weblate (Japanese)

Currently translated at 100.0% (186 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/ja/

* Translated using Weblate (Arabic)

Currently translated at 68.8% (128 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/ar/

* Translated using Weblate (Norwegian Bokmål)

Currently translated at 96.8% (180 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/nb/

* Translated using Weblate (Arabic)

Currently translated at 95.7% (178 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/ar/

* Added translation using Weblate (Spanish)

* Translated using Weblate (Spanish)

Currently translated at 3.8% (7 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/es/

* Added translation using Weblate (Portuguese (Portugal))

* Translated using Weblate (Arabic)

Currently translated at 99.5% (185 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/ar/

* Translated using Weblate (Portuguese (Portugal))

Currently translated at 95.7% (178 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/pt_PT/

* Translated using Weblate (Spanish)

Currently translated at 26.9% (50 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/es/

* Translated using Weblate (Spanish)

Currently translated at 34.9% (65 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/es/

* Translated using Weblate (Spanish)

Currently translated at 34.9% (65 of 186 strings)

Translation: Plume/Plume
Translate-URL: https://translate.funkwhale.audio/projects/plume/Plume/es/
2019-02-13 13:39:42 +01:00
Baptiste Gelez 77bfe635d7 Update dependencies (#440) 2019-02-13 13:39:30 +01:00
marcin mikołajczak a8b1f1107e i18n: Update Polish translation 🇵🇱 (#441) 2019-02-05 16:48:58 +01:00
Baptiste Gelez 7eef4643c8 Update rocket_i18n and add gettext_macros (#431)
Internationalization now uses proc-macros that generate the .pot file
automatically.
2019-02-02 15:23:50 +01:00
David Baucum 8696185d1e Fixed spelling error in instance command (#438) 2019-01-29 00:09:59 +01:00
Baptiste Gelez 5880dc1957 Improve search UI (#375) 2019-01-28 13:12:56 +01:00
fdb-hiroshima 716c58cb71 Lowercase extension before detemining media type (#437) 2019-01-27 13:44:09 +01:00
fdb-hiroshima e77e4d86e8 Better big form handling (#430)
* Allow customizing max form size from env vars

* Add error page for unprocessable entities

And change default http port to 7878

* Improve char counter: under the editor, more discrete, and give it a default value
2019-01-27 10:55:22 +01:00
zcdunn 06d6bd361a Add categories to web manifest (#434)
This pull request add a `categories` key to the web manifest. The categories key was [recently added](https://www.aaron-gustafson.com/notebook/categories-land-in-the-web-app-manifest/ "Blog post detailing the addition of categories to the spec") to the Web Manifest spec and is a list of categorizations you want to apply to your site that serves as a hint to search engines and webapp catalogs.

The categories can be anything and there is no standardized list of vaues. The W3C is maintaining a list of commonly used values [here](https://github.com/w3c/manifest/wiki/Categories). I added _social_ to Plume's manifest based on that list, but I think eventually allowing a user defined list would be better. I don't know if there's anything in Plume currently that would enable that.
2019-01-24 13:16:48 +01:00
KemoNine a2ddfb0ee9 Fix Plume arm builds (#427)
llvm latest svn commit is broken as of 2019/01/12. This patch pins the llvm+lld versions used for arm compiles.

It also tweaks the architecture detection to be more reliable in multi-lib/multi-arch situations where the CPU is 64bit but the runtime is 32bit.
2019-01-18 20:57:20 +01:00
fdb-hiroshima 944a9d08a7 Update dependencies (#428)
* Bump serde from 1.0.82 to 1.0.84
* Bump ructe from 0.5.4 to 0.5.6
* Bump colored from 1.6.1 to 1.7.0
* Bump itertools from 0.7.11 to 0.8.0
* Bump ammonia from 1.2.0 to 2.0.0
* Bump hyper from 0.12.19 to 0.12.20
* Bump serde_derive from 1.0.80 to 1.0.84
* Bump stdweb from 0.4.12 to 0.4.13
* Bump rsass from 0.9.4 to 0.9.6
* Bump failure from 0.1.3 to 0.1.5
* Bump reqwest from 0.9.5 to 0.9.8
* Bump serde_derive from 0.7.1 to 0.8.0
2019-01-18 19:22:36 +01:00
Dominique Feyer 09a26b4602 Better contrast for input fields (#417)
* Better contrat for input fields

This change set a white background for input field (text, select and textarea)
to have a better contrast with the page background and improve accessibility for
people with vision problem, and just crappy screen.

This change also remove the round corner for the input to have a clear difference
between editing field and buttons.

This max-width of the form element are a bit bigger too.

* Less space between label and input
2019-01-09 18:57:48 +01:00
Dominique Feyer 0490b698cb Use multi step build to limit the docker image size (#416)
* Use multi step build to limit the image size

This change replace the Dockerfile with a multi step build to avoid huge image
size (the new image should be around 130Mo including all layers), compared to
more that 1Go with the full build chain. It's also more safe. This image does
not include cargo (not needed in production), so the old Dockerfile is available
and renamed Dockerfile.slim for those who use Docker for development setup.

* Use correct path for local repository

* Use sleep between chmod and execution
2019-01-09 17:48:18 +01:00
Dominique Feyer 671c340aa8 Better header line height (#418)
This change also remote all units for line-height to have more consistent styles and better cascading support. This solve the too small line height for multi line header in article and also add styling for h1 to h6 (previously h3 to h6 was not styled at all)
2019-01-09 17:46:03 +01:00
fdb-hiroshima c4a4ea5b6c Support blind key rotation (#399)
* Allow receiving objects with new unknown key

* Rotate key after sending Delete activity

* Do the right check
2019-01-05 22:30:28 +01:00
fdb-hiroshima aa72334dc6 Allow for media cover deletion (#387)
* Allow for media cover deletion

Fix #356

* Fix sqlite migrations
2019-01-05 22:11:54 +01:00
fdb-hiroshima 7c8599b0a2 Disallow interaction with medias owned by others (#410)
Notably prevent media deletion by other users
2019-01-05 22:09:57 +01:00
fdb-hiroshima c502ae73f6 Encode redirect messages into valid url data (#409)
Ref #408
2019-01-05 19:36:55 +01:00
Marcin Mikołajczak 2993379aaf i18n: Update Polish translation (#407) 2019-01-04 18:46:48 +01:00
fdb-hiroshima 2333d898b9 Add new subcomand for plm to reset password (#406)
* Add new subcomand for plm to reset password

* Verify user exist before asking for new password
2019-01-03 16:45:27 +01:00
KemoNine dfa89e227a Plume front arm support (#402)
* Update plume-front build to use a shell script that adds the necessary dependencies on arm (x86 left untouched inside the script)

* Fix cleanup portion of plume-front.sh

* Break wasm dependencies for arm out so they are run before the main builds to improve layer caching on subsequent docker builds

* Fixup dockerfile so wasm-deps can run properly and with fewer assumptions

* Move new scripts to script/ folder

* Remove saving of path as it's not actually not necessary

* Add rust-toolchain to early copy so it pulls the right rust release (addresses #400)
2018-12-31 18:46:20 +01:00
fdb-hiroshima 2896eb1705 Fix login issue (#401)
Regression introduced by 4059a840be
2018-12-31 11:45:59 +01:00
Marek Ľach 3128e6a3b9 Tags grammar and admin string corrections (#397) 2018-12-29 17:40:11 +01:00
Baptiste Gelez 80a4dae8bd Avoid panics (#392)
- Use `Result` as much as possible
- Display errors instead of panicking

TODO (maybe in another PR? this one is already quite big):
- Find a way to merge Ructe/ErrorPage types, so that we can have routes returning `Result<X, ErrorPage>` instead of panicking when we have an `Error`
- Display more details about the error, to make it easier to debug

(sorry, this isn't going to be fun to review, the diff is huge, but it is always the same changes)
2018-12-29 09:36:07 +01:00
Marek Ľach 4059a840be Batch of correnctions for text strings in plume.pot (#395) 2018-12-27 14:13:00 +01:00
Marek Ľach e2d5a5057c Update edit.rs.html string (#389) 2018-12-26 13:05:06 +01:00
fdb-hiroshima ccba485215 Trim email and username (#386)
Also forbid whitespaces in username
Fix #385
2018-12-25 18:00:21 +01:00
Marek Ľach 9b3b79ef9c A small batch of rephrashings for text strings (#378)
* A small batch of rephrashings for text strings

* Update plume.pot
2018-12-25 16:00:00 +01:00
Marek Ľach 07ecbde93c Small changes to text strings (#379) 2018-12-25 15:59:54 +01:00
Marek Ľach fefb189056 Expanded search text strings (#380) 2018-12-25 15:56:30 +01:00
Marek Ľach ec4b9d5067 Text strings for articles (#381) 2018-12-25 15:55:48 +01:00
Marek Ľach 8f6333029d Article detail text strings update (#382) 2018-12-25 15:55:18 +01:00
Marek Ľach 040a3b8688 Media upload strings update (#383) 2018-12-25 15:54:35 +01:00
Marek Ľach b5ddca2f64 Media details small strings correction (#384) 2018-12-25 15:54:08 +01:00
Baptiste Gelez 3fce5d6a14 Use Rust for the front-end too (#374)
Rust can compile to WASM, so let's use it for front-end code as well.

To compile the front-end:

```
cargo install cargo-web
cargo web deploy -p plume-front
```
2018-12-25 11:51:40 +01:00
Marek Ľach 22bc8c1d40 Text strings updated (#377)
* Texts strings updated

* Update plume.pot

* Update plume.pot

* Update plume.pot

* Update plume.pot

* Update plume.pot
2018-12-24 19:04:25 +01:00
Marek Ľach aa6c1ffd64 Change title from Edit account to Create account (#376) 2018-12-24 19:03:54 +01:00
Baptiste Gelez 4ec2480f50 Post creation API (#307) 2018-12-24 16:42:40 +01:00
fdb-hiroshima fdfeeed6d9 Comment visibility (#364)
Add some support for comment visibility, fix #217 

This add a new column to comment, denoting if they are public or not, and a new table linking private comments to those allowed to read them. There is currently no way to write a private comment from Plume.
Git is having a hard time what happened in Comment::from_activity, but most of it is just re-indentation because a new block was needed to please the borrow checker. I've marked with comments where things actually changed.
At this point only mentioned users can see private comments, even when posted as "follower only" or equivalent.

What should we do when someone isn't allowed to see a comment? Hide the whole thread, or just the comment? If hiding just the comment, should we mark there is a comment one can't see, but answers they can, or put other comments like if they answered to the same comment the hidden one do?
2018-12-24 11:23:04 +01:00
Marek Ľach 2621549f5e An attempt to fix disorted submit button on mobile devices like iPhone - please review (#370)
* Update _forms.scss

* Update _forms.scss

* Update _forms.scss
2018-12-23 17:30:57 +01:00
Baptiste Gelez 8ff6332784 I'm not the only one who made Plume è_é (#373) 2018-12-23 17:29:08 +01:00
Baptiste Gelez 04625b3fea Use Route159 for comment deletion button (#372)
For some reason it was not what was used.
2018-12-23 15:58:25 +01:00
Baptiste Gelez 5a682419cb Remove the docs folder (#371)
Since documentation now has its own repo.

I also modified a bit the dockerfile to make the image lighter.
2018-12-23 15:24:55 +01:00
fdb-hiroshima 5c5cf36b0d Allow for comment deletion (#363)
* Allow for comment deletion

Receive and emit deletion activity
Add button to delete comment

* Remove debug print and fix copy-past typo

* Improve style of comment deletion button
2018-12-23 11:13:36 +01:00
fdb-hiroshima 0df9c4d400 Give reshare and like ap_url before inserting (#369)
Fix #367
2018-12-23 11:13:02 +01:00
fdb-hiroshima 0ea1d57e48 Fix some federation issues (#357)
* Fix some follow issues

Fix not receiving notifications when followed by remote users
Fix imposibility to be unfollowed by Mastodon/Pleroma users (tested only against Pleroma)

* Fix notification on every post

* Fix issues with federation

Send Link instead of Object when emiting Follow request
Receive both Link and Object for Follow request
Don't panic when fetching user with no followers or posts from Pleroma
Reorder follower routes so Activity Pub one is reachable

* Generate absolute urls for mentions and tags

* Verify author when undoing activity by Link
2018-12-23 11:12:15 +01:00
fdb-hiroshima ab2998e214 Make Plume compile on release (#365)
* Remove use of String for body parameters

Create SignedJson and implement FromData for it

* Make Travis test on release

* Remove warning when installing and fix coverage
2018-12-22 18:27:21 +01:00
Baptiste Gelez 718e23ac85 Update README.md
Links to joinplu.me

Say that we have a CoC

Remove link to baptiste.gelez.xyz
2018-12-21 19:53:09 +01:00
Marcin Mikołajczak 61a79f426b i18n: Update Polish translation (#366) 2018-12-20 19:57:53 +01:00
fdb-hiroshima ce08346487 Remove ap_url from mention (#362) 2018-12-18 15:03:47 +01:00
Baptiste Gelez 9e799f2cf2 Use SCSS (#355)
- Use variables
- Split everything in various files

The SCSS is compiled with `cargo build`/`run`

I also fixed a few visual issues.
2018-12-15 22:06:27 +01:00
Baptiste Gelez 38302203f4 Count items in database as much as possible (#344)
* Count items in database as much as possible

* Fix the tests

* Remove two useless queries

* Run pragma directive before each sqlite connection

* Pragma for tests too

* Remove debug messages
2018-12-14 23:16:18 +01:00
Baptiste Gelez b0089e59b7 Remove useless pagination routes (#351)
Rocket 0.4 let us have routes with optional query parameter
2018-12-13 22:20:19 +01:00
Baptiste Gelez e139008d35 Fix reshare button style 2018-12-13 21:56:26 +01:00
Trinity Pointard 21fe63665d Upgrade rocket_csrf
Fix #346
2018-12-13 10:22:43 +01:00
Trinity Pointard 2870642cfa Fix mentions containing underscores
Fix #338
2018-12-12 10:50:55 +01:00
Trinity Pointard fcbaf6eee3 Allow to keep query params in paginate
Fix #349
2018-12-12 00:52:26 +01:00
Kristof De Jaeger 144f5966dd Add a space between u-url class and href (#347)
There's a missing space, which probably causes the h-feed not to parse.
You can always use http://xray.p3k.io/ to validate the microformats on a page.

e.g. http://xray.p3k.io/parse?url=https%3A%2F%2Fbaptiste.gelez.xyz%2F%7E%2FFederationTesting%2Fplume-and-the-indie-web&pretty=true is fine, so that's good!

However, the h-feed isn't parsing right - http://xray.p3k.io/parse?expect=feed&url=https%3A%2F%2Fbaptiste.gelez.xyz%2F%40%2F0x1C3B00DA&pretty=true (you can always add 'expect=feed' to the get params if you are really sure it needs to be a feed)
2018-12-11 12:30:23 +01:00
Baptiste Gelez 61b6ceed92 Add some constraint at database level (#342)
* Add some constraint at database level

Fixes #79 and should fix #201 and #113 as well

* Fix tests

Delete duplicated data before adding constraints (only with Postgres, there is no way to do it with Sqlite with complex constraints like the one we are using)

Remove the constraint on media path

* We don't need to drop the media unique constraint anymore

Because we deleted it
2018-12-09 18:44:26 +01:00
Baptiste Gelez b73fbd3768 License federation (#343)
* Federate license

* Make it possible to use no license
2018-12-09 18:43:34 +01:00
fdb-hiroshima e9f2f769be Add microformat tags (#341)
Close #229 
Adding `<div>` might have broken the layout in some places. I've tried to fix it, tell me if I missed it somewhere
2018-12-08 21:52:46 +01:00
Ryo Nakano 4182e67dbf Update Japanese translation (#339) 2018-12-08 15:39:47 +01:00
fdb-hiroshima e1ecc7289f Upgrade plume dependencies (#332)
* Bump base64 from 0.9.3 to 0.10.0
* Bump bcrypt from 0.2.0 to 0.2.1
* Bump canapi from 0.1.0 to 0.2.0
* Bump failure from 0.1.2 to 0.1.3
* Bump hyper from 0.11.27 to 0.12.11
* Bump hyper from 0.11.27 to 0.12.16
* Bump lazy_static from 1.1.0 to 1.2.0
* Bump multipart from 0.15.3 to 0.15.4
* Bump openssl from 0.10.12 to 0.10.15
* Bump pulldown-cmark from 0.1.2 to 0.2.0
* Bump reqwest from 0.9.2 to 0.9.5
* Bump rocket from 0.4.0-rc.1 to 0.4.0
* Bump rpassword from 2.0.0 to 2.1.0
* Bump ructe from 0.5.2 to 0.5.4
* Bump serde_derive from 1.0.79 to 1.0.80
* Bump serde from 1.0.79 to 1.0.80
* Bump serde_json from 1.0.32 to 1.0.33
* Bump tera from 0.11.17 to 0.11.20
* Bump url from 1.7.1 to 1.7.2
* Bump validator to from 0.7.2 to 0.8.0
* Bump validator_derive from 0.7.2 to 0.8.0
* Bump whatlang from 0.5.0 to 0.6.0
* Remove hyper from plume-common dependencies
* Remove rpassword from Plume dependancies
* Upgrade compiler to nightly-2018-12-06
2018-12-07 21:00:12 +01:00
Trinity Pointard b4e4b497ee Works on template
Use uri! to generate links instead of hardcoded urls
Fix #110
Fix invalid links needing to be POST forms
Translate login message for boost and like directly from template
Put js for search in its own file
2018-12-07 12:10:03 +01:00
Baptiste Gelez 70af57c6e1 Use Ructe (#327)
All the template are now compiled at compile-time with the `ructe` crate.

I preferred to use it instead of askama because it allows more complex Rust expressions, where askama only supports a small subset of expressions and doesn't allow them everywhere (for instance, `{{ macro!() | filter }}` would result in a parsing error).

The diff is quite huge, but there is normally no changes in functionality.

Fixes #161 and unblocks #110 and #273
2018-12-06 18:54:16 +01:00
Trinity Pointard 5f059c3e98 Fix issues with tags and mentions
Fix issue where leading @ or # of a mention/hashtag get duplicated
Fix issue where normal tags were being overwritten by hashtags
2018-12-06 15:10:07 +01:00
Trinity Pointard d6e220cc8d Actually index post_id in tantivy
Otherwise you can't remove/edit a document
2018-12-04 06:43:32 +01:00
Trinity Pointard 39deede935 Verify signature date
Fix #286
Remove indexed from post_id search field as it was added by mistake
2018-12-04 00:08:55 +01:00
Ryo Nakano 5ff3b65cc5 i18n: Add Japanese translation (#333)
Browsing the Demo instance, I sometimes found Japanese articles. So I decided to translate Plume into Japanese.
2018-12-03 19:06:10 +01:00
Trinity Pointard 24071a6229 Make plm search use cwd if no directory is given and update doc 2018-12-02 20:01:48 +01:00
Trinity Pointard ed71d24fe9 Verify remote user name and media url 2018-12-02 19:09:17 +01:00
fdb-hiroshima 449641d158 Add a search engine into Plume (#324)
* Add search engine to the model

Add a Tantivy based search engine to the model
Implement most required functions for it

* Implement indexing and plm subcommands

Implement indexation on insert, update and delete
Modify func args to get the indexer where required
Add subcommand to initialize, refill and unlock search db

* Move to a new threadpool engine allowing scheduling

* Autocommit search index every half an hour

* Implement front part of search

Add default fields for search
Add new routes and templates for search and result
Implement FromFormValue for Page to reuse it on search result pagination
Add optional query parameters to paginate template's macro
Update to newer rocket_csrf, don't get csrf token on GET forms

* Handle process termination to release lock

Handle process termination
Add tests to search

* Add proper support for advanced search

Add an advanced search form to /search, in template and route
Modify Tantivy schema, add new tokenizer for some properties
Create new String query parser
Create Tantivy query AST from our own

* Split search.rs, add comment and tests

Split search.rs into multiple submodules
Add comments and tests for Query
Make user@domain be treated as one could assume
2018-12-02 17:37:51 +01:00
Trinity Pointard 9714bafded Verify username for special characters on signup 2018-12-02 12:43:03 +01:00
fdb-hiroshima 74c398d60c Run cargo clippy on whole project (#322)
* Run cargo clippy on plume-common

Run clippy on plume-common and adjuste code accordingly

* Run cargo clippy on plume-model

Run clippy on plume-model and adjuste code accordingly

* Reduce need for allocation in plume-common

* Reduce need for allocation in plume-model

add a quick compilation failure if no database backend is enabled

* Run cargo clippy on plume-cli

* Run cargo clippy on plume
2018-11-26 10:21:52 +01:00
fdb-hiroshima 8a4702df92 Add unit tests for main model parts (#310)
Add tests for following models:
- Blog
- Instance
- Media
- User
2018-11-24 12:44:17 +01:00
KokaKiwi 0b9727ed28 Generate valid follow Accept activity URI (#317)
For now it only generate a "fake" URI for accept follow activities, but it should be possible to get the URI dereferencable later.

Also I don't know if this URI looks ok, I tried to get something kind of future-proof, but I don't really know about the actual URIs conventions.

Closes #313
2018-11-23 13:23:46 +01:00
KokaKiwi 100f6307a7 Set Content-Type for ActivityPub request to correct value. (#315) 2018-11-23 13:18:33 +01:00
KokaKiwi 67fe28177e Decode unfollow activities in inbox properly (#316) 2018-11-23 13:17:37 +01:00
Trinity Pointard 00a205a882 Update debian installation doc
fix #305
Update debian installation doc
Remove need for libpq when compiling with sqlite backend
Remove some unneaded features of multipart to speed up compilation
2018-11-21 10:09:23 +01:00
Aaron W. Swenson 3ecd0e3c34 Correct Gentoo emerge instructions (#311)
Emerge doesn't care what order the packages are given; it'll figure out the correct build order and pull in the proper dependencies. Adding the -u switch will only perform the emerge if the package is not yet installed or needs to be updated. This avoids wasting time performing an emerge on something that has already been emerged.

While harmless, it is unnecessary to explicitly include eselect-postgresql in the list as the dev-db/postgresql ebuilds declare it as a dependency. There is no "sqlite3" or "libsqlite3-dev" ebuilds, so that command would fail.
2018-11-10 12:30:12 +01:00
Baptiste Gelez a64c4912cf Add support for CW in comments (#308)
All the backend/federation code was already, I just added the UI 🤷‍♀️ 

Fixes #253
2018-11-07 15:57:31 +01:00
Baptiste Gelez b28411da99 Test with PostgreSQL too (#309)
* Test with PostgreSQL too

* Add 'test' to Travis build stages

* Add test coverage for postgresql
2018-11-07 15:50:24 +01:00
Baptiste Gelez 3690e4cfb9 Fix the path of the media directory for Docker setups 2018-11-06 10:56:42 +01:00
Baptiste Gelez 94904fa3d5 Escape titles in RSS feeds 2018-11-06 10:49:46 +01:00
Baptiste Gelez f0b911a328 Fix RSS feed link on blog pages 2018-11-06 10:41:17 +01:00
Alexander d724eba772 i18n: Add Russian translation (#306) 2018-11-05 19:18:46 +01:00
Trinity Pointard dca91945af Try to take advantage of travis cache and build stages 2018-11-04 20:27:27 +01:00
Baptiste Gelez 8d5eaaec6a Add Codecov badge 2018-11-02 10:02:31 +01:00
Baptiste Gelez 6b2d9d4221 Tests infrastructure for plume-models (#302)
First step for testing `plume-models`. I only added one test for the moment, but we should add more in future PRs.
2018-11-01 22:23:38 +01:00
Marcin Mikołajczak 1bcde7fb86 i18n: Update Polish translation 2018-11-01 12:47:28 +01:00
Baptiste Gelez 57cf55fecc Fix RSS feed icon
Closes #289
2018-10-31 18:17:13 +01:00
Baptiste Gelez 67077267cf Add OpenGraph metadata 2018-10-31 16:14:26 +01:00
Baptiste Gelez 68a30cc80e Fix spacing for the delete article button 2018-10-31 15:22:49 +01:00
Baptiste Gelez 185cb5142a Better style for subtitles 2018-10-31 15:19:42 +01:00
Baptiste Gelez 25b7399e7f Only list images for possible covers 2018-10-31 15:07:40 +01:00
Baptiste Gelez f593ce40af Remove some debug messages 2018-10-31 15:07:40 +01:00
Baptiste Gelez 464832bb31 Avoid template errors when form.cover is not defined 2018-10-31 15:07:40 +01:00
Baptiste Gelez 1a49569bf2 Better style for <select> 2018-10-31 15:07:40 +01:00
Baptiste Gelez 4a2f5aeeeb Display article covers 2018-10-31 15:07:40 +01:00
Baptiste Gelez 95326c09e0 Federate article covers 2018-10-31 15:07:40 +01:00
Baptiste Gelez 485aac2e20 Add an interface to select an article illustration 2018-10-31 15:07:40 +01:00
Baptiste Gelez ab5edbc6a5 Add a cover field to posts
Referencing the media to use to illustrate the article
2018-10-31 15:07:40 +01:00
Baptiste Gelez 9f1b37648e Fix error in de.po 2018-10-31 15:06:00 +01:00
Baptiste Gelez f6227e7a42 Nicer default avatar 2018-10-31 15:03:21 +01:00
Baptiste Gelez 8e8aae17b1 Nginx docs: add 'unsafe-inline' to CSP header (to allow avatars to be loaded) 2018-10-31 14:56:17 +01:00
Baptiste Gelez 2e072affb5 Fix editor auto-expansion (#293) 2018-10-30 18:16:24 +01:00
Baptiste Gelez e26a150164 Make Authorization optional for read routes
Only require it when reading draft articles.
2018-10-30 18:13:49 +01:00
Baptiste Gelez c341179150 ApiToken: rename what to scope 2018-10-30 18:13:49 +01:00
Baptiste Gelez 28fbf35779 Use PhantomData intead of two Options useless for Authorization
And remove some warnings about unused parameters
2018-10-30 18:13:49 +01:00
fdb-hiroshima 9784d754b2 Use the full URL to refer to the Apps API
Co-Authored-By: BaptisteGelez <baptiste@gelez.xyz>
2018-10-30 18:13:49 +01:00
Baptiste Gelez 647a5af070 Make it impossible to know if an username is used or not with the API 2018-10-30 18:13:49 +01:00
Baptiste Gelez 0dbf9f519e AppEndpoint.name is required for both the client and server 2018-10-30 18:13:49 +01:00
Baptiste Gelez 31641b1ea1 New request guard: Authorization<Action, Scope>
Filter requests that don't have an API token authorized to read or write
a specific scope;
2018-10-30 18:13:49 +01:00
Baptiste Gelez cd4ae5b7f5 Document API authentication and apps API 2018-10-30 18:13:49 +01:00
Baptiste Gelez 9a13d804c5 impl FromRequest for ApiToken
and use it for the posts API
2018-10-30 18:13:49 +01:00
Baptiste Gelez 663ec52fea Disable CSRF for the whole API 2018-10-30 18:13:49 +01:00
Baptiste Gelez 2394ff424b Add an ApiToken model, and an endpoint to get one 2018-10-30 18:13:49 +01:00
Baptiste Gelez f2190adfc2 Add an API endpoint to register apps 2018-10-30 18:13:49 +01:00
Baptiste Gelez 4c8a727e9e Add a model for external apps
Stores their name, website, and credentials
2018-10-30 18:13:49 +01:00
Trinity Pointard 76ca76f068 Update tags and hashtags on remote post edition 2018-10-29 20:54:27 +01:00
Trinity Pointard c4fc656809 Update mentions on remote post edition 2018-10-29 20:54:27 +01:00
Trinity Pointard f147885f08 Detect if tags are hashtags when receiving new posts 2018-10-29 20:54:27 +01:00
Trinity Pointard 9d7ae694a8 Delete notification on post deletion 2018-10-29 20:54:27 +01:00
Trinity Pointard 2523f3b523 Prevent duplication of mention on post update
and delete mentions and notifications of user no longer mentioned
2018-10-29 20:54:27 +01:00
Trinity Pointard 1689813df4 Deduplicate tags and mentions
Use set to work on tags and mentions, allowing deduplication of them,
and clearer code
May also help with distinguishing tags and hashtags latter
2018-10-29 20:54:27 +01:00
fdb-hiroshima 83d6da29a5 Fix typos
Remove line breaks where not needed
2018-10-29 20:31:25 +01:00
Baptiste Gelez 1a2de6c88f Fix the NodeInfo example
Forgot to change that when I copy/pasted it from the source
code.
2018-10-29 20:31:25 +01:00
Baptiste Gelez 175a9edb77 Add documentation for our ActivityPub implementation
Fixes #262
2018-10-29 20:31:25 +01:00
Baptiste Gelez 6efcba46ad Merge pull request #297 from maximesrd/patch-8
Added startup script for openrc
2018-10-29 19:35:57 +01:00
Baptiste Gelez 8c2e0e680a Merge pull request #294 from silkevicious/master
Added Italian translation
2018-10-29 19:28:38 +01:00
maximesrd ae4c7e559c Added startup script for openrc 2018-10-29 12:39:14 +01:00
Trinity Pointard 0bb2e6293a Send Create activity when undrafting post
Send a Create activity when a post get undrafted, instead of sending an
	Update activity for a non federated post
Fix #221
2018-10-28 11:42:01 +01:00
Trinity Pointard cbbd0ca920 Group post by 12 instead of 10
Fix #251
2018-10-28 11:26:24 +01:00
Trinity Pointard 0bb719830a Fix incorrect media link
Fix #292
2018-10-27 19:21:50 +02:00
Sylke Vicious 9871f03d29 Added italian translation 2018-10-27 08:35:24 +02:00
Sylke Vicious 999e213eda Added IT to LINGUAS files 2018-10-27 08:34:51 +02:00
Baptiste Gelez b28c1a7568 Merge pull request #288 from maximesrd/patch-7
Adding MIGRATION_DIRECTORY
2018-10-22 19:24:20 +01:00
Baptiste Gelez 9000f2ba62 Merge pull request #287 from maximesrd/patch-6
Variable name error
2018-10-22 19:23:53 +01:00
maximesrd 15eac79123 Adding MIGRATION_DIRECTORY 2018-10-22 20:17:27 +02:00
maximesrd bbcea45e4b Variable name error 2018-10-22 20:13:15 +02:00
Baptiste Gelez fcf911fac9 ActivityPub: don't delete anything if the actor is not authorized 2018-10-22 16:29:25 +01:00
Baptiste Gelez fc5acac861 Merge pull request #283 from Plume-org/hashtags
Support hashtags
2018-10-21 13:53:15 +01:00
Baptiste Gelez 9187aefda0 Merge pull request #282 from Plume-org/blog-deletion
Add support for blog deletion
2018-10-21 13:39:41 +01:00
Trinity Pointard d47aff70f7 Add new string to translate for blog deletion 2018-10-21 12:09:22 +02:00
Trinity Pointard 9a8758d7fc Hide hashtags from tag list 2018-10-20 23:45:29 +02:00
Trinity Pointard 95ea248518 Add support for hashtag on user interface
Add migration to fix typo
Add support for linking hashtags with posts
Rework tag search page so it says a nicer message than page not found
when no post use that tag
Add new string to translation
2018-10-20 19:27:49 +02:00
Trinity Pointard 4fa3a0f6ee Add support for hashtags in md parser 2018-10-20 16:38:16 +02:00
Trinity Pointard eca458b0e5 Add support for blog deletion
fix #181
2018-10-20 15:03:59 +02:00
Trinity Pointard a6e73f4667 Allow tag deletion
Fix #232
2018-10-20 14:05:41 +02:00
Baptiste Gelez 879fde81ba Merge pull request #281 from Plume-org/panic-refactor
Panic less and with better messages
2018-10-20 10:56:29 +01:00
Trinity Pointard fd92383f87 Normalize panic message and return 400 or 404 when suitable 2018-10-20 11:04:20 +02:00
Trinity Pointard 4e6f3209d5 Normalize panic message
Change all unwrap to expect
Normalize expect's messages
Don't panic where it could be avoided easily
2018-10-20 08:44:33 +02:00
Baptiste Gelez 630ad0920d Merge pull request #279 from PhieF/patch-1
Apache config wasn't working
2018-10-18 19:21:09 +01:00
Baptiste Gelez 370dafc2dc Merge pull request #280 from anoadragon453/anoa/welcome
Fix Welcome banner grammar
2018-10-18 19:20:45 +01:00
Andrew Morgan 7eebfe991b Welcome on -> Welcome to 2018-10-18 17:52:26 +02:00
PhieF ca19747d2b Apache config wasn't working
SSLStaplingCache needs to be outside of VirtualHost and adding missing </Directory>
2018-10-18 14:49:53 +02:00
Bat 9d70eeae61 Don't register the media serving route (they are now served with other static files)
And remove some unused imports
2018-10-12 20:48:11 +01:00
Bat dde4583fd3 Database setup in Docker install instructions 2018-10-12 20:41:05 +01:00
Bat ab20fec147 Fix MIGRATION_DIR for Docker 2018-10-12 20:38:54 +01:00
Bat 14969d489c Save medias in static/media
Fixes #272
2018-10-12 20:32:34 +01:00
Baptiste Gelez f7c37ca6ca Merge pull request #277 from oliof/patch-1
Add caddyserver example configuration
2018-10-12 19:57:14 +01:00
Harald Wagener 5e248cc99f Add caddyserver example configuration
Add caddyserver example configuration
2018-10-12 20:50:41 +02:00
Trinity Pointard f9498828c4 Modify post slug only when it's still drafted
Fix #207
2018-10-11 14:23:23 +02:00
Trinity Pointard ed5bafbbc4 Update webfinger and reqwest
Update webfinger to 0.3.1
Update reqwest to 0.9
Fix #257
2018-10-11 13:51:45 +02:00
Baptiste Gelez 8fdb55a501 Merge pull request #256 from Plume-org/verify-signature
Verify activity's signature
2018-10-10 21:31:11 +01:00
Baptiste Gelez 09e7226c23 Don't lowercase URL for requests signatures 2018-10-10 20:23:39 +00:00
Trinity Pointard ba4695f490 Add support for signature verification on pseudo header
Add support for pseudo-header '(request-target)'
Add some logging for denied request
2018-10-10 21:10:43 +02:00
Baptiste Gelez ce09ca14c4 Merge pull request #276 from midzer/patch-1
Update de.po
2018-10-10 17:55:44 +01:00
midzer dda41b1c57 Update de.po 2018-10-10 18:51:10 +02:00
Bat d77d064a85 Add links to API.md and CLI.md on the docs homepage 2018-10-09 21:39:30 +01:00
Baptiste Gelez 3901ae835f Merge pull request #274 from Plume-org/logo
New logo!
2018-10-09 20:03:29 +01:00
Bat 1b9c3f69bf Add icons to Web Manifest 2018-10-09 19:38:01 +01:00
Bat 25f47a7951 Add a favicon 2018-10-09 19:23:36 +01:00
Bat 45c31b1c8a Add the new logo the header 2018-10-09 15:37:40 +01:00
Bat d5ba8864c3 Import @trwnh's logos
I would have liked to merge their commits in Plume's repository, but I have no idea how it could be done.

For reference, here is the repository they come from: https://github.com/trwnh/plumeLogos
2018-10-09 15:22:07 +01:00
Bat 3f18cdd38b Add .swp to .gitignore 2018-10-08 20:42:40 +01:00
Baptiste Gelez da7bfd50d0 Merge pull request #271 from yannicka/master
Update French translation
2018-10-08 20:11:35 +01:00
Yannick Armand 14bfb410ab Update French translation 2018-10-08 21:07:36 +02:00
Bat 3b7842d040 Rocket should manage DbConn, not Option<DbConn>
Otherwise it fails when using DbConn as a request guard
2018-10-08 20:02:17 +01:00
Bat 4f84b2a3ed Impl SQL traits for SafeString only for the selected backend
Fixes #269
2018-10-08 18:58:15 +01:00
Baptiste Gelez 0469b8dae2 Merge pull request #266 from Plume-org/cc-by-sa
Change default license to CC-BY-SA
2018-10-07 21:28:43 +01:00
Baptiste Gelez 3a13d80dc6 Merge pull request #267 from Plume-org/db-url
Replace DB_URL with DATABASE_URL
2018-10-07 21:28:28 +01:00
Bat fe3df74986 Fix Docker build (forgot --features)
And update diesel_cli in Docker too
2018-10-07 19:12:10 +01:00
Bat 9cc795d8be Replace DB_URL with DATABASE_URL
This way it is shared with diesel, which simplifies a lot the setup

Also fixes a few issues in the documentation, that are not directly related
2018-10-07 11:00:50 +01:00
Bat 915b9bb0e5 Use env!("CARGO_PKG_VERSION") instead of hardcoding version when possible
See https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates
2018-10-06 18:55:30 +01:00
Baptiste Gelez 7a64005ca9 Merge pull request #265 from Plume-org/sqlite-docs
Update docs for SQlite
2018-10-06 18:25:23 +01:00
Bat 387efbf3e9 Change default license to CC-BY-SA
Fixes #258
2018-10-06 18:19:45 +01:00
Bat f60f427358 Document --features 2018-10-06 16:39:33 +01:00
Bat a0920eb6cf Rephrase Mac OS dependencies installation 2018-10-06 16:35:39 +01:00
Bat b09360b270 Docs: correct dependencies for SQlite 2018-10-06 16:34:09 +01:00
Baptiste Gelez 046c9a011e Merge pull request #264 from maximesrd/patch-5
Missing dependencies
2018-10-06 16:29:10 +01:00
maximesrd 65900af763 Missing dependencies
sqlite was missing, which caused the compilation to fail, even if the database used is postgresql
2018-10-06 17:12:30 +02:00
Bat f84fb47fe7 Update docs for SQlite 2018-10-06 16:06:50 +01:00
Baptiste Gelez 00fe11fcbb Merge pull request #261 from Plume-org/setup-tools
CLI tools
2018-10-06 14:28:13 +01:00
Bat 478e9dcac9 Show your own posts in your feed
Fixes #213
2018-10-06 13:42:57 +01:00
Baptiste Gelez 4b8c090def Merge pull request #249 from Plume-org/delete-posts
Delete posts when deleting account
2018-10-06 13:05:22 +01:00
Bat 4d382d8014 Fix compatibility with SQlite
Also fixes a bug in plume-models
2018-10-06 12:59:08 +01:00
Bat d08c21d58d Delete posts when deleting account 2018-10-06 12:37:28 +01:00
Bat 5fa7a2a742 Remove legacy setup script 2018-10-06 12:31:00 +01:00
Bat caa4c38948 Update installation and update docs with the new plm tool
Also updates the Docker files
2018-10-06 12:19:48 +01:00
Bat d0d1210e21 Document new command-line tools 2018-10-06 12:19:48 +01:00
Bat d48a7796f1 User creation CLI tool 2018-10-06 12:19:48 +01:00
Bat 0da5d2e927 Improve the plm instance new command
Add long arguments
Fix the help messages
Actually write to StdOut when needed
Fallback to BASE_URL first if domain is not specified
2018-10-06 12:19:48 +01:00
Bat 6723432e52 CLI tools
- New sub-crate: plume-cli
- Creates a binary called 'plm'
- Uses clap to parse CLI arguments
- Add a first command: plm instance new (to init the local instance)
2018-10-06 12:19:48 +01:00
Baptiste Gelez b464671cf0 Merge pull request #226 from igalic/feat/sqlite
Add SQLite as supported database
2018-10-06 12:15:00 +01:00
Trinity Pointard 0d6a2af851 Code style improvement 2018-10-06 10:57:37 +02:00
Trinity Pointard 3466e55548 Implement JSON-ld signature verification
Implement JSON-ld signature verification
Move signature verification functions to the proper file
2018-10-06 10:06:06 +02:00
Trinity Pointard 62c94ed463 Refactor and verify http signature on personnal inbox
Verify signature on personnal inbox
Reduce code duplication
Put Headers in plume-models
2018-10-03 20:48:25 +02:00
Trinity Pointard 0a5d435249 Verify http signatures 2018-10-03 09:31:38 +02:00
Baptiste Gelez 96a97e4949 Fix a typo in README 2018-10-02 13:20:54 +01:00
Trinity Pointard d3ed2d8af5 Fix regression and update rocket_csrf
Fix account creation, introduced by fceb9ab
Update to latest rocket_csrf
2018-10-02 11:51:12 +02:00
Baptiste Gelez 6738883f2b Merge pull request #250 from fdb-hiroshima/feature/underlined_links
Add link underline for main body
2018-10-01 12:42:54 +01:00
Bat 07f2c979ec Make the REST API compatible with SQlite 2018-09-30 14:21:07 +01:00
Bat bd80430b1b Document model macros 2018-09-30 14:13:56 +02:00
Bat 743620eb6a Fix the SQlite build 2018-09-30 14:13:56 +02:00
Bat 535c68b423 Run Travis for SQlite too 2018-09-30 14:13:55 +02:00
Bat 38d737ed0c Introduce features to choose between SQlite or Postgres 2018-09-30 14:13:54 +02:00
Igor Galić 88456faf84 align types between sqlite & postgres
this one's achieved by adding "NOT NULL" at the *correct* position in
SQLite's create tables.
2018-09-30 14:13:53 +02:00
Igor Galić b28bef20a7 align types between sqlite & postgres
use DATETIME for SQLite's time type. This way, Diesel picks up on what
it's supposed to be.
2018-09-30 14:13:52 +02:00
Igor Galić 1f8680c4c5 add sqlite migrations
we move our PostgreSQL specific migrations to a subdirectory.
The SQLite migrations have been created by running `diesel` against a
copy, and then fixing what's broken.
In the end i reduced all modifications to a single create, since we
*are* starting out fresh with SQLite.

n.b.: i'm not entirely happy with the results yet, because diesel
heavily modifies our `plume-models/src/schema.rs`.
I'll keep fiddling until we have the same types between the two
databases.
2018-09-30 14:13:52 +02:00
Igor Galić e5691f7b23 add sqlite as diesel dependency 2018-09-30 14:13:42 +02:00
Trinity Pointard d610ed1641 Add verify() to the Signer trait
And implement it for Blog and User
2018-09-30 12:08:04 +02:00
Trinity Pointard eafe1ed490 Add content digest to signed http headers
Sign the Digest HTTP header
2018-09-30 12:08:04 +02:00
Trinity Pointard fceb9ab0cd Update cookie management a bit
Update to latest rocket_csrf
Make user_id a samesite lax cookie (see https://github.com/Plume-org/Plume/issues/233#issuecomment-422660275)
2018-09-30 11:56:12 +02:00
Dominik Pataky 31a3e6c825 Revert icon injection 2018-09-29 21:42:51 +02:00
Dominik Pataky 83c4387e94 Add link underline for main body; add link icon
Links in the main body part are now underlined on mouse hover.
<a> tags in the article content are expanded by an icon from
FontAwesome.

Fixes #140
2018-09-29 21:41:02 +02:00
Baptiste Gelez 1e3f40833d Add a link to Loomio in the README 2018-09-29 19:25:27 +01:00
Bat 6f8630df2e Use <div> for avatars
<img> is displayed as an error without src, in Chrome

Fixes #222
2018-09-29 18:29:22 +01:00
Baptiste Gelez 05f3ecabd6 Merge pull request #248 from maximesrd/patch-4
Bad commands in the update guide
2018-09-29 17:03:33 +01:00
maximesrd a1530791ef Update UPDATE.md 2018-09-29 18:00:48 +02:00
Baptiste Gelez 236cf14406 Merge pull request #245 from Plume-org/rest-api
Some API endpoints for articles
2018-09-29 16:33:31 +01:00
Bat 72fd9eb610 API: Filter posts in the list 2018-09-29 15:45:27 +01:00
maximesrd 3b288c2dad Update UPDATE.md 2018-09-29 15:34:59 +02:00
maximesrd b97b0233da Update UPDATE.md 2018-09-29 15:34:29 +02:00
maximesrd db4c939be8 Bad commands 2018-09-29 15:02:17 +02:00
Baptiste Gelez 975f8d0393 Merge pull request #246 from fediverse-pl/master
i18n: Update Polish translation
2018-09-27 19:25:12 +01:00
Marcin Mikołajczak 47eeed1008 i18n: Update Polish translation
Signed-off-by: Marcin Mikołajczak <me@m4sk.in>
2018-09-27 12:42:09 +02:00
Bat f893056d6d Mount the API endpoints 2018-09-25 20:45:32 +01:00
Bat 472da486e9 Fix the canapi::Provider impl for Post 2018-09-25 20:10:18 +01:00
Baptiste Gelez ba3dd3304c Merge pull request #243 from rhonda/master
Updated German translation
2018-09-25 15:38:58 +01:00
Rhonda D'Vine 88d8fb95c3 Updated German translation 2018-09-25 16:27:59 +02:00
Baptiste Gelez 9650fdbfb5 Merge pull request #242 from Atul9/fix-broken-link
#227 Fix broken link on blog page
2018-09-24 20:35:20 +01:00
Atul Bhosale 3dce53d899 Fix broken link on blog page 2018-09-24 23:46:32 +05:30
Baptiste Gelez 05fb7c9b42 Merge pull request #238 from Plume-org/csrf-issues
Fix CSRF issues
2018-09-21 13:37:35 +01:00
Baptiste Gelez 7afe249a75 Merge pull request #240 from OpenAlgeria/patch-1
Update INSTALL.md
2018-09-20 19:23:49 +01:00
OpenAlgeria 5d21e26406 Update INSTALL.md 2018-09-20 15:21:32 +02:00
Bat d8ca1d70b7 Fix CSRF issues
GET routes are not protected against CSRF. This commit changes the needed URLs to
POST and replace simple links with forms.

Thanks @fdb-hiroshima for noticing it!
2018-09-19 18:13:07 +01:00
Trinity Pointard f0fb030c7f Update recommended nginx config
Update recommended nginx config to allow iframes
close #234
2018-09-19 18:18:39 +02:00
Bat 1500267125 Add canapi and try to use for the API 2018-09-19 15:49:34 +01:00
Trinity Pointard fab6360100 Be less restrictive on authorized html tags
Allow users to add ids to tags
Allow users to use iframes
2018-09-19 10:51:27 +02:00
Baptiste Gelez 2bc6052a35 Replace plume by DATABASE_NAME in the docs
To make it clearer you can have multiple Plume instances/databases on the same server, and that this part of the URL may change too.
2018-09-18 21:40:20 +01:00
Baptiste Gelez d8bfd6d39f Create ISSUE_TEMPLATE.md 2018-09-18 15:40:17 +01:00
Baptiste Gelez 064c5961e7 Add a CoC
Finally!
2018-09-18 13:59:43 +01:00
Baptiste Gelez eb24ba1774 Merge pull request #223 from igalic/fix/safe-string
make blog/instance description a SafeString
2018-09-14 20:56:13 +01:00
Igor Galić fb074e6344 render SafeString thru |safe
thanks again to @fdb-hiroshima for pointing me in the right direction!
2018-09-14 21:44:32 +02:00
Igor Galić 06718a5c8a directly use SafeString in InstanceSettingsForm 2018-09-14 20:25:16 +02:00
Igor Galić d62c72dde0 allocate new SafeString in FromFormValue impl
thanks to @fdb-hiroshima for this review!
2018-09-14 19:50:59 +02:00
Igor Galić 0897088aa5 add implementation for FromFormValue for SafeString
thanks again to @pwoolcoc for this!
2018-09-14 18:26:42 +02:00
Igor Galić 65e213309b do not allocate empty strings
follow review from @pwoolcoc, and do not use

    SafeString::new(&<String>::new())

since this makes an allocation which will then just be thrown away.
Instead, we pass ""
2018-09-14 18:24:27 +02:00
Igor Galić f5c299f23c make blog/instance description a SafeString
long_description & short_description's documentation say they can be
Markdown, but they are String, not SafeString.

This led to escaped strings being printed in the editor
https://github.com/Plume-org/Plume/issues/220
2018-09-14 15:14:24 +02:00
Baptiste Gelez d355379e01 Merge pull request #219 from igalic/fix/env-howto
improve installation "docs"
2018-09-13 19:38:00 +01:00
Igor Galić e7b5d81687 gitignore docker-compose.yml 2018-09-13 17:21:20 +02:00
Igor Galić dfc76757bb fix comment in docker.sample.env
docker's sample .env file under docs/ which contains the wrong command
to generate a rocket secret_key
2018-09-13 17:18:25 +02:00
Bat 5b138df8ce Remove duplicated message in gl.po 2018-09-12 17:07:41 +01:00
Bat 0200a7b223 Only send notifications for mentions if the post is not a draft 2018-09-12 17:00:00 +01:00
Bat b01212f4a6 Make it impossible to view drafts if you are not the author
Even if you got the URL
2018-09-12 16:58:38 +01:00
656 changed files with 66755 additions and 12321 deletions
+257
View File
@@ -0,0 +1,257 @@
version: 2.1
executors:
default:
parameters:
postgres:
type: boolean
default: false
selenium:
type: boolean
default: false
docker:
- image: plumeorg/plume-buildenv:v0.0.9
- image: <<#parameters.postgres>>circleci/postgres:9.6-alpine<</parameters.postgres>><<^parameters.postgres>>alpine:latest<</parameters.postgres>>
environment:
POSTGRES_USER: postgres
POSTGRES_DB: plume
- image: <<#parameters.selenium>>elgalu/selenium:latest<</parameters.selenium>><<^parameters.selenium>>alpine:latest<</parameters.selenium>>
working_directory: ~/projects/Plume
environment:
RUST_TEST_THREADS: 1
FEATURES: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
DATABASE_URL: <<#parameters.postgres>>postgres://postgres@localhost/plume<</parameters.postgres>><<^parameters.postgres>>plume.sqlite<</parameters.postgres>>
commands:
restore_env:
description: checkout and pull cache
parameters:
cache:
type: enum
default: none
enum: ["none", "clippy", "postgres", "sqlite", "release-postgres", "release-sqlite"]
steps:
- checkout
- run: git config --global --remove-section url."ssh://git@github.com"
- restore_cache:
keys:
- v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-{{ .Branch }}
- v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-master
cache:
description: push cache
parameters:
cache:
type: enum
enum: ["clippy", "postgres", "sqlite", "release-postgres", "release-sqlite"]
steps:
- save_cache:
key: v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-{{ .Branch }}
paths:
- ~/.cargo/
- ./target
clippy:
description: run cargo clippy
parameters:
package:
type: string
default: plume
no_feature:
type: boolean
default: false
steps:
- run: cargo clippy <<^parameters.no_feature>>--no-default-features --features="${FEATURES}"<</parameters.no_feature>> --release -p <<parameters.package>> -- -D warnings
run_with_coverage:
description: run command with environment for coverage
parameters:
cmd:
type: string
steps:
- run: |
export RUSTFLAGS="-Zprofile -Zfewer-names -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads -Clink-arg=-Xlinker -Clink-arg=--no-keep-memory -Clink-arg=-Xlinker -Clink-arg=--reduce-memory-overheads"
export CARGO_INCREMENTAL=0
<< parameters.cmd >>
upload_coverage:
description: merge coverage files and upload to codecov.io
parameters:
type:
type: string
steps:
- run: zip -0 ccov.zip `find . -name 'plume*.gc*' -o -name 'plm*.gc*'`
- run: grcov ccov.zip -s . -t lcov --llvm --branch --ignore-not-existing --ignore '/*' -o lcov.info
- run: bash <(curl -s https://codecov.io/bash) -f lcov.info -F <<parameters.type>>
- run: find . -name 'plume*.gc*' -delete -o -name 'plm*.gc*' -delete
- run: rm ccov.zip lcov.info
build:
description: build a package
parameters:
package:
type: string
default: plume
release:
type: boolean
default: false
steps:
- run: |
cmd="cargo build <<#parameters.release>>--release<</parameters.release>> --no-default-features --features="${FEATURES}" -p <<parameters.package>> -j"
for i in 36 4 2 1 1; do
$cmd $i && exit 0
done
exit 1
jobs:
cargo fmt:
executor:
name: default
steps:
- restore_env
- run: cargo fmt --all -- --check
clippy:
parameters:
postgres:
type: boolean
executor:
name: default
postgres: << parameters.postgres >>
steps:
- restore_env:
cache: clippy
- clippy
- clippy:
package: plume-cli
- clippy:
package: plume-front
no_feature: true
- cache:
cache: clippy
unit:
parameters:
postgres:
type: boolean
executor:
name: default
postgres: << parameters.postgres >>
steps:
- restore_env:
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
- run_with_coverage:
cmd: |
cmd="cargo test --all --exclude plume-front --exclude plume-macro --no-run --no-default-features --features=${FEATURES} -j"
for i in 36 4 2 1 1; do
$cmd $i && break
done
cargo test --all --exclude plume-front --exclude plume-macro --no-default-features --features="${FEATURES}" -j1 -- --test-threads=1
- upload_coverage:
type: unit
- cache:
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
integration:
parameters:
postgres:
type: boolean
executor:
name: default
postgres: << parameters.postgres >>
selenium: true
steps:
- restore_env:
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
- run: cargo web deploy -p plume-front
- run_with_coverage:
cmd: |
cmd="cargo install --debug --no-default-features --features="${FEATURES}",test --force --path . -j"
for i in 36 4 2 1 1; do
$cmd $i && exit 0
done
exit 1
- run_with_coverage:
cmd: |
cmd="cargo install --debug --no-default-features --features="${FEATURES}" --force --path plume-cli -j"
for i in 36 4 2 1 1; do
$cmd $i && exit 0
done
exit 1
- run:
name: run test
command: ./script/run_browser_test.sh
environment:
BROWSER: firefox
- upload_coverage:
type: integration
- cache:
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
release:
parameters:
postgres:
type: boolean
executor:
name: default
postgres: << parameters.postgres >>
steps:
- restore_env:
cache: release-<<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
- run: cargo web deploy -p plume-front --release
- build:
package: plume
release: true
- build:
package: plume-cli
release: true
- cache:
cache: release-<<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
- run: ./script/generate_artifact.sh
- unless:
condition: << parameters.postgres >>
steps:
- run: ./script/upload_test_environment.sh
- store_artifacts:
path: plume.tar.gz
destination: plume.tar.gz
- store_artifacts:
path: wasm.tar.gz
destination: wasm.tar.gz
push translations:
executor:
name: default
steps:
- restore_env:
cache: none
- run: cargo build
- run: crowdin upload -b master
workflows:
version: 2
build and test:
jobs:
- cargo fmt
- clippy:
postgres: false
- clippy:
postgres: true
- unit:
postgres: false
- unit:
postgres: true
- integration:
postgres: false
- integration:
postgres: true
- release:
postgres: false
- release:
postgres: true
- push translations:
filters:
branches:
only:
- /^master/
@@ -0,0 +1,6 @@
localhost:443 {
proxy / localhost:7878 {
transparent
}
tls self_signed
}
@@ -0,0 +1,37 @@
FROM debian:stretch-20190326
ENV PATH="/root/.cargo/bin:${PATH}"
#install native/circleci/build dependancies
RUN apt update &&\
apt install -y --no-install-recommends git ssh tar gzip ca-certificates default-jre&&\
apt install -y --no-install-recommends binutils-dev build-essential cmake curl gcc gettext git libcurl4-openssl-dev libdw-dev libelf-dev libiberty-dev libpq-dev libsqlite3-dev libssl-dev make openssl pkg-config postgresql postgresql-contrib python zlib1g-dev python3-pip zip unzip libclang-dev&&\
rm -rf /var/lib/apt/lists/*
#install and configure rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2020-01-15 -y &&\
rustup component add rustfmt clippy &&\
rustup component add rust-std --target wasm32-unknown-unknown
#compile some deps
RUN cargo install cargo-web &&\
cargo install grcov &&\
strip /root/.cargo/bin/* &&\
rm -fr ~/.cargo/registry
#set some compilation parametters
COPY cargo_config /root/.cargo/config
#install selenium for front end tests
RUN pip3 install selenium
#install and configure caddy
RUN curl https://getcaddy.com | bash -s personal
COPY Caddyfile /Caddyfile
#install crowdin
RUN mkdir /crowdin && cd /crowdin &&\
curl -O https://downloads.crowdin.com/cli/v2/crowdin-cli.zip &&\
unzip crowdin-cli.zip && rm crowdin-cli.zip &&\
cd * && mv crowdin-cli.jar /usr/local/bin && cd && rm -rf /crowdin &&\
/bin/echo -e '#!/bin/sh\njava -jar /usr/local/bin/crowdin-cli.jar $@' > /usr/local/bin/crowdin &&\
chmod +x /usr/local/bin/crowdin
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
[ "$1" = "" ] && echo "you must provide one argument, the build version" && exit 1
docker build -t plumeorg/plume-buildenv:$1 .
docker push plumeorg/plume-buildenv:$1
@@ -0,0 +1,3 @@
[target.x86_64-unknown-linux-gnu]
# link dead code for coverage, attempt to reduce linking memory usage to not get killed
rustflags = ["-Clink-args=-Xlinker --no-keep-memory -Xlinker --reduce-memory-overheads"]
+26
View File
@@ -0,0 +1,26 @@
codecov:
notify:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
status:
project: no
patch: no
changes: no
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "header, diff"
behavior: default
require_changes: no
+3 -2
View File
@@ -5,10 +5,11 @@ end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{js,rs,css,tera}]
[*.{js,rs,css,tera,html}]
charset = utf-8
indent_size = 4
[*.{rs,tera,css}]
[*.{rs,tera,css,html}]
indent_style = space
indent_size = 4
Executable
+47
View File
@@ -0,0 +1,47 @@
# This file contains your instance configuration
# Some documentation about these variables is available here:
# https://docs.joinplu.me/environment/
## GENERAL SETTINGS ##
# The directory containing database migrations
# For Postgres: migrations/postgres
# For SQlite: migrations/sqlite
MIGRATION_DIRECTORY=migrations/postgres
# The URL of your database (or its path for SQlite databases)
DATABASE_URL=postgres://plume:plume@localhost/plume
# The domain of your instance
BASE_URL=plu.me
# The secret key for private cookies and CSRF protection
# You can generate one with `openssl rand -base64 32`
ROCKET_SECRET_KEY=
# Port and address which Plume will use
ROCKET_PORT=7878
ROCKET_ADDRESS=127.0.0.1
## MAIL CONFIG ##
#MAIL_SERVER=smtp.plu.me
#MAIL_ADDRESS=no-reply@plu.me
#MAIL_USER=plume
#MAIL_PASSWORD=
#MAIL_HELO_NAME=no-reply@plu.me
## ADVANCED OPTIONS ##
#MEDIA_UPLOAD_DIRECTORY=static/media
#SEARCH_INDEX=search_index
# Sample logo configuration
#PLUME_LOGO=icons/trwnh/paragraphs/plumeParagraphs.svg
#PLUME_LOGO_FAVICON=icons/trwnh/paragraphs/plumeParagraphs32.png
#PLUME_LOGO_48=icons/trwnh/paragraphs/plumeParagraphs48.png
#PLUME_LOGO_72=icons/trwnh/paragraphs/plumeParagraphs72.png
#PLUME_LOGO_96=icons/trwnh/paragraphs/plumeParagraphs96.png
#PLUME_LOGO_144=icons/trwnh/paragraphs/plumeParagraphs144.png
#PLUME_LOGO_160=icons/trwnh/paragraphs/plumeParagraphs160.png
#PLUME_LOGO_192=icons/trwnh/paragraphs/plumeParagraphs192.png
#PLUME_LOGO_256=icons/trwnh/paragraphs/plumeParagraphs256.png
#PLUME_LOGO_512=icons/trwnh/paragraphs/plumeParagraphs512.png
+18
View File
@@ -0,0 +1,18 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'C: Bug'
assignees: ''
---
<!-- Describe your bug, explaining how to reproduce it, and what was expected -->
<!-- Please fill the following information when relevant (or remove them if not) -->
- **Plume version:** You can find it in the footer of your instance. If you know the exact commit, please also add it.
- **Operating system:**
- **Web Browser:**
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+14 -3
View File
@@ -1,10 +1,21 @@
rls
/target
**/*.rs.bk
rls
translations
po/*.po~
*.po~
.env
Rocket.toml
media
!.gitkeep
static
docker-compose.yml
*.db
*.sqlite
*.sqlite3
*.swp
tags.*
!tags.rs
search_index
.buildconfig
__pycache__
.vscode/
-4
View File
@@ -1,4 +0,0 @@
language: rust
rust:
- nightly
cache: cargo
+2
View File
@@ -0,0 +1,2 @@
You can read our Code of Conduct [here](https://docs.joinplu.me/organization/code-of-conduct).
By contributing to this repository, you agree to be bound by this Code of Conduct.
Generated
+2828 -1568
View File
File diff suppressed because it is too large Load Diff
+60 -35
View File
@@ -1,61 +1,86 @@
[package]
authors = ["Bat' <baptiste@gelez.xyz>"]
authors = ["Plume contributors"]
name = "plume"
version = "0.2.0"
version = "0.4.0"
repository = "https://github.com/Plume-org/Plume"
edition = "2018"
[dependencies]
activitypub = "0.1.3"
askama_escape = "0.1"
async-trait = "*"
atom_syndication = "0.6"
colored = "1.6"
dotenv = "0.13"
failure = "0.1"
gettext-rs = "0.4"
clap = "2.33"
colored = "1.8"
dotenv = "0.14"
gettext = { git = "https://github.com/Plume-org/gettext/", rev = "294c54d74c699fbc66502b480a37cc66c1daa7f3" }
gettext-macros = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
gettext-utils = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
guid-create = "0.1"
heck = "0.3.0"
multipart = "0.15"
rpassword = "2.0"
lettre = "0.9.2"
lettre_email = "0.9.2"
num_cpus = "1.10"
rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" }
rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", rev = "async" , features = ["json"] }
rpassword = "4.0"
scheduled-thread-pool = "0.2.2"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
tera = "0.11"
validator = "0.7"
validator_derive = "0.7"
webfinger = "0.3"
workerpool = "1.1"
serde_qs = "0.5"
shrinkwraprs = "0.2.1"
syntect = "3.3"
tokio = "0.2"
validator = "0.10"
validator_derive = "0.10"
webfinger = { git = "https://github.com/Plume-org/webfinger", rev = "4e8f12810c4a7ba7a07bbcb722cd265fdff512b6", features = ["async"] }
[[bin]]
name = "plume"
path = "src/main.rs"
[dependencies.chrono]
features = ["serde"]
version = "0.4"
[dependencies.ctrlc]
features = ["termination"]
version = "3.1.2"
[dependencies.diesel]
features = ["postgres", "r2d2", "chrono"]
features = ["r2d2", "chrono"]
version = "*"
[dependencies.multipart]
default-features = false
features = ["server"]
version = "0.16"
[dependencies.plume-api]
path = "plume-api"
[dependencies.plume-common]
path = "plume-common"
[dependencies.plume-models]
path = "plume-models"
[dependencies.rocket]
git = "https://github.com/SergioBenitez/Rocket"
rev = "55459db7732b9a240826a5c120c650f87e3372ce"
[dependencies.rocket_codegen]
git = "https://github.com/SergioBenitez/Rocket"
rev = "55459db7732b9a240826a5c120c650f87e3372ce"
[dependencies.rocket_contrib]
features = ["tera_templates", "json"]
git = "https://github.com/SergioBenitez/Rocket"
rev = "55459db7732b9a240826a5c120c650f87e3372ce"
[dependencies.rocket_csrf]
git = "https://github.com/fdb-hiroshima/rocket_csrf"
rev = "5d23ba4c6c2ee4c41040d428d24344db3d29997f"
[dependencies.rocket_i18n]
git = "https://github.com/BaptisteGelez/rocket_i18n"
rev = "75a3bfd7b847324c078a355a7f101f8241a9f59b"
git = "https://github.com/Plume-org/rocket_i18n"
branch = "go-async"
default-features = false
features = ["rocket"]
[build-dependencies]
ructe = "0.9.0"
rsass = "0.9"
[features]
default = ["postgres"]
postgres = ["plume-models/postgres", "diesel/postgres"]
sqlite = ["plume-models/sqlite", "diesel/sqlite"]
debug-mailer = []
test = []
[workspace]
members = ["plume-models", "plume-common"]
members = ["plume-api", "plume-cli", "plume-models", "plume-common", "plume-front", "plume-macro"]
+33 -7
View File
@@ -1,6 +1,7 @@
FROM rust:1-stretch
FROM rust:1-stretch as builder
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
gettext \
postgresql-client \
libpq-dev \
@@ -9,12 +10,37 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
make \
openssl \
libssl-dev
libssl-dev \
clang
WORKDIR /scratch
COPY script/wasm-deps.sh .
RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.2.0'
COPY Cargo.toml Cargo.lock rust-toolchain ./
RUN cargo install cargo-web
COPY . .
RUN cargo build
RUN rm -rf target/debug/incremental
CMD ["cargo", "run"]
RUN chmod a+x ./script/plume-front.sh && sleep 1 && ./script/plume-front.sh
RUN cargo install --path ./ --force --no-default-features --features postgres
RUN cargo install --path plume-cli --force --no-default-features --features postgres
RUN cargo clean
FROM debian:stretch-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
libpq5 \
libssl1.1
WORKDIR /app
COPY --from=builder /app /app
COPY --from=builder /usr/local/cargo/bin/plm /bin/
COPY --from=builder /usr/local/cargo/bin/plume /bin/
CMD ["plume"]
EXPOSE 7878
+33
View File
@@ -0,0 +1,33 @@
FROM rust:1-stretch
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
gettext \
postgresql-client \
libpq-dev \
git \
curl \
gcc \
make \
openssl \
libssl-dev
WORKDIR /scratch
COPY script/wasm-deps.sh .
RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
WORKDIR /app
COPY Cargo.toml Cargo.lock rust-toolchain ./
RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.3.0'
RUN cargo install cargo-web
COPY . .
RUN chmod a+x ./script/plume-front.sh && sleep 1 && ./script/plume-front.sh
RUN cargo install --path ./ --force --no-default-features --features postgres
RUN cargo install --path plume-cli --force --no-default-features --features postgres
RUN cargo clean
CMD ["plume"]
EXPOSE 7878
+49 -7
View File
@@ -1,13 +1,55 @@
# Plume [![Build Status](https://travis-ci.org/Plume-org/Plume.svg?branch=master)](https://travis-ci.org/Plume-org/Plume)
<h1 align="center">
<img src="https://raw.githubusercontent.com/Plume-org/Plume/master/assets/icons/trwnh/feather/plumeFeather64.png" alt="Plume's logo">
Plume
</h1>
<p align="center">
<a href="https://github.com/Plume-org/Plume/"><img alt="CircleCI" src="https://img.shields.io/circleci/build/gh/Plume-org/Plume.svg"></a>
<a href="https://codecov.io/gh/Plume-org/Plume"><img src="https://codecov.io/gh/Plume-org/Plume/branch/master/graph/badge.svg" alt="Code coverage"></a>
<a title="Crowdin" target="_blank" href="https://crowdin.com/project/plume"><img src="https://d322cqt584bo4o.cloudfront.net/plume/localized.svg"></a>
<a href="https://hub.docker.com/r/plumeorg/plume"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/plumeorg/plume.svg"></a>
<a href="https://liberapay.com/Plume"><img alt="Liberapay patrons" src="https://img.shields.io/liberapay/patrons/Plume.svg"></a>
</p>
<p align="center">
<a href="https://joinplu.me/">Website</a>
<a href="https://docs.joinplu.me/">Documentation</a>
<a href="https://docs.joinplu.me/contribute">Contribute</a>
<a href="https://joinplu.me/#instances">Instances list</a>
</p>
Federated blogging engine, based on ActivityPub. It uses the Rocket framework, and Diesel to interact with the database.
Plume is a **federated blogging engine**, based on *ActivityPub*. It is written in *Rust*, with the *Rocket* framework, and *Diesel* to interact with the database.
The front-end uses *Ructe* templates, *WASM* and *SCSS*.
[**Demo instance**](https://baptiste.gelez.xyz/)
## Features
It is not yet ready for production use, but we have all the basic features (account management, blogs, articles, comments, etc) and a basic federation.
A lot of features are still missing, but what is already here should be quite stable. Current and planned features include:
Feel free to join our Matrix room: `#plume:disroot.org` to discuss about the project!
- **A blog-centric approach**: you can create as much blogs as you want with your account, to keep your different publications separated.
- **Media management**: you can upload pictures to illustrate your articles, but also audio files if you host a podcast, and manage them all from Plume.
- **Federation**: Plume is part of a network of interconnected websites called the Fediverse. Each of these websites (often called *instances*) have their own
rules and thematics, but they can all communicate with each other.
- **Collaborative writing**: invite other people to your blogs, and write articles together.
If you are interested in coding, check out the [development guide](https://github.com/Plume-org/Plume/blob/master/docs/DEVELOPMENT.md). You can also help by reporting issues, suggesting features, or writing documentation for instance.
## Get involved
If you would like to help by translating Plume, we also have [a guide for you](https://github.com/Plume-org/Plume/blob/master/docs/INTERNATIONALIZATION.md)!
If you want to have regular news about the project, the best place is probably [our blog](https://fediverse.blog/~/PlumeDev), or our Matrix room: [`#plume:disroot.org`](https://riot.im/app/#/room/#plume:disroot.org).
If you want to contribute more, a good first step is to read [our contribution guides](https://docs.joinplu.me/contribute). We accept all kind of contribution:
- [Back-end or front-end development](https://docs.joinplu.me/contribute/development/)
- [Translations](https://docs.joinplu.me/contribute/translations/)
- [Documentation](https://docs.joinplu.me/contribute/documentation/)
- UI and/or UX design (we don't have a dedicated guide yet, but [we can talk](https://docs.joinplu.me/contribute/discussion/) to see how we can work together!)
- [Taking part in discussions](https://docs.joinplu.me/contribute/discussion/)
- [Financial support](https://docs.joinplu.me/contribute/donations/)
But this list is not exhaustive and if you want to contribute differently you are welcome too!
As we want the various spaces related to the project (GitHub, Matrix, Loomio, etc) to be as safe as possible for everyone, we adopted [a code of conduct](https://docs.joinplu.me/organization/code-of-conduct). Please read it and make sure you accept it before contributing.
## Starting your own instance
We provide various way to install Plume: from source, with pre-built binaries, with Docker or with YunoHost.
For detailed explanations, please refer to [the documentation](https://docs.joinplu.me/installation/).
+21
View File
@@ -0,0 +1,21 @@
# plumeLogos
Logos designed for Plume, a federated blogging platform similar to Medium. Licensed under CC0.
# 1st place design - "Feather"
Path | Filled | Silhouette
--- | --- | ---
![plumeFeather](https://raw.githubusercontent.com/trwnh/plumeLogos/master/plumeFeather/plumeFeather512.png) | ![plumeFeatherFilled](https://raw.githubusercontent.com/trwnh/plumeLogos/master/plumeFeatherFilled/plumeFeatherFilled512.png) | ![plumeFeatherBlack](https://raw.githubusercontent.com/trwnh/plumeLogos/master/plumeFeatherBlack/plumeFeatherBlack512.png)
# 2nd place design - "Paragraphs"
Filled | Silhouette
--- | ---
![plumeParagraphs](https://raw.githubusercontent.com/trwnh/plumeLogos/master/plumeParagraphs/plumeParagraphs512.png) | ![plumeParagraphsBlack](https://raw.githubusercontent.com/trwnh/plumeLogos/master/plumeParagraphsBlack/plumeParagraphsBlack512.png)
# Links
You may find me at the following locations:
- Website: http://trwnh.com
- ActivityPub: https://mastodon.social/@trwnh
If you'd like to support me, you can do so:
- One-time: https://paypal.me/trwnh
- Recurring: https://liberapay.com/trwnh
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+98
View File
@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg15"
inkscape:export-filename="D:\Graphics\PlumeLogo\bitmap2.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="avatar.svg">
<defs
id="defs9" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="279.74234"
inkscape:cy="218.7282"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="2560"
inkscape:window-height="1537"
inkscape:window-x="1192"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:date></dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:description></dc:description>
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53331)">
<rect
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:4.85634375;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="rect841"
width="135.46666"
height="135.46666"
x="8.8817842e-016"
y="161.53331" />
<path
style="fill:#23f0c7;fill-opacity:1;stroke:#6457a6;stroke-width:2.91530514;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 28.826096,270.43068 c -6.976501,7.08897 -7.436088,4.96174 -4.772319,-1.71088 l 8.05564,-13.88309 c 1.101374,0.27652 9.473163,-37.68433 37.333861,-55.89472 -6.28866,10.76816 -2.671731,12.82203 -2.671731,12.82203 5.003859,-14.9808 9.310078,-20.98157 45.239673,-26.39697 -10.33969,7.78434 -4.40034,28.13223 -34.187672,37.65383 8.649305,-1.86369 17.608827,-5.95826 21.60301,-10.68238 -2.21961,15.27854 -35.385456,41.08338 -57.858054,44.32106 z"
id="path872"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg169"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="plumeFeatherBlack.svg"
inkscape:export-filename="D:\Graphics\PlumeLogo\plumeFeatherFilled16.png"
inkscape:export-xdpi="3.0000005"
inkscape:export-ydpi="3.0000005">
<title
id="title8">Plume Logo - Feather (Black)</title>
<defs
id="defs163" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="126.20524"
inkscape:cy="304.85245"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1200"
inkscape:window-height="1577"
inkscape:window-x="3752"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata166">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Plume Logo - Feather (Black)</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:date>2018/10/07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:description>A Plume concept logo, with a soft stylized feather. Solid black fill, no path.</dc:description>
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.2751441;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:normal"
d="M 11.343027,288.41445 C 1.112349,298.81005 0.43838995,295.69058 4.3446684,285.90553 L 16.157848,265.54671 c 1.615107,0.40548 13.891904,-55.26212 54.748175,-81.96673 -9.221995,15.79094 -3.917955,18.80285 -3.917955,18.80285 7.337901,-21.96856 13.652749,-30.76839 66.341642,-38.70978 -15.16261,11.41531 -6.45286,41.25445 -50.134453,55.21738 12.683753,-2.73301 25.822443,-8.73747 31.679703,-15.66516 -3.25494,22.40519 -51.89095,60.24666 -84.84585,64.99456 z"
id="path872"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg169"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="plumeFeatherFilled.svg"
inkscape:export-filename="D:\Graphics\PlumeLogo\plumeFeather16.png"
inkscape:export-xdpi="3.0000005"
inkscape:export-ydpi="3.0000005">
<title
id="title8">Plume Logo - Feather (Filled)</title>
<defs
id="defs163" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="126.20524"
inkscape:cy="304.85245"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1200"
inkscape:window-height="1577"
inkscape:window-x="3752"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata166">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Plume Logo - Feather (Filled)</dc:title>
<dc:date>2018/10/07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:description>A Plume concept logo, with a soft stylized feather. Solid path, solid fill.</dc:description>
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<path
style="fill:#7765e3;fill-opacity:1;stroke:#6457a6;stroke-width:4.2751441;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 11.343027,288.41445 C 1.112349,298.81005 0.43838995,295.69058 4.3446684,285.90553 L 16.157848,265.54671 c 1.615107,0.40548 13.891904,-55.26212 54.748175,-81.96673 -9.221995,15.79094 -3.917955,18.80285 -3.917955,18.80285 7.337901,-21.96856 13.652749,-30.76839 66.341642,-38.70978 -15.16261,11.41531 -6.45286,41.25445 -50.134453,55.21738 12.683753,-2.73301 25.822443,-8.73747 31.679703,-15.66516 -3.25494,22.40519 -51.89095,60.24666 -84.84585,64.99456 z"
id="path872"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg169"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="plumeFeather.svg">
<title
id="title8">Plume Logo - Feather</title>
<defs
id="defs163" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="126.20524"
inkscape:cy="304.85245"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1200"
inkscape:window-height="1577"
inkscape:window-x="3752"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata166">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Plume Logo - Feather</dc:title>
<dc:date>2018/10/07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
<dc:description>A Plume concept logo, with a soft stylized feather. Solid path, no fill.</dc:description>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:4.2751441;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 11.343027,288.41445 C 1.112349,298.81005 0.43838995,295.69058 4.3446684,285.90553 L 16.157848,265.54671 c 1.615107,0.40548 13.891904,-55.26212 54.748175,-81.96673 -9.221995,15.79094 -3.917955,18.80285 -3.917955,18.80285 7.337901,-21.96856 13.652749,-30.76839 66.341642,-38.70978 -15.16261,11.41531 -6.45286,41.25445 -50.134453,55.21738 12.683753,-2.73301 25.822443,-8.73747 31.679703,-15.66516 -3.25494,22.40519 -51.89095,60.24666 -84.84585,64.99456 z"
id="path872"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

+937
View File
@@ -0,0 +1,937 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="960"
height="960"
viewBox="0 0 254.00001 254.00001"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="ideas.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.54564743"
inkscape:cx="221.3257"
inkscape:cy="919.03811"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1537"
inkscape:window-x="1192"
inkscape:window-y="-8"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-42.999987)">
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 69.85882,92.20221 c -0.5487,0.512822 -0.64839,0.410692 -0.45707,-0.09006 l 0.57858,-1.041859 c -0.007,-7.6e-4 0.25105,-2.591729 2.14637,-4.196711 -0.55421,0.73823 -0.1856,0.970428 -0.1856,0.970428 0.16564,-1.162926 1.36891,-2.088642 3.9209,-1.929573 -0.24528,0.570492 -0.36321,1.821981 -2.72227,2.289111 0.62122,-0.139865 1.34716,-0.08596 1.63403,-0.440476 -0.51187,1.242423 -2.5,3.201047 -4.11405,3.444016 z"
id="path42"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="77.00631"
y="92.570526"
id="text851"><tspan
sodipodi:role="line"
id="tspan849"
x="77.00631"
y="92.570526"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:'Playfair Display';-inkscape-font-specification:'Playfair Display';fill:#7765e3;fill-opacity:1;stroke-width:0.26458332">Plume</tspan></text>
<rect
style="fill:#23f0c7;fill-opacity:1;stroke-width:0.26458332"
id="rect815"
width="7.6729164"
height="7.6729164"
x="10.034603"
y="82.960335" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="20.617937"
y="89.574921"
id="text819"><tspan
sodipodi:role="line"
id="tspan817"
x="20.617937"
y="89.574921"
style="font-size:8.46666622px;stroke-width:0.26458332">#23F0C7</tspan></text>
<rect
y="93.940544"
x="9.9023113"
height="7.6729164"
width="7.6729164"
id="rect821"
style="fill:#ef767a;fill-opacity:1;stroke-width:0.26458332" />
<text
id="text825"
y="100.55513"
x="20.485645"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="100.55513"
x="20.485645"
id="tspan823"
sodipodi:role="line">#EF767A</tspan></text>
<rect
style="fill:#7765e3;fill-opacity:1;stroke-width:0.26458332"
id="rect827"
width="7.6729164"
height="7.6729164"
x="10.034603"
y="104.92075" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="20.617937"
y="111.53533"
id="text831"><tspan
sodipodi:role="line"
id="tspan829"
x="20.617937"
y="111.53533"
style="font-size:8.46666622px;stroke-width:0.26458332">#7765E3</tspan></text>
<rect
y="115.76867"
x="9.9023113"
height="7.6729164"
width="7.6729164"
id="rect833"
style="fill:#6457a6;fill-opacity:1;stroke-width:0.26458332" />
<text
id="text837"
y="122.38325"
x="20.485645"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="122.38325"
x="20.485645"
id="tspan835"
sodipodi:role="line">#6457A6</tspan></text>
<rect
style="fill:#ffe347;fill-opacity:1;stroke-width:0.26458332"
id="rect839"
width="7.6729164"
height="7.6729164"
x="9.7700195"
y="126.61658" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="20.353354"
y="133.23117"
id="text843"><tspan
sodipodi:role="line"
id="tspan841"
x="20.353354"
y="133.23117"
style="font-size:8.46666622px;stroke-width:0.26458332">#FFE347</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="10.960646"
y="74.758255"
id="text847"><tspan
sodipodi:role="line"
id="tspan845"
x="10.960646"
y="74.758255"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';stroke-width:0.26458332">Color Palette</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.69999981px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="6.8596044"
y="58.486385"
id="text852"><tspan
sodipodi:role="line"
id="tspan850"
x="6.8596044"
y="58.486385"
style="font-size:12.69999981px;stroke-width:0.26458332">Title Typeface: Playfair Display</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="68.904396"
y="74.758255"
id="text839"><tspan
sodipodi:role="line"
id="tspan837"
x="68.904396"
y="74.758255"
style="font-size:8.46666622px;stroke-width:0.26458332">UI Font: Route 159</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="76.8638"
y="104.0499"
id="text844"><tspan
sodipodi:role="line"
id="tspan842"
x="76.8638"
y="104.0499"
style="fill:#7765e3;fill-opacity:1;stroke-width:0.26458332">Plume</tspan></text>
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 71.74765,98.290683 c 1.37113,-1.920604 3.80809,0.628063 3.01505,1.725877 -1.34381,1.86029 -2.18368,0.78236 -2.47817,0.60069 -0.21724,-0.13401 -0.35139,-0.13769 -1.03242,1.36807 -0.43606,0.9641 -0.38316,-0.0251 -1.02782,0.51806 -0.94901,0.79954 -1.15413,1.2921 -1.28107,1.54951 z"
id="path848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssscc" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path852"
d="m 143.19172,92.524382 c -0.40373,0.365809 -0.47709,0.292957 -0.33631,-0.06424 l 0.42572,-0.743185 c -0.005,-5.42e-4 0.18472,-1.848748 1.57931,-2.993623 -0.40779,0.526599 -0.13657,0.692232 -0.13657,0.692232 0.12188,-0.829546 1.00726,-1.489883 2.88502,-1.376415 -0.18048,0.406947 -0.26725,1.299666 -2.00306,1.632882 0.45709,-0.09977 0.99125,-0.06132 1.20232,-0.314203 -0.37663,0.886253 -1.83951,2.28339 -3.02713,2.456706 z"
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text856"
y="92.533737"
x="148.31642"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:'Playfair Display';-inkscape-font-specification:'Playfair Display';fill:#7765e3;fill-opacity:1;stroke-width:0.26458332"
y="92.533737"
x="148.31642"
id="tspan854"
sodipodi:role="line">Plume</tspan></text>
<text
id="text860"
y="103.52074"
x="148.43326"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:'Route 159';-inkscape-font-specification:'Route 159, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#7765e3;fill-opacity:1;stroke-width:0.26458332"
y="103.52074"
x="148.43326"
id="tspan858"
sodipodi:role="line">Plume</tspan></text>
<path
sodipodi:nodetypes="csssscc"
inkscape:connector-curvature="0"
id="path862"
d="m 144.16942,99.835614 c 0.9823,-1.284602 2.72818,0.420086 2.16003,1.154356 -0.96272,1.24426 -1.56442,0.52328 -1.7754,0.40178 -0.15564,-0.0896 -0.25174,-0.0921 -0.73965,0.91503 -0.3124,0.64484 -0.2745,-0.0168 -0.73634,0.34651 -0.67989,0.53477 -0.82684,0.86422 -0.91777,1.03639 z"
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.36630338;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path864"
d="m 104.78391,92.20221 c -0.5487,0.512822 -0.64839,0.410692 -0.45707,-0.09006 l 0.57858,-1.041859 c -0.007,-7.6e-4 0.25105,-2.591729 2.14638,-4.196711 -0.55421,0.73823 -0.1856,0.970428 -0.1856,0.970428 0.16564,-1.162926 1.36892,-2.088642 3.92092,-1.929573 -0.24528,0.570492 -0.36321,1.821981 -2.72228,2.289111 0.62122,-0.139865 1.34717,-0.08596 1.63404,-0.440476 -0.51188,1.242423 -2.50002,3.201047 -4.11408,3.444016 z"
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text868"
y="92.570526"
x="111.93127"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:'Playfair Display';-inkscape-font-specification:'Playfair Display';fill:#7765e3;fill-opacity:1;stroke-width:0.26458332"
y="92.570526"
x="111.93127"
id="tspan866"
sodipodi:role="line">Plume</tspan></text>
<text
id="text872"
y="104.0499"
x="112.31797"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="fill:#7765e3;fill-opacity:1;stroke-width:0.26458332"
y="104.0499"
x="112.31797"
id="tspan870"
sodipodi:role="line">Plume</tspan></text>
<path
sodipodi:nodetypes="csssscc"
inkscape:connector-curvature="0"
id="path874"
d="m 107.20192,98.290683 c 1.37114,-1.920604 3.80811,0.628063 3.01507,1.725877 -1.34382,1.86029 -2.1837,0.78236 -2.47819,0.60069 -0.21724,-0.13401 -0.35139,-0.13769 -1.03243,1.36807 -0.43606,0.9641 -0.38316,-0.0251 -1.02782,0.51806 -0.94901,0.79954 -1.15414,1.2921 -1.28108,1.54951 z"
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 168.06271,92.524382 c -0.40373,0.365809 -0.47709,0.292957 -0.33631,-0.06424 l 0.42572,-0.743185 c -0.005,-5.42e-4 0.18472,-1.848748 1.57931,-2.993623 -0.40779,0.526599 -0.13657,0.692232 -0.13657,0.692232 0.12188,-0.829546 1.00726,-1.489883 2.88502,-1.376415 -0.18048,0.406947 -0.26725,1.299666 -2.00306,1.632882 0.45709,-0.09977 0.99125,-0.06132 1.20232,-0.314203 -0.37663,0.886253 -1.83951,2.28339 -3.02713,2.456706 z"
id="path876"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="173.18692"
y="92.533737"
id="text880"><tspan
sodipodi:role="line"
id="tspan878"
x="173.18692"
y="92.533737"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:'Playfair Display';-inkscape-font-specification:'Playfair Display';fill:#7765e3;fill-opacity:1;stroke-width:0.26458332">Plume</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="173.30376"
y="103.52074"
id="text884"><tspan
sodipodi:role="line"
id="tspan882"
x="173.30376"
y="103.52074"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:'Route 159';-inkscape-font-specification:'Route 159, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#7765e3;fill-opacity:1;stroke-width:0.26458332">Plume</tspan></text>
<path
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.36630338;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 169.04041,99.835614 c 0.9823,-1.284602 2.72818,0.420086 2.16003,1.154356 -0.96272,1.24426 -1.56442,0.52328 -1.7754,0.40178 -0.15564,-0.0896 -0.25174,-0.0921 -0.73965,0.91503 -0.3124,0.64484 -0.2745,-0.0168 -0.73634,0.34651 -0.67989,0.53477 -0.82684,0.86422 -0.91777,1.03639 z"
id="path886"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssscc" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path888"
d="m 68.396255,129.68564 c -1.28956,1.21053 -1.52385,0.96945 -1.07421,-0.21258 l 1.35978,-2.45933 c -0.0164,-0.002 0.59002,-6.11784 5.0444,-9.90643 -1.3025,1.74261 -0.4362,2.29071 -0.4362,2.29071 0.38929,-2.74511 3.21722,-4.93028 9.214914,-4.5548 -0.57646,1.34666 -0.85362,4.30083 -6.397884,5.4035 1.45999,-0.33015 3.166094,-0.20292 3.840304,-1.03975 -1.203004,2.93276 -5.875514,7.55614 -9.668854,8.12968 z"
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="csssscc"
inkscape:connector-curvature="0"
id="path890"
d="m 88.438708,116.38099 c 3.60519,-4.67252 10.01282,1.52798 7.92763,4.19879 -3.53335,4.52578 -5.74166,1.90335 -6.51598,1.46139 -0.5712,-0.32605 -0.92393,-0.33498 -2.7146,3.32828 -1.14656,2.34549 -1.00746,-0.061 -2.7025,1.26036 -2.49529,1.94515 -3.03462,3.14347 -3.36839,3.7697 z"
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 90.893098,122.75013 c -2.28627,-2.07603 0.78836,-3.99439 0.78836,-3.99439"
id="path896"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path904"
d="m 160.81806,130.52754 c -1.28956,1.21052 -1.52385,0.96944 -1.07421,-0.21258 l 1.35978,-2.45933 c -0.0164,-0.002 0.59002,-6.11784 5.0444,-9.90644 -1.3025,1.74261 -0.4362,2.29072 -0.4362,2.29072 0.38929,-2.74511 3.21722,-4.93028 9.21491,-4.5548 -0.57646,1.34666 -0.85362,4.30083 -6.39788,5.4035 1.45999,-0.33016 3.16609,-0.20292 3.8403,-1.03975 -1.203,2.93276 -5.87551,7.55614 -9.66885,8.12967 z"
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="csssscc"
inkscape:connector-curvature="0"
id="path906"
d="m 182.82494,117.50352 c 3.60519,-4.67252 10.01282,1.52798 7.92763,4.19879 -3.53335,4.52579 -5.74166,1.90335 -6.51598,1.46139 -0.5712,-0.32605 -0.92393,-0.33498 -2.7146,3.32828 -1.14656,2.3455 -1.00746,-0.061 -2.7025,1.26036 -2.49529,1.94515 -3.03462,3.14347 -3.36839,3.7697 z"
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.43808097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect910"
width="16.495253"
height="16.495253"
x="117.24186"
y="113.9016"
ry="8.2476263" />
<rect
y="113.99515"
x="137.16684"
height="16.495253"
width="16.495253"
id="rect912"
style="fill:#7765e3;fill-opacity:1;stroke:#7765e3;stroke-width:0.43808097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
ry="8.2476263" />
<path
style="fill:#23f0c7;fill-opacity:1;stroke:#23f0c7;stroke-width:0.35679018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
d="m 121.07259,126.87298 c -0.86948,0.81618 -1.02745,0.65365 -0.72428,-0.14333 l 0.91683,-1.65821 c -0.0111,-8e-4 0.39782,-4.12494 3.40118,-6.6794 -0.87821,1.17495 -0.2941,1.54451 -0.2941,1.54451 0.26247,-1.85088 2.16919,-3.32424 6.21314,-3.07106 -0.38868,0.90798 -0.57555,2.89982 -4.31376,3.6433 0.98439,-0.2226 2.13472,-0.13682 2.58931,-0.70106 -0.81113,1.97741 -3.96155,5.09473 -6.51922,5.48143 z"
id="path898"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#23f0c7;fill-opacity:1;stroke:#23f0c7;stroke-width:0.37328929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
d="m 145.10588,118.69356 c 2.54321,-3.29613 7.06334,1.07788 5.59238,2.96194 -2.49252,3.19262 -4.05033,1.34267 -4.59655,1.0309 -0.40294,-0.22998 -0.65177,-0.2363 -1.91496,2.34787 -0.80883,1.65458 -0.71069,-0.043 -1.90642,0.8891 -1.76025,1.37216 -2.14071,2.2175 -2.37616,2.65925 z"
id="path900"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssscc" />
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 156.93423,76.416775 c -1.28956,1.21053 -1.52385,0.96945 -1.07421,-0.21258 l 1.35978,-2.45933 c -0.0164,-0.002 1.42506,-6.451843 5.87944,-10.240443 -1.3025,1.74261 -1.27124,2.62473 -1.27124,2.62473 0.38929,-2.74511 3.21722,-4.93028 9.21492,-4.5548 -0.57646,1.34666 -0.85362,4.30083 -6.39789,5.4035 1.45999,-0.33016 4.33515,-1.53898 5.00936,-2.37581 -1.20301,2.93277 -7.04457,8.892193 -10.83791,9.465733 z"
id="path866"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 101.89763,117.47489 c 0.99865,-5.81658 9.56336,-3.33672 8.9709,-5.1e-4 -1.00384,5.65329 -4.18284,4.36958 -5.07396,4.34148 -0.65737,-0.021 -0.97325,0.13651 -0.84088,4.21185 0.0847,2.60936 -0.91883,0.41768 -1.79818,2.37878 -1.29452,2.8869 -1.21019,4.1983 -1.212,4.90792 z"
id="path868"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssscc" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path870"
d="m 107.04788,121.95427 c -2.99211,-0.76436 -1.1731,-3.89878 -1.1731,-3.89878"
style="fill:none;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:1;stroke:#7765e3;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 170.6147,76.682565 c -1.28956,1.21053 -1.52385,0.96945 -1.07421,-0.21258 l 1.35978,-2.45933 c -0.0164,-0.002 0.59002,-6.117833 5.0444,-9.906433 -1.3025,1.74261 -0.4362,2.29072 -0.4362,2.29072 0.38929,-2.74511 3.21722,-4.93029 9.21492,-4.5548 -0.57646,1.34666 -0.85362,4.30082 -6.39789,5.40349 1.45999,-0.33015 3.53351,0.0977 4.20772,-0.73914 -1.203,2.93277 -6.24293,7.255533 -10.03627,7.829073 z"
id="path872"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 231.53534,148.01977 v 18.78849 l -4.26838,6.44068 -4.45893,-6.40256 c 4.24692,-12.55587 3.52568,-16.69699 3.6205,-27.43957 22.12476,1.35032 14.28558,20.282 5.33547,19.39825"
id="path889"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 227.26696,173.24894 c 0,-9.45141 0.0381,-9.4133 0.0381,-9.4133"
id="path891"
inkscape:connector-curvature="0" />
<g
id="g1143"
transform="translate(-123.3885,194.67528)">
<rect
y="21.410418"
x="205.47905"
height="16.750105"
width="16.750105"
id="rect893"
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.30126441;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path895"
d="m 207.62884,36.118119 -0.10687,-12.665288 h 2.693 c 4.81106,0.02235 4.77107,5.990014 -0.12812,5.990014 l 0.0712,6.675269 z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.12323128px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="29.177969"
x="215.0899"
height="2.7695272"
width="4.9009433"
id="rect897"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.38753989;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(-1)"
y="-36.001663"
x="-220.0703"
height="2.8409941"
width="8.1695461"
id="rect899"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.35613737;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="25.218256"
x="217.26648"
height="2.843389"
width="2.8433888"
id="rect901"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.35374269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text888"
y="38.109615"
x="224.95683"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.2628417px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.1332138"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.73515701px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.1332138"
y="38.109615"
x="224.95683"
id="tspan886"
sodipodi:role="line">Plume</tspan></text>
</g>
<rect
y="187.21339"
x="9.3072567"
height="7.6729164"
width="7.6729164"
id="rect942"
style="fill:#23f0c7;fill-opacity:1;stroke-width:0.26458332" />
<text
id="text946"
y="193.82799"
x="19.890591"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="193.82799"
x="19.890591"
id="tspan944"
sodipodi:role="line">#23F0C7</tspan></text>
<rect
style="fill:#ef767a;fill-opacity:1;stroke-width:0.26458332"
id="rect948"
width="7.6729164"
height="7.6729164"
x="9.1749649"
y="198.1936" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="19.758299"
y="204.8082"
id="text952"><tspan
sodipodi:role="line"
id="tspan950"
x="19.758299"
y="204.8082"
style="font-size:8.46666622px;stroke-width:0.26458332">#EF767A</tspan></text>
<rect
y="209.17381"
x="9.3072567"
height="7.6729164"
width="7.6729164"
id="rect954"
style="fill:#7765e3;fill-opacity:1;stroke-width:0.26458332" />
<text
id="text958"
y="215.78839"
x="19.890591"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="215.78839"
x="19.890591"
id="tspan956"
sodipodi:role="line">#7765E3</tspan></text>
<rect
style="fill:#6457a6;fill-opacity:1;stroke-width:0.26458332"
id="rect960"
width="7.6729164"
height="7.6729164"
x="9.1749649"
y="220.02174" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="19.758299"
y="226.63631"
id="text964"><tspan
sodipodi:role="line"
id="tspan962"
x="19.758299"
y="226.63631"
style="font-size:8.46666622px;stroke-width:0.26458332">#6457A6</tspan></text>
<rect
y="230.86964"
x="9.0426731"
height="7.6729164"
width="7.6729164"
id="rect966"
style="fill:#ffe347;fill-opacity:1;stroke-width:0.26458332" />
<text
id="text970"
y="237.48422"
x="19.626007"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="237.48422"
x="19.626007"
id="tspan968"
sodipodi:role="line">#FFE347</tspan></text>
<text
id="text974"
y="179.01132"
x="10.233299"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:8.46666622px;stroke-width:0.26458332"
y="179.01132"
x="10.233299"
id="tspan972"
sodipodi:role="line">Color Palette</tspan></text>
<text
id="text978"
y="162.73944"
x="6.132256"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.69999981px;line-height:1.25;font-family:'Apple Garamond';-inkscape-font-specification:'Apple Garamond';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:12.69999981px;stroke-width:0.26458332"
y="162.73944"
x="6.132256"
id="tspan976"
sodipodi:role="line">Title Typeface: Playfair Display</tspan></text>
<text
id="text982"
y="178.213"
x="82.851562"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.65419292px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26635483"
xml:space="preserve"
transform="scale(0.99334904,1.0066955)"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.52335453px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';stroke-width:0.26635483"
y="178.213"
x="82.851562"
id="tspan980"
sodipodi:role="line"><tspan
style="font-weight:bold"
id="tspan1181">UI Font:</tspan> Inter UI</tspan></text>
<g
id="g1152"
transform="translate(-123.73138,195.62581)">
<rect
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.2259483;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1052"
width="12.562579"
height="12.562579"
x="205.82193"
y="42.616043" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.09242346px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 207.43426,53.646822 -0.0802,-9.498966 h 2.01975 c 3.60829,0.01676 3.5783,4.49251 -0.0961,4.49251 l 0.0535,5.006452 z"
id="path1054"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.29065493;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1056"
width="3.6757076"
height="2.0771453"
x="213.03009"
y="48.441708" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.26710302;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1058"
width="6.1271596"
height="2.1307456"
x="-216.76537"
y="-53.559479"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.26530701;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1060"
width="2.1325417"
height="2.1325419"
x="214.66251"
y="45.47192" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.1971314px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.09991036"
x="220.43028"
y="55.140442"
id="text1064"><tspan
sodipodi:role="line"
id="tspan1062"
x="220.43028"
y="55.140442"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:17.05136871px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.09991036">Plume</tspan></text>
</g>
<g
id="g1161"
transform="translate(-123.90281,195.94319)">
<rect
y="60.221481"
x="205.99336"
height="8.3750534"
width="8.3750534"
id="rect1066"
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.15063222;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1068"
d="m 207.06825,67.575339 -0.0535,-6.332644 h 1.3465 c 2.40553,0.01117 2.38554,2.995007 -0.0641,2.995007 l 0.0357,3.337635 z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.06161565px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="64.105263"
x="210.7988"
height="1.3847637"
width="2.4504719"
id="rect1070"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.19376998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(-1)"
y="-67.517105"
x="-213.28899"
height="1.4204972"
width="4.0847735"
id="rect1072"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.1780687;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="62.125404"
x="211.88708"
height="1.4216948"
width="1.4216945"
id="rect1074"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.17687136;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text1078"
y="68.571083"
x="215.73227"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.13142109px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.06660692"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.36758041px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.06660692"
y="68.571083"
x="215.73227"
id="tspan1076"
sodipodi:role="line">Plume</tspan></text>
</g>
<g
id="g1170"
transform="translate(-124.07425,195.5154)">
<rect
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.11297414;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1080"
width="6.2812886"
height="6.2812886"
x="206.16479"
y="74.33876" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.04621173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 206.97096,79.854154 -0.0401,-4.749482 h 1.00987 c 1.80415,0.0084 1.78916,2.246255 -0.0481,2.246255 l 0.0268,2.503225 z"
id="path1082"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.14532745;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1084"
width="1.8378536"
height="1.0385725"
x="209.76888"
y="77.251595" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.13355149;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1086"
width="3.0635796"
height="1.0653727"
x="-211.63651"
y="-79.810478"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.13265349;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1088"
width="1.0662707"
height="1.0662708"
x="210.58508"
y="75.766701" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.59856546px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.04995518"
x="213.46898"
y="80.60096"
id="text1092"><tspan
sodipodi:role="line"
id="tspan1090"
x="213.46898"
y="80.60096"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.5256834px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.04995518">Plume</tspan></text>
</g>
<g
id="g1179"
transform="translate(-123.90281,194.17101)">
<rect
y="87.255981"
x="205.99336"
height="4.1875262"
width="4.1875262"
id="rect1094"
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.0753161;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1096"
d="m 206.5308,90.932902 -0.0267,-3.16632 h 0.67325 c 1.20277,0.005 1.19277,1.49751 -0.0321,1.49751 l 0.0179,1.66881 z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.03080782px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="89.197868"
x="208.39609"
height="0.69238174"
width="1.2252358"
id="rect1098"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.09688497;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(-1)"
y="-90.903793"
x="-209.64117"
height="0.71024853"
width="2.0423865"
id="rect1100"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.08903433;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="88.207939"
x="208.94022"
height="0.71084726"
width="0.7108472"
id="rect1102"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.08843566;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text1106"
y="91.430779"
x="210.86282"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.06571043px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.03330346"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.68378925px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.03330346"
y="91.430779"
x="210.86282"
id="tspan1104"
sodipodi:role="line">Plume</tspan></text>
</g>
<rect
y="185.46291"
x="82.090546"
height="25.12516"
width="25.12516"
id="rect1108"
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.45189664;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1110"
d="m 85.315226,207.52446 -0.16029,-18.99794 h 4.03949 c 7.216602,0.0335 7.156612,8.98502 -0.19217,8.98502 l 0.1068,10.01291 z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.18484694px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="197.11423"
x="96.506821"
height="4.1542912"
width="7.3514161"
id="rect1112"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.58130991;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(-1)"
y="-207.34978"
x="-103.97742"
height="4.2614913"
width="12.25432"
id="rect1114"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.53420609;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="191.17467"
x="99.771698"
height="4.2650838"
width="4.2650838"
id="rect1116"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.53061408;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text1120"
y="210.5117"
x="111.30722"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.39426327px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';letter-spacing:0px;word-spacing:0px;fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.19982073"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:34.10274124px;font-family:'Inter UI';-inkscape-font-specification:'Inter UI Bold';fill:#7765e3;fill-opacity:1;stroke-width:0.19982073"
y="210.5117"
x="111.30722"
id="tspan1118"
sodipodi:role="line">Plume</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="67.041779"
y="285.10333"
id="text1185"><tspan
sodipodi:role="line"
id="tspan1183"
x="67.041779"
y="285.10333"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';stroke-width:0.26458332">16px</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Route 159';-inkscape-font-specification:'Route 159, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="66.711052"
y="273.10269"
id="text1189"><tspan
sodipodi:role="line"
id="tspan1187"
x="66.711052"
y="273.10269"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Inter UI';-inkscape-font-specification:'Inter UI';stroke-width:0.26458332">24px</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="66.606819"
y="262.00388"
id="text1193"><tspan
sodipodi:role="line"
id="tspan1191"
x="66.606819"
y="262.00388"
style="stroke-width:0.26458332">32px</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="66.703033"
y="245.8739"
id="text1197"><tspan
sodipodi:role="line"
id="tspan1195"
x="66.703033"
y="245.8739"
style="stroke-width:0.26458332">48px</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="66.642906"
y="226.62836"
id="text1201"><tspan
sodipodi:role="line"
id="tspan1199"
x="66.642906"
y="226.62836"
style="stroke-width:0.26458332">64px</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:'Inter UI';-inkscape-font-specification:'Inter UI, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="66.622856"
y="201.95624"
id="text1205"><tspan
sodipodi:role="line"
id="tspan1203"
x="66.622856"
y="201.95624"
style="stroke-width:0.26458332">96px</tspan></text>
<g
id="g1229"
transform="matrix(1.3479184,0,0,1.3479184,-11.476932,146.40477)">
<rect
y="73.238937"
x="15.361921"
height="25.12516"
width="25.12516"
id="rect1214"
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:0.45189664;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1216"
d="m 18.586603,95.30049 -0.16029,-18.997935 h 4.03949 c 7.2166,0.03352 7.15661,8.985023 -0.19217,8.985023 l 0.1068,10.012904 z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.18484694px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="84.890266"
x="29.778198"
height="4.1542912"
width="7.3514161"
id="rect1218"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.58130991;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(-1)"
y="-95.125816"
x="-37.248791"
height="4.2614913"
width="12.25432"
id="rect1220"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.53420609;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="78.950691"
x="33.043072"
height="4.2650838"
width="4.2650838"
id="rect1222"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.53061408;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 52 KiB

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg4705"
inkscape:export-filename="D:\Graphics\PlumeLogo\plumeParagraphs16.png"
inkscape:export-xdpi="3.0000002"
inkscape:export-ydpi="3.0000002"
sodipodi:docname="plumeParagraphsBlack.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<title
id="title8">Plume Logo - Paragraphs (Black)</title>
<defs
id="defs4699" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="233.22289"
inkscape:cy="376.94728"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1200"
inkscape:window-height="1577"
inkscape:window-x="3752"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4702">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Plume Logo - Paragraphs (Black)</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2018/10/07</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
<dc:description>A Plume concept logo, with a stylized paragraph symbol and paragraph blocks. Black silhouette.</dc:description>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:9.20874119;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 0 0 L 0 512 L 512 512 L 512 0 L 0 0 z M 65.900391 59.884766 L 148.45117 59.884766 C 295.92866 60.566214 294.70214 242.55078 144.52344 242.55078 L 146.70508 446.11523 L 69.175781 446.11523 L 65.900391 59.884766 z M 361.31055 117.31055 L 446.68945 117.31055 L 446.68945 202.68945 L 361.31055 202.68945 L 361.31055 117.31055 z M 297.87695 237.87695 L 446.12305 237.87695 L 446.12305 322.12305 L 297.87695 322.12305 L 297.87695 237.87695 z M 197.38672 357.38672 L 446.61328 357.38672 L 446.61328 442.61328 L 197.38672 442.61328 L 197.38672 357.38672 z "
transform="matrix(0.26458333,0,0,0.26458333,0,161.53332)"
id="rect1214" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg4705"
inkscape:export-filename="D:\Graphics\PlumeLogo\bitmap.png"
inkscape:export-xdpi="3"
inkscape:export-ydpi="3"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="plumeParagraphs.svg">
<title
id="title12">Plume Logo - Paragraphs</title>
<defs
id="defs4699" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="233.22289"
inkscape:cy="376.94728"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1200"
inkscape:window-height="1577"
inkscape:window-x="3752"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4702">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Plume Logo - Paragraphs</dc:title>
<dc:date>2018/10/07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Abdullah Tarawneh (trwnh.com)</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>trwnh</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:description>A Plume concept logo, with a stylized paragraph symbol and paragraph blocks. Solid square.</dc:description>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<rect
style="fill:#7765e3;fill-opacity:1;stroke:none;stroke-width:2.43647933;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1214"
width="135.46666"
height="135.46666"
x="1.1088696e-007"
y="161.53333" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.9968788px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 18.302706,279.56821 17.436018,177.37759 H 39.2775 c 39.020084,0.1803 38.695719,48.33078 -1.039062,48.33078 l 0.577468,53.85979 z"
id="path1216"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3.11026239;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1218"
width="39.223072"
height="22.289736"
x="78.813477"
y="224.47179" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.85055542;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1220"
width="65.941116"
height="22.549444"
x="-118.1664"
y="-278.64139"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.81035185;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1222"
width="22.589647"
height="22.589647"
x="95.596855"
y="192.57182" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

Some files were not shown because too many files have changed in this diff Show More