Compare commits

...

1245 Commits

Author SHA1 Message Date
Nicolas Constant 822ef21985
Merge pull request #639 from NicolasConstant/develop
1.7.0 PR
2024-03-09 15:32:25 -05:00
Nicolas Constant a154028a53 road to 1.7.0 2024-03-09 15:10:04 -05:00
Nicolas Constant 6a8d85f40c
Merge pull request #638 from NicolasConstant/topic_enhance-filters
Topic enhance filters
2024-03-09 02:36:17 -05:00
Nicolas Constant 04153543a9 fix filtering message 2024-03-09 02:00:05 -05:00
Nicolas Constant 92ec089eab fix error spamming, fix #605 2024-03-09 01:46:26 -05:00
Nicolas Constant 12ce0a3a4a added context filtering 2024-03-09 00:40:37 -05:00
Nicolas Constant 7a6eb9c3d2 starting handling server filters 2024-03-08 03:13:58 -05:00
Nicolas Constant 63b7c6fdf1 added filter params in status interface 2024-03-08 02:12:00 -05:00
Nicolas Constant bd75317417 retrieve full handle on post edition, fix #630 2024-03-08 01:53:28 -05:00
Nicolas Constant 74eed7e8ba fix pleroma vote count, fix #398 2024-03-08 00:51:27 -05:00
Nicolas Constant ebce6282c5 better follow workflow, fix #629 2024-03-08 00:19:39 -05:00
Nicolas Constant 702e4daa44
Merge pull request #637 from NicolasConstant/topic_refine-css-zones
Topic refine css zones
2024-03-07 18:44:40 -05:00
Nicolas Constant d2221d539c fix undefined image description, fix #632 2024-03-07 18:23:26 -05:00
Nicolas Constant c4de387f86 sort list in alphabetical order, fix #633 2024-03-07 01:17:04 -05:00
Nicolas Constant c0f84ddc11 open status from image galery, fix #627 2024-03-07 00:59:00 -05:00
Nicolas Constant 1830212a91 flex migration of account navigation 2024-03-07 00:24:27 -05:00
Nicolas Constant 46adf207bb flex migration floating column + hover timeline 2024-03-06 23:13:46 -05:00
Nicolas Constant 909b190b33 fix tests 2024-03-06 19:14:30 -05:00
Nicolas Constant cfc4d5f915 GoToSocial max char handling, fix #576 2024-03-05 18:15:43 -05:00
Nicolas Constant 0f58252c61
Merge pull request #614 from NicolasConstant/develop
1.6.0 PR
2023-08-24 00:30:44 -04:00
Nicolas Constant 0d2ac6b569
road to 1.6.0 2023-08-23 23:43:50 -04:00
Nicolas Constant e62987b11a
Merge pull request #611 from NicolasConstant/topic_reorganize-accounts
Topic reorganize accounts
2023-08-20 03:35:34 -04:00
Nicolas Constant 8cee7289eb
Merge pull request #612 from NicolasConstant/topic_add-more-user-actions
Topic add more user actions
2023-08-20 03:33:32 -04:00
Nicolas Constant 0305cc6ac7
added button to unlock icons, fix #489 2023-08-20 02:33:03 -04:00
Nicolas Constant f215d027f9
added draggable aspect in service 2023-08-20 01:44:46 -04:00
Nicolas Constant 335cbf4956
added reorder state changing 2023-08-20 01:33:07 -04:00
Nicolas Constant b41c31b4ac
better draggable design 2023-08-20 01:16:41 -04:00
Nicolas Constant 41faa36087
working drag&drop 2023-08-20 00:36:52 -04:00
Nicolas Constant 024042959e
fix poll exception on creation 2023-08-19 21:33:43 -04:00
Nicolas Constant f4c87df078
added multi account faq, fix #608 2023-08-19 21:28:20 -04:00
Nicolas Constant d24441343a
always show cw text, fix #480 2023-08-19 20:39:37 -04:00
Nicolas Constant 8c9685045e
added hide boosts, block domain, fix #487 2023-08-19 20:02:37 -04:00
Nicolas Constant a0cb240446
Merge pull request #610 from NicolasConstant/topic_enhance-language-feature
Topic enhance language feature
2023-08-19 16:45:03 -04:00
Nicolas Constant 2def5725f5
option to stop animated avatar, fix #335 2023-08-12 18:41:41 -04:00
Nicolas Constant 450a0088d5
added alt label display option, fix #387 2023-08-12 17:59:34 -04:00
Nicolas Constant d7f988ecb9
added lang autodetect disable option 2023-08-12 17:16:57 -04:00
Nicolas Constant 8703df27d5
display years, fix #603 2023-08-12 17:05:25 -04:00
Nicolas Constant 10fa412173
ensure language is set to provide translation 2023-08-12 16:50:35 -04:00
Nicolas Constant 0b93ed7307
language autodetection functionnal 2023-08-12 01:33:07 -04:00
Nicolas Constant c3cd6fe79e
Merge pull request #604 from NicolasConstant/develop
1.5.0 PR
2023-08-07 20:09:31 -04:00
Nicolas Constant 14287b476c
ensure lang exists before using it 2023-08-07 19:56:46 -04:00
Nicolas Constant 2b106ba546
clean up 2023-08-07 19:48:23 -04:00
Nicolas Constant 4a2b408c1b
added some translation cleanup 2023-08-07 19:47:54 -04:00
Nicolas Constant 92a3ac6ae3
road to 1.5.0 2023-08-07 01:18:08 -04:00
Nicolas Constant ec0bed4606
wording: expand CW instead of hide, fix #459 2023-08-06 17:39:28 -04:00
Nicolas Constant 62d4140d63
close panel and unfocus on esc, fix #429 2023-08-06 17:15:00 -04:00
Nicolas Constant 4a34063dc8
focus on seach, fix #429 (partialy) 2023-08-06 17:06:36 -04:00
Nicolas Constant 9cd709f44c
better follow hastag positionning 2023-08-06 17:02:05 -04:00
Nicolas Constant 64ceb3e095
fix translate button spacing 2023-08-06 16:59:03 -04:00
Nicolas Constant cb58be5bd8
fine tunning prewrap 2023-08-06 16:50:49 -04:00
Nicolas Constant 7a8dfd0c6b
notify edited boosted status, fix #542 2023-08-06 04:41:10 -04:00
Nicolas Constant 89c5c33de2
load poll on edition, fix #587 2023-08-06 02:53:24 -04:00
Nicolas Constant 590627bc58
fix spacing, fix #597 2023-08-06 02:01:53 -04:00
Nicolas Constant 7013d9174c
enhance bookmarks support, fix #583 2023-08-06 01:17:04 -04:00
Nicolas Constant ba08c0d0b2
fine tuning dropdown menu 2023-08-05 18:59:53 -04:00
Nicolas Constant 26a01b5c30
refactoring 2023-08-05 18:40:46 -04:00
Nicolas Constant 73ac37a8f4
added translation revert 2023-08-05 18:32:23 -04:00
Nicolas Constant 38b052f06b
Merge pull request #602 from NicolasConstant/topic_lang-electron-integration
Topic lang electron integration
2023-08-05 18:13:07 -04:00
Nicolas Constant 4511363408
changed ipc channel name 2023-08-05 18:03:22 -04:00
Nicolas Constant c0f03570a0
clean up 2023-08-05 02:48:24 -04:00
Nicolas Constant 3d5c91a12b
working poc 2023-08-05 02:07:34 -04:00
Nicolas Constant 27b22338c9
Merge pull request #601 from NicolasConstant/topic_language-translation
Topic language translation
2023-08-05 00:20:39 -04:00
Nicolas Constant 191bd936aa
Merge pull request #600 from NicolasConstant/topic_language-support
Topic language support
2023-08-05 00:20:18 -04:00
Nicolas Constant 1c42f54db0
added languages 2023-08-05 00:00:00 -04:00
Nicolas Constant e8dbe214f4
sort and slice results 2023-08-04 23:45:34 -04:00
Nicolas Constant 8cd4d30ac8
notify error 2023-08-04 23:38:29 -04:00
Nicolas Constant 30f678af04
translation working 2023-08-04 23:36:21 -04:00
Nicolas Constant 16bbf9aa2f
displaying translation link 2023-08-04 22:57:06 -04:00
Nicolas Constant 74af61ad78
added warning 2023-08-04 20:23:40 -04:00
Nicolas Constant 449506092a
better language handling in settings + ui fix 2023-08-04 20:12:23 -04:00
Nicolas Constant b37a2a2f0c
fix impot 2023-08-04 03:26:24 -04:00
Nicolas Constant 32efac5aa4
language posting working 2023-08-04 03:20:48 -04:00
Nicolas Constant 91b2f4a0f0
changing lang working 2023-08-04 02:39:59 -04:00
Nicolas Constant 0d7821cd01
added selected language data 2023-08-04 01:08:00 -04:00
Nicolas Constant 18d6b8d96c
added lang change 2023-08-04 00:48:38 -04:00
Nicolas Constant 503cb6c9d4
fix language saving 2023-08-03 22:44:14 -04:00
Nicolas Constant 98e7d54c33
starting lang ui settings 2023-08-03 18:45:55 -04:00
Nicolas Constant dbb5d8e71b
added language service 2023-08-03 03:27:21 -04:00
Nicolas Constant a77b46755f
Merge pull request #599 from NicolasConstant/develop
1.4.0 PR
2023-08-02 19:15:28 -04:00
Nicolas Constant a5f9feb10b
road to 1.4.0 2023-08-02 18:58:09 -04:00
Nicolas Constant 95c4d8b249
small refactoring of the domain name display 2023-08-02 18:57:43 -04:00
Nicolas Constant 128dfd7fe5
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2023-08-02 18:49:47 -04:00
Nicolas Constant 2dc77dd39a
Merge pull request #595 from HamzaFarooqArif/589_add_items_to_header
added a new option for timelines
2023-08-02 18:50:25 -04:00
Nicolas Constant f71e175375
better wording 2023-08-02 18:48:29 -04:00
HamzaFarooqArif a1a56e49f5 reverted code that breaks spacing 2023-07-31 10:06:59 +05:00
HamzaFarooqArif 5dc98c677e added a new option for timelines 2023-07-23 00:04:20 +05:00
Nicolas Constant b00c52ff83
Merge pull request #575 from NicolasConstant/develop
1.3.0 PR
2023-04-24 18:34:37 -04:00
Nicolas Constant f46d7d433a
Merge pull request #574 from NicolasConstant/topic_fixing-things
Topic fixing things
2023-04-24 01:34:42 -04:00
Nicolas Constant 06dbdef1dc
Merge branch 'topic_fixing-things' of https://github.com/NicolasConstant/sengis into topic_fixing-things 2023-04-24 01:09:50 -04:00
Nicolas Constant 5e865ed9a4
road to 1.3.0 2023-04-24 01:09:48 -04:00
Nicolas Constant 253ea52590
Update README.md 2023-04-24 01:08:59 -04:00
Nicolas Constant 84a4b8c00a
disable notification on unsupported type 2023-04-24 01:04:44 -04:00
Nicolas Constant 982a670352
keep attachments on edition, fix #563 2023-04-24 00:17:13 -04:00
Nicolas Constant 314c736cf4
only apply block with current acc, better interact 2023-04-23 19:49:08 -04:00
Nicolas Constant 9999944d1f
added unmute / unblock, fix #341 2023-04-23 19:21:54 -04:00
Nicolas Constant 2bcac4622a
fix error message, fix #561 2023-04-23 18:40:42 -04:00
Nicolas Constant 5d6672f379
added macos cmd to send toot, fix #515 2023-04-23 18:32:42 -04:00
Nicolas Constant eac8c6120a
ensure all alt media are updated, fix #430 2023-04-23 18:27:47 -04:00
Nicolas Constant 22cad9e22d
supporting new instance v2 model 2023-04-23 16:48:07 -04:00
Nicolas Constant 232a86566c
support v2 instance, fix #504 2023-04-23 16:20:00 -04:00
Nicolas Constant 2cb443dd4d
fix streaming url retrieval, fix #565 2023-04-23 16:09:44 -04:00
Nicolas Constant cb342ce9b5
Merge pull request #571 from NicolasConstant/topic_updated-docs
updated electron build
2023-04-23 15:45:28 -04:00
Nicolas Constant 8c9fe07109
Merge pull request #573 from NicolasConstant/topic_fixing-things
Topic fixing things
2023-04-23 15:32:32 -04:00
Nicolas Constant 00134a7407
electron removal 2023-04-23 15:23:43 -04:00
Nicolas Constant db6b37eef3
add auth on emoji fetch, fix #391 2023-04-23 15:09:34 -04:00
Nicolas Constant e14852e087
Merge branch 'topic_fixing-things' of https://github.com/NicolasConstant/sengis into topic_fixing-things 2023-04-23 15:08:39 -04:00
Nicolas Constant 6001a26f02
fix dependancies 2023-04-23 15:08:35 -04:00
Nicolas Constant 48677e8e6c
Delete build.yml 2023-04-23 02:53:12 -04:00
Nicolas Constant 1ca603f211
removed electron 2023-04-23 02:52:33 -04:00
Nicolas Constant d60bf804b8
Delete build.yml 2023-04-23 01:59:40 -04:00
Nicolas Constant 8bd71afc55
updated electron build 2023-04-23 01:55:02 -04:00
Nicolas Constant ed8c935285
Update build.yml 2023-04-13 00:52:02 -04:00
Nicolas Constant b1cd975422
updated electron 2023-04-12 23:56:27 -04:00
Nicolas Constant c5e3f4abac
added new CICD for Electron builds 2023-04-12 23:38:46 -04:00
Nicolas Constant 4599d64c60
Merge pull request #517 from NicolasConstant/develop
1.2.0 PR
2022-12-10 22:53:48 -05:00
Nicolas Constant 522c1c0133
road to 1.2.0 2022-12-10 22:34:47 -05:00
Nicolas Constant b6ea1d8d43
fix autocomplete error 2022-12-10 22:26:06 -05:00
Nicolas Constant 55a855d046
align post button text 2022-12-10 22:19:12 -05:00
Nicolas Constant 410007dc25
added edit text 2022-12-10 22:11:25 -05:00
Nicolas Constant 54d4b300f4
Merge pull request #516 from NicolasConstant/topic_edit-status_enhancements
Topic edit status enhancements
2022-12-10 19:57:48 -05:00
Nicolas Constant f4ba3a168f
removing editstatus panel 2022-12-10 19:41:43 -05:00
Nicolas Constant f2e1478cfa
refactoring panels for edition 2022-12-10 19:40:17 -05:00
Nicolas Constant ce71965b5c
refactoring 2022-12-10 19:19:02 -05:00
Nicolas Constant 65c147bc6f
clean up 2022-12-10 18:55:20 -05:00
Nicolas Constant 57f863e2a1
added edition notification logic 2022-12-10 18:31:54 -05:00
Nicolas Constant 0ce8be99bd
Merge branch 'develop' into topic_edit-status 2022-12-08 00:11:14 -05:00
Nicolas Constant f5de97993b
Merge pull request #478 from rpetti/add-edit-posts
Support Mastodon 4.0.0's Edit Feature
2022-12-07 23:31:00 -05:00
Nicolas Constant 0777c23124
Merge pull request #513 from NicolasConstant/fix_item-count-slow-mode
Fix item count slow mode
2022-12-07 23:04:22 -05:00
Nicolas Constant 70c9e2564b
Update appveyor.yml 2022-12-07 22:47:27 -05:00
Nicolas Constant 54772d8487
fix build 2022-12-07 22:30:04 -05:00
Nicolas Constant 30c81ae143
Merge pull request #499 from rpetti/fix-slow-mode-new-item-count
fix new item count in slow mode
2022-12-07 22:21:29 -05:00
Nicolas Constant 9cc2324fd2
remove duplicate tag 2022-12-02 00:01:30 -05:00
Nicolas Constant c912f12db5
Merge pull request #472 from rpetti/add-tag-following
hashtag following support for mastodon >= 4.0
2022-12-02 00:00:45 -05:00
Rob Petti 513bb1e684 fix new item count in slow mode 2022-11-26 13:48:33 -07:00
Rob Petti ec233754dd add post edit functionality 2022-11-19 10:16:31 -07:00
Rob Petti 39187c82fb initial implementation of tag following 2022-11-19 08:58:33 -07:00
Nicolas Constant 78f0f3ab5f
Merge pull request #474 from NicolasConstant/develop
1.1.6 PR
2022-11-18 20:34:03 +01:00
Nicolas Constant 39abd6a175
road to 1.1.6 2022-11-18 19:53:36 +01:00
Nicolas Constant 644b0d0b86
Merge pull request #471 from rpetti/fix-bookmarks
fixing the version check on the bookmarks feature
2022-11-18 19:51:44 +01:00
Rob Petti 83f52391ae fixing the version check on the bookmarks feature 2022-11-17 16:08:13 -07:00
Nicolas Constant 33a61f7347
Merge pull request #404 from NicolasConstant/develop
1.1.5 PR
2022-01-21 22:53:49 -05:00
Nicolas Constant 0409431105
removing travis 2022-01-21 21:40:16 -05:00
Nicolas Constant 42fb269c24
road to 1.1.5 2022-01-19 23:30:38 -05:00
Nicolas Constant c3a5306e56
Merge pull request #403 from NicolasConstant/fix_soapbox-mess
Fix missing mentions
2022-01-19 23:29:54 -05:00
Nicolas Constant 76b911351c
Merge pull request #402 from NicolasConstant/fix_cicd
Fix CICD
2022-01-19 23:05:39 -05:00
Nicolas Constant 7cb0887749
disable cache 2022-01-19 22:39:44 -05:00
Nicolas Constant 5c52c9c4f2
bump nodejs version 2022-01-19 22:37:58 -05:00
Nicolas Constant 59c3b19271
fix npm version 2022-01-19 22:32:50 -05:00
Nicolas Constant 2f84471a3e
add missing mentions, fix #399 2022-01-19 22:08:19 -05:00
Nicolas Constant 640028ca08
Merge pull request #388 from NicolasConstant/develop
1.1.4 PR
2021-07-15 17:53:55 -04:00
Nicolas Constant 3f01c70bc9
changed electron-builder version 2021-07-15 00:49:59 -04:00
Nicolas Constant 70bef7b98e
changed eletron-builder version 2021-07-15 00:43:26 -04:00
Nicolas Constant 0956b623ce
changed electron-builder version 2021-07-15 00:31:33 -04:00
Nicolas Constant 6554a359b5
CICD 2021-07-15 00:09:27 -04:00
Nicolas Constant 1ebbece7ab
CICD 2021-07-15 00:05:28 -04:00
Nicolas Constant a85e24b77f
road to 1.1.4 2021-07-14 21:04:58 -04:00
Nicolas Constant c2812fae43
fix mention bug 2021-07-14 21:00:52 -04:00
Nicolas Constant 9426bc9e38
Merge pull request #368 from NicolasConstant/develop
1.1.3 PR
2021-03-21 14:15:06 -04:00
Nicolas Constant 06d142c4a5
fix builds 2021-03-21 13:29:59 -04:00
Nicolas Constant eb74e34cb0
force CI 2021-03-20 16:53:55 -04:00
Nicolas Constant 50dc938295
Merge pull request #367 from NicolasConstant/develop
1.1.2 PR
2021-03-20 14:54:49 -04:00
Nicolas Constant f1596bf04f
road to 1.1.2 2021-03-20 14:10:08 -04:00
Nicolas Constant 67e69c64a4
fine tunning polls 2021-03-20 14:09:36 -04:00
Nicolas Constant ba5fead320
Merge pull request #365 from NicolasConstant/develop
1.1.1 PR
2021-03-14 20:59:32 -04:00
Nicolas Constant 9bba8a3352
road to 1.1.1 2021-03-12 19:25:27 -05:00
Nicolas Constant 14a9aade0b
Merge pull request #364 from NicolasConstant/topic_fix-fav-issues
Topic fix fav issues
2021-03-12 19:22:10 -05:00
Nicolas Constant 93847df4d8
fix undoing action not updating global state 2021-03-12 19:05:10 -05:00
Nicolas Constant aa705d7c5b
chaining calls 2021-03-12 18:59:15 -05:00
Nicolas Constant 21ad2cffb6
fix app reload on double-clic on fav/boost/etc 2021-03-12 18:44:03 -05:00
Nicolas Constant f8cea22693
Merge pull request #363 from NicolasConstant/topic_fix-poll-counts
fix polls count
2021-03-11 23:25:45 -05:00
Nicolas Constant 03bcc95d65
fix polls count 2021-03-11 23:09:12 -05:00
Nicolas Constant 8bbc58d9c8
Merge pull request #359 from NicolasConstant/develop
1.1.0 PR
2021-03-08 00:45:19 +01:00
Nicolas Constant 28065912b2
added link to BSL documentation 2021-03-06 19:38:02 -05:00
Nicolas Constant cd96324442
added bridge tutorial images 2021-03-07 01:24:57 +01:00
Nicolas Constant 30cb395bda
road to 1.1.0 2021-03-06 19:00:16 -05:00
Nicolas Constant 8d13822000
Merge pull request #358 from NicolasConstant/topic_birdsitelive-support
Topic birdsitelive support
2021-03-07 00:59:33 +01:00
Nicolas Constant d82da3d180
integration of twitter bridge in search workflow 2021-02-28 02:38:42 -05:00
Nicolas Constant 7653398642
added bridge instance settings 2021-02-28 01:50:06 -05:00
Nicolas Constant fb4c99870e
wirering autofollow in list editor 2021-02-28 01:29:09 -05:00
Nicolas Constant 47a8cdc096
added autofollow settings for pleroma 2021-02-28 01:19:41 -05:00
Nicolas Constant 3724b0b4c2
fix Hometown links 2021-02-28 00:48:52 -05:00
Nicolas Constant 030ce2e568
fix Hometown hashtag, fix #357 2021-02-28 00:29:12 -05:00
Nicolas Constant 1d9e3c5130
fix lock 2021-02-28 00:27:36 -05:00
Nicolas Constant 5eef9506fe
Create FUNDING.yml 2021-02-27 16:31:23 -05:00
Nicolas Constant f152a3dc6f
Merge pull request #349 from NicolasConstant/develop
1.0.3 PR
2021-01-21 04:18:01 +01:00
Nicolas Constant d30f5a8261
road to 1.0.3 2021-01-20 22:00:59 -05:00
Nicolas Constant 4babd219b4
Encode html in CW, fix #348 2021-01-20 21:59:14 -05:00
Nicolas Constant 9ae1711093
Merge pull request #340 from NicolasConstant/develop
1.0.2 PR
2021-01-06 00:36:52 +01:00
Nicolas Constant 1b7853ec4d
road to 1.0.2 2021-01-05 16:02:38 -05:00
Nicolas Constant 6144d12740
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2021-01-05 16:01:09 -05:00
Nicolas Constant 6696ca4274
fix images size in status html, fix #339 2021-01-05 16:00:35 -05:00
Nicolas Constant 70032f55f1
only deploy on tag 2021-01-04 20:18:16 -05:00
Nicolas Constant 63175d1e60
Merge pull request #338 from NicolasConstant/develop
1.0.1 PR
2021-01-05 00:18:38 +01:00
Nicolas Constant 269b8b87cd
road to 1.0.1 2021-01-04 03:24:35 -05:00
Nicolas Constant b2a198c6d9
fix add account to list in pleroma 2021-01-04 02:13:02 -05:00
Nicolas Constant af026a444d
fix list creation in pleroma 2021-01-04 02:00:00 -05:00
Nicolas Constant 31527d3914
Merge pull request #337 from NicolasConstant/develop
1.0.0 PR
2020-12-28 00:28:36 +01:00
Nicolas Constant d74b030688
fix poll vote in pleroma 2020-12-22 19:55:12 -05:00
Nicolas Constant 438867e49a
clean up 2020-12-22 19:54:35 -05:00
Nicolas Constant 82e86039b4
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2020-12-21 23:13:11 -05:00
Nicolas Constant 8b849a6650
added move notification support 2020-12-21 23:12:47 -05:00
Nicolas Constant 8c76056747
fix typo 2020-12-21 21:14:32 -05:00
Nicolas Constant 4083b1017a
updated PR guidelines 2020-12-17 22:42:22 -05:00
Nicolas Constant 5b7c2de8ba
updated state of development 2020-12-17 22:36:46 -05:00
Nicolas Constant 3c4fc074ef
road to 1.0.0 2020-12-17 20:08:19 -05:00
Nicolas Constant e772613193
hide button when hashtag is added 2020-12-17 20:07:37 -05:00
Nicolas Constant 8566966463
added middle click support on searched accounts 2020-12-17 19:35:26 -05:00
Nicolas Constant 5f4e822b64
fix move notification breaking things 2020-12-17 19:08:07 -05:00
Nicolas Constant 7d42737c27
Merge pull request #328 from NicolasConstant/develop
0.33.0 PR
2020-10-06 01:39:01 +02:00
Nicolas Constant e5ce5fb14e
road to 0.33.0 2020-10-05 00:29:43 -04:00
Nicolas Constant 50758f1170
Merge pull request #326 from NicolasConstant/topic_follow-requests
Topic follow requests
2020-10-05 02:31:10 +02:00
Nicolas Constant d720dc06a9
Merge pull request #327 from NicolasConstant/topic_fix-icon
Topic fix icon
2020-10-05 02:30:12 +02:00
Nicolas Constant 7841f72890
added lock icon on account's profile 2020-10-03 15:52:55 -04:00
Nicolas Constant a303f16afe
typo 2020-10-03 12:44:21 -04:00
Nicolas Constant 3be94a842d
working follow_request logic 2020-10-03 00:40:43 -04:00
Nicolas Constant d67ef4aaf2
creation of follow-request UI 2020-10-02 23:58:43 -04:00
Nicolas Constant 0c361d57fc
try other icon fix 2020-10-02 20:59:36 -04:00
Nicolas Constant e46c878e36
Merge branch 'topic_fix-icon' of https://github.com/NicolasConstant/sengis into topic_fix-icon 2020-10-01 23:04:29 -04:00
Nicolas Constant 49c776a67c
try fix for KDE 2020-10-01 23:04:18 -04:00
Nicolas Constant 24c188aa80
road to 0.32.1 2020-10-01 22:33:29 -04:00
Nicolas Constant 180f218eb0
trigger CI/CD 2020-10-01 22:11:06 -04:00
Nicolas Constant c2f9c17189
refactoring 2020-10-01 22:01:09 -04:00
Nicolas Constant 45d735835b
added multi os icon specs 2020-10-01 21:58:35 -04:00
Nicolas Constant 0d1a2e59d4
added icon on main windows 2020-10-01 21:42:30 -04:00
Nicolas Constant c950744a48
Merge pull request #323 from NicolasConstant/develop
0.32.0 PR
2020-09-23 02:10:59 +02:00
Nicolas Constant 23abf0e0b7
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2020-09-21 20:19:59 -04:00
Nicolas Constant 3dbc5c57e1
changed wording of #315 2020-09-21 20:19:53 -04:00
Nicolas Constant f13e30ebaf
fine tuning tutorial's animation 2020-09-21 20:10:49 -04:00
Nicolas Constant 45620de391
Merge pull request #320 from Miosame/patch-1
Fix typos in readme
2020-09-19 23:15:11 +02:00
Nicolas Constant 711e351543
Merge pull request #321 from Miosame/patch-2
Fix typos in contributing.md
2020-09-19 23:14:33 +02:00
Miosame 91f75f2b0f
Fix typos in contributing.md
"explicitely" => "explicitly"
"opened" => "open"
2020-09-18 06:16:19 +02:00
Miosame 0afa7a0998
Fix typos
"clic" => "click"
"leaves" => "leave"
"supporting" => "supports"
2020-09-18 06:15:51 +02:00
Nicolas Constant 912d9e31b5
better misskey parsing in pleroma 2020-09-17 22:16:53 -04:00
Nicolas Constant a0952de788
bump electron 10 2020-09-17 21:40:54 -04:00
Nicolas Constant 628b9c6733
disable tests 2020-09-17 21:40:34 -04:00
Nicolas Constant bcc4549b9a
added docker documentation 2020-09-16 20:18:22 -04:00
Nicolas Constant 54bac5e0ee
Merge pull request #319 from NicolasConstant/topic_privacy-statement
added privacy statement
2020-09-14 01:33:58 +02:00
Nicolas Constant e223c1d032
road to 0.32.0 2020-09-13 18:48:05 -04:00
Nicolas Constant 0d851560b6
added privacy statement, fix #315 2020-09-13 18:45:48 -04:00
Nicolas Constant b09c2a0b81
Merge pull request #318 from NicolasConstant/topic_bump-electron
Topic bump electron
2020-09-13 23:46:30 +02:00
Nicolas Constant 386058eceb
Merge branch 'develop' into topic_bump-electron 2020-09-13 23:28:34 +02:00
Nicolas Constant 7b94b950d2
Merge pull request #317 from NicolasConstant/topic_enhance-tutorial
Topic enhance tutorial
2020-09-13 23:27:51 +02:00
Nicolas Constant 496b2b7dd2
fix tutorial navigation 2020-09-13 15:17:55 -04:00
Nicolas Constant e600f096cd
typo fix 2020-09-13 15:10:35 -04:00
Nicolas Constant b4eb092181
added option to reopen tutorial 2020-09-12 14:17:54 -04:00
Nicolas Constant f5f1c2e8f8
activating saving tutorial state 2020-09-12 14:12:59 -04:00
Nicolas Constant d46fa0ffca
better tutorial navigation 2020-09-12 14:07:30 -04:00
Nicolas Constant 63c2385644
added following functionality 2020-09-12 14:01:35 -04:00
Nicolas Constant b02979430c
added thankyou tutorial 2020-09-12 13:47:07 -04:00
Nicolas Constant 39af84785f
added label tutorial 2020-09-12 13:03:26 -04:00
Nicolas Constant 5992ac7001
added video illustrations 2020-09-12 01:09:29 -04:00
Nicolas Constant 5ae8d668df
better tutorial canvas 2020-09-11 23:13:00 -04:00
Nicolas Constant a37b814c16
fix merge 2020-09-11 22:36:36 -04:00
Nicolas Constant 60e99a1c30
Merge pull request #316 from NicolasConstant/develop
get last modifications
2020-09-12 04:35:58 +02:00
Nicolas Constant a8f940eea7
version updated 2020-09-11 22:00:36 -04:00
Nicolas Constant 9adb9c5c44
Merge branch 'topic_enhance-tutorial' into develop 2020-09-12 02:22:41 +02:00
Nicolas Constant 8f03d7f19e
disable spellchecker 2020-09-04 22:19:49 -04:00
Nicolas Constant 4e453903f2
bump electron 2020-09-04 22:12:50 -04:00
Nicolas Constant d8398a4af6
Merge pull request #312 from NicolasConstant/develop
0.31.1 PR
2020-09-03 21:44:10 -04:00
Nicolas Constant efbc3d3cdc
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2020-09-02 22:20:42 -04:00
Nicolas Constant ac3acfb4fa
tweak code display 2020-09-02 22:19:47 -04:00
Nicolas Constant 4e9730a4ae
added docker info 2020-09-02 19:20:31 -04:00
Nicolas Constant 16a92bcc56
road to 0.31.1 2020-09-02 19:09:23 -04:00
Nicolas Constant 2b0da954a1
fix multipost count 2020-09-02 18:55:07 -04:00
Nicolas Constant 0e23b64b63
fix first status count 2020-09-02 18:43:04 -04:00
Nicolas Constant 8f719c515b
fix docker image 2020-09-02 00:58:19 -04:00
Nicolas Constant 4df59f0edb
Merge pull request #310 from NicolasConstant/develop
0.31.0 PR
2020-08-29 22:54:02 +02:00
Nicolas Constant 7a0de67f5d
added middle click support on mentions 2020-08-29 14:46:38 -04:00
Nicolas Constant 65068f5dc0
added middle click support on hashtags 2020-08-29 14:30:13 -04:00
Nicolas Constant 54ed9a8c4a
fix links for docker 2020-08-29 12:55:22 -04:00
Nicolas Constant 73f6030a87
fix screen gif url for docker page 2020-08-28 23:57:08 -04:00
Nicolas Constant 713fa918be
road to 0.31.0 2020-08-28 23:54:38 -04:00
Nicolas Constant a82afc6bd1
fix favorites end condition retrieval 2020-08-28 23:08:31 -04:00
Nicolas Constant fbe5a53f60
fix bookmarks end condition retrieval 2020-08-28 23:00:53 -04:00
Nicolas Constant 505f0b025a
fix Zap mention parsing 2020-08-28 22:42:00 -04:00
Nicolas Constant 534a4b11e3
fix misskey mention parsing 2020-08-28 22:12:30 -04:00
Nicolas Constant 69c6fbc145
fix tests 2020-08-28 21:51:48 -04:00
Nicolas Constant 1f93817a6f
fix noopener on event binding 2020-08-28 21:39:55 -04:00
Nicolas Constant 58c1f04609
more resilient status search 2020-08-28 21:35:50 -04:00
Nicolas Constant f3f63f569a
block link click propagation 2020-08-28 21:18:41 -04:00
Nicolas Constant a809274756
fix url count, fix #308 2020-08-28 21:08:23 -04:00
Nicolas Constant 8710b0267e
better links, fix #309 2020-08-28 20:54:09 -04:00
Nicolas Constant 95454e29a0
make poll retrieval error silent 2020-07-12 18:36:18 -04:00
Nicolas Constant 1ae9cc282f
Merge pull request #304 from NicolasConstant/develop
0.30.1 PR
2020-07-01 02:56:31 +02:00
Nicolas Constant 031b1d5631
road to 0.30.1 2020-06-30 20:19:19 -04:00
Nicolas Constant 5ddf555172
fix #303 2020-06-30 19:58:38 -04:00
Nicolas Constant ece9182e99
Merge pull request #302 from NicolasConstant/develop
0.30.0 PR
2020-06-25 03:18:26 +02:00
Nicolas Constant 9cc21a4b64
road to 0.30.0 2020-06-24 20:26:32 -04:00
Nicolas Constant e3a7239522
fix max reached condition 2020-06-24 20:25:37 -04:00
Nicolas Constant 08dd0025c9
fix mention loading 2020-06-18 02:25:32 -04:00
Nicolas Constant b0234435d4
Merge pull request #301 from NicolasConstant/topic_followers-follows
Topic followers follows
2020-06-17 05:30:13 +02:00
Nicolas Constant bce2cd0527
added empty followers message 2020-06-16 23:09:49 -04:00
Nicolas Constant 5230b3a115
fix search display 2020-06-15 01:12:39 -04:00
Nicolas Constant d5b2a3e47d
fix account wraping and overflow 2020-06-15 01:07:30 -04:00
Nicolas Constant 9ad3ef81b4
fix emoji in account display name 2020-06-15 00:58:13 -04:00
Nicolas Constant e821c8a8dc
fix follows refresh 2020-06-15 00:56:39 -04:00
Nicolas Constant 1de96741ad
fix following term 2020-06-15 00:45:30 -04:00
Nicolas Constant 9a8f24462c
fix follower pagination 2020-06-15 00:44:00 -04:00
Nicolas Constant 34dcc3050a
added follower scrolling 2020-06-15 00:32:47 -04:00
Nicolas Constant db5ee22615
displaying accounts in follows 2020-06-14 21:11:45 -04:00
Nicolas Constant 382cae866f
created account component 2020-06-14 20:53:20 -04:00
Nicolas Constant fa0ae59e78
fix background transition 2020-06-14 20:41:45 -04:00
Nicolas Constant f6466a5c8f
added followers retrieval 2020-06-14 20:39:51 -04:00
Nicolas Constant ff030e4669
created user-follow comp and wirering to it 2020-06-14 18:12:54 -04:00
Nicolas Constant 675dd0a3a2
Merge pull request #300 from NicolasConstant/topic_fix-spamming
Topic fix spamming
2020-06-14 10:22:05 +02:00
Nicolas Constant 82a4452a41
prevent spamming, fix #293 2020-06-14 03:48:30 -04:00
Nicolas Constant c30ba1483a
browsing refactoring 2020-06-14 03:07:44 -04:00
Nicolas Constant f073e4f224
keep privacy on delete&redraft 2020-06-08 19:29:16 -04:00
Nicolas Constant b423ca6b31
better handling of errors message 2020-06-08 19:10:24 -04:00
Nicolas Constant fef906da72
fix remote status mention parsing 2020-06-06 23:12:06 -04:00
Nicolas Constant 134d2c47f5
Merge pull request #297 from NicolasConstant/develop
0.29.1 PR
2020-06-04 05:11:05 +02:00
Nicolas Constant c51ea38c96
road to 0.29.1 2020-06-03 20:24:55 -04:00
Nicolas Constant 734d2ae161
clean up 2020-06-03 20:15:26 -04:00
Nicolas Constant 5674127e28
fix caret positionning after autocompletion 2020-06-03 19:50:12 -04:00
Nicolas Constant c8c17ca44e
better autocomplete replacement 2020-06-03 19:16:16 -04:00
Nicolas Constant b0b3c4ec21
added tests on autosuggestion replacement 2020-06-03 18:23:13 -04:00
Nicolas Constant fa0d89276a
remove unecessary import 2020-05-29 03:40:56 -04:00
Nicolas Constant 9de28fad86
Merge pull request #295 from NicolasConstant/develop
Develop PR
2020-05-29 03:40:04 -04:00
Nicolas Constant 185bb64a42
added infinite scroll lock 2020-05-29 03:38:38 -04:00
Nicolas Constant 391c515b30
TimelineBase migration 2020-05-29 02:59:12 -04:00
Nicolas Constant 305833ddc2
fix bookmarks and favs background, fix #294 2020-05-29 00:42:08 -04:00
Nicolas Constant ba7872b902
fix errors on profile refresh 2020-05-29 00:32:55 -04:00
Nicolas Constant 0ee30eba76
D&R stop messing with status state, fix #291 2020-05-28 23:56:42 -04:00
Nicolas Constant 8000f51aaa
sanitizen status's links, fix #290 2020-05-28 18:34:51 -04:00
Nicolas Constant 37325cb188
Merge pull request #288 from NicolasConstant/develop
0.29.0 PR
2020-05-24 17:42:40 -04:00
Nicolas Constant 164bf22484
road to 0.29.0 2020-05-24 17:14:33 -04:00
Nicolas Constant 5f7f77a60e
fix scaling shortcuts 2020-05-24 17:13:00 -04:00
Nicolas Constant b0c16b3fa8
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2020-05-24 16:40:09 -04:00
Nicolas Constant 879bfb7d23
Merge pull request #286 from yannicka/patch-1
Add the possibility to zoom the application
2020-05-24 16:39:51 -04:00
Nicolas Constant 6088be077f
added escape hotkey, fix #287 2020-05-24 16:36:10 -04:00
Yannick A a0b43be0a7
Add the possibility to zoom the application
If the text is too small, it can be handy to be able to zoom in and out.
2020-05-23 23:30:40 +02:00
Nicolas Constant 73c264e9e7
clean up 2020-05-22 02:34:08 -04:00
Nicolas Constant ab30bb1a06
refactoring onScroll 2020-05-22 02:31:14 -04:00
Nicolas Constant 1e9f0d4137
start stream refactoring 2020-05-22 02:17:26 -04:00
Nicolas Constant 93a0d17fc0
added pipe tests 2020-05-21 01:07:23 -04:00
Nicolas Constant f4ff3d0e94
ensure https on remote media 2020-05-21 01:02:34 -04:00
Nicolas Constant 18f6caf24a
Merge pull request #285 from NicolasConstant/develop
0.28.1 PR
2020-05-17 18:21:02 -04:00
Nicolas Constant 8f24e65c49
road to 0.28.1 2020-05-17 18:00:14 -04:00
Nicolas Constant 84d32065a6
Merge pull request #284 from NicolasConstant/topic_minor-fixes
Topic minor fixes
2020-05-17 17:54:39 -04:00
Nicolas Constant c14009692f
add content copy, fix #280 2020-05-17 16:51:51 -04:00
Nicolas Constant 6a7d389b55
keep cache for media for d&rd, fix #281 2020-05-17 16:26:33 -04:00
Nicolas Constant e40f5e41e5
clean up 2020-05-16 21:04:03 -04:00
Nicolas Constant b48e8e219e
don't add non-hashtag to search result, fix #283 2020-05-16 21:03:43 -04:00
Nicolas Constant 8e5525741f
clean up 2020-05-16 20:56:39 -04:00
Nicolas Constant b3d24b61d9
prevent error overflow, fix #279 2020-05-16 20:55:35 -04:00
Nicolas Constant 9595e6f5db
Merge pull request #278 from NicolasConstant/develop
0.28.0 PR
2020-05-06 18:44:16 -04:00
Nicolas Constant 698fd39aa6
road to 0.28.0 2020-05-06 18:26:15 -04:00
Nicolas Constant 7169a30481
set tutorial value for next release 2020-05-06 18:25:53 -04:00
Nicolas Constant bdaa2068cf
better resilience on href, fix #276 2020-05-06 18:25:33 -04:00
Nicolas Constant 79566d4856
reset floating menu when refresh, fix #277 2020-05-06 18:24:03 -04:00
Nicolas Constant 0635397087
added label tutorial 2020-05-05 18:50:16 -04:00
Nicolas Constant 94fe3eff31
first draft of notification tutorial 2020-05-02 00:24:10 -04:00
Nicolas Constant 3c93dcb709
added first tutorial content 2020-05-02 00:00:31 -04:00
Nicolas Constant 8139f1a601
tutorial navigation functionnal 2020-05-01 23:48:40 -04:00
Nicolas Constant f7187353bb
created canvas to show enhanced tutorial 2020-05-01 23:08:59 -04:00
Nicolas Constant 3c8805b876
Merge pull request #275 from NicolasConstant/topic_enhance-tl-listing
Topic enhance tl listing
2020-05-01 03:10:13 -04:00
Nicolas Constant 5bff9a12e2
added remove TL-list logic 2020-05-01 02:51:41 -04:00
Nicolas Constant 51ef48150f
added remove button UI 2020-05-01 02:45:10 -04:00
Nicolas Constant 8d9895b0c9
fix list flicking in account panel 2020-05-01 01:32:25 -04:00
Nicolas Constant 16ea7205dd
Merge pull request #274 from NicolasConstant/topic_fix-update-ui
Topic fix update ui
2020-04-30 22:56:15 -04:00
Nicolas Constant 586aef214c
remote fetching needs restart 2020-04-30 22:40:52 -04:00
Nicolas Constant e064297187
use restart notification for settings changes 2020-04-30 22:38:16 -04:00
Nicolas Constant b71743b8f6
fix autoupdater UI 2020-04-30 22:11:00 -04:00
Nicolas Constant fde017ccf6
Merge pull request #272 from NicolasConstant/topic_firefox-autofocus
Topic firefox autofocus
2020-04-30 20:53:28 -04:00
Nicolas Constant 7008dbbbba
fetching notifications on new accounts, fix #260 2020-04-30 18:46:15 -04:00
Nicolas Constant 25d468ad21
fix frefox scroll not working, fix #230 2020-04-30 18:31:27 -04:00
Nicolas Constant 42217b42b8
clean up 2020-04-30 02:40:17 -04:00
Nicolas Constant 54bce7762e
added gototop on profile, fix #259 2020-04-30 02:12:01 -04:00
Nicolas Constant 6f96de22ce
fix emoji pipeline 2020-04-30 02:11:02 -04:00
Nicolas Constant 560147743d
better token renewal, fix #269 2020-04-29 22:04:39 -04:00
Nicolas Constant bd44586d96
typo fix 2020-04-29 19:26:15 -04:00
Nicolas Constant ed81e4b18a
Merge pull request #268 from NicolasConstant/develop
0.27.1 PR
2020-04-29 00:44:20 -04:00
Nicolas Constant a6a8f4b876
road to 0.27.1 2020-04-29 00:29:18 -04:00
Nicolas Constant 369d65769e
fix margin in title messing with de UI 2020-04-29 00:22:27 -04:00
Nicolas Constant 51709508f0
fix column position shifting when switching column 2020-04-29 00:15:14 -04:00
Nicolas Constant 9eb6fc61ae
Merge pull request #267 from NicolasConstant/develop
0.27.0 PR
2020-04-26 22:49:49 -04:00
Nicolas Constant 7dab421c26
road to 0.27.0 2020-04-26 22:02:21 -04:00
Nicolas Constant c7b543c780
Merge pull request #266 from NicolasConstant/topic_keep-status-redaction-state
Topic keep status redaction state
2020-04-26 22:01:26 -04:00
Nicolas Constant 75cb0a1509
clean up 2020-04-26 21:15:21 -04:00
Nicolas Constant d8f2a38e5b
better handle detection with pleroma URLs 2020-04-26 21:11:32 -04:00
Nicolas Constant af790dc646
mention hack removal 2020-04-26 01:14:37 -04:00
Nicolas Constant 4269ca2700
redraft fixed, fix #224 2020-04-26 01:04:55 -04:00
Nicolas Constant 0a1156c137
add return lines in redraft 2020-04-24 00:55:53 -04:00
Nicolas Constant a4a8efe3cb
store/retrieve status state, fix #235 2020-04-24 00:08:22 -04:00
Nicolas Constant 2e8c9b5e9f
fix notification duplicates in account panel 2020-04-23 22:42:09 -04:00
Nicolas Constant 11c6ef955e
Merge pull request #264 from NicolasConstant/develop
0.26.1 PR
2020-04-21 22:36:41 -04:00
Nicolas Constant 311a72454b
refine arrow in tutorial 2020-04-21 22:36:10 -04:00
Nicolas Constant c6fa7d1b27
added logo on tutorial 2020-04-21 22:12:33 -04:00
Nicolas Constant d036a5cd9a
road to 0.26.1 2020-04-21 21:57:41 -04:00
Nicolas Constant 931bc92939
fix pinned status glitch in notification 2020-04-21 21:54:36 -04:00
Nicolas Constant e0bfdb546d
fix initialization 2020-04-21 21:45:21 -04:00
Nicolas Constant 607ad8c945
fix notification TL UI 2020-04-21 20:20:55 -04:00
Nicolas Constant 8b202696b5
fine tune collapsing limit 2020-04-21 20:00:49 -04:00
Nicolas Constant de0c7b1761
fix video outline, add link to label section 2020-04-21 19:50:47 -04:00
Nicolas Constant 1aec5e9438
Merge pull request #263 from NicolasConstant/develop
0.26.0 PR
2020-04-21 18:55:46 -04:00
Nicolas Constant df7e6c0d1f
road to 0.26.0 2020-04-21 18:15:50 -04:00
Nicolas Constant f1ec2a9068
Merge pull request #262 from NicolasConstant/topic_enhance-timelines
Topic enhance timelines
2020-04-20 23:41:24 -04:00
Nicolas Constant 30ec7025c1
fix stream edition 2020-04-20 02:37:00 -04:00
Nicolas Constant 51f048bfd5
tunning TL header depending of settings 2020-04-20 02:06:42 -04:00
Nicolas Constant 3bd2b7aaa8
Merge pull request #261 from NicolasConstant/topic_new-icon
Topic new icon
2020-04-20 02:03:47 -04:00
Nicolas Constant 5860422d83
added timeline header settings 2020-04-20 00:19:56 -04:00
Nicolas Constant ed2cf94519
refining icons 2020-04-19 21:51:50 -04:00
Nicolas Constant 861d2956e4
icons update 2020-04-19 21:45:08 -04:00
Nicolas Constant 5cc43fa2bd
updated website to show new logo 2020-04-19 19:40:03 -04:00
Nicolas Constant e2d1e1893a
set dedicated since_id for notifications 2020-04-19 03:18:37 -04:00
Nicolas Constant b1a8ffee2f
fix pleroma status retrieval when WS disabled 2020-04-19 03:06:00 -04:00
Nicolas Constant 58a05e2b72
fix html binding 2020-04-19 01:43:31 -04:00
Nicolas Constant 628b3e3f1f
fix property accessibility 2020-04-19 01:10:37 -04:00
Nicolas Constant 277a2a76df
timelines modes functionnal, fix #241 and fix #204 2020-04-19 01:06:22 -04:00
Nicolas Constant 179f0c8cd0
added timeline modes saving 2020-04-19 00:23:08 -04:00
Nicolas Constant c2e8247a58
added timelines settings UI 2020-04-19 00:14:16 -04:00
Nicolas Constant 19bb19c5b0
Merge pull request #258 from NicolasConstant/topic_add-response-thread
status notification added in thread
2020-04-18 19:52:08 -04:00
Nicolas Constant 82206bc9c9
status notification added in thread 2020-04-18 19:09:01 -04:00
Nicolas Constant 9c53010ae8
Merge pull request #257 from NicolasConstant/fix_infinity-scroll-spam
Fix infinity scroll spam
2020-04-18 18:42:57 -04:00
Nicolas Constant 8b397a3f7c
added external link into profile images, fix #254 2020-04-18 18:23:38 -04:00
Nicolas Constant b65737e237
limit account's media to images/gifs 2020-04-18 18:08:44 -04:00
Nicolas Constant c75245fabe
add unfound hashtag in search panel, fix #256 2020-04-18 17:45:29 -04:00
Nicolas Constant 3d16be26c5
always reload status to ensure lastest data 2020-04-18 17:38:33 -04:00
Nicolas Constant caf17f9662
fix Pleroma 2.0.2 hashtag parsing 2020-04-18 17:30:32 -04:00
Nicolas Constant 4b9cb381ce
fix tests 2020-04-18 17:21:28 -04:00
Nicolas Constant b848e28f11
stop scrolling spam, fix #107 2020-04-18 17:04:26 -04:00
Nicolas Constant c83a464901
Merge pull request #253 from NicolasConstant/topic_long-post-trucate
added long post trucation
2020-04-18 16:28:24 -04:00
Nicolas Constant ed55aa8c75
added long post trucation 2020-04-18 00:45:27 -04:00
Nicolas Constant 2a57ee8164
Merge pull request #252 from NicolasConstant/develop
0.25.0 PR
2020-04-17 22:07:29 -04:00
Nicolas Constant 646888d9f2
road to 0.25.0 2020-04-17 21:51:28 -04:00
Nicolas Constant 96508209aa
added deleted check in streams 2020-04-17 21:46:38 -04:00
Nicolas Constant 3fe127121e
fix pleroma status owning detection 2020-04-17 21:00:17 -04:00
Nicolas Constant 1290d09440
fix pleroma 2.0.2 breaking status changes 2020-04-17 20:47:31 -04:00
Nicolas Constant 17ba7eb27b
Merge pull request #250 from NicolasConstant/topic_fix-attachments
Topic fix attachments
2020-04-15 02:47:45 -04:00
Nicolas Constant e3e8761e0e
fix description in attachements for pleroma 2020-04-15 01:42:22 -04:00
Nicolas Constant a3e453ae0e
added support for multi audio attachment (pleroma) 2020-04-15 01:26:03 -04:00
Nicolas Constant fbc10b049f
added foolproof on instance name 2020-04-15 01:18:33 -04:00
Nicolas Constant d982c7a84b
added auxclick to open external link 2020-04-15 00:44:02 -04:00
Nicolas Constant ea6343355e
added open external link to images 2020-04-15 00:42:51 -04:00
Nicolas Constant a4bcddf533
fix gifs not being collapsed in viewer 2020-04-15 00:15:09 -04:00
Nicolas Constant 1519cb0b3d
fix video attachment expand 2020-04-15 00:08:28 -04:00
Nicolas Constant 74b4b6c623
added open event binding 2020-04-14 23:42:18 -04:00
Nicolas Constant 85ac14351f
clean up and audio/video binding 2020-04-14 22:27:21 -04:00
Nicolas Constant a88cf6a50e
fixed image/gif positionning 2020-04-14 22:12:07 -04:00
Nicolas Constant 4ea25c4866
rewiring attachments 2020-04-14 21:38:04 -04:00
Nicolas Constant ef984fed18
Merge pull request #249 from NicolasConstant/develop
fix theme color
2020-04-11 20:43:19 -04:00
Nicolas Constant ecd75676bb
fix theme color 2020-04-11 20:42:44 -04:00
Nicolas Constant dbdb08dd48
Merge pull request #248 from NicolasConstant/develop
correction theme color
2020-04-11 19:55:46 -04:00
Nicolas Constant 7d7fda2aca
correction theme color 2020-04-11 15:09:44 -04:00
Nicolas Constant 2b2d467e74
Merge pull request #247 from NicolasConstant/develop
0.24.0 PR
2020-04-11 00:16:53 -04:00
Nicolas Constant 4e9858874c
road to 0.24.0 2020-04-10 23:50:58 -04:00
Nicolas Constant 75ad9752bf
Merge pull request #246 from NicolasConstant/topic_fetch-remote-context
Topic fetch remote context
2020-04-10 23:39:30 -04:00
Nicolas Constant 15ab7ba56e
added settings to disable remote status fetching 2020-04-10 23:27:29 -04:00
Nicolas Constant 49a87aeef0
better loading of remote statuses 2020-04-10 22:55:48 -04:00
Nicolas Constant a98048b4fd
better acct on remote status and rely now on uri 2020-04-06 23:06:10 -04:00
Nicolas Constant f8868f1fed
fix mention on remote statuses 2020-04-06 22:46:52 -04:00
Nicolas Constant 918a969c2d
added cwPolicy to remote status 2020-04-06 22:11:50 -04:00
Nicolas Constant 6268fa405b
clean up 2020-04-06 22:10:37 -04:00
Nicolas Constant 68dd97e5a9
fix provider check for remote status 2020-04-06 22:06:36 -04:00
Nicolas Constant ce705f8c6b
displaying remote statuses 2020-04-06 21:54:31 -04:00
Nicolas Constant 9b03781c73
retrieving pleroma remote statuses 2020-04-06 21:00:21 -04:00
Nicolas Constant ef4e9b7ff8
testing remote fetch 2020-04-02 01:23:15 -04:00
Nicolas Constant 10c8189b77
Merge pull request #245 from NicolasConstant/develop
0.23.1 PR
2020-04-01 20:29:53 -04:00
Nicolas Constant e76d1d84bc
road to 0.23.1 2020-04-01 20:16:12 -04:00
Nicolas Constant 71139eb4c0
fix cw analysis issues in thread 2020-04-01 02:29:51 -04:00
Nicolas Constant decb4316d0
Merge pull request #243 from NicolasConstant/develop
0.23.0 PR
2020-03-31 19:38:41 -04:00
Nicolas Constant 4ea7181590
road to 0.23.0 2020-03-31 19:21:47 -04:00
Nicolas Constant ecc2db9eb6
Merge pull request #242 from NicolasConstant/topic_enhanced-cw
Topic enhanced cw
2020-03-31 19:19:41 -04:00
Nicolas Constant f3b13879b3
clean up 2020-03-31 18:59:49 -04:00
Nicolas Constant 5e2ab0365f
filter string empty from CW policy settings 2020-03-31 18:58:05 -04:00
Nicolas Constant 7144463c5a
added status hiding 2020-03-31 18:53:56 -04:00
Nicolas Constant ff7148c33b
fix settings edition 2020-03-28 23:47:23 -04:00
Nicolas Constant 239aa36109
clean up 2020-03-28 20:13:28 -04:00
Nicolas Constant 8d489cb5d7
disabling dev settings ngxs 2020-03-28 19:14:02 -04:00
Nicolas Constant 1272f2303a
fix bugs changing CW state 2020-03-28 19:10:15 -04:00
Nicolas Constant e6e75923b0
better status analysis for CW 2020-03-28 18:58:40 -04:00
Nicolas Constant 687148bc3a
applying CW policy 2020-03-28 17:43:31 -04:00
Nicolas Constant b15cc6047b
added cw policy serialization 2020-03-28 17:04:36 -04:00
Nicolas Constant c4e0cfa877
added dev module setting 2020-03-27 01:06:33 -04:00
Nicolas Constant 18c745c9d6
added CW settings 2020-03-27 01:06:06 -04:00
Nicolas Constant d1a85d05c8
Merge pull request #240 from NicolasConstant/develop
0.22.0 PR
2020-03-14 14:23:52 -04:00
Nicolas Constant e84164ef87
changed emoji path 2020-03-14 14:06:43 -04:00
Nicolas Constant 2714af39ff
remove emojis for quicker FTP transfert 2020-03-14 13:51:22 -04:00
Nicolas Constant 9ee6038bad
remove old component 2020-03-14 13:44:16 -04:00
Nicolas Constant 6329506950
road to 0.22.0 2020-03-14 13:29:16 -04:00
Nicolas Constant cff9d41d9d
fix account search and display 2020-03-14 13:07:06 -04:00
Nicolas Constant da58d0723a
clean up 2020-03-14 12:55:00 -04:00
Nicolas Constant e6de932764
fix link preview overflow bug 2020-03-14 12:46:40 -04:00
Nicolas Constant 48e29110c3
Merge pull request #239 from NicolasConstant/topic_bookmarks
Topic bookmarks
2020-03-14 12:34:10 -04:00
Nicolas Constant 917564c067
fix #228 2020-03-14 03:26:37 -04:00
Nicolas Constant 274857a522
added bookmark panel 2020-03-14 02:56:07 -04:00
Nicolas Constant 2f0cb2b959
fine tuning icons 2020-03-14 02:12:42 -04:00
Nicolas Constant 3a2761eeb1
added menu to check bookmarks 2020-03-13 21:06:08 -04:00
Nicolas Constant fe9cb7fea1
fix status new state overrinding current state 2020-03-13 21:02:37 -04:00
Nicolas Constant a41a46168a
action icon design fix 2020-03-13 20:49:54 -04:00
Nicolas Constant 0aed10cbff
limit bookmarks to mastodon > 3.1 2020-03-13 20:37:21 -04:00
Nicolas Constant 9aefdbe870
refactoring 2020-03-13 20:25:51 -04:00
Nicolas Constant a9350ff31b
wirering bookmarks to service 2020-03-13 20:20:51 -04:00
Nicolas Constant 3b8448369d
added bookmark design 2020-03-12 20:23:53 -04:00
Nicolas Constant 57b98e9e4f
added bookmarks in service and models 2020-03-12 19:54:52 -04:00
Nicolas Constant 2cb2e8770e
fix exception not properly handled 2020-03-11 21:28:16 -04:00
Nicolas Constant d9c570a1bf
display icon on relationship error 2020-03-11 21:07:57 -04:00
Nicolas Constant 8ae2edf164
added resilience in account retrieval 2020-03-11 20:54:32 -04:00
Nicolas Constant 1cd2833ede
Merge pull request #237 from NicolasConstant/develop
0.21.0 PR
2020-03-07 20:12:18 -05:00
Nicolas Constant 59944b68f2
road to 0.21.0 2020-03-07 19:57:23 -05:00
Nicolas Constant c27ed4dc2d
Merge pull request #236 from NicolasConstant/topic_simplify-add-account
Topic simplify add account
2020-03-07 19:56:34 -05:00
Nicolas Constant f43fcaa38b
change electron build 2020-03-07 15:02:17 -05:00
Nicolas Constant 06240c9374
disabling auth routing workflow 2020-03-07 14:54:44 -05:00
Nicolas Constant c5b325ce8a
Merge pull request #234 from NicolasConstant/topic_update-electron
Topic update electron
2020-03-07 11:46:23 -05:00
Nicolas Constant a1c671dfbf
fix token renewal bug in acc details retrieval 2020-03-07 11:44:44 -05:00
Nicolas Constant b17f2742a4
added check updates link 2020-03-07 11:01:20 -05:00
Nicolas Constant 4d461b497e
added check for updates link 2020-03-07 00:31:14 -05:00
Nicolas Constant 49887613c8
clean up 2020-03-07 00:20:40 -05:00
Nicolas Constant e978a1534a
clean up 2020-03-07 00:18:28 -05:00
Nicolas Constant 146ee28e79
Merge pull request #233 from NicolasConstant/topic_update-electron_font
added fonts auto-hosting
2020-03-07 00:17:58 -05:00
Nicolas Constant 2fa9d95000
added fonts auto-hosting 2020-03-06 23:04:30 -05:00
Nicolas Constant 3a287ee05e
fix electron 2020-02-28 01:03:16 -05:00
Nicolas Constant 939c59655f
upgraded electron 2020-02-28 00:19:18 -05:00
Nicolas Constant 6f0c949a91
Merge pull request #231 from NicolasConstant/topic_auto-update
Topic auto update
2020-02-27 23:38:54 -05:00
Nicolas Constant 5e7d151cad
fix update listening 2020-02-27 20:25:37 -05:00
Nicolas Constant 239e86332f
fix update 2020-02-27 19:59:02 -05:00
Nicolas Constant 0cd16fd0de
fix serviceworker registration and update check 2020-02-27 00:12:18 -05:00
Nicolas Constant 55edfbd24a
wired workerservice with update notification 2020-02-26 00:18:06 -05:00
Nicolas Constant b72049fd28
refining update notification design 2020-02-26 00:13:18 -05:00
Nicolas Constant 00cd6ae592
added update notification's animation 2020-02-26 00:02:54 -05:00
Nicolas Constant f9ac4319aa
added update message 2020-02-25 23:55:35 -05:00
Nicolas Constant 6d83550557
try fixing CI/CD 2020-02-25 23:54:18 -05:00
Nicolas Constant 3d828e8a77
added service-worker service 2020-02-25 23:20:58 -05:00
Nicolas Constant 611bccc383
Merge branch 'topic_auto-update' of https://github.com/NicolasConstant/sengis into topic_auto-update 2020-02-25 23:08:04 -05:00
Nicolas Constant 24821d9e94
added service workers 2020-02-25 22:52:50 -05:00
Nicolas Constant c871b2afe2
Merge pull request #229 from NicolasConstant/develop
sync
2020-02-25 22:46:02 -05:00
Nicolas Constant c804fbce68
Merge pull request #227 from NicolasConstant/develop
0.20.1 PR
2020-02-25 21:17:27 -05:00
Nicolas Constant 8df8eb7de8
road to 0.20.1 2020-02-25 20:08:37 -05:00
Nicolas Constant 78dd3f123b
Merge pull request #226 from NicolasConstant/develop
Sync PR
2020-02-25 00:37:49 -05:00
Nicolas Constant 5731962603
clean pleroma account's fields url, fix #200 2020-02-24 20:42:18 -05:00
Nicolas Constant 6a2ec8bd23
add emoji support in CW, fix #220 2020-02-24 20:32:30 -05:00
Nicolas Constant 6ab3fc1bd8
trim instance name, fix #225 2020-02-24 20:21:07 -05:00
Nicolas Constant 88b32f5b5a
relaunch ci/cd 2020-02-20 21:22:19 -05:00
Nicolas Constant 993202bfff
Merge pull request #219 from NicolasConstant/develop
0.20.0 PR
2020-02-20 19:35:59 -05:00
Nicolas Constant 153dc60f4f
road to 0.20.0 2020-02-20 19:20:21 -05:00
Nicolas Constant 1e9a7edf97
added column shotcut options fix #201 2020-02-19 23:40:11 -05:00
Nicolas Constant bf1b84e980
tweak column notification color 2020-02-19 22:43:28 -05:00
Nicolas Constant 5e67c8bdd0
Merge pull request #218 from NicolasConstant/topic_copy-paste-image
support pasting image from clipboard
2020-02-19 20:11:28 -05:00
Nicolas Constant 7ae94303da
support pasting image from clipboard fix #154 2020-02-19 19:53:50 -05:00
Nicolas Constant f8b376a001
Merge pull request #217 from NicolasConstant/topic_fix-favs-reblog
Topic fix favs reblog
2020-02-19 00:39:10 -05:00
Nicolas Constant 33ebfb0e78
fix column notification z-index 2020-02-19 00:06:49 -05:00
Nicolas Constant 71e6e1ed18
fix reblog and fav state to be global 2020-02-18 23:51:34 -05:00
Nicolas Constant 21bade1dc9
added service to hold status state 2020-02-16 01:39:45 -05:00
Nicolas Constant a7ec96c29f
Merge pull request #215 from NicolasConstant/topic_little-enhancements
Topic little enhancements
2020-02-15 23:01:21 -05:00
Nicolas Constant 252313aac2
testing pasting 2020-02-15 22:21:58 -05:00
Nicolas Constant fb79e53b96
fix bindings 2020-02-14 22:54:03 -05:00
Nicolas Constant 6723656371
added debuger for ctrl+v 2020-02-14 22:36:22 -05:00
Nicolas Constant 646cf49c8f
fine tuning new status notifications 2020-02-14 22:31:23 -05:00
Nicolas Constant 3abaa916b8
added new status notification in TL 2020-02-14 22:26:40 -05:00
Nicolas Constant 3486b8eb14
fix empty instance bug 2020-02-14 21:21:37 -05:00
Nicolas Constant 6c7915e4b1
only provide instance for adding an account 2020-02-14 21:16:03 -05:00
Nicolas Constant be17f56140
better new account design 2020-02-14 21:01:07 -05:00
Nicolas Constant a7f50b2a1f
fix search design 2020-02-14 20:14:42 -05:00
Nicolas Constant f925f08d00
fix delay in status selection 2020-02-14 19:59:45 -05:00
Nicolas Constant ccbe9bb01a
Merge pull request #213 from NicolasConstant/develop
0.19.4 PR
2020-02-12 22:20:15 -05:00
Nicolas Constant 0702063f69
road to 0.19.4 2020-02-12 21:24:28 -05:00
Nicolas Constant 3bca277b0c
Merge pull request #209 from ahangarha/Add_bidi_support
Add bidi support
2020-02-08 13:02:07 -05:00
Mostafa Ahangarha e6d780aa4b Add bidi support 2020-02-06 14:43:00 +04:30
Nicolas Constant 92fc1d4831
Merge pull request #207 from NicolasConstant/develop
0.19.3 PR
2020-01-01 19:28:11 +01:00
Nicolas Constant 73f0628519 road to 0.19.3 2020-01-01 19:09:37 +01:00
Nicolas Constant 882d123881 added loading icon on login 2020-01-01 19:09:02 +01:00
Nicolas Constant 975b3a6e2b fix electron registration 2020-01-01 18:35:15 +01:00
Nicolas Constant df6213ee1a
Merge pull request #206 from NicolasConstant/develop
0.19.2 PR
2019-12-21 22:43:16 +01:00
Nicolas Constant 3fc0b5f34f fix merge conflicts 2019-12-21 20:43:12 +01:00
Nicolas Constant 345f80a462 fix process in polyfills 2019-12-21 20:39:04 +01:00
Nicolas Constant 2064940361
Merge pull request #203 from NicolasConstant/develop
0.19.1 PR
2019-11-30 22:06:09 -05:00
Nicolas Constant 7a7b09b59d
road to 0.19.1 2019-11-30 21:45:14 -05:00
Nicolas Constant d82d5d3fcd
added clear all local data 2019-11-30 21:42:50 -05:00
Nicolas Constant 4ef26b2f61
fix registration on electron 2019-11-30 21:16:25 -05:00
Nicolas Constant 99011b5853
bump deps 2019-11-28 19:47:28 -05:00
Nicolas Constant 6afde304d0
popup linking to https 2019-11-28 19:47:04 -05:00
Nicolas Constant 6c71820bfc
Update package.json 2019-11-23 19:15:40 -05:00
Nicolas Constant 6730de097c
Merge pull request #197 from NicolasConstant/develop
fix order init sound
2019-11-23 18:25:32 -05:00
Nicolas Constant df9da325f1
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2019-11-23 18:25:02 -05:00
Nicolas Constant 5fc7211adb
fix order 2019-11-23 18:24:53 -05:00
Nicolas Constant bb0693bb24
Merge pull request #196 from NicolasConstant/develop
0.19.0 PR
2019-11-23 17:32:57 -05:00
Nicolas Constant 4ba5c98da1
added credits 2019-11-23 16:30:09 -05:00
Nicolas Constant c311bcee16
Rename CREDITS.MD to CREDITS.md 2019-11-23 16:29:07 -05:00
Nicolas Constant 342742b730
added credits 2019-11-23 16:27:41 -05:00
Nicolas Constant 4fd1689518
Merge pull request #195 from NicolasConstant/topic_notification-revamp
Topic notification revamp
2019-11-22 00:44:46 -05:00
Nicolas Constant 7ee5cdb4f1
added loading animation 2019-11-20 23:50:58 -05:00
Nicolas Constant 52f5aa69df
clean up 2019-11-20 23:12:12 -05:00
Nicolas Constant fb4a274956
road to 0.19.0 2019-11-20 23:07:18 -05:00
Nicolas Constant fc6d994f42
removed filters on notification column 2019-11-20 23:04:34 -05:00
Nicolas Constant fb018a7a80
added new notifications sub 2019-11-20 22:59:45 -05:00
Nicolas Constant 39b8b15f72
added notification retrieval 2019-11-20 22:40:23 -05:00
Nicolas Constant c182540ca8
added notification switch, animation and mentions 2019-11-20 22:15:50 -05:00
Nicolas Constant 29d646477d
added browsing binding 2019-11-19 00:29:39 -05:00
Nicolas Constant c09b89b131
first integration notification in column 2019-11-19 00:26:23 -05:00
Nicolas Constant bd11d1dfea
added notification in component 2019-11-18 23:54:11 -05:00
Nicolas Constant 3e9bd59a7f
fix focus 2019-11-17 20:50:09 -05:00
Nicolas Constant 756deb56f4
starting notification retrieval 2019-11-17 00:57:58 -05:00
Nicolas Constant 7a001a7f67
added selector 2019-11-16 23:59:23 -05:00
Nicolas Constant 8ddd06facd
added notification comp 2019-11-16 22:57:33 -05:00
Nicolas Constant ce277d57b6
added autofocus functionality 2019-11-16 22:35:20 -05:00
Nicolas Constant f8eba5a479
disabling sounds functionnal 2019-11-16 17:52:21 -05:00
Nicolas Constant 6eb3e44923
disabling avatar notifications functionnal 2019-11-16 17:40:49 -05:00
Nicolas Constant d7d1952c5e
added account settings binding 2019-11-16 17:32:58 -05:00
Nicolas Constant 97976a1f68
added settings bindings 2019-11-16 17:27:29 -05:00
Nicolas Constant 24ed03f66a
added notification design 2019-11-14 23:23:17 -05:00
Nicolas Constant 0db82b4ce3
added settings forms and positionning 2019-11-14 22:58:09 -05:00
Nicolas Constant f8bd0adc53
load sound notification from settings 2019-11-14 22:06:16 -05:00
Nicolas Constant 1dd52dde34
added controls to change sound notification 2019-11-13 23:12:00 -05:00
Nicolas Constant 36f9a1f87a
load sound file from settings 2019-11-13 22:32:42 -05:00
Nicolas Constant c177efa2e7
added sound Id in settings state 2019-11-13 22:18:39 -05:00
Nicolas Constant 423a32a888
fix notification sounds glitches 2019-11-13 22:03:56 -05:00
Nicolas Constant 93947744be
fix false positive notifications 2019-11-08 00:56:44 -05:00
Nicolas Constant 7414539f09
don't reload sound file each notification 2019-11-08 00:35:48 -05:00
Nicolas Constant eab60d4449
added sound 2019-11-08 00:04:41 -05:00
Nicolas Constant 0cd17f25d6
added websocket fallback 2019-11-07 23:39:26 -05:00
Nicolas Constant de20c8f4f4
added websocket wirering 2019-11-07 23:05:48 -05:00
Nicolas Constant 9e3389ed11
added polls to exclusion 2019-11-07 21:39:09 -05:00
Nicolas Constant 4390a5e89c
fix exclusion 2019-11-07 00:34:14 -05:00
Nicolas Constant a9bee0f9fb
make distinction between mention and notification 2019-11-07 00:19:06 -05:00
Nicolas Constant c846859461
Merge pull request #194 from NicolasConstant/develop
sync from Develop
2019-11-06 22:51:04 -05:00
Nicolas Constant b060c6f7c5
Merge pull request #193 from NicolasConstant/master
sync from Master
2019-11-06 22:49:59 -05:00
Nicolas Constant 7f82edf7be
Merge pull request #187 from NicolasConstant/fix_docker
PR 0.18.2
2019-11-02 01:58:41 -04:00
Nicolas Constant c5bf07a1a6
clean up 2019-11-02 01:32:17 -04:00
Nicolas Constant 903fdce232
fix tests 2019-11-02 01:30:41 -04:00
Nicolas Constant 6d7ddec1bd
road to 0.18.2 2019-11-02 01:24:47 -04:00
Nicolas Constant 329bdffd20
create proper launcher page 2019-11-02 01:21:58 -04:00
Nicolas Constant 382a3df3bf
added sengi launcher 2019-11-02 00:47:04 -04:00
Nicolas Constant 99b1ea3a2b
added url rewriting rules 2019-11-01 00:14:51 -04:00
Nicolas Constant e137317dc1
added build folder 2019-10-31 23:49:13 -04:00
Nicolas Constant bbfb4bc026
added redirection to url root 2019-10-31 19:58:09 -04:00
Nicolas Constant a23db9b30e
Merge pull request #185 from NicolasConstant/develop
0.18.1 PR
2019-10-11 23:17:05 -04:00
Nicolas Constant ce0e7f09cd
road to 0.18.1 2019-10-11 23:02:10 -04:00
Nicolas Constant 85cc61df8a
fix firefox gototop 2019-10-11 22:42:08 -04:00
Nicolas Constant 24324ddccb
fix autosuggest not opening with emoji 2019-10-11 19:59:53 -04:00
Nicolas Constant 4b0924dd3b
Merge pull request #182 from ahangarha/bidi-sup-create-status
add bidi support for creating status
2019-10-09 20:55:42 -04:00
Mostafa Ahangarha 900652e5e8 WIP - add bidi support for creating status
Added `dir="auto"` attribution to make the input fields automatically
detect the direction of text and render it properly specially for RTL
texts.
2019-10-09 19:07:11 +03:30
Nicolas Constant 832ed7e9bc
Merge pull request #180 from NicolasConstant/develop
0.18.0 PR
2019-10-08 23:51:50 -04:00
Nicolas Constant 46873c7b8b
Merge pull request #178 from NicolasConstant/topic_pixelfed-compatibility
Topic pixelfed compatibility
2019-10-08 00:26:37 -04:00
Nicolas Constant f8e1a49218
Merge pull request #179 from NicolasConstant/fix_nav-issues
Fix nav issues
2019-10-08 00:26:17 -04:00
Nicolas Constant 661019a5ec
road to 0.18.0 2019-10-08 00:07:41 -04:00
Nicolas Constant 81d716279a
fix autoscroll after CS removal 2019-10-07 23:51:54 -04:00
Nicolas Constant f9bf362935
fix thread auto scroll 2019-10-07 23:46:03 -04:00
Nicolas Constant 36fb623ace
Merge pull request #166 from mcrosson/dockerization
Setup for running inside a docker container
2019-10-05 21:56:06 -04:00
Nicolas Constant 0fe3cbce62
fix scheduler bottom border 2019-10-04 23:33:08 -04:00
Nicolas Constant e88a568a99
fix autosuggest 2019-10-04 23:05:36 -04:00
Nicolas Constant eb41cbf8e9
renewing tokens in Websockets 2019-10-03 20:05:27 -04:00
Nicolas Constant 6cd3d7272a
added pleroma workaround on refresh token 2019-10-03 19:58:37 -04:00
Nicolas Constant e3b2ffcd58
added token refreshing on common endpoints 2019-10-03 00:05:00 -04:00
Nicolas Constant da759f0523
added mastodon API wrapper to handle token refresh 2019-10-02 00:14:40 -04:00
Nicolas Constant c56ae31964
added refresh workflow 2019-10-01 23:05:52 -04:00
Nicolas Constant 58414baa8e
hide pixelfed unsupported polls/scheduling 2019-10-01 22:24:00 -04:00
Nicolas Constant 5b6b463b90
temp workaround for boost/fav for pixelfed 2019-10-01 21:58:21 -04:00
Nicolas Constant dc101db6ef
hide unneeded error message 2019-10-01 21:49:40 -04:00
Nicolas Constant 9a9406cabb
Merge pull request #177 from NicolasConstant/develop
0.17.1 PR
2019-10-01 01:45:30 -04:00
Nicolas Constant f52ed00db5
road to 0.17.1 2019-10-01 01:40:07 -04:00
Nicolas Constant e5aea3c4a6
Merge pull request #174 from NicolasConstant/topic_pixelfed-compatibility
added pixelfed Oauth compatibility
2019-10-01 01:39:23 -04:00
Nicolas Constant ed1e52232d
fix gotoup in firefox 2019-10-01 00:55:20 -04:00
Nicolas Constant 8c36620b0a
fix link/video borders 2019-10-01 00:40:23 -04:00
Nicolas Constant 4ba42a0d0c
removed remote video border 2019-10-01 00:24:20 -04:00
Nicolas Constant 03be3db8c1
Merge pull request #175 from NicolasConstant/develop
0.17.0 PR
2019-09-29 20:43:00 -04:00
Nicolas Constant e0b85dd885
road to 0.17.0 2019-09-29 19:56:42 -04:00
Nicolas Constant a5948b05e0
Merge pull request #173 from NicolasConstant/topic_column-navigation
Topic column navigation
2019-09-29 19:55:36 -04:00
Nicolas Constant 201341f0e7
fix scroll to top in firefox 2019-09-29 19:43:19 -04:00
Nicolas Constant 55bc557512
added hotkeys 2019-09-29 19:21:43 -04:00
Nicolas Constant b977134109
mac menu based on apple specifications fix #165 2019-09-29 18:57:24 -04:00
Nicolas Constant 216e433bec
column switch and focus sync 2019-09-28 18:03:13 -04:00
Nicolas Constant 7cfa11be51
focus collumn on selection 2019-09-28 15:52:04 -04:00
Nicolas Constant 6528af69ab
removed buttons 2019-09-28 15:23:30 -04:00
Nicolas Constant 6409a06970
button removal, fix CWs removal 2019-09-28 15:12:16 -04:00
Nicolas Constant 41b3c83af6
button removal 2019-09-28 14:51:15 -04:00
Nicolas Constant 11ddcacb8c
various buttons removals 2019-09-28 14:22:11 -04:00
Nicolas Constant c7ca6fb61c
fix focus on column edition 2019-09-28 13:50:35 -04:00
Nicolas Constant cf78c57b55
enhance accessibility on buttons 2019-09-28 01:55:12 -04:00
Nicolas Constant c85eaee78b
dispatching selection down to status (not working) 2019-09-28 01:23:15 -04:00
Nicolas Constant 28ca6d7fa0
added column selection hotkeys 2019-09-28 00:32:55 -04:00
Nicolas Constant 68367a783a
added column selection and animation 2019-09-28 00:02:59 -04:00
Nicolas Constant 8139a0ff72
added pixelfed Oauth compatibility 2019-09-27 21:55:40 -04:00
Nicolas Constant 51cfefdd15
Merge branch 'topic_notification-revamp' of https://github.com/NicolasConstant/sengis into topic_notification-revamp 2019-09-27 18:51:10 -04:00
Nicolas Constant 6eac5b0042
added health type 2019-09-27 18:45:30 -04:00
Nicolas Constant 252724aa7d
Merge pull request #161 from NicolasConstant/master
Fix test
2019-09-26 02:14:20 -04:00
Nicolas Constant 27e4f44f22
Merge pull request #162 from NicolasConstant/master
Fix tests
2019-09-26 02:14:00 -04:00
Nicolas Constant 088f92a15b
Merge pull request #171 from NicolasConstant/develop
0.16.2 PR
2019-09-25 18:54:22 -04:00
Nicolas Constant fde828e779
road to 0.16.2 2019-09-25 18:37:14 -04:00
Nicolas Constant 24177f50b2
fix 3.0.0rc1 hastags 2019-09-25 18:33:13 -04:00
Nicolas Constant 086d60b49f
Merge pull request #168 from NicolasConstant/develop
0.16.1 PR
2019-09-25 00:54:25 -04:00
Nicolas Constant 46383c5fda
Merge pull request #167 from NicolasConstant/fix_Masto3.0.0rc1
Fix masto3.0.0rc1
2019-09-25 00:37:24 -04:00
Nicolas Constant 7945c4166e
road to 0.16.1 2019-09-25 00:10:26 -04:00
Nicolas Constant ebbd5c944f
fix search issues in 3.0.0rc1 2019-09-25 00:09:10 -04:00
Mike C d43426641d Initial Dockerfile bring up using lighttpd as a static page web server 2019-09-24 18:08:27 -04:00
Nicolas Constant b28a023e47
testing EventSource 2019-09-12 00:08:28 -04:00
Nicolas Constant 11beefa883
disable unused tests 2019-09-09 00:43:16 -04:00
Nicolas Constant c69ff3dd3a
Merge pull request #160 from NicolasConstant/develop
0.16.0 Release PR
2019-09-07 19:06:35 -04:00
Nicolas Constant 2d9b48dede
road to 0.16.0 2019-09-07 18:42:06 -04:00
Nicolas Constant 4589577119
Merge pull request #159 from NicolasConstant/topic_poll-creation
Topic poll creation
2019-09-07 18:40:30 -04:00
Nicolas Constant 55d5f82e80
better error display 2019-09-07 17:52:07 -04:00
Nicolas Constant 0c00a2aa86
fix colors 2019-09-07 16:59:20 -04:00
Nicolas Constant fc18ce5f1f
show icon only if has scheduled 2019-09-07 16:31:37 -04:00
Nicolas Constant 1e0a426bfd
clean up 2019-09-07 16:22:06 -04:00
Nicolas Constant 1a243c3ee6
sort statuses after rescheduling 2019-09-07 16:21:25 -04:00
Nicolas Constant 05e4a87524
better scheduler positionning 2019-09-07 15:14:38 -04:00
Nicolas Constant 2b9adece64
added waiting icon 2019-09-07 14:56:00 -04:00
Nicolas Constant c5d3f6c97b
rescheduling functionnal 2019-09-07 14:31:05 -04:00
Nicolas Constant f81c76c80c
deletion of scheduled status functional 2019-09-06 21:35:54 -04:00
Nicolas Constant f96309ed01
better display of scheduled statuses 2019-09-06 20:35:42 -04:00
Nicolas Constant 8ae06f1439
fixed moved to emoji in names 2019-09-06 19:53:24 -04:00
Nicolas Constant 5164d28d11
better hour display 2019-09-06 01:44:06 -04:00
Nicolas Constant 21f32b91b0
better display of scheduled statuses 2019-09-06 01:34:55 -04:00
Nicolas Constant 8299137b56
display avatar on scheduled statuses 2019-09-06 01:18:41 -04:00
Nicolas Constant 9a0af9f246
fix autosuggest limitations 2019-09-06 00:35:07 -04:00
Nicolas Constant 802e0afdd0
starting displaying scheduled status 2019-08-25 02:58:47 -04:00
Nicolas Constant 5db27f2dbb
added archi to display scheduled statuses 2019-08-25 02:37:54 -04:00
Nicolas Constant d777b78063
created scheduled statuses navigation 2019-08-25 01:43:47 -04:00
Nicolas Constant a0bce355e7
created scheduledStatuses services 2019-08-25 01:25:45 -04:00
Nicolas Constant b180c1d57e
added status scheduler 2019-08-24 22:47:54 -04:00
Nicolas Constant c5bb09a42e
polls functionnal 2019-08-24 21:28:04 -04:00
Nicolas Constant 8ba78b3c19
added poll binding + proper poll type change 2019-08-24 20:49:54 -04:00
Nicolas Constant a06d178bae
designed poll entries 2019-08-24 19:59:03 -04:00
Nicolas Constant 0fdd1c9896
poll entry removal works 2019-08-24 01:38:48 -04:00
Nicolas Constant 0d0ed5d318
added polls entries 2019-08-24 00:55:01 -04:00
Nicolas Constant caaa301349
added poll-editor and scheduler components 2019-08-23 22:59:57 -04:00
Nicolas Constant 5cd55393f8
Merge pull request #156 from NicolasConstant/develop
0.15.0 Merge
2019-08-16 23:22:53 -04:00
Nicolas Constant b332955abf
road to 0.15.0 2019-08-16 23:05:08 -04:00
Nicolas Constant fa5b6dc562
Merge pull request #155 from NicolasConstant/topic_enhance-navigation
Topic enhance navigation
2019-08-16 23:04:08 -04:00
Nicolas Constant 3cc0f8a6fc
fix message redaction being jaggy 2019-08-16 22:37:19 -04:00
Nicolas Constant 113cefb36f
fix growing issue in small thread 2019-08-16 22:06:06 -04:00
Nicolas Constant 716819524b
fix column shifting on autogrow 2019-08-15 22:52:04 -04:00
Nicolas Constant 733c21af7d
auto-scroll to footer when growing and visible 2019-08-15 19:40:17 -04:00
Nicolas Constant 956b8894a0
better selection color 2019-08-15 19:14:14 -04:00
Nicolas Constant 1ea39621ad
fix column moving on focus 2019-08-14 21:54:34 -04:00
Nicolas Constant 2b6ad187ac
tweak focusing status in thread 2019-08-14 21:11:22 -04:00
Nicolas Constant 560cf19903
don't open profile if already selected 2019-08-14 00:34:04 -04:00
Nicolas Constant 5858d96370
don't browse hashtag if already selected 2019-08-14 00:19:41 -04:00
Nicolas Constant 88ebe89217
don't let selected status being opened again 2019-08-14 00:17:32 -04:00
Nicolas Constant 7f748a7e12
text selection don't trigger click anymore 2019-08-14 00:08:41 -04:00
Nicolas Constant f0035149eb
added autofocus on status in thread 2019-08-13 23:56:47 -04:00
Nicolas Constant ef0602e54a
fix scrolling content in floating column 2019-08-13 01:02:10 -04:00
Nicolas Constant cc45d7fb25
fix column switching 2019-08-13 00:48:23 -04:00
Nicolas Constant 1c6b0784db
added sliding columns on floating column 2019-08-13 00:35:15 -04:00
Nicolas Constant f7f5678526
fix context-menu init 2019-08-11 16:56:25 -04:00
Nicolas Constant f6b7f95bd6
goToTop functionnal on overlay now 2019-08-11 01:00:58 -04:00
Nicolas Constant 3c798baab1
fix build 2019-08-11 00:07:13 -04:00
Nicolas Constant 6bfdc07dfa
fix hover color 2019-08-11 00:03:43 -04:00
Nicolas Constant f02047a0bd
fix bottom margin on overlay 2019-08-10 23:59:09 -04:00
Nicolas Constant 798f8f404d
new overlay navigation functionnal 2019-08-10 23:52:56 -04:00
Nicolas Constant eb66cb7760
added sliding column in TLs 2019-08-10 20:40:51 -04:00
Nicolas Constant 2bedbd6cf2
Merge pull request #152 from NicolasConstant/develop
0.14.0 Merge
2019-08-10 16:45:24 -04:00
Nicolas Constant 877449cd4b
road to 0.14.0 2019-08-10 16:17:41 -04:00
Nicolas Constant 7fef28ee8f
Merge pull request #151 from NicolasConstant/topic_enhance-profiles
Topic enhance profiles
2019-08-10 16:16:45 -04:00
Nicolas Constant bf687ebb62
fix loading animation positionning 2019-08-10 15:00:47 -04:00
Nicolas Constant 235e81cccb
fix floating element on small profile 2019-08-10 14:27:38 -04:00
Nicolas Constant fc6724d57e
fix account name not displayed when not set 2019-08-10 14:26:54 -04:00
Nicolas Constant 77ac1764cd
fix firefox horizontal scrollbar color 2019-08-10 14:15:09 -04:00
Nicolas Constant 7a54e18bf7
firefox scrollbar fix 2019-08-10 14:03:06 -04:00
Nicolas Constant d5e78dec0b
better section switching 2019-08-10 13:40:08 -04:00
Nicolas Constant ff02dea006
better positionning of avatar/name/relationship 2019-08-10 12:59:08 -04:00
Nicolas Constant 5d61c44700
added context-menu to user profile 2019-08-10 00:36:18 -04:00
Nicolas Constant b5f543dac3
extracting context-menu to its own component 2019-08-09 19:08:18 -04:00
Nicolas Constant 5d99d37384
better display of relashionship 2019-08-09 01:03:53 -04:00
Nicolas Constant 52202af43e
fix title and status retrieval count 2019-08-09 00:49:23 -04:00
Nicolas Constant 98ac80dccf
fix image floats 2019-08-09 00:13:52 -04:00
Nicolas Constant dc6cd2fb17
added floating menu 2019-08-08 23:30:51 -04:00
Nicolas Constant 23c9e6873b
displaying media 2019-08-08 23:00:49 -04:00
Nicolas Constant 78d3cc9631
status section menu functional 2019-08-08 22:41:59 -04:00
Nicolas Constant c320518159
added sections menu 2019-08-08 22:11:12 -04:00
Nicolas Constant 5697445c08
performance fix 2019-08-08 21:37:45 -04:00
Nicolas Constant b68f12d975
reset floating header on profile change 2019-08-06 22:45:08 -04:00
Nicolas Constant 94f7a52d3f
bigger avatar on floating header 2019-08-06 20:31:12 -04:00
Nicolas Constant 5c1617d673
better "no toot" message 2019-08-06 20:21:47 -04:00
Nicolas Constant 5be372a3e9
limit profil status retrieval to 20 2019-08-06 20:18:31 -04:00
Nicolas Constant 985513335e
better migrated account opening 2019-08-06 20:16:10 -04:00
Nicolas Constant e77858e021
added names in floating header 2019-08-06 20:13:40 -04:00
Nicolas Constant e51973df54
added shadow to floating header 2019-08-06 19:53:39 -04:00
Nicolas Constant 433917fae4
added avatar and relationship on floating header 2019-08-05 20:23:09 -04:00
Nicolas Constant c38db1d1e1
created a floating header 2019-08-05 20:11:29 -04:00
Nicolas Constant 1351a06eb8
added animation when fetching relationship 2019-08-05 19:10:58 -04:00
Nicolas Constant 0ce6cf8d4b
fix pinned status display 2019-08-05 18:56:45 -04:00
Nicolas Constant 90d227efca
center background profile image 2019-08-05 18:50:59 -04:00
Nicolas Constant 4cf824caca
added moved information in profile 2019-08-05 18:42:06 -04:00
Nicolas Constant caa0964116
disable column editing when clicking out 2019-08-05 17:59:04 -04:00
Nicolas Constant b3964fd334
Merge pull request #150 from NicolasConstant/develop
0.13.2 Merge
2019-08-02 23:28:46 -04:00
Nicolas Constant 63475fd813
road to 0.13.2 2019-08-02 23:07:08 -04:00
Nicolas Constant 0c62aba240
Merge pull request #149 from NicolasConstant/fix_direct-message
Fix direct message
2019-08-02 23:04:53 -04:00
Nicolas Constant a7e55b5200
fix scrolling 2019-08-02 23:00:16 -04:00
Nicolas Constant cb7d3d7079
clean up 2019-08-02 20:57:08 -04:00
Nicolas Constant 97808aacd1
integrate conversations in DMs 2019-08-02 20:56:52 -04:00
Nicolas Constant ba1d965c2f
Merge pull request #148 from NicolasConstant/master
sync merge
2019-08-02 19:31:47 -04:00
Nicolas Constant a3204550f9
remove loop 2019-08-02 19:16:13 -04:00
Nicolas Constant 7a66cbeeaa
remove autoplay 2019-08-02 19:15:05 -04:00
Nicolas Constant 25648da660
add controls 2019-08-02 19:13:42 -04:00
Nicolas Constant e4fb591170
Merge pull request #147 from NicolasConstant/master_update-project-website
Better app presentation
2019-08-02 18:57:58 -04:00
Nicolas Constant 9ef0a9a9e8
wording 2019-08-02 18:39:48 -04:00
Nicolas Constant dc134296cb
Merge branch 'master_update-project-website' of https://github.com/NicolasConstant/sengis into master_update-project-website 2019-08-02 18:39:07 -04:00
Nicolas Constant fd94db2e75
fix wording 2019-08-02 18:38:55 -04:00
Nicolas Constant 9f77d16b5b
added screen, link to project page 2019-08-02 18:27:03 -04:00
Nicolas Constant 965a05abc0
fix gif 2019-08-02 18:21:44 -04:00
Nicolas Constant d53e6f8d48
added presentation gif 2019-08-02 18:14:33 -04:00
Nicolas Constant b4c5c3b094
typo, grammar 2019-07-31 00:29:30 -04:00
Nicolas Constant 801626df8d
load ubuntu illustration in case of using Linux 2019-07-30 23:41:26 -04:00
Nicolas Constant d3eb7073f7
better phone compatibilities 2019-07-30 23:35:07 -04:00
Nicolas Constant bf3d88ce48
last build 2019-07-30 23:18:52 -04:00
Nicolas Constant 58b265e0ac
added quick overview video 2019-07-30 23:18:23 -04:00
Nicolas Constant fd42a3c5d2
added functionalities texts and clips 2019-07-30 23:03:33 -04:00
Nicolas Constant c42d63cc4c
Merge pull request #146 from NicolasConstant/develop
0.13.1 merge
2019-07-30 00:52:48 -04:00
Nicolas Constant c0b21b3658
road to 0.13.1 2019-07-30 00:36:06 -04:00
Nicolas Constant 59a423f952
fix status analysis when return lines are present 2019-07-30 00:33:25 -04:00
Nicolas Constant 9c01350f07
Merge pull request #145 from NicolasConstant/develop
0.13.0 Merge
2019-07-29 22:49:30 -04:00
Nicolas Constant 72cf69d9c0
Merge pull request #144 from NicolasConstant/topic_emoji-picker
Topic emoji picker
2019-07-29 22:19:41 -04:00
Nicolas Constant f11d82c072
added emoji cache 2019-07-29 21:20:12 -04:00
Nicolas Constant 761a910d31
fix custom emoji positionning 2019-07-29 21:10:26 -04:00
Nicolas Constant 58e3f4a34c
added custom emoji support 2019-07-29 21:05:37 -04:00
Nicolas Constant 1c77cd3594
road to 0.13.0 2019-07-29 20:25:24 -04:00
Nicolas Constant 962557c1b0
Merge pull request #143 from NicolasConstant/topic_emoji-picker
fix typings
2019-07-29 20:14:41 -04:00
Nicolas Constant faa7399d39
fix typings 2019-07-29 19:38:16 -04:00
Nicolas Constant 2dea5544eb
Merge pull request #142 from NicolasConstant/topic_emoji-picker
Topic emoji picker
2019-07-29 19:34:17 -04:00
Nicolas Constant 30aec1645b
fix migrating audio attachment 2019-07-29 19:28:47 -04:00
Nicolas Constant 5778e7400d
fix attachment display 2019-07-29 19:25:56 -04:00
Nicolas Constant 59c323112c
added test for long links and multiposting 2019-07-29 19:03:50 -04:00
Nicolas Constant 535ad08438
fix links count 2019-07-29 18:59:12 -04:00
Nicolas Constant bd970f2196
added emoji count fix in CW 2019-07-29 18:45:58 -04:00
Nicolas Constant 1c4438dbb9
emoji counting, fix #141 2019-07-29 18:38:55 -04:00
Nicolas Constant ed43487091
added tooltip to emojis 2019-07-29 18:10:08 -04:00
Nicolas Constant 0a3ddb0b87
fix reseting the status data 2019-07-27 21:24:57 -04:00
Nicolas Constant 4ed3483b81
place emoji under the current caret position 2019-07-27 21:17:38 -04:00
Nicolas Constant 9b7f60c0e2
fix emoji position 2019-07-27 21:00:36 -04:00
Nicolas Constant fa7ea5212a
better positionning of emoji panel 2019-07-27 20:50:37 -04:00
Nicolas Constant 7a7f2488e3
added emoji link 2019-07-27 20:37:26 -04:00
Nicolas Constant 8b72d551ec
adding emoji functionnal 2019-07-27 19:09:49 -04:00
Nicolas Constant f8d3f7b4f7
better placement of emoji-picker 2019-07-27 19:03:26 -04:00
Nicolas Constant b4bec669fc
added auto-closing on emoji-picker 2019-07-27 17:43:16 -04:00
Nicolas Constant 04a09dff83
starting working on emoji-picker 2019-07-27 17:01:47 -04:00
Nicolas Constant c18be61fd1
Merge pull request #140 from NicolasConstant/topic_auto-suggest
Topic auto suggest
2019-07-27 14:41:18 -04:00
Nicolas Constant 1ffda7f5cd
clean up 2019-07-27 14:11:21 -04:00
Nicolas Constant 9a4c0ab6dc
fix multipost error display 2019-07-27 14:03:47 -04:00
Nicolas Constant 6b0ef5cca1
fix autogrow 2019-07-27 12:50:50 -04:00
Nicolas Constant 4ba6c1f119
added padding in status creation 2019-07-26 22:28:01 -04:00
Nicolas Constant 612e7526a7
better autogrow 2019-07-26 22:21:16 -04:00
Nicolas Constant 1bba36b474
fix order of mentions 2019-07-26 21:39:43 -04:00
Nicolas Constant f7ec1ce0a3
don't pop autosuggestion on mention 2019-07-26 18:20:39 -04:00
Nicolas Constant 0ae14edba5
fix padding 2019-07-26 00:24:26 -04:00
Nicolas Constant 1885459eef
added scroll bar on new message editor 2019-07-26 00:22:51 -04:00
Nicolas Constant 469d04d9bd
fix hashtag color 2019-07-26 00:07:31 -04:00
Nicolas Constant bf9fe144b3
tweak context-menu 2019-07-26 00:01:39 -04:00
Nicolas Constant 2339ca55ea
fix audio upload 2019-07-25 23:24:29 -04:00
Nicolas Constant ed42426733
binding add media button 2019-07-25 22:50:51 -04:00
Nicolas Constant 50d32888b2
changed progression icon 2019-07-25 20:25:18 -04:00
Nicolas Constant c97210b205
fix autosuggestion colors 2019-07-25 20:15:33 -04:00
Nicolas Constant e44dc451bf
fix button titles 2019-07-25 19:44:03 -04:00
Nicolas Constant 893fb73363
added privacy changes context-menu binding 2019-07-25 19:41:12 -04:00
Nicolas Constant a33a01289a
fix tests 2019-07-25 19:37:43 -04:00
Nicolas Constant 4af542e713
added autogrow 2019-07-25 01:51:11 -04:00
Nicolas Constant dcb6858ce0
don't autosuggest on initialization 2019-07-25 01:26:43 -04:00
Nicolas Constant be62a172e2
added privacy context-menu 2019-07-25 01:10:48 -04:00
Nicolas Constant 6b57f06381
starting the visual revamp of status redaction 2019-07-24 23:57:50 -04:00
Nicolas Constant f019b8d68b
don't autosuggest when same element 2019-07-24 22:27:01 -04:00
Nicolas Constant aa6b93eebb
autosuggestion acting everywhere 2019-07-24 20:55:13 -04:00
Nicolas Constant 80238b0e1f
close autosuggestion on focus lost 2019-07-24 18:21:16 -04:00
Nicolas Constant 1eaafb12a9
close autosuggestion with escape key 2019-07-24 18:15:56 -04:00
Nicolas Constant fdcdf9d813
added keyboard selection 2019-07-24 18:09:50 -04:00
Nicolas Constant b74fcdd814
Revert "install x32 deps"
This reverts commit 4f8657f043.
2019-07-24 16:23:23 -04:00
Nicolas Constant 4e10edb274
Revert "test 32bit build"
This reverts commit ede2e13e48.
2019-07-24 16:22:31 -04:00
Nicolas Constant 4f8657f043
install x32 deps 2019-07-24 16:08:46 -04:00
Nicolas Constant ede2e13e48
test 32bit build 2019-07-24 15:42:04 -04:00
Nicolas Constant 0ced6445b5
intercept event only when there is suggestions 2019-07-23 00:57:50 -04:00
Nicolas Constant 6d4beceb32
intercepting keyboard events 2019-07-23 00:45:52 -04:00
Nicolas Constant b23888fbfa
first iteration of autosuggestion #127 2019-07-22 23:52:48 -04:00
Nicolas Constant c98bd53496
better display #127 2019-07-22 23:35:42 -04:00
Nicolas Constant 65f2154ea1
displaying autosuggestions #127 2019-07-22 22:30:29 -04:00
Nicolas Constant 0d44668b7a
Merge pull request #139 from NicolasConstant/develop
Develop
2019-07-22 20:28:45 -04:00
Nicolas Constant e1d1cddda7
Merge pull request #138 from NicolasConstant/develop
0.12.2 merge
2019-07-20 00:38:16 -04:00
Nicolas Constant 576d5fe61b
road to 0.12.2 2019-07-20 00:22:47 -04:00
Nicolas Constant 8f614ccecd
hide menu bu default and set autohide fix #137 2019-07-19 21:32:44 -04:00
Nicolas Constant 706bdb37c1
added toogle fullscreen fix #136 2019-07-19 21:23:18 -04:00
Nicolas Constant f0573e06cc
new idea 2019-07-19 21:18:33 -04:00
Nicolas Constant c1dd3bba3f
working on sections 2019-07-12 02:09:12 -04:00
Nicolas Constant c991a8a387
added link to previous releases, and AppImage 2019-07-12 01:26:27 -04:00
Nicolas Constant 660d66ab6d
force snap to publish to github 2019-07-11 22:18:16 -04:00
Nicolas Constant 591bd34cac
Merge pull request #135 from NicolasConstant/develop
0.12.1
2019-07-11 21:42:34 -04:00
Nicolas Constant 8aee9c8245
Merge branch 'develop' of https://github.com/NicolasConstant/sengis into develop 2019-07-11 20:07:12 -04:00
Nicolas Constant 264ebcd951
display accounts name on user titles 2019-07-11 20:02:42 -04:00
Nicolas Constant eb84510404
added middle click event handling on left-bar 2019-07-11 19:55:46 -04:00
Nicolas Constant 03870964f4
fixed maximum height in image display 2019-07-11 19:37:43 -04:00
Nicolas Constant b93315092b
road to 0.12.1 2019-07-11 19:22:29 -04:00
Nicolas Constant 946382dd73
fix user search on local instance 2019-07-11 19:02:15 -04:00
Nicolas Constant f8e99cefd0
Merge pull request #134 from NicolasConstant/develop
0.12.0
2019-07-09 21:55:07 -04:00
Nicolas Constant 5936ef29fb
Merge branch 'master' into develop 2019-07-09 21:07:47 -04:00
Nicolas Constant 8d5dea08ff
Merge pull request #133 from NicolasConstant/topic_adv-context-menu
Topic adv context menu
2019-07-09 21:05:05 -04:00
Nicolas Constant 374f0b208d
domain fix 2019-07-09 20:45:10 -04:00
Nicolas Constant 9ed3f83c8e
fix mention via context-menu 2019-07-09 01:40:59 -04:00
Nicolas Constant 7f8098d9a4
better error handling on status polls 2019-07-09 00:35:50 -04:00
Nicolas Constant 1956e06121
fix redrafting status 2019-07-09 00:20:05 -04:00
Nicolas Constant f3fe5f900b
better handling of redraft 2019-07-07 18:58:56 -04:00
Nicolas Constant 9c8a1a829f
added a way to reopen sengi page 2019-07-07 18:00:04 -04:00
Nicolas Constant a9ba1c6ba4
smaller pinned icon 2019-07-07 17:45:17 -04:00
Nicolas Constant 370d98087a
added pinned status in profiles 2019-07-07 17:22:48 -04:00
Nicolas Constant 09fcfab98a
databind all found elements, fix the hashtags bug 2019-07-07 14:14:12 -04:00
Nicolas Constant 6786c95d91
check instance when searching account 2019-07-07 11:29:30 -04:00
Nicolas Constant 2d4243f0dc
added titles to poll entries 2019-07-07 11:16:19 -04:00
Nicolas Constant fbf65b39c8
better resilience 2019-07-06 22:16:40 -04:00
Nicolas Constant 2d6882b1f8
better resilience on notifications and empty polls 2019-07-06 21:47:08 -04:00
Nicolas Constant 568b6014c1
name fix 2019-07-06 20:56:19 -04:00
Nicolas Constant 18afb5e538
added comrad welcome 2019-07-06 20:13:05 -04:00
Nicolas Constant 421905cd41
better wording 2019-07-06 18:51:42 -04:00
Nicolas Constant 6ac168fbd9
update rickrolling list 2019-07-06 18:34:16 -04:00
Nicolas Constant af5bab34ac
added accounts statuses 2019-07-06 02:08:42 -04:00
Nicolas Constant 394fe508a1
more middle click handling 2019-07-06 01:28:30 -04:00
Nicolas Constant 020fbd9de3
added redraft 2019-07-06 00:20:03 -04:00
Nicolas Constant 2d01b3297e
removing deleted status from account and thread 2019-07-05 23:41:03 -04:00
Nicolas Constant b8fcfb6cb5
added TL delete update 2019-07-05 22:27:40 -04:00
Nicolas Constant 69cb670dcc
added pin/mute/delete status in context-menu 2019-07-05 21:52:51 -04:00
Nicolas Constant 74de21f5e6
fix pleroma audio bug 2019-07-05 17:22:49 -04:00
Nicolas Constant 30e9fdc2d9
fix create new status mention bug 2019-07-05 17:22:33 -04:00
Nicolas Constant 60f8c23c5b
Merge pull request #132 from NicolasConstant/topic_auto-suggest
Topic auto suggest
2019-07-05 16:09:24 -04:00
Nicolas Constant b733631b28
don't spam API in case of errors 2019-07-04 00:36:43 -04:00
Nicolas Constant 9e224efa88
added DM background color 2019-07-04 00:03:12 -04:00
Nicolas Constant d1c0488460
added DM icon 2019-07-03 23:47:06 -04:00
Nicolas Constant 8aac46a4c2
Merge pull request #130 from NicolasConstant/topic_context-menu_ngx-contextmenu
Topic context menu ngx contextmenu
2019-07-03 23:30:18 -04:00
Nicolas Constant 68cc397b89
road to 0.12.0 2019-07-03 23:20:16 -04:00
Nicolas Constant 13a895a114
Merge pull request #129 from NicolasConstant/topic_fix-ci
Topic fix ci
2019-07-03 21:51:41 -04:00
Nicolas Constant 33e03a9207
change build for electron-builder 2019-07-03 21:30:15 -04:00
Nicolas Constant 108e5c4b82
removed script concat 2019-07-03 21:13:53 -04:00
Nicolas Constant 35f8c30c26
added expand status 2019-07-03 20:23:23 -04:00
Nicolas Constant 9011b593ee
better handle for pleroma search 2019-07-03 20:15:53 -04:00
Nicolas Constant bdd6a1b1f3
hide muted/blocked accounts in thread 2019-07-03 20:12:10 -04:00
Nicolas Constant 90157c1ee7
clean up 2019-07-03 20:08:05 -04:00
Nicolas Constant a2e0789a9c
added reply/dm capability 2019-07-03 19:55:33 -04:00
Nicolas Constant b2632e981d
added context-menu shadow 2019-07-03 18:59:47 -04:00
Nicolas Constant 84fe025f47
removing muted/blocked from timelines 2019-07-03 18:55:46 -04:00
Nicolas Constant dac2cbfabd
added mute block capability 2019-07-03 18:43:37 -04:00
Nicolas Constant a35c7e911d
added copy status link 2019-07-03 18:25:35 -04:00
Nicolas Constant 7bdcc6277f
added context-menu buttons 2019-07-03 17:53:53 -04:00
Nicolas Constant 145b8617b1
better contrast 2019-07-01 22:12:29 -04:00
Nicolas Constant 3f8df79f33
styling context menu 2019-07-01 22:05:48 -04:00
Nicolas Constant 7d4e4e90c6
integration ngx-contextmenu 2019-07-01 16:30:28 -04:00
Nicolas Constant e840d5f1b7
Update package.json 2019-06-25 20:44:20 -04:00
Nicolas Constant 405031edd8
Merge pull request #124 from NicolasConstant/develop
Merge for 0.11.0
2019-06-25 19:30:56 -04:00
Nicolas Constant 5d9bdccdf9
candid support for audio attachment 2019-06-24 15:42:37 -04:00
Nicolas Constant cd699b9da4
Merge pull request #123 from NicolasConstant/topic_quality-of-life
Topic quality of life
2019-06-24 15:02:21 -04:00
Nicolas Constant e6f8d9f855
don't update stream if not modified 2019-06-24 14:22:42 -04:00
Nicolas Constant cbcc1f85e1
road to 0.11.0 2019-06-24 12:44:40 -04:00
Nicolas Constant dcb929eac3
added stream update on settings changes 2019-06-23 23:11:16 -04:00
Nicolas Constant b5f063b158
added filter effect on streams 2019-06-23 22:57:03 -04:00
Nicolas Constant 44ed56346e
update streams settings 2019-06-23 22:36:17 -04:00
Nicolas Constant 801445cd8c
added update stream action 2019-06-23 21:01:36 -04:00
Nicolas Constant 0fa56da2e4
added filters UI 2019-06-23 20:14:25 -04:00
Nicolas Constant af45279efa
better positionning of "remove column" 2019-06-23 19:47:14 -04:00
Nicolas Constant 06982bd891
better account validation, fix #118 2019-06-23 19:37:49 -04:00
Nicolas Constant 8ad9ecb95b
take CW length in status char count, fix #122 2019-06-23 18:45:11 -04:00
Nicolas Constant 6c9653f945
added zone to navigate status, fix #109 2019-06-23 18:16:01 -04:00
Nicolas Constant b81d73f062
custom status char limit supported #111 2019-06-23 17:49:19 -04:00
Nicolas Constant 04cdb6ebce
added custom status length warning 2019-06-23 17:18:55 -04:00
Nicolas Constant 62c5d42493
created UI for custom status length 2019-06-23 16:49:55 -04:00
Nicolas Constant 2bc4393488
fix multi-instance launch bug #100 2019-06-23 16:01:45 -04:00
Nicolas Constant da7ddc7f3d
better account handling in account management 2019-06-23 15:33:45 -04:00
Nicolas Constant 1327860c07
link actions to related status fix #121 2019-06-23 15:12:43 -04:00
Nicolas Constant 0e214f1204
added old label (> 3 months) 2019-06-17 21:49:18 -04:00
Nicolas Constant 8d5d6ae5d1
fix rebloged date and displayed data 2019-06-17 21:36:49 -04:00
Nicolas Constant 02caa33a8c
display multiposting messages in thread fix #120 2019-06-15 21:22:03 -04:00
Nicolas Constant fe8b14f94e
open account via middle click 2019-06-15 20:41:21 -04:00
Nicolas Constant 2e0f7cb5a5
add open image link 2019-06-15 19:26:21 -04:00
Nicolas Constant 9feddaf819
fix content-warning text overlap in certain cases 2019-06-15 18:35:54 -04:00
Nicolas Constant 0e1ca8cf71
auto-load all media in lightbox 2019-06-15 16:51:41 -04:00
Nicolas Constant fdd9d751e7
fix poll display 2019-06-15 14:58:24 -04:00
Nicolas Constant 6e2bb144fc
open avatar in lightbox 2019-06-15 14:32:08 -04:00
Nicolas Constant 1d4c8b5dad
don't let date of toots goes beyong 60min fix #119 2019-06-15 14:19:19 -04:00
Nicolas Constant 8f540c48f8
added avatar link in my profile 2019-06-15 14:03:29 -04:00
Nicolas Constant 3c45a3de0b
better resilience of account selection 2019-06-14 23:48:07 -04:00
Nicolas Constant 1f1a86c692
Merge pull request #115 from NicolasConstant/develop
0.10.1
2019-06-14 20:00:15 -04:00
Nicolas Constant b3ada67b11
road to 0.10.1 2019-06-14 19:37:01 -04:00
Nicolas Constant 53b360b2cb
force login in oauth workflow fix #114 2019-06-14 19:36:21 -04:00
Nicolas Constant 653c83f5bb
Merge pull request #113 from NicolasConstant/develop
0.10.0
2019-06-13 22:22:16 -04:00
Nicolas Constant f126cf2b37
Merge pull request #112 from NicolasConstant/topic_polls
Topic polls
2019-06-13 21:33:42 -04:00
Nicolas Constant ec86d38778
binding fix 2019-06-13 21:08:29 -04:00
Nicolas Constant ab76d1de35
road to 0.10.0 2019-06-13 20:57:45 -04:00
Nicolas Constant 83258ed553
added poll support in notifications 2019-06-13 20:57:05 -04:00
Nicolas Constant ba4fa61667
fix visibility 2019-06-12 00:10:57 -04:00
Nicolas Constant 803913ccf0
added lock icon #93 2019-06-11 23:49:54 -04:00
Nicolas Constant 26bc0cf44b
poll are multi-user compatible #93 2019-06-11 23:38:34 -04:00
Nicolas Constant f591955e49
added refresh poll functionnality #93 2019-06-07 22:15:36 -04:00
Nicolas Constant 6cb2132bf9
added time left display #93 2019-06-06 19:28:45 -04:00
Nicolas Constant b8311371f9
better display of poll button #93 2019-06-06 19:01:04 -04:00
Nicolas Constant f72141a794
added poll progress bars #93 2019-06-06 01:38:32 -04:00
Nicolas Constant c122d66fb6
displaying result percentages #93 2019-06-05 00:06:29 -04:00
Nicolas Constant 979d21bdfe
added service #93 2019-06-04 19:33:36 -04:00
Nicolas Constant 55684d5ada
added poll selection retrieval #93 2019-06-04 19:14:16 -04:00
Nicolas Constant 131054514c
styling the poll choices #93 2019-06-04 18:36:04 -04:00
Nicolas Constant 93fe06979c
starting the design of polls 2019-06-04 02:31:51 -04:00
Nicolas Constant 43ecbde31a
added poll component #93 2019-06-03 01:33:07 -04:00
Nicolas Constant 34644e0652
updated mastodon interface to support polls #93 2019-06-02 20:28:22 -04:00
Nicolas Constant dd03ea0e3b
Merge pull request #108 from NicolasConstant/develop
0.9.1
2019-06-01 18:32:50 -04:00
Nicolas Constant 9c87d6baa5
added lowercase transformation 2019-06-01 15:50:08 -04:00
Nicolas Constant 656e2dca00
better handling of notifications and mentions 2019-06-01 15:01:39 -04:00
Nicolas Constant 3d017da166
ionicon removal 2019-06-01 14:22:12 -04:00
Nicolas Constant 5ed1e562e4
fix strange memory debuging issue 2019-06-01 14:05:03 -04:00
Nicolas Constant 877f142238
fix multiple emojis not being processed correctly 2019-06-01 01:25:58 -04:00
Nicolas Constant 72c83a436c
road to 0.9.1 2019-06-01 00:57:45 -04:00
Nicolas Constant 6b12487b85
fix color in add account 2019-05-31 23:57:32 -04:00
Nicolas Constant cf83f7367b
added a little check 2019-05-31 23:54:45 -04:00
Nicolas Constant 9e6bf71230
Merge pull request #105 from NicolasConstant/topic_emoji
Topic emoji
2019-05-26 23:48:05 -04:00
Nicolas Constant 1871ce4566
update 2019-05-26 20:45:41 -04:00
Nicolas Constant 839e9bb4b1
fix emoticons 2019-05-26 20:32:10 -04:00
Nicolas Constant 00825aefb8
messing with emojione 2019-05-26 18:04:41 -04:00
Nicolas Constant 7006f7453e
Merge pull request #104 from NicolasConstant/develop
Develop
2019-05-25 20:40:37 -04:00
Nicolas Constant 3dffcdad51
Merge pull request #103 from NicolasConstant/develop
0.9.0 PR
2019-05-25 17:41:49 -04:00
Nicolas Constant 0418ee6c2f
better link parsing in pleroma 2019-05-25 17:19:07 -04:00
Nicolas Constant 9b129ae7b4
video card controls fine tunning 2019-05-25 13:12:05 -04:00
Nicolas Constant 4f9f37c685
search icon fix 2019-05-24 01:29:05 -04:00
Nicolas Constant 6d0b78af92
added title to hashtags 2019-05-24 00:53:16 -04:00
Nicolas Constant 5ffd54470e
better pleroma mention and link parsing 2019-05-24 00:46:26 -04:00
Nicolas Constant 34bdd12029
clean up 2019-05-23 02:25:32 -04:00
Nicolas Constant 3fda1e7b9b
added misskey sanitazation 2019-05-23 02:24:11 -04:00
Nicolas Constant b2cad5fd8a
fix sanitarization fiendica 2019-05-23 02:16:36 -04:00
Nicolas Constant 0e9bff10f6
added new Friendica mention parsing rule 2019-05-23 02:12:19 -04:00
Nicolas Constant 86ce3e5ae0
fix test 2019-05-22 22:05:33 -04:00
Nicolas Constant 5a344531ce
fetch release version from Github 2019-05-22 21:55:23 -04:00
Nicolas Constant b7b84dae24
Merge pull request #102 from NicolasConstant/topic_list-support
Topic list support
2019-05-22 21:51:11 -04:00
Nicolas Constant a928778ecb
road to 0.9.0 2019-05-21 20:46:07 -04:00
Nicolas Constant a8ed5ac79f
enhancement of search input 2019-05-21 20:42:48 -04:00
Nicolas Constant 3448ae56fb
enhancing contrasts 2019-05-21 20:27:52 -04:00
Nicolas Constant 2170a5ec29
clean up version display 2019-05-21 20:18:01 -04:00
Nicolas Constant f24c60fa02
going to 0.9.0 2019-05-21 01:20:05 -04:00
Nicolas Constant cdc81508e2
added autodection of current version 2019-05-21 01:19:34 -04:00
Nicolas Constant a1db774767
fine tunning list edition color #46 2019-05-20 18:59:40 -04:00
Nicolas Constant f592adc38c
added remove account from list #46 2019-05-20 18:42:27 -04:00
Nicolas Constant 5fcbeeceba
first implementation to add account to list #46 2019-05-20 18:15:54 -04:00
Nicolas Constant 6302b07c96
added emoji, revamp of the account-list #46 2019-05-20 16:41:07 -04:00
Nicolas Constant 53d971ff88
fix avatar 2019-05-19 23:25:19 -04:00
Nicolas Constant 255c3ec6fa
added list search #46 2019-05-19 23:18:07 -04:00
Nicolas Constant 12444aa603
added account list buttons #46 2019-05-19 21:53:46 -04:00
Nicolas Constant b3a97bd75b
added account list display in lists #46 2019-05-19 21:35:26 -04:00
Nicolas Constant a4331ff3d2
fine tunning card display 2019-05-19 20:14:28 -04:00
Nicolas Constant 274bd951f5
added list editor component #46 2019-05-19 20:07:28 -04:00
Nicolas Constant 2fd7beb0fb
remove list froms columns on deletion #46 2019-05-19 15:32:22 -04:00
Nicolas Constant 8ed0e2655d
fix colors 2019-05-19 15:03:29 -04:00
Nicolas Constant 72e72cfc86
added delete list functionnality #46 2019-05-19 14:55:37 -04:00
Nicolas Constant 5568c3c38d
hide link preview if has CW 2019-05-19 12:49:38 -04:00
Nicolas Constant 8509e43df3
fix bindings 2019-05-19 02:26:46 -04:00
Nicolas Constant f811c5bbb3
added list creation #46 2019-05-19 02:09:30 -04:00
Nicolas Constant 655d120cd9
added buttons to create/edit/delete lists #46 2019-05-19 00:21:21 -04:00
Nicolas Constant 62baf8474d
display lists and add/remove them #46 2019-05-18 20:44:36 -04:00
Nicolas Constant 41c7137dc7
Merge pull request #99 from NicolasConstant/develop
fix test
2019-05-17 23:23:59 -04:00
Nicolas Constant 1055fe6117
test desactivation 2019-05-17 23:03:26 -04:00
Nicolas Constant 700c9c890f
Merge pull request #97 from NicolasConstant/develop
0.8.0 merge
2019-05-17 22:40:25 -04:00
Nicolas Constant 6c8ff4cece
road to 0.8.0 2019-05-17 21:36:12 -04:00
Nicolas Constant 0136d71e2b
image navigation functionnal #92 2019-05-17 21:13:23 -04:00
Nicolas Constant 5dbe3bafa4
added buttons for browsing #92 2019-05-17 20:10:29 -04:00
Nicolas Constant c29caf8a58
better link card display 2019-05-17 19:31:13 -04:00
Nicolas Constant 95329609a9
Merge pull request #96 from NicolasConstant/topic_card-display
Topic card display
2019-05-17 00:48:20 -04:00
Nicolas Constant e93de3c515
limit support to link and video in cards 2019-05-17 00:13:30 -04:00
Nicolas Constant 5da0793cc3
added titles to links 2019-05-17 00:08:42 -04:00
Nicolas Constant f7045a140c
added autoplay 2019-05-16 23:52:23 -04:00
Nicolas Constant fe8aadd8ff
added showing iframe media in overlay 2019-05-16 23:47:51 -04:00
Nicolas Constant 8a578e2e3b
added quit in menu 2019-05-16 19:34:00 -04:00
Nicolas Constant 258fc00914
fix date link in status 2019-05-16 00:41:17 -04:00
Nicolas Constant 4362e87806
spelling fix 2019-05-16 00:24:09 -04:00
Nicolas Constant 84b0006858
fixed link preview display 2019-05-16 00:02:13 -04:00
Nicolas Constant bd2d02f110
profile avatars are squared now 2019-05-15 23:58:03 -04:00
Nicolas Constant 251247e0db
changed project page URL 2019-05-15 23:48:29 -04:00
Nicolas Constant 8c5b25f864
video datacards are working 2019-05-15 23:30:16 -04:00
Nicolas Constant 8256da9f4e
Merge pull request #94 from NicolasConstant/develop
Menu MacOS fix
2019-05-15 19:21:03 -04:00
Nicolas Constant 94f3a14dab
remove svg (temp) 2019-05-15 18:56:13 -04:00
Nicolas Constant 66037804cc
merge fix 2019-05-15 18:55:43 -04:00
Nicolas Constant 1e400d4e40
Better menu for macOS 2019-05-15 18:53:15 -04:00
Nicolas Constant d163426dff
Merge pull request #90 from NicolasConstant/develop
added copy/paste menu for MacOS
2019-05-14 22:31:30 -04:00
Nicolas Constant 90effaaf2e
Merge branch 'master' into develop 2019-05-14 21:57:29 -04:00
Nicolas Constant c3dabb7352
added copy/paste menu for MacOS 2019-05-14 21:53:19 -04:00
Nicolas Constant efbf14b466 starting video preview #64 2019-05-02 19:39:47 +02:00
Nicolas Constant 3f5208087e added icon placeholder #64 2019-05-02 12:40:39 +02:00
Nicolas Constant 4e9b2b34f0 first implementation of link card #64 2019-05-02 12:26:12 +02:00
Nicolas Constant 158a2f4927 added card component #64 2019-05-02 11:26:38 +02:00
Nicolas Constant c56a055172
test CI 2019-05-02 09:40:54 +02:00
Nicolas Constant 4569352f58
test CI 2019-04-28 23:34:54 +02:00
Nicolas Constant 310d2ae58f
Merge pull request #88 from NicolasConstant/develop
0.7.0 merge
2019-04-27 23:59:21 +02:00
Nicolas Constant f654ebd4c8
Merge pull request #87 from NicolasConstant/topic_emoji
Topic emoji
2019-04-27 23:39:19 +02:00
Nicolas Constant 63471bc8fd 0.7 update 2019-04-27 23:25:54 +02:00
Nicolas Constant ebdff4e861 added version to settings panel 2019-04-27 23:24:31 +02:00
Nicolas Constant 22427779ec adding margin to small emojis 2019-04-26 16:02:04 +02:00
Nicolas Constant ae689f9730 added emojis in notifications 2019-04-26 14:23:24 +02:00
Nicolas Constant 5181fd2d3d added emojis in fields 2019-04-26 00:29:53 +02:00
Nicolas Constant 6a238f265b added emojis in user profile's name and note 2019-04-25 23:35:20 +02:00
Nicolas Constant 74e1a31031 change to 0.7 2019-04-25 23:08:37 +02:00
Nicolas Constant b0cd7721a7 emojis functionnal in user names 2019-04-25 22:52:14 +02:00
Nicolas Constant 3e76605d47
added png version of emojis 2019-04-17 23:33:16 -04:00
Nicolas Constant 106a0191c5
added emojis as local assets 2019-04-17 23:25:54 -04:00
Nicolas Constant 8ecbd53b5b
first iteration of emoji support #47 2019-04-13 23:04:19 -04:00
Nicolas Constant ba2479915a
better reblog strategy for pleroma #79 2019-04-13 17:04:24 -04:00
Nicolas Constant bc99ce15da
hide pause button when playing video 2019-04-13 14:27:55 -04:00
Nicolas Constant 45fff1b064
Candid implementation of #84 2019-04-13 13:47:20 -04:00
Nicolas Constant fe897318d7
clean up 2019-04-13 13:46:37 -04:00
Nicolas Constant cef07f0bf8
#fix 79 2019-04-13 12:29:02 -04:00
Nicolas Constant 43f866f02e
Merge pull request #86 from NicolasConstant/master
Merge the new project's page
2019-04-13 11:55:34 -04:00
Nicolas Constant 3b6ccbf913
added rel=me 2019-04-12 22:46:33 -04:00
Nicolas Constant 6ac2c45691
Added 0.6.0 installers 2019-04-12 22:45:26 -04:00
Nicolas Constant bf438b1b92
Merge pull request #85 from NicolasConstant/develop
0.6.0 Release
2019-04-12 22:33:01 -04:00
Nicolas Constant d3be173d60
0.6.0 update 2019-04-12 22:14:26 -04:00
Nicolas Constant b3878e9aa7
Merge pull request #83 from NicolasConstant/project_page
fix image
2019-04-12 22:04:41 -04:00
Nicolas Constant fe42e891fb
fix image 2019-04-12 22:04:02 -04:00
Nicolas Constant dc831064b2
Merge pull request #82 from NicolasConstant/project_page
Project page updated
2019-04-12 21:58:57 -04:00
Nicolas Constant 303c1f54c5
better title positionning 2019-04-12 21:48:27 -04:00
Nicolas Constant d1b28cb897
added sengi icon 2019-04-12 21:43:00 -04:00
Nicolas Constant 2f6c071eaa
added footer 2019-04-12 20:46:59 -04:00
Nicolas Constant bb2e2cda73
added buttons 2019-04-12 20:16:12 -04:00
Nicolas Constant 726246ee7c
added block positions and illustration image 2019-04-10 21:06:19 -04:00
Nicolas Constant 54182172f3
clean up 2019-04-10 00:56:30 -04:00
Nicolas Constant 20377f798c
init header 2019-04-10 00:55:29 -04:00
Nicolas Constant 658e3dd62e
init scss structure 2019-04-09 22:56:05 -04:00
Nicolas Constant 07b4757cec
starting the new project page from scratch 2019-04-09 22:49:28 -04:00
Nicolas Constant 2261802fd1
add media limit to 4 2019-04-09 22:16:25 -04:00
Nicolas Constant 0ef289fdd8
patch for better drag&drop on linux #68 2019-04-09 22:07:13 -04:00
Nicolas Constant d4e1f8b779
fix windows size cross-platform 2019-04-08 21:32:35 -04:00
Nicolas Constant 2507ba2286
clean up 2019-04-07 23:10:25 -04:00
Nicolas Constant 5d47208cdb
added description 2019-04-07 23:00:25 -04:00
Nicolas Constant 0f5e76fb75
better wording 2019-04-07 22:30:32 -04:00
Nicolas Constant c42d23cd35
fix #80 2019-04-07 20:34:33 -04:00
Nicolas Constant 1e8e3201df
close hover-column when navigating #75 2019-04-07 16:54:12 -04:00
Nicolas Constant 35c8a8fee5
close panel if already open #75 2019-04-07 16:47:29 -04:00
Nicolas Constant 4da2e3f0ed
support right clic on non-account icons #75 2019-04-07 16:28:32 -04:00
Nicolas Constant ab468aa039
fix #76 2019-04-07 16:15:04 -04:00
Nicolas Constant 126d4a34a4
fix #67 2019-04-07 15:51:32 -04:00
Nicolas Constant 891174a05a
fix #65 2019-04-07 15:03:17 -04:00
Nicolas Constant d26490be62
fix #66 2019-04-07 14:47:09 -04:00
Nicolas Constant 8559d170f9
fix #74 2019-04-07 14:18:10 -04:00
Nicolas Constant caad3689f1
Merge pull request #73 from NicolasConstant/topic_packager_ci
Added icons, tests report and snap release
2019-04-06 21:22:36 -04:00
Nicolas Constant a965887bac
added icons 2019-04-06 20:00:01 -04:00
Nicolas Constant 431564f7d1
added snap 2019-04-06 19:17:47 -04:00
Nicolas Constant a48caa3bc5
added ftp deployement 2019-04-06 19:10:58 -04:00
Nicolas Constant 6aa6af133e
test ci 2019-04-06 19:06:08 -04:00
Nicolas Constant 47ac1bd202
variable correction 2019-04-06 19:02:46 -04:00
Nicolas Constant 5a2123f9f1
adding tests report 2019-04-06 18:57:27 -04:00
Nicolas Constant 2d048f4c57
Merge pull request #72 from NicolasConstant/topic_packager_ci
First iteration of packaging CI/CD
2019-04-06 18:44:28 -04:00
Nicolas Constant 77f612869c
changed artifact pattern 2019-04-05 00:53:50 -04:00
Nicolas Constant c4b02f8675
added author email 2019-04-05 00:40:54 -04:00
Nicolas Constant 385c7f6ebc
fix bindings in Travis 2019-04-05 00:32:17 -04:00
Nicolas Constant 87218d349c
fix node version 2019-04-05 00:24:04 -04:00
Nicolas Constant 3194c39649
added travis ci settings 2019-04-05 00:17:04 -04:00
Nicolas Constant 9bbc36aeab
test ci 2019-04-05 00:02:39 -04:00
Nicolas Constant b22df87c5b
ci test 2019-04-04 23:54:10 -04:00
Nicolas Constant 63dce78869
node version changed for angular-cli 2019-04-04 23:27:06 -04:00
Nicolas Constant 749c455e5f
added appveyor and package infos 2019-04-04 23:23:09 -04:00
Nicolas Constant ba49d0cf6a
fix a rare bug when opening accounts 2019-04-03 00:08:50 -04:00
Nicolas Constant 9196b0ceb0
Merge pull request #71 from NicolasConstant/develop
Merge for 0.5
2019-04-02 22:36:20 -04:00
Nicolas Constant 3e54134c30
better error displaying 2019-04-02 22:22:14 -04:00
Nicolas Constant 29aa5c7bbe
remove wrong initialization 2019-04-02 21:53:16 -04:00
Nicolas Constant 4b96178901
base notification detection on date only 2019-04-02 21:42:38 -04:00
Nicolas Constant 66df78074b
added new properties to detect new notifications 2019-04-02 20:39:44 -04:00
Nicolas Constant 068c3d4163
Merge pull request #69 from NicolasConstant/feature_add-notifications
Feature add notifications
2019-04-02 00:48:49 -04:00
Nicolas Constant 4541b7b092
added following account notification infos #55 2019-04-01 23:54:08 -04:00
Nicolas Constant e6237ca0d3
candid integration of fav/boost in status #55 2019-04-01 23:32:07 -04:00
Nicolas Constant 792cf71352
fix debug architecture issue 2019-04-01 22:22:21 -04:00
Nicolas Constant 237b9aab15
fix initial state of UserNotification 2019-03-31 20:32:13 -04:00
Nicolas Constant e3d5362306
added open accounts/status/hashtag in account 2019-03-31 20:24:07 -04:00
Nicolas Constant 72fc5bd387
fix boosting/faving when not up to date 2019-03-31 19:08:11 -04:00
Nicolas Constant 5547b19727
wirering of notifications with settings state 2019-03-31 18:53:11 -04:00
Nicolas Constant b096ced237
fix settings state 2019-03-31 18:30:38 -04:00
Nicolas Constant f792f227f8
first iteration of settings states 2019-03-30 19:03:17 -04:00
Nicolas Constant 0207e32793
fix #61 2019-03-30 18:16:43 -04:00
Nicolas Constant 3ad5f82384
added debug settings 2019-03-28 23:16:02 -04:00
Nicolas Constant 6baa0ad015
force resolving when faving/boosting 2019-03-28 19:52:55 -04:00
Nicolas Constant 1fa3483a5e
better update when notification panel is open #55 2019-03-28 00:57:09 -04:00
Nicolas Constant e61a7cd49a
better analysis of new mentions/notifications #55 2019-03-28 00:46:37 -04:00
Nicolas Constant 18794ba0c7
added notification infinite-scroll #55 2019-03-27 23:34:29 -04:00
Nicolas Constant 0b6814af4d
fixed background color of mention panel 2019-03-27 23:29:22 -04:00
Nicolas Constant f49aa2266c
added icons 2019-03-27 23:11:10 -04:00
Nicolas Constant dc209ec618
first iteration of notification display #55 2019-03-27 22:56:17 -04:00
Nicolas Constant 38d5ef40c7
change remove CWs button to a fixed one 2019-03-27 19:15:52 -04:00
Nicolas Constant f4ed9c4482
added optimization for notification retrieval 2019-03-25 01:22:55 -04:00
Nicolas Constant 07318dbe15
typo correction 2019-03-25 01:09:53 -04:00
Nicolas Constant 5a0deefa80
added displaying mentions #55 2019-03-25 00:52:30 -04:00
Nicolas Constant 06a9e4abff
change icon's color when new notification #55 2019-03-24 21:11:23 -04:00
Nicolas Constant 22b39b3c53
created service and account animation #55 2019-03-24 17:52:34 -04:00
Nicolas Constant a8430b0354
added tokens infos to support refresh procedure 2019-03-24 15:00:42 -04:00
Nicolas Constant bca4d9a35f
fix attachment descriptions 2019-03-24 01:02:25 -04:00
Nicolas Constant 38ce9697f0
fix #62 2019-03-23 17:43:59 -04:00
Nicolas Constant 76955704e7
first iteration of favorites section 2019-03-23 16:34:46 -04:00
Nicolas Constant c481c05a0c
clean up 2019-03-19 23:14:43 -04:00
Nicolas Constant d99976f0a7
migration of my-account to its component 2019-03-19 23:13:50 -04:00
Nicolas Constant a41f1051e5
account panel menu now working 2019-03-19 22:35:35 -04:00
Nicolas Constant f1f809cc10
creation of new components for account panel 2019-03-19 22:25:04 -04:00
Nicolas Constant b1b92a17ac
added icons and colors for account panel 2019-03-19 22:07:42 -04:00
Nicolas Constant 4c31e58e47
added account icons 2019-03-19 00:21:00 -04:00
Nicolas Constant 5376ce0703
reordering the manage panel to include more functionnalities 2019-03-18 23:28:44 -04:00
Nicolas Constant eb552028b0
fix #60 2019-03-16 19:35:49 -04:00
Nicolas Constant 829b526d8a
Merge pull request #59 from NicolasConstant/develop
Merge for Release 0.4
2019-03-13 22:25:32 -04:00
Nicolas Constant 5b03f9d1d7
changed order of badges 2019-03-13 01:57:23 -04:00
Nicolas Constant 183ea9c32b
updated versions, added build version 2019-03-13 01:55:55 -04:00
Nicolas Constant 8a88bffc27
added message when multiposting not available #58 2019-03-12 19:37:16 -04:00
Nicolas Constant 5cdca202f8
added mention replication in multiposting #58 2019-03-12 19:02:27 -04:00
Nicolas Constant 81ff215840
fix #54 2019-03-11 00:31:56 -04:00
Nicolas Constant b4fdce6e66
include description when migrating media 2019-03-10 19:50:09 -04:00
Nicolas Constant 1a1f4dccf6
migrate attachments when changing account #56 2019-03-10 19:47:15 -04:00
Nicolas Constant 0ec97cbf4f
clear medias after sending status #56 2019-03-10 19:23:33 -04:00
Nicolas Constant 1c7dd94452
posting attachments now functionnal 2019-03-10 17:38:10 -04:00
Nicolas Constant ab38f8fc05
added media edition #56 2019-03-10 14:36:22 -04:00
Nicolas Constant 17bdd7db42
added UI for the media preview's description 2019-03-09 22:43:54 -05:00
Nicolas Constant c637b954b6
added remove button UI on media preview 2019-03-09 22:34:37 -05:00
Nicolas Constant 41bcc33bb9
more reliable detection of draganddrop 2019-03-09 21:49:07 -05:00
Nicolas Constant 1cb656c40c
don't show thread/reply labels in thread display 2019-03-09 01:17:52 -05:00
Nicolas Constant 8d4111aea6
multi sending is functionnal fix #51 2019-03-09 00:14:44 -05:00
Nicolas Constant 18aca897be
adapted the counter to status parsing 2019-03-08 23:53:04 -05:00
Nicolas Constant 7977867dbc
clean up 2019-03-08 23:45:33 -05:00
Nicolas Constant 9ae3ef2089
added tests for status parsing 2019-03-08 23:30:50 -05:00
Nicolas Constant 8a6c87cbca
first diplay of attachments 2019-03-07 23:50:33 -05:00
Nicolas Constant 80979f2dc7
disabling tests 2019-03-07 23:24:44 -05:00
Nicolas Constant 33d8d33336
creation of media service 2019-03-07 23:24:23 -05:00
Nicolas Constant f16ae7fa78
added drop file UI 2019-03-07 22:33:10 -05:00
Nicolas Constant 3a606d36f9
refactoring 2019-03-07 19:50:27 -05:00
Nicolas Constant 9803c06a23
added retrieval of chars limit from instances 2019-03-07 00:31:06 -05:00
Nicolas Constant 56e9d21fd9
Status char counter functionnal #57 2019-03-06 20:45:36 -05:00
Nicolas Constant 7903f2137b
added counter UI #57 2019-03-06 19:02:29 -05:00
Nicolas Constant 337509ed84
fix #53 2019-03-06 00:37:25 -05:00
Nicolas Constant 74bd942407
fix CW not being inherited corretly in responses 2019-03-06 00:02:16 -05:00
Nicolas Constant 933bfa9acd
fix #50 2019-03-05 23:37:58 -05:00
Nicolas Constant 84988b1fcd
removal of obsolete components 2019-03-05 23:08:14 -05:00
Nicolas Constant 7c3e3f42ff
clean up 2019-03-05 23:02:29 -05:00
Nicolas Constant 027afc6c2a
fix electron 2019-03-05 23:02:11 -05:00
Nicolas Constant 227fc556b6
make sure all mentions are global (multi-account issue) 2019-03-05 23:00:06 -05:00
Nicolas Constant ac5092aa76
refactoring to only use one component for status creation 2019-03-05 22:46:50 -05:00
Nicolas Constant 58bab220cd
better error wording 2019-03-05 20:27:45 -05:00
Nicolas Constant de42f445b4
Added an dedicated error in case of a potential CORS issue #39 2019-03-03 18:42:11 -05:00
Nicolas Constant 5a7f6bf87f
removed placeholder for close button 2019-03-02 02:01:53 -05:00
Nicolas Constant fa9b1ef368
pimp my CWs! 2019-03-02 01:16:37 -05:00
Nicolas Constant c33df7e366
don't show crossposter label when it's a bot 2019-03-02 00:55:49 -05:00
Nicolas Constant e736ad8c08
supporting middle click for opening links 2019-03-02 00:44:54 -05:00
Nicolas Constant 17ad6faaef
fix new link pattern that wasn't supported 2019-03-02 00:35:09 -05:00
Nicolas Constant 2697be3cb1
fix srgb color being messed up... 2019-03-01 01:21:46 -05:00
Nicolas Constant 5d86387ede
added reply label 2019-03-01 00:59:12 -05:00
Nicolas Constant 1673d8b35b
Merge pull request #49 from NicolasConstant/topic_migration-angular-7
Topic migration angular 7
2019-02-28 23:20:29 -05:00
Nicolas Constant 413f7ab150
upgraded electron 2019-02-28 22:54:26 -05:00
Nicolas Constant a82a338f1f
fix bootstrap 2019-02-28 21:57:29 -05:00
Nicolas Constant e20ee9bfd5
update to angular 7 2019-02-28 20:29:44 -05:00
Nicolas Constant 54355b5eb1
Merge pull request #48 from NicolasConstant/develop
Merge for 0.3
2019-02-27 23:43:44 -05:00
Nicolas Constant 97d223feae
clean up 2019-02-27 23:16:29 -05:00
Nicolas Constant 580c886b57
support video in media-overlay #41 2019-02-27 23:07:30 -05:00
Nicolas Constant 8bc73810ba
wirering button events on video #41 2019-02-27 22:55:07 -05:00
Nicolas Constant 94fbe52d4e
added custom buttons for video #41 2019-02-27 22:35:29 -05:00
Nicolas Constant 9fc2aecd0a
open gifv in media-overlay #38 #37 2019-02-27 20:28:39 -05:00
Nicolas Constant 9167cbd4da
added gifv support #38 2019-02-27 20:19:47 -05:00
Nicolas Constant 9b2710a99f
Added button for closing media-overlay #37 2019-02-27 19:35:01 -05:00
Nicolas Constant 7d88b0c50c
center image display 2019-02-26 00:22:59 -05:00
Nicolas Constant 513c372511
added architecture to display media 2019-02-25 23:38:15 -05:00
Nicolas Constant 6e1cb62fb1
fix thread loading issue 2019-02-25 00:19:07 -05:00
Nicolas Constant 3d5b461d59
creation of media-viewer 2019-02-25 00:04:09 -05:00
Nicolas Constant b30986dcb3
added disable/enable CW functionality #42 2019-02-24 16:54:01 -05:00
Nicolas Constant 6600689dcc
support of very long CW 2019-02-24 15:44:02 -05:00
Nicolas Constant 0141b8f6d1
better loading display in timelines and thread 2019-02-24 15:35:48 -05:00
Nicolas Constant f20fb35e00
Merge pull request #45 from NicolasConstant/master
merge to get the last website updates
2019-02-24 14:50:53 -05:00
Nicolas Constant b4ac61662a
added thread analysis 2019-02-24 14:49:02 -05:00
Nicolas Constant 979e9c1caf
first iteration of CW support 2019-02-24 14:34:15 -05:00
Nicolas Constant 7794d88828
clean up 2019-02-24 03:05:58 -05:00
Nicolas Constant f548a58bc3
fix #43 (but limitations due to the API) 2019-02-24 02:01:44 -05:00
Nicolas Constant e9ac198113
Fix popup caching the html 2019-02-24 00:30:04 -05:00
4260 changed files with 32742 additions and 17405 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
.git
.gitignore
.travis.yml
appveyor.yml
.vscode
node_modules
dist

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
patreon: nicolasconstant

3
.gitignore vendored
View File

@ -1,6 +1,8 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
/release
# compiled output
/release
/dist
/dist-server
/tmp
@ -9,6 +11,7 @@ TESTS-Chrome*.xml
# dependencies
/node_modules
*/node_modules
# IDEs and editors
/.idea

15
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}"
}
]
}

View File

@ -20,5 +20,5 @@ For example:
## Pull Requests
Pull Requests are maybe a bit early right now, since the project and code can change a lot, so it's not really adviced to open PR today.
I will notify explicitely when I'll be more opened to external contributions.
Please open first an [issue](https://github.com/NicolasConstant/sengi/issues/new) before working on a new functionality you would like to submit to this repository.

5
CREDITS.md Normal file
View File

@ -0,0 +1,5 @@
# Credits
## Sounds
* All eyes on me, Exquisite and Appointed are from [Notification Sounds](https://notificationsounds.com/)
* Mastodon Boop is from the [Mastodon Project](https://github.com/tootsuite/mastodon) and made by [@jk@mastodon.social](https://mastodon.social/@jk)

28
DOCKER.md Normal file
View File

@ -0,0 +1,28 @@
# Sengi's Docker documentation
Here is some more detailed informations for Sengi's Docker users.
## Deploy Sengi's
Execute:
```
docker run -d -p 80:80 nicolasconstant/sengi
```
Sengi will then be available on port 80
## Landing page
Sengi's docker contains a landing page so that you can open a pop-up easily.<br />
It's available in ```https://your-host/start/index.html```
## Personalize the Privacy Statement
You can personalize the privacy statement by linking it as follow:
```
docker run -d -p 80:80 -v /Path/privacy.html:/app/assets/docs/privacy.html nicolasconstant/sengi
```

21
Dockerfile Normal file
View File

@ -0,0 +1,21 @@
FROM node:10-buster-slim AS build
WORKDIR /build
ADD . /build
RUN apt update && apt install --yes git binutils
RUN npm install
RUN npm run build
FROM alpine:latest
RUN apk add --update --no-cache lighttpd
ADD lighttpd.conf /etc/lighttpd/lighttpd.conf
COPY --from=build /build/dist /app
COPY --from=build /build/assets/docker_init /app/start
EXPOSE 80
ENTRYPOINT ["lighttpd", "-D"]
CMD ["-f", "/etc/lighttpd/lighttpd.conf"]

View File

@ -1,48 +1,72 @@
[![AppVeyor master](https://img.shields.io/appveyor/ci/NicolasConstant/sengi/master.svg?style=flat-square)](https://ci.appveyor.com/project/NicolasConstant/sengi) [![AppVeyor tests master](https://img.shields.io/appveyor/tests/nicolasconstant/sengi/master.svg?style=flat-square)](https://ci.appveyor.com/project/NicolasConstant/sengi/build/tests) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/agpl-3.0)
![GitHub release](https://img.shields.io/github/release/nicolasconstant/sengi.svg?style=flat-square) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/agpl-3.0) [![AppVeyor master](https://img.shields.io/appveyor/ci/NicolasConstant/sengi/master.svg?style=flat-square)](https://ci.appveyor.com/project/NicolasConstant/sengi) [![AppVeyor tests master](https://img.shields.io/appveyor/tests/nicolasconstant/sengi/master.svg?style=flat-square)](https://ci.appveyor.com/project/NicolasConstant/sengi/build/tests)
## Introduction
Sengi is a **Mastodon** and **Pleroma** desktop focused client. It takes inspiration from the old Tweetdeck [client](https://static.makeuseof.com/wp-content/uploads/2012/02/muo-tweetdeck2b.png), the new Tweetdeck webapp and Mastodon UI.
Focus will be made on the following points:
It is strongly focused on the following points:
* Heavily oriented on multi-accounts usage
* Desktop based interactions (right clic, left clic, etc)
* One column at a time display (leaves it on the side of your screen, and keep an eye on it while doing your other stuff)
* Desktop based interactions (right click, left click, etc)
* One column at a time display (leave it on the side of your screen, and keep an eye on it while doing your other stuff)
It will be released as a **browser webapp** and also packaged as an **cross-platform desktop application** (Mac, Windows, and Linux).
It is released as a **browser webapp** and also packaged as an **cross-platform desktop application** (Mac, Windows, and Linux).
The Electron code isn't hosted here anymore, and you'll find it [here](https://github.com/NicolasConstant/sengi-electron).
## Official project page
[Discover Sengi](https://nicolasconstant.github.io/sengi/)
## State of development
Sengi is at a very early development stage, a lot has to be done before a first pre-release.
The first major stable release has been published (1.0.0), the project is open to external contributions.
## Screens
soon™
![https://raw.githubusercontent.com/NicolasConstant/sengi/master/docs/images/presentation_small.gif](https://raw.githubusercontent.com/NicolasConstant/sengi/master/docs/images/presentation_small.gif)
## Docker
A docker image is available for auto-hosting your own Sengi webapp!
```
docker run -d -p 80:80 nicolasconstant/sengi
```
Find more informations [here](https://github.com/NicolasConstant/sengi/blob/master/DOCKER.md).
The docker image also provide a landing page so that you can open a pop-up really easily. <br />
It's available in ```https://your-host/start/index.html```
## Contact
* [Official Sengi Account](https://mastodon.social/@sengi_app)
## Contribute
Please see the [contributing guidelines](https://github.com/NicolasConstant/sengi/blob/master/CONTRIBUTING.md)
## License
This project is licensed under the AGPLv3 License - see [LICENSE](https://github.com/NicolasConstant/sengi/blob/master/LICENSE) for details
## Credits
See [credits](https://github.com/NicolasConstant/sengi/blob/master/CREDITS.md)
## Dependencies
* [Angular 7](https://github.com/angular/angular)
* [NGXS](https://github.com/ngxs/store)
* [SASS](https://github.com/sass/dart-sass)
* [Electron 10](https://github.com/electron/electron)
## What's a sengi?!
It's a little [elephant shrew](https://en.wikipedia.org/wiki/Elephant_shrew) from Africa:
![Rhynchocyon petersi](https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Rhynchocyon_petersi_from_side.jpg/400px-Rhynchocyon_petersi_from_side.jpg)
## Contribute
Please see the [contributing guidelines](CONTRIBUTING.md).
## License
This project is licensed under the AGPLv3 License - see [LICENSE](LICENSE) for details
## Dependencies
* [Angular 6](https://github.com/angular/angular)
* [NGXS](https://github.com/ngxs/store)
* [SASS](https://github.com/sass/dart-sass)
* [Electron](https://github.com/electron/electron)

View File

@ -1,144 +1,149 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"sengi": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"src/assets",
"src/favicon.ico"
],
"styles": [
"src/sass/styles.scss"
],
"stylePreprocessorOptions": {
"includePaths": [
"./src/sass",
"./node_modules/bootstrap/scss"
]
},
"scripts": []
},
"configurations": {
"production": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "sengi:build"
},
"configurations": {
"production": {
"browserTarget": "sengi:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "sengi:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"karmaConfig": "./karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [],
"styles": [
"src/sass/styles.scss"
],
"assets": [
"src/assets",
"src/favicon.ico"
],
"stylePreprocessorOptions": {
"includePaths": [
"./src/sass",
"./node_modules/bootstrap/scss"
]
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"sengi": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"src/assets",
"src/favicon.ico",
"src/manifest.json"
],
"styles": [
"src/sass/styles.scss",
"node_modules/@ctrl/ngx-emoji-mart/picker.css"
],
"stylePreprocessorOptions": {
"includePaths": [
"./src/sass",
"./node_modules/bootstrap/scss"
]
},
"scripts": []
},
"configurations": {
"production": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"serviceWorker": true,
"ngswConfigPath": "src/ngsw-config.json"
}
}
},
"sengi-e2e": {
"root": "e2e",
"sourceRoot": "e2e",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "sengi:serve"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "sengi:build"
},
"configurations": {
"production": {
"browserTarget": "sengi:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "sengi:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"karmaConfig": "./karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [],
"styles": [
"src/sass/styles.scss"
],
"assets": [
"src/assets",
"src/favicon.ico",
"src/manifest.json"
],
"stylePreprocessorOptions": {
"includePaths": [
"./src/sass",
"./node_modules/bootstrap/scss"
]
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"defaultProject": "sengi",
"schematics": {
"@schematics/angular:component": {
"prefix": "app",
"styleext": "scss"
"sengi-e2e": {
"root": "e2e",
"sourceRoot": "e2e",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "sengi:serve"
}
},
"@schematics/angular:directive": {
"prefix": "app"
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "sengi",
"schematics": {
"@schematics/angular:component": {
"prefix": "app",
"styleext": "scss"
},
"@schematics/angular:directive": {
"prefix": "app"
}
}
}

48
appveyor.yml Normal file
View File

@ -0,0 +1,48 @@
os: unstable
cache:
#- node_modules
environment:
GH_TOKEN:
secure: eXSiJiDFgLi4vixO5GS93lgrqZ+BzQNy7PKPCQCErHjCQD9mWiEtVQQnhvmUq1FPLUc3fNLmOFQu2nIWA9bnkHg5Yw9WiG2m7QSCPRB+xCnvSY6JbLqpzURZp5x5OLj6
matrix:
- nodejs_version: 10.9.0
install:
- ps: Install-Product node $env:nodejs_version
- set CI=true
- npm install -g npm@6.9.0
- set PATH=%APPDATA%\npm;%PATH%
- npm install
matrix:
fast_finish: true
build: off
version: '{build}'
shallow_clone: true
clone_depth: 1
test_script:
- ps: >-
npm run test-nowatch
$wc = New-Object 'System.Net.WebClient'
Get-ChildItem . -Name -Recurse 'TESTS-*.xml' |
Foreach-Object {
$wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path $_))
}
- npm run dist
- ps: >-
Remove-Item 'C:\projects\sengi\dist\assets\emoji' -Recurse
artifacts:
- path: dist
deploy:
- provider: FTP
host: home205977321.1and1-data.host
protocol: sftp
username: u45308485-sengi
password:
secure: Sk3NZwuaYK9hTIQ3kgIIQEc8SmaPDVGvGpgsZzFEzoVLuy4WxVfvKQtegW9oXaj7
folder: /
application: dist.zip
on:
branch: master
# APPVEYOR_REPO_TAG: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,29 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="main.css">
<link rel="shortcut icon" type="image/png" href="favicon.png">
<title>Sengi Launcher</title>
</head>
<body>
<div class="launcher-wrapper">
<div class="launcher">
<a href="#" class="button" title="launch sengi in popup"
onClick="window.open('/../'+'?qt='+ (new Date()).getTime(),'Sengi','toolbar=no,location=no,status=no,menubar=no,scrollbars=no, resizable=yes,width=377,height=800'); return false;">
<span class="download-button__web--label">Launch Sengi Popup</span>
</a><br />
<a href="/../" class="button" title="launch sengi">
<span class="download-button__web--label">Open Sengi</span>
</a><br />
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,45 @@
*, *::after, *::before {
margin: 0;
padding: 0;
box-sizing: inherit;
}
html {
font-size: 62.5%;
background-color: #141824;
font-family: Verdana, Geneva, sans-serif;
}
body {
box-sizing: border-box;
overflow: hidden;
}
.launcher-wrapper{
display: flex;
align-items: center;
justify-content: center;
}
.launcher {
height: 15rem;
width: 30rem;
margin: 35vh auto;
}
.button {
background-color: #090b10;
display: block;
width: 30rem;
padding: 1.5rem 2rem 1.75rem 2rem;
color: white;
border-radius: 3px;
font-size: 1.8rem;
font-weight: lighter;
text-decoration: none;
transition: all .2s;
}
.button:hover {
background-color: #1e2433;
}

BIN
assets/icons/mac/icon.icns Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/icons/png/16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 B

BIN
assets/icons/png/24x24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
assets/icons/png/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
assets/icons/png/48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
assets/icons/png/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
assets/icons/png/96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
assets/icons/win/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

12
docs/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,12 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "gulp",
"task": "default",
"problemMatcher": []
}
]
}

View File

@ -1,63 +0,0 @@
Creative Commons Attribution 3.0 Unported
http://creativecommons.org/licenses/by/3.0/
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
4. to Distribute and Publicly Perform Adaptations.
5.
For the avoidance of doubt:
1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested.
2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

View File

@ -1,33 +0,0 @@
Directive by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
A simple single pager built around an angular motif (powered by SVG awesomeness).
Should work great for a landing page. Also includes default styling for a bunch of
standard page elements (uncomment the huge block of commented-out HTML to see it).
Demo images* courtesy of Unsplash, a radtastic collection of CC0 (public domain) images
you can use for pretty much whatever.
(* = Not included)
Feedback, bug reports, and comments are not only welcome, but strongly encouraged :)
AJ
aj@lkn.io | @ajlkn
PS: Not sure how to get that contact form working? Give formspree.io a try (it's awesome).
Credits:
Demo Images:
Unsplash (unsplash.com)
Icons:
Font Awesome (fontawesome.io)
Other:
jQuery (jquery.com)
Responsive Tools (github.com/ajlkn/responsive-tools)

File diff suppressed because one or more lines are too long

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 2.5px; }
line.upper { stroke: rgba(224,224,224,0.75); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,0 0,0" class="one" />
<polygon points="0,0 1600,360 3200,0 3200,0 0,0" class="two" />
<!-- Lower lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Upper Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 865 B

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 2px; }
line.upper { stroke: rgba(224,224,224,0.75); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,0 0,0" class="one" />
<polygon points="0,0 1600,360 3200,0 3200,0 0,0" class="two" />
<!-- Lower lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Upper Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 863 B

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 1px; }
line.upper { stroke: rgba(224,224,224,0.75); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,0 0,0" class="one" />
<polygon points="0,0 1600,360 3200,0 3200,0 0,0" class="two" />
<!-- Lower lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Upper Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 2.5px; }
line.upper { stroke: rgba(224,224,224,0.15); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,460 0,460" class="one" />
<polygon points="0,100 1600,460 3200,100 3200,460 0,460" class="two" />
<!-- Upper lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Lower Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 873 B

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 2px; }
line.upper { stroke: rgba(224,224,224,0.15); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,460 0,460" class="one" />
<polygon points="0,100 1600,460 3200,100 3200,460 0,460" class="two" />
<!-- Upper lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Lower Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 871 B

View File

@ -1,23 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3200px" height="460px" viewBox="0 0 3200 460" zoomAndPan="disable">
<style type="text/css"><![CDATA[
line { stroke-width: 1px; }
line.upper { stroke: rgba(224,224,224,0.15); }
line.lower { stroke: rgba(224,224,224,0.75); }
polygon.one { fill: #f8f8f8; }
polygon.two { fill: #ffffff; }
]]></style>
<!-- Backgrounds -->
<polygon points="0,50 1600,410 3200,50 3200,460 0,460" class="one" />
<polygon points="0,100 1600,460 3200,100 3200,460 0,460" class="two" />
<!-- Upper lines -->
<line x1="0" y1="0" x2="1600" y2="360" class="upper" />
<line x1="1600" y1="360" x2="3200" y2="0" class="upper" />
<!-- Lower Lines -->
<line x1="0" y1="100" x2="1600" y2="460" class="lower" />
<line x1="1600" y1="460" x2="3200" y2="100" class="lower" />
</svg>

Before

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

View File

@ -1,2 +0,0 @@
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e<t.events.length;e++)n=t.events[e],t.active(n.query)?n.state||(n.state=!0,n.handler()):n.state&&(n.state=!1)}};return e._=t,e.on=function(e,n){t.on(e,n)},e.active=function(e){return t.active(e)},e}();!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.breakpoints=t()}(this,function(){return breakpoints});

View File

@ -1,2 +0,0 @@
/* browser.js v1.0 | @ajlkn | MIT licensed */
var browser=function(){"use strict";var e={name:null,version:null,os:null,osVersion:null,touch:null,mobile:null,_canUse:null,canUse:function(n){e._canUse||(e._canUse=document.createElement("div"));var o=e._canUse.style,r=n.charAt(0).toUpperCase()+n.slice(1);return n in o||"Moz"+r in o||"Webkit"+r in o||"O"+r in o||"ms"+r in o},init:function(){var n,o,r,i,t=navigator.userAgent;for(n="other",o=0,r=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(RegExp.$1);break}for(e.name=n,e.version=o,n="other",o=0,r=[["ios",/([0-9_]+) like Mac OS X/,function(e){return e.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(e){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(e){return e.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null],["linux",/Linux/,null],["bsd",/BSD/,null],["unix",/X11/,null]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(r[i][2]?r[i][2](RegExp.$1):RegExp.$1);break}e.os=n,e.osVersion=o,e.touch="wp"==e.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser});

File diff suppressed because one or more lines are too long

View File

@ -1,29 +0,0 @@
/*
Directive by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
(function($) {
var $window = $(window),
$body = $('body');
// Breakpoints.
breakpoints({
wide: [ '1281px', '1680px' ],
normal: [ '981px', '1280px' ],
narrow: [ '841px', '980px' ],
narrower: [ '737px', '840px' ],
mobile: [ '481px', '736px' ],
mobilep: [ null, '480px' ]
});
// Play initial animations on page load.
$window.on('load', function() {
window.setTimeout(function() {
$body.removeClass('is-preload');
}, 100);
});
})(jQuery);

View File

@ -1,587 +0,0 @@
(function($) {
/**
* Generate an indented list of links from a nav. Meant for use with panel().
* @return {jQuery} jQuery object.
*/
$.fn.navList = function() {
var $this = $(this);
$a = $this.find('a'),
b = [];
$a.each(function() {
var $this = $(this),
indent = Math.max(0, $this.parents('li').length - 1),
href = $this.attr('href'),
target = $this.attr('target');
b.push(
'<a ' +
'class="link depth-' + indent + '"' +
( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
'>' +
'<span class="indent-' + indent + '"></span>' +
$this.text() +
'</a>'
);
});
return b.join('');
};
/**
* Panel-ify an element.
* @param {object} userConfig User config.
* @return {jQuery} jQuery object.
*/
$.fn.panel = function(userConfig) {
// No elements?
if (this.length == 0)
return $this;
// Multiple elements?
if (this.length > 1) {
for (var i=0; i < this.length; i++)
$(this[i]).panel(userConfig);
return $this;
}
// Vars.
var $this = $(this),
$body = $('body'),
$window = $(window),
id = $this.attr('id'),
config;
// Config.
config = $.extend({
// Delay.
delay: 0,
// Hide panel on link click.
hideOnClick: false,
// Hide panel on escape keypress.
hideOnEscape: false,
// Hide panel on swipe.
hideOnSwipe: false,
// Reset scroll position on hide.
resetScroll: false,
// Reset forms on hide.
resetForms: false,
// Side of viewport the panel will appear.
side: null,
// Target element for "class".
target: $this,
// Class to toggle.
visibleClass: 'visible'
}, userConfig);
// Expand "target" if it's not a jQuery object already.
if (typeof config.target != 'jQuery')
config.target = $(config.target);
// Panel.
// Methods.
$this._hide = function(event) {
// Already hidden? Bail.
if (!config.target.hasClass(config.visibleClass))
return;
// If an event was provided, cancel it.
if (event) {
event.preventDefault();
event.stopPropagation();
}
// Hide.
config.target.removeClass(config.visibleClass);
// Post-hide stuff.
window.setTimeout(function() {
// Reset scroll position.
if (config.resetScroll)
$this.scrollTop(0);
// Reset forms.
if (config.resetForms)
$this.find('form').each(function() {
this.reset();
});
}, config.delay);
};
// Vendor fixes.
$this
.css('-ms-overflow-style', '-ms-autohiding-scrollbar')
.css('-webkit-overflow-scrolling', 'touch');
// Hide on click.
if (config.hideOnClick) {
$this.find('a')
.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
$this
.on('click', 'a', function(event) {
var $a = $(this),
href = $a.attr('href'),
target = $a.attr('target');
if (!href || href == '#' || href == '' || href == '#' + id)
return;
// Cancel original event.
event.preventDefault();
event.stopPropagation();
// Hide panel.
$this._hide();
// Redirect to href.
window.setTimeout(function() {
if (target == '_blank')
window.open(href);
else
window.location.href = href;
}, config.delay + 10);
});
}
// Event: Touch stuff.
$this.on('touchstart', function(event) {
$this.touchPosX = event.originalEvent.touches[0].pageX;
$this.touchPosY = event.originalEvent.touches[0].pageY;
})
$this.on('touchmove', function(event) {
if ($this.touchPosX === null
|| $this.touchPosY === null)
return;
var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
th = $this.outerHeight(),
ts = ($this.get(0).scrollHeight - $this.scrollTop());
// Hide on swipe?
if (config.hideOnSwipe) {
var result = false,
boundary = 20,
delta = 50;
switch (config.side) {
case 'left':
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
break;
case 'right':
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
break;
case 'top':
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
break;
case 'bottom':
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
break;
default:
break;
}
if (result) {
$this.touchPosX = null;
$this.touchPosY = null;
$this._hide();
return false;
}
}
// Prevent vertical scrolling past the top or bottom.
if (($this.scrollTop() < 0 && diffY < 0)
|| (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
event.preventDefault();
event.stopPropagation();
}
});
// Event: Prevent certain events inside the panel from bubbling.
$this.on('click touchend touchstart touchmove', function(event) {
event.stopPropagation();
});
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
$this.on('click', 'a[href="#' + id + '"]', function(event) {
event.preventDefault();
event.stopPropagation();
config.target.removeClass(config.visibleClass);
});
// Body.
// Event: Hide panel on body click/tap.
$body.on('click touchend', function(event) {
$this._hide(event);
});
// Event: Toggle.
$body.on('click', 'a[href="#' + id + '"]', function(event) {
event.preventDefault();
event.stopPropagation();
config.target.toggleClass(config.visibleClass);
});
// Window.
// Event: Hide on ESC.
if (config.hideOnEscape)
$window.on('keydown', function(event) {
if (event.keyCode == 27)
$this._hide(event);
});
return $this;
};
/**
* Apply "placeholder" attribute polyfill to one or more forms.
* @return {jQuery} jQuery object.
*/
$.fn.placeholder = function() {
// Browser natively supports placeholders? Bail.
if (typeof (document.createElement('input')).placeholder != 'undefined')
return $(this);
// No elements?
if (this.length == 0)
return $this;
// Multiple elements?
if (this.length > 1) {
for (var i=0; i < this.length; i++)
$(this[i]).placeholder();
return $this;
}
// Vars.
var $this = $(this);
// Text, TextArea.
$this.find('input[type=text],textarea')
.each(function() {
var i = $(this);
if (i.val() == ''
|| i.val() == i.attr('placeholder'))
i
.addClass('polyfill-placeholder')
.val(i.attr('placeholder'));
})
.on('blur', function() {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
return;
if (i.val() == '')
i
.addClass('polyfill-placeholder')
.val(i.attr('placeholder'));
})
.on('focus', function() {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
return;
if (i.val() == i.attr('placeholder'))
i
.removeClass('polyfill-placeholder')
.val('');
});
// Password.
$this.find('input[type=password]')
.each(function() {
var i = $(this);
var x = $(
$('<div>')
.append(i.clone())
.remove()
.html()
.replace(/type="password"/i, 'type="text"')
.replace(/type=password/i, 'type=text')
);
if (i.attr('id') != '')
x.attr('id', i.attr('id') + '-polyfill-field');
if (i.attr('name') != '')
x.attr('name', i.attr('name') + '-polyfill-field');
x.addClass('polyfill-placeholder')
.val(x.attr('placeholder')).insertAfter(i);
if (i.val() == '')
i.hide();
else
x.hide();
i
.on('blur', function(event) {
event.preventDefault();
var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
if (i.val() == '') {
i.hide();
x.show();
}
});
x
.on('focus', function(event) {
event.preventDefault();
var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
x.hide();
i
.show()
.focus();
})
.on('keypress', function(event) {
event.preventDefault();
x.val('');
});
});
// Events.
$this
.on('submit', function() {
$this.find('input[type=text],input[type=password],textarea')
.each(function(event) {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
i.attr('name', '');
if (i.val() == i.attr('placeholder')) {
i.removeClass('polyfill-placeholder');
i.val('');
}
});
})
.on('reset', function(event) {
event.preventDefault();
$this.find('select')
.val($('option:first').val());
$this.find('input,textarea')
.each(function() {
var i = $(this),
x;
i.removeClass('polyfill-placeholder');
switch (this.type) {
case 'submit':
case 'reset':
break;
case 'password':
i.val(i.attr('defaultValue'));
x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
if (i.val() == '') {
i.hide();
x.show();
}
else {
i.show();
x.hide();
}
break;
case 'checkbox':
case 'radio':
i.attr('checked', i.attr('defaultValue'));
break;
case 'text':
case 'textarea':
i.val(i.attr('defaultValue'));
if (i.val() == '') {
i.addClass('polyfill-placeholder');
i.val(i.attr('placeholder'));
}
break;
default:
i.val(i.attr('defaultValue'));
break;
}
});
});
return $this;
};
/**
* Moves elements to/from the first positions of their respective parents.
* @param {jQuery} $elements Elements (or selector) to move.
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
*/
$.prioritize = function($elements, condition) {
var key = '__prioritize';
// Expand $elements if it's not already a jQuery object.
if (typeof $elements != 'jQuery')
$elements = $($elements);
// Step through elements.
$elements.each(function() {
var $e = $(this), $p,
$parent = $e.parent();
// No parent? Bail.
if ($parent.length == 0)
return;
// Not moved? Move it.
if (!$e.data(key)) {
// Condition is false? Bail.
if (!condition)
return;
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
$p = $e.prev();
// Couldn't find anything? Means this element's already at the top, so bail.
if ($p.length == 0)
return;
// Move element to top of parent.
$e.prependTo($parent);
// Mark element as moved.
$e.data(key, $p);
}
// Moved already?
else {
// Condition is true? Bail.
if (condition)
return;
$p = $e.data(key);
// Move element back to its original location (using our placeholder).
$e.insertAfter($p);
// Unmark element as moved.
$e.removeData(key);
}
});
};
})(jQuery);

View File

@ -0,0 +1,29 @@
@mixin clearfix {
&::after {
content: "";
display: table;
clear: both;
}
}
@mixin absCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin respond($breakpoint) {
@if $breakpoint == phone {
@media (max-width: 37.5em){ @content }; //600px
}
@if $breakpoint == tab-port {
@media (max-width: 56.25em){ @content }; //900px
}
@if $breakpoint == tab-land {
@media (max-width: 78em){ @content }; //1200px
}
@if $breakpoint == big-desktop {
@media (min-width: 112.5em){ @content }; //1800px
}
}

View File

@ -0,0 +1,32 @@
// COLORS
// $color-primary: #55c57a;
// $color-primary-light: #7ed56f;
// $color-primary-dark: #28b485;
// $color-secondary-light: #ffb900;
// $color-secondary-dark: #ff7730;
// $color-tertiary-light: #2998ff;
// $color-tertiary-dark: #5643fa;
// $color-grey-light-1: #f7f7f7;
// $color-grey-light-2: #eee;
// $color-grey-dark: #777;
// $color-grey-dark-2: #999;
// $color-grey-dark-3: #333;
// $color-white: #fff;
// $color-black: #000;
//FONT
$default-font-size: 1.6rem;
// GRID
$grid-width: 114rem;
$gutter-vertical: 1rem;
$gutter-vertical-small: 1rem;
$gutter-horizontal: 1rem;
//COLOR
$dark-background: rgb(20, 20, 20);

View File

@ -0,0 +1,30 @@
*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: inherit;
}
html {
font-size: 62.5%;
@include respond(tab-land) {
font-size: 56.25%;
}
@include respond(tab-port) {
font-size: 50%;
}
@include respond(big-desktop) {
font-size: 75%;
}
}
body {
box-sizing: border-box;
padding: 3rem;
@include respond(tab-port) {
padding: 0rem;
}
}

View File

@ -0,0 +1,34 @@
.footer {
text-align: center;
background-color: rgb(20, 20, 20);
background-color: $dark-background;
color: white;
height: 18rem;
padding-top: 4em;
&__title {
font-family: 'Open Sans', sans-serif;
font-weight: lighter;
font-size: 2rem;
margin-bottom: 1.5rem;
}
&__buttons {
margin: auto;
&--button {
font-size: 4rem;
color:whitesmoke;
transition: all .2s;
&:not(:last-child){
margin-right: 2rem;
}
&:hover {
color:rgb(250, 164, 36);
}
}
}
}

View File

@ -0,0 +1,61 @@
.row {
// max-width: $grid-width;
margin: 0 auto;
&:not(:last-child) {
margin-bottom: $gutter-vertical;
@include respond(tab-port){
margin-bottom: $gutter-vertical-small;
}
}
@include respond(tab-port){
//max-width: 50rem;
padding: 0 1rem;
}
@include clearfix;
[class^="col-"] {
// background-color: orangered;
float: left;
&:not(:last-child) {
margin-right: $gutter-horizontal;
@include respond(tab-port){
margin-right: 0;
margin-bottom: $gutter-vertical-small;
}
}
@include respond(tab-port){
width: 100% !important;
}
}
.col-1-of-2 {
width: calc((100% - #{$gutter-horizontal}) / 2);
}
.col-1-of-3 {
width: calc((100% - 2 * #{$gutter-horizontal}) / 3);
}
.col-2-of-3 {
width: calc(2*(100% - 2 * #{$gutter-horizontal}) / 3 + #{$gutter-horizontal});
}
.col-1-of-4 {
width: calc((100% - 3 * #{$gutter-horizontal}) / 4);
}
.col-2-of-4 {
width: calc(2 * (100% - 3 * #{$gutter-horizontal}) / 4 + #{$gutter-horizontal});
}
.col-3-of-4 {
width: calc(3 * (100% - 3 * #{$gutter-horizontal}) / 4 + 2 * #{$gutter-horizontal});
}
}

View File

@ -0,0 +1,135 @@
$link-hover-color: rgb(250, 164, 36);;
.header {
position: relative;
background-color: rgb(247, 247, 247);
height: calc(100vh - 3rem);
overflow: hidden;
@include respond(tab-port) {
height: calc(100vh);
}
&__image {
display: block;
margin: 8.5vh auto 0 auto;
@include respond(tab-port) {
display: none;
}
// @include respond(phone){
// display: none;
// }
}
&__download-box {
transition: all .2s;
// display: inline-block;
// outline: 1px solid green;
margin: 21vh auto 0 auto;
width: calc(95%);
@include respond(tab-port) {
margin: 10vh auto 0 auto;
width: calc(80%);
}
// position: relative;
// top: 50%;
// transform: translateY(-50%);
font-family: 'Open Sans', sans-serif;
font-size: 2rem;
&--title {
font-weight: 300;
font-size: 5rem;
margin: 0 0 10rem 2rem;
}
&--subtitle {
font-weight: 400;
font-size: 2rem;
margin-bottom: .5rem;
}
&--buttons {
margin-bottom: 5px;
}
}
&__old-releases {
transition: all .2s;
color: rgb(122, 122, 122);
float: left;
font-size: 1.4rem;
text-decoration: none;
&:hover {
color: $link-hover-color;
text-decoration: underline;
}
}
}
.download-button {
// -webkit-appearance: button;
// -moz-appearance: button;
// appearance: button;
transition: all .2s;
background-color: white;
display: block;
border: 1px solid #cdcdcd;
border-radius: 2px;
float: left;
margin-right: 5px;
padding: 0 15px 2px 15px;
font-size: 38px;
color: rgb(63, 63, 63);
//color: black;
//opacity: .80;
text-decoration: none;
// outline-color: rgb(141, 140, 140);
margin-bottom: 1rem;
&:hover {
color: $link-hover-color;
}
&__web {
font-size: 25px;
background-color: rgb(63, 63, 63);;
color: white;
padding: 10px 20px 10px 15px;
border-radius: 3px;
border: 1px solid #e7e7e7;
&--label {
font-size: 25px;
font-weight: normal;
padding-left: 10px;
}
&:hover {
color: rgb(61, 61, 61);
background-color: $link-hover-color;
}
}
}
.fa-apple {
position: relative;
top: -2px;
}
.sengi-icon {
position: absolute;
top: 3rem;
left: 3rem;
width: 6rem;
height: 6rem;
}

View File

@ -0,0 +1,145 @@
.section {
font-family: 'Open Sans', sans-serif;
&-about {
min-height: 10rem;
background-color: $dark-background;
color: whitesmoke;
padding: 7rem 0;
&__about {
font-weight: 300;
font-family: 'Open Sans', sans-serif;
margin: auto;
padding: 0 3rem;
text-align: center;
font-size: 2.5rem;
}
}
&-clear {
font-weight: 300;
font-family: 'Open Sans', sans-serif;
min-height: 20rem;
background-color: whitesmoke;
padding: 1rem;
&__big-title {
font-weight: 400;
font-size: 3rem;
text-align: center;
}
&__title {
font-weight: 400;
font-size: 2.5rem;
color: $dark-background;
margin-top: 5rem;
margin-left: 15vw;
@include respond(tab-port) {
margin: 3rem auto 0 auto;
text-align: center;
}
}
&__subtitle {
font-weight: 400;
font-size: 2rem;
color: $dark-background;
margin-left: 1rem;
font-style: italic;
}
}
&-separator {
height: .5rem;
background-color: $dark-background;
background-color: rgb(255, 255, 255);
}
}
.quick-overview {
&__video {
display: block;
margin: 2rem auto;
width: 800;
height: 492;
@include respond(tab-port) {
width: 100%;
height: 492;
}
&:focus {
background: none;
border: 0px;
outline: none;
}
}
}
.link {
color: black;
&:visited, &:focus {
color: black;
}
&:hover {
color: grey;
}
}
.functionalities {
&__row {
max-width: 100rem;
}
&__text {
display: block;
margin: auto;
font-weight: 400;
font-size: 2rem;
text-align: center;
padding: 7rem 5rem 0 5rem;
max-width: 50rem;
@include respond(tab-port) {
padding: 3rem 5rem 0 5rem;
}
}
&__conclusion {
max-width: 60rem;
padding: 2rem 5rem 5rem 5rem;
}
&__strong {
font-weight: 400;
font-weight: bold;
}
&__video {
display: block;
margin: 2rem auto;
&:focus {
border: none;
outline: none;
}
width: 326px;
height: 260px;
@include respond(tab-port) {
width: 100%;
max-width: 326px;
height: 60%;
}
}
}

View File

@ -1,223 +0,0 @@
// breakpoints.scss v1.0 | @ajlkn | MIT licensed */
// Vars.
/// Breakpoints.
/// @var {list}
$breakpoints: () !global;
// Mixins.
/// Sets breakpoints.
/// @param {map} $x Breakpoints.
@mixin breakpoints($x: ()) {
$breakpoints: $x !global;
}
/// Wraps @content in a @media block targeting a specific orientation.
/// @param {string} $orientation Orientation.
@mixin orientation($orientation) {
@media screen and (orientation: #{$orientation}) {
@content;
}
}
/// Wraps @content in a @media block using a given query.
/// @param {string} $query Query.
@mixin breakpoint($query: null) {
$breakpoint: null;
$op: null;
$media: null;
// Determine operator, breakpoint.
// Greater than or equal.
@if (str-slice($query, 0, 2) == '>=') {
$op: 'gte';
$breakpoint: str-slice($query, 3);
}
// Less than or equal.
@elseif (str-slice($query, 0, 2) == '<=') {
$op: 'lte';
$breakpoint: str-slice($query, 3);
}
// Greater than.
@elseif (str-slice($query, 0, 1) == '>') {
$op: 'gt';
$breakpoint: str-slice($query, 2);
}
// Less than.
@elseif (str-slice($query, 0, 1) == '<') {
$op: 'lt';
$breakpoint: str-slice($query, 2);
}
// Not.
@elseif (str-slice($query, 0, 1) == '!') {
$op: 'not';
$breakpoint: str-slice($query, 2);
}
// Equal.
@else {
$op: 'eq';
$breakpoint: $query;
}
// Build media.
@if ($breakpoint and map-has-key($breakpoints, $breakpoint)) {
$a: map-get($breakpoints, $breakpoint);
// Range.
@if (type-of($a) == 'list') {
$x: nth($a, 1);
$y: nth($a, 2);
// Max only.
@if ($x == null) {
// Greater than or equal (>= 0 / anything)
@if ($op == 'gte') {
$media: 'screen';
}
// Less than or equal (<= y)
@elseif ($op == 'lte') {
$media: 'screen and (max-width: ' + $y + ')';
}
// Greater than (> y)
@elseif ($op == 'gt') {
$media: 'screen and (min-width: ' + ($y + 1) + ')';
}
// Less than (< 0 / invalid)
@elseif ($op == 'lt') {
$media: 'screen and (max-width: -1px)';
}
// Not (> y)
@elseif ($op == 'not') {
$media: 'screen and (min-width: ' + ($y + 1) + ')';
}
// Equal (<= y)
@else {
$media: 'screen and (max-width: ' + $y + ')';
}
}
// Min only.
@else if ($y == null) {
// Greater than or equal (>= x)
@if ($op == 'gte') {
$media: 'screen and (min-width: ' + $x + ')';
}
// Less than or equal (<= inf / anything)
@elseif ($op == 'lte') {
$media: 'screen';
}
// Greater than (> inf / invalid)
@elseif ($op == 'gt') {
$media: 'screen and (max-width: -1px)';
}
// Less than (< x)
@elseif ($op == 'lt') {
$media: 'screen and (max-width: ' + ($x - 1) + ')';
}
// Not (< x)
@elseif ($op == 'not') {
$media: 'screen and (max-width: ' + ($x - 1) + ')';
}
// Equal (>= x)
@else {
$media: 'screen and (min-width: ' + $x + ')';
}
}
// Min and max.
@else {
// Greater than or equal (>= x)
@if ($op == 'gte') {
$media: 'screen and (min-width: ' + $x + ')';
}
// Less than or equal (<= y)
@elseif ($op == 'lte') {
$media: 'screen and (max-width: ' + $y + ')';
}
// Greater than (> y)
@elseif ($op == 'gt') {
$media: 'screen and (min-width: ' + ($y + 1) + ')';
}
// Less than (< x)
@elseif ($op == 'lt') {
$media: 'screen and (max-width: ' + ($x - 1) + ')';
}
// Not (< x and > y)
@elseif ($op == 'not') {
$media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')';
}
// Equal (>= x and <= y)
@else {
$media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')';
}
}
}
// String.
@else {
// Missing a media type? Prefix with "screen".
@if (str-slice($a, 0, 1) == '(') {
$media: 'screen and ' + $a;
}
// Otherwise, use as-is.
@else {
$media: $a;
}
}
}
// Output.
@media #{$media} {
@content;
}
}

View File

@ -1,90 +0,0 @@
/// Removes a specific item from a list.
/// @author Hugo Giraudel
/// @param {list} $list List.
/// @param {integer} $index Index.
/// @return {list} Updated list.
@function remove-nth($list, $index) {
$result: null;
@if type-of($index) != number {
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
}
@else if $index == 0 {
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
}
@else if abs($index) > length($list) {
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
}
@else {
$result: ();
$index: if($index < 0, length($list) + $index + 1, $index);
@for $i from 1 through length($list) {
@if $i != $index {
$result: append($result, nth($list, $i));
}
}
}
@return $result;
}
/// Gets a value from a map.
/// @author Hugo Giraudel
/// @param {map} $map Map.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function val($map, $keys...) {
@if nth($keys, 1) == null {
$keys: remove-nth($keys, 1);
}
@each $key in $keys {
$map: map-get($map, $key);
}
@return $map;
}
/// Gets a duration value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _duration($keys...) {
@return val($duration, $keys...);
}
/// Gets a font value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _font($keys...) {
@return val($font, $keys...);
}
/// Gets a misc value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _misc($keys...) {
@return val($misc, $keys...);
}
/// Gets a palette value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _palette($keys...) {
@return val($palette, $keys...);
}
/// Gets a size value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _size($keys...) {
@return val($size, $keys...);
}

View File

@ -1,149 +0,0 @@
// html-grid.scss v1.0 | @ajlkn | MIT licensed */
// Mixins.
/// Initializes the current element as an HTML grid.
/// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
/// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
@mixin html-grid($gutters: 1.5em, $suffix: '') {
// Initialize.
$cols: 12;
$multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
$unit: 100% / $cols;
// Suffixes.
$suffixes: null;
@if (type-of($suffix) == 'list') {
$suffixes: $suffix;
}
@else {
$suffixes: ($suffix);
}
// Gutters.
$guttersCols: null;
$guttersRows: null;
@if (type-of($gutters) == 'list') {
$guttersCols: nth($gutters, 1);
$guttersRows: nth($gutters, 2);
}
@else {
$guttersCols: $gutters;
$guttersRows: 0;
}
// Row.
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
align-items: stretch;
// Columns.
> * {
box-sizing: border-box;
}
// Gutters.
&.gtr-uniform {
> * {
> :last-child {
margin-bottom: 0;
}
}
}
// Alignment.
&.aln-left {
justify-content: flex-start;
}
&.aln-center {
justify-content: center;
}
&.aln-right {
justify-content: flex-end;
}
&.aln-top {
align-items: flex-start;
}
&.aln-middle {
align-items: center;
}
&.aln-bottom {
align-items: flex-end;
}
// Step through suffixes.
@each $suffix in $suffixes {
// Suffix.
@if ($suffix != '') {
$suffix: '-' + $suffix;
}
@else {
$suffix: '';
}
// Row.
// Important.
> .imp#{$suffix} {
order: -1;
}
// Columns, offsets.
@for $i from 1 through $cols {
> .col-#{$i}#{$suffix} {
width: $unit * $i;
}
> .off-#{$i}#{$suffix} {
margin-left: $unit * $i;
}
}
// Step through multipliers.
@each $multiplier in $multipliers {
// Gutters.
$class: null;
@if ($multiplier != 1) {
$class: '.gtr-' + ($multiplier * 100);
}
&#{$class} {
margin-top: ($guttersRows * $multiplier * -1);
margin-left: ($guttersCols * $multiplier * -1);
> * {
padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
}
// Uniform.
&.gtr-uniform {
margin-top: $guttersCols * $multiplier * -1;
> * {
padding-top: $guttersCols * $multiplier;
}
}
}
}
}
}

View File

@ -1,63 +0,0 @@
/// Makes an element's :before pseudoelement a FontAwesome icon.
/// @param {string} $content Optional content value to use.
/// @param {string} $where Optional pseudoelement to target (before or after).
@mixin icon($content: false, $where: before) {
text-decoration: none;
&:#{$where} {
@if $content {
content: $content;
}
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
text-transform: none !important;
}
}
/// Applies padding to an element, taking the current element-margin value into account.
/// @param {mixed} $tb Top/bottom padding.
/// @param {mixed} $lr Left/right padding.
/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)
/// @param {bool} $important If true, adds !important.
@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {
@if $important {
$important: '!important';
}
$x: 0.1em;
@if unit(_size(element-margin)) == 'rem' {
$x: 0.1rem;
}
padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important};
}
/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).
/// @param {string} $svg SVG data URL.
/// @return {string} Encoded SVG data URL.
@function svg-url($svg) {
$svg: str-replace($svg, '"', '\'');
$svg: str-replace($svg, '%', '%25');
$svg: str-replace($svg, '<', '%3C');
$svg: str-replace($svg, '>', '%3E');
$svg: str-replace($svg, '&', '%26');
$svg: str-replace($svg, '#', '%23');
$svg: str-replace($svg, '{', '%7B');
$svg: str-replace($svg, '}', '%7D');
$svg: str-replace($svg, ';', '%3B');
@return url("data:image/svg+xml;charset=utf8,#{$svg}");
}

View File

@ -1,41 +0,0 @@
// Misc.
$misc: (
);
// Duration.
$duration: (
);
// Size.
$size: (
border-radius: 4px
);
// Font.
$font: (
);
// Palette.
$palette: (
bg: #ffffff,
fg: #6e6e6e,
fg-light: #888888,
fg-bold: #5b5b5b,
border: rgba(224,224,224,0.75),
border-bg: rgba(224,224,224,0.15),
border-bg2: rgba(224,224,224,0.35),
accent1: (
bg: #4eb980,
fg: rgba(255,255,255,0.8),
fg-light: rgba(255,255,255,0.5),
fg-bold: #ffffff
),
accent2: (
bg: #544d55,
fg: rgba(255,255,255,0.8),
fg-light: rgba(255,255,255,0.35),
fg-bold: #ffffff
)
);

View File

@ -1,376 +0,0 @@
// vendor.scss v1.0 | @ajlkn | MIT licensed */
// Vars.
/// Vendor prefixes.
/// @var {list}
$vendor-prefixes: (
'-moz-',
'-webkit-',
'-ms-',
''
);
/// Properties that should be vendorized.
/// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org
/// @var {list}
$vendor-properties: (
// Animation.
'animation',
'animation-delay',
'animation-direction',
'animation-duration',
'animation-fill-mode',
'animation-iteration-count',
'animation-name',
'animation-play-state',
'animation-timing-function',
// Appearance.
'appearance',
// Backdrop filter.
'backdrop-filter',
// Background image options.
'background-clip',
'background-origin',
'background-size',
// Box sizing.
'box-sizing',
// Clip path.
'clip-path',
// Filter effects.
'filter',
// Flexbox.
'align-content',
'align-items',
'align-self',
'flex',
'flex-basis',
'flex-direction',
'flex-flow',
'flex-grow',
'flex-shrink',
'flex-wrap',
'justify-content',
'order',
// Font feature.
'font-feature-settings',
'font-language-override',
'font-variant-ligatures',
// Font kerning.
'font-kerning',
// Fragmented borders and backgrounds.
'box-decoration-break',
// Grid layout.
'grid-column',
'grid-column-align',
'grid-column-end',
'grid-column-start',
'grid-row',
'grid-row-align',
'grid-row-end',
'grid-row-start',
'grid-template-columns',
'grid-template-rows',
// Hyphens.
'hyphens',
'word-break',
// Masks.
'mask',
'mask-border',
'mask-border-outset',
'mask-border-repeat',
'mask-border-slice',
'mask-border-source',
'mask-border-width',
'mask-clip',
'mask-composite',
'mask-image',
'mask-origin',
'mask-position',
'mask-repeat',
'mask-size',
// Multicolumn.
'break-after',
'break-before',
'break-inside',
'column-count',
'column-fill',
'column-gap',
'column-rule',
'column-rule-color',
'column-rule-style',
'column-rule-width',
'column-span',
'column-width',
'columns',
// Object fit.
'object-fit',
'object-position',
// Regions.
'flow-from',
'flow-into',
'region-fragment',
// Scroll snap points.
'scroll-snap-coordinate',
'scroll-snap-destination',
'scroll-snap-points-x',
'scroll-snap-points-y',
'scroll-snap-type',
// Shapes.
'shape-image-threshold',
'shape-margin',
'shape-outside',
// Tab size.
'tab-size',
// Text align last.
'text-align-last',
// Text decoration.
'text-decoration-color',
'text-decoration-line',
'text-decoration-skip',
'text-decoration-style',
// Text emphasis.
'text-emphasis',
'text-emphasis-color',
'text-emphasis-position',
'text-emphasis-style',
// Text size adjust.
'text-size-adjust',
// Text spacing.
'text-spacing',
// Transform.
'transform',
'transform-origin',
// Transform 3D.
'backface-visibility',
'perspective',
'perspective-origin',
'transform-style',
// Transition.
'transition',
'transition-delay',
'transition-duration',
'transition-property',
'transition-timing-function',
// Unicode bidi.
'unicode-bidi',
// User select.
'user-select',
// Writing mode.
'writing-mode',
);
/// Values that should be vendorized.
/// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org
/// @var {list}
$vendor-values: (
// Cross fade.
'cross-fade',
// Element function.
'element',
// Filter function.
'filter',
// Flexbox.
'flex',
'inline-flex',
// Grab cursors.
'grab',
'grabbing',
// Gradients.
'linear-gradient',
'repeating-linear-gradient',
'radial-gradient',
'repeating-radial-gradient',
// Grid layout.
'grid',
'inline-grid',
// Image set.
'image-set',
// Intrinsic width.
'max-content',
'min-content',
'fit-content',
'fill',
'fill-available',
'stretch',
// Sticky position.
'sticky',
// Transform.
'transform',
// Zoom cursors.
'zoom-in',
'zoom-out',
);
// Functions.
/// Removes a specific item from a list.
/// @author Hugo Giraudel
/// @param {list} $list List.
/// @param {integer} $index Index.
/// @return {list} Updated list.
@function remove-nth($list, $index) {
$result: null;
@if type-of($index) != number {
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
}
@else if $index == 0 {
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
}
@else if abs($index) > length($list) {
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
}
@else {
$result: ();
$index: if($index < 0, length($list) + $index + 1, $index);
@for $i from 1 through length($list) {
@if $i != $index {
$result: append($result, nth($list, $i));
}
}
}
@return $result;
}
/// Replaces a substring within another string.
/// @author Hugo Giraudel
/// @param {string} $string String.
/// @param {string} $search Substring.
/// @param {string} $replace Replacement.
/// @return {string} Updated string.
@function str-replace($string, $search, $replace: '') {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
}
@return $string;
}
/// Replaces a substring within each string in a list.
/// @param {list} $strings List of strings.
/// @param {string} $search Substring.
/// @param {string} $replace Replacement.
/// @return {list} Updated list of strings.
@function str-replace-all($strings, $search, $replace: '') {
@each $string in $strings {
$strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace));
}
@return $strings;
}
// Mixins.
/// Wraps @content in vendorized keyframe blocks.
/// @param {string} $name Name.
@mixin keyframes($name) {
@-moz-keyframes #{$name} { @content; }
@-webkit-keyframes #{$name} { @content; }
@-ms-keyframes #{$name} { @content; }
@keyframes #{$name} { @content; }
}
/// Vendorizes a declaration's property and/or value(s).
/// @param {string} $property Property.
/// @param {mixed} $value String/list of value(s).
@mixin vendor($property, $value) {
// Determine if property should expand.
$expandProperty: index($vendor-properties, $property);
// Determine if value should expand (and if so, add '-prefix-' placeholder).
$expandValue: false;
@each $x in $value {
@each $y in $vendor-values {
@if $y == str-slice($x, 1, str-length($y)) {
$value: set-nth($value, index($value, $x), '-prefix-' + $x);
$expandValue: true;
}
}
}
// Expand property?
@if $expandProperty {
@each $vendor in $vendor-prefixes {
#{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)};
}
}
// Expand just the value?
@elseif $expandValue {
@each $vendor in $vendor-prefixes {
#{$property}: #{str-replace-all($value, '-prefix-', $vendor)};
}
}
// Neither? Treat them as a normal declaration.
@else {
#{$property}: #{$value};
}
}

File diff suppressed because it is too large Load Diff

13
docs/gulpfile.js Normal file
View File

@ -0,0 +1,13 @@
// Sass configuration
var gulp = require('gulp');
var run = require('gulp-run');
gulp.task('npmsass', function () {
// setTimeout(function () {
run('npm start').exec();
// }, 300);
});
gulp.task('default', ['npmsass'], function () {
gulp.watch('./assets/sass/**/*.scss', ['npmsass']);
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
docs/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
docs/images/labels.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
docs/images/sengi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
docs/images/sengi_image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
docs/images/timelines.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -1,285 +1,281 @@
<!DOCTYPE HTML>
<!--
Directive by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>Directive by HTML5 UP</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fork-awesome@1.1.0/css/fork-awesome.min.css" integrity="sha256-sX8HLspqYoXVPetzJRE4wPhIhDBu2NB0kYpufzkQSms=" crossorigin="anonymous">
</head>
<body class="is-preload">
<html lang="en">
<!-- Header -->
<div id="header">
<span class="logo icon fa-paper-plane-o"></span>
<h1>Sengi</h1>
<p>A multi-account desktop application for Mastodon and Pleroma.<br/>
(And is at a very early development stage)</p>
</div>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Main -->
<div id="main">
<link rel="stylesheet" href="assets/css/main.css">
<link rel="shortcut icon" type="image/png" href="images/favicon.png">
<header class="major container medium">
<h3>Try it now!</h3>
<!-- <h2>Sengi is a web-app
<br />
it can be run into your browser
<br />
or as a regular desktop application (soon)</h2> -->
<!--
<p>Tellus erat mauris ipsum fermentum<br />
etiam vivamus nunc nibh morbi.</p>
-->
<br/>
<ul class="actions special">
<li><a href="#" onClick="window.open('http://sengi.nicolas-constant.com','Sengi','toolbar=no,location=no,status=no,menubar=no,scrollbars=no, resizable=yes,width=377,height=800'); return false;" class="button">Launch web client</a></li>
</ul>
<!-- <h3>Remember that Sengi is at a very early development stage</h3> -->
</header>
<title>Discover Sengi</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:100,300,400,700,900" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
</head>
<!-- <div class="box alt container">
<section class="feature left">
<a href="#" class="image icon fa-signal"><img src="images/pic01.jpg" alt="" /></a>
<div class="content">
<h3>The First Thing</h3>
<p>Vitae natoque dictum etiam semper magnis enim feugiat amet curabitur tempor orci penatibus. Tellus erat mauris ipsum fermentum etiam vivamus eget. Nunc nibh morbi quis fusce lacus.</p>
</div>
</section>
<section class="feature right">
<a href="#" class="image icon fa-code"><img src="images/pic02.jpg" alt="" /></a>
<div class="content">
<h3>The Second Thing</h3>
<p>Vitae natoque dictum etiam semper magnis enim feugiat amet curabitur tempor orci penatibus. Tellus erat mauris ipsum fermentum etiam vivamus eget. Nunc nibh morbi quis fusce lacus.</p>
</div>
</section>
<section class="feature left">
<a href="#" class="image icon fa-mobile"><img src="images/pic03.jpg" alt="" /></a>
<div class="content">
<h3>The Third Thing</h3>
<p>Vitae natoque dictum etiam semper magnis enim feugiat amet curabitur tempor orci penatibus. Tellus erat mauris ipsum fermentum etiam vivamus eget. Nunc nibh morbi quis fusce lacus.</p>
</div>
</section>
</div> -->
<body>
<header class="header">
<img class="sengi-icon" src="images/sengi.png">
<!--
<div class="box container">
<header>
<h2>A lot of generic stuff</h2>
</header>
<section>
<header>
<h3>Paragraph</h3>
<p>This is the subtitle for this particular heading</p>
</header>
<p>Phasellus nisl nisl, varius id <sup>porttitor sed pellentesque</sup> ac orci. Pellentesque
habitant <strong>strong</strong> tristique <b>bold</b> et netus <i>italic</i> malesuada <em>emphasized</em> ac turpis egestas. Morbi
leo suscipit ut. Praesent <sub>id turpis vitae</sub> turpis pretium ultricies. Vestibulum sit
amet risus elit.</p>
</section>
<section>
<header>
<h3>Blockquote</h3>
</header>
<blockquote>Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget.
tempus euismod. Vestibulum ante ipsum primis in faucibus.</blockquote>
</section>
<section>
<header>
<h3>Divider</h3>
</header>
<p>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra
ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel. Praesent nec orci
facilisis leo magna. Cras sit amet urna eros, id egestas urna. Quisque aliquam
tempus euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
posuere cubilia.</p>
<hr />
<p>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra
ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel. Praesent nec orci
facilisis leo magna. Cras sit amet urna eros, id egestas urna. Quisque aliquam
tempus euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
posuere cubilia.</p>
</section>
<section>
<header>
<h3>Unordered List</h3>
</header>
<ul class="default">
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
</ul>
</section>
<section>
<header>
<h3>Ordered List</h3>
</header>
<ol class="default">
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
<li>Donec consectetur vestibulum dolor et pulvinar. Etiam vel felis enim, at viverra ligula. Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</li>
</ol>
</section>
<section>
<header>
<h3>Table</h3>
</header>
<div class="table-wrapper">
<table class="default">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>45815</td>
<td>Something</td>
<td>Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</td>
<td>29.99</td>
</tr>
<tr>
<td>24524</td>
<td>Nothing</td>
<td>Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</td>
<td>19.99</td>
</tr>
<tr>
<td>45815</td>
<td>Something</td>
<td>Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</td>
<td>29.99</td>
</tr>
<tr>
<td>24524</td>
<td>Nothing</td>
<td>Ut porttitor sagittis lorem, quis eleifend nisi ornare vel.</td>
<td>19.99</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="3"></td>
<td>100.00</td>
</tr>
</tfoot>
</table>
</div>
</section>
<section>
<header>
<h3>Form</h3>
</header>
<form method="post" action="#">
<div class="row">
<div class="col-6 col-12-mobilep">
<label for="name">Name</label>
<input class="text" type="text" name="name" id="name" value="" placeholder="John Doe" />
</div>
<div class="col-6 col-12-mobilep">
<label for="email">Email</label>
<input class="text" type="text" name="email" id="email" value="" placeholder="johndoe@domain.tld" />
</div>
<div class="col-12">
<label for="subject">Subject</label>
<input class="text" type="text" name="subject" id="subject" value="" placeholder="Enter your subject" />
</div>
<div class="col-12">
<label for="subject">Message</label>
<textarea name="message" id="message" placeholder="Enter your message" rows="6"></textarea>
</div>
<div class="col-12">
<ul class="actions special">
<li><input type="submit" value="Send" /></li>
<li><input type="reset" value="Reset" class="alt" /></li>
</ul>
</div>
</div>
</form>
</section>
</div>
-->
<div class="row">
<div class="col-1-of-2">
<img id="main-illustration" class="header__image" src="images/sengi_image.png" />
</div>
<div class="col-1-of-2">
<div class="header__download-box">
<h1 class="header__download-box--title">Discover Sengi</h1>
<footer class="major container medium">
<h3>Want to see the code? </h3>
<p>Sengi is a FLOSS software, you can find the Github project here:</p>
<ul class="actions special">
<li><a href="https://github.com/NicolasConstant/sengi/" class="button">Github repository</a></li>
</ul>
</footer>
<div class="header__download-box--description">
A FLOSS multi-account Mastodon and Pleroma desktop client<br />
<span id="sengi-version"></span> <br />
<br />
</div>
</div>
<div class="header__download-box--buttons">
<p>
<h4 class="header__download-box--subtitle">Use it in your browser!</h4>
<a href="#" class="download-button download-button__web"
title="what are you waiting for? click!"
onClick="window.open('https://sengi.nicolas-constant.com'+'?qt='+ (new Date()).getTime(),'Sengi','toolbar=no,location=no,status=no,menubar=no,scrollbars=no, resizable=yes,width=377,height=800'); return false;"
class="button"><i class="fas fa-globe"></i><span
class="download-button__web--label">launch!</span></a><br />
<br />
<br />
<!-- Footer -->
<div id="footer">
<div class="container medium">
<h4 class="header__download-box--subtitle">Or download the desktop client <span id="electron-version"></span>:</h4>
<div id="download-buttons" style="display: none;">
<a id="windows" href class="download-button" title="download client for windows">
<i class="fab fa-windows"></i>
</a>
<a id="mac" href class="download-button" title="download client for mac">
<i class="fab fa-apple"></i>
</a>
<a id="deb" href class="download-button"
title="download client for debian-based distrib">
<i class="fab fa-ubuntu"></i>
</a>
<a id="appimage" href class="download-button"
title="download client for linux (AppImage)">
<i class="fab fa-linux"></i>
</a>
<a href="https://snapcraft.io/sengi" title="use Snap Store for linux">
<img src="images/snap-store-white.png" />
</a>
</div>
<div id="download-buttons-nojs">
<a href="https://github.com/NicolasConstant/sengi/releases/" class="download-button"
title="latest releases">
<i class="fab fa-github"></i></a>
<a href="https://snapcraft.io/sengi" title="use Snap Store for linux">
<img src="images/snap-store-white.png" />
</a>
</div>
</p>
<header class="major last">
<h2>Questions or comments?</h2>
</header>
</div>
<div>
<a class="header__old-releases" href="https://github.com/NicolasConstant/sengi-electron/releases/"
title="browse previous releases">browse previous releases</a>
</div>
</div>
</div>
</div>
<div class="header__app-image-box"></div>
</header>
<main>
<section class="section-about">
<p>Feel free to contact me via Mastodon or Github</p>
<div class="section-about__about">
<p>
Sengi will let you use all your accounts<br /> easily and seamlessly<br />
</p>
</div>
<!-- <form method="post" action="#">
<div class="row">
<div class="col-6 col-12-mobilep">
<input type="text" name="name" placeholder="Name" />
</div>
<div class="col-6 col-12-mobilep">
<input type="email" name="email" placeholder="Email" />
</div>
<div class="col-12">
<textarea name="message" placeholder="Message" rows="6"></textarea>
</div>
<div class="col-12">
<ul class="actions special">
<li><input type="submit" value="Send Message" /></li>
</ul>
</div>
</div>
</form> -->
</section>
<ul class="icons">
<!-- <li><a href="#" class="icon fa-twitter"><span class="label">Twitter</span></a></li> -->
<!-- <li><a href="#" class="icon fa-mastodon"><span class="label">Twitter</span></a></li> -->
<!-- <li><a href="#" class="icon fa-facebook"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon fa-instagram"><span class="label">Instagram</span></a></li> -->
<li><a href="https://github.com/NicolasConstant/sengi/" class="icon fa-github"><span class="label">Github</span></a></li>
<!-- <li><a href="https://github.com/NicolasConstant/sengi/" class="icon fa-mastodon"><span class="label">Github</span></a></li>
<li><a href="https://github.com/NicolasConstant/sengi/" class="icon fa fa-mastodon"><span class="label">Github</span></a></li>
<section class="section-separator"></section>
<li><a href="https://github.com/NicolasConstant/sengi/" class=""> <span class="fa fa-mastodon" aria-hidden="true"></span></a></li> -->
<!-- <li><a href="https://mastodon.partipirate.org/@NicolasConstant" class=""> <i class="fa fa-mastodon" aria-hidden="true"></i></a></li> -->
<li><a href="https://mastodon.social/@sengi_app" class=""> <i class="fa fa-mastodon" aria-hidden="true"></i></a></li>
<!-- <li><a href="#" class="icon fa-dribbble"><span class="label">Dribbble</span></a></li> -->
</ul>
<section class="section-clear">
<h2 class="section-clear__big-title">Quick Overview</h2>
<ul class="copyright">
<li>Design: <a href="http://html5up.net">HTML5 UP</a></li>
</ul>
<video class="quick-overview__video" controls>
<source src="videos/Quick_overview.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</section>
</div>
</div>
<section class="section-separator"></section>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
<section class="section-clear">
<h2 class="section-clear__big-title">Main Functionalities</h2>
<h4 class="section-clear__title">Seamless account switch</h4>
<div class="row functionalities__row">
<div class="col-1-of-2">
<p class="functionalities__text">
Just click on the account's avatar, <br />
and all your next actions will be performed by it.
</p>
</div>
<div class="col-1-of-2">
<video width="326" height="260" controls class="functionalities__video">
<source src="videos/Clip_account_switch.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
</div>
<h4 class="section-clear__title">All instances timelines in one place</h4>
<div class="row functionalities__row">
<div class="col-1-of-2">
<p class="functionalities__text">
Add timelines and lists from all your accounts in the same
interface.
</p>
</div>
<div class="col-1-of-2">
<img src="images/timelines.png" class="functionalities__video" />
</div>
</div>
<h4 class="section-clear__title">Don't lose your focus</h4>
<div class="row functionalities__row">
<div class="col-1-of-2">
<p class="functionalities__text">
Opening a profile, thread, hashtag or even just replying to someone will always take place in the
current Timeline.
</p>
</div>
<div class="col-1-of-2">
<video width="326" height="260" controls class="functionalities__video">
<source src="videos/Clip_timelines.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
</div>
<h4 class="section-clear__title">Labels</h4>
<div class="row functionalities__row">
<div class="col-1-of-2">
<p class="functionalities__text">
Get a quick insight if a status is part of a thread, has replies, is from a bot, is old, is
cross-posted (limited to local TL) or is remotely fetched.<br/>
<a href="https://github.com/NicolasConstant/sengi/wiki/Labels" class="link">more details</a>
</p>
</div>
<div class="col-1-of-2">
<img src="images/labels.png" class="functionalities__video" />
</div>
</div>
<h4 class="section-clear__title">Auto-remove Thread's Content-Warnings</h4>
<div class="row functionalities__row">
<div class="col-1-of-2">
<p class="functionalities__text">
Easily remove all CW from a thread<br />
with one single click!
</p>
</div>
<div class="col-1-of-2">
<video width="326" height="260" controls class="functionalities__video">
<source src="videos/Clip_cw_button.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
</div>
<h4 class="section-clear__title">And many more!</h4>
<div class="row functionalities__row">
<p class="functionalities__text functionalities__conclusion">
There is a lot more things to discover<br/> and more to come too!
</p>
</div>
</section>
<section class="section-separator"></section>
</main>
<footer class="footer">
<h3 class="footer__title">Let's keep in touch!</h3>
<div class="footer__buttons">
<a href="https://mastodon.social/@sengi_app" rel="me" class="footer__buttons--button"
title="open pleroma-compatible account"><i class="fab fa-mastodon"></i></a>
<a href="https://github.com/NicolasConstant/sengi" class="footer__buttons--button"
title="open microsoft github repository"><i class="fab fa-github"></i></a>
</div>
</footer>
<script type="text/javascript" language="javascript">
const getLastRelease = async () => {
const response = await fetch('https://api.github.com/repos/NicolasConstant/sengi/releases/latest');
const myJson = await response.json();
return myJson;
}
const getLastElectronRelease = async () => {
const response = await fetch('https://api.github.com/repos/NicolasConstant/sengi-electron/releases/latest');
const myJson = await response.json();
return myJson;
}
function getOS() {
var userAgent = window.navigator.userAgent,
platform = window.navigator.platform,
macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
iosPlatforms = ['iPhone', 'iPad', 'iPod'],
os = null;
if (macosPlatforms.indexOf(platform) !== -1) {
os = 'Mac OS';
} else if (iosPlatforms.indexOf(platform) !== -1) {
os = 'iOS';
} else if (windowsPlatforms.indexOf(platform) !== -1) {
os = 'Windows';
} else if (/Android/.test(userAgent)) {
os = 'Android';
} else if (!os && /Linux/.test(platform)) {
os = 'Linux';
}
return os;
}
document.addEventListener('DOMContentLoaded', async function () {
let lastRelease = await getLastRelease();
let version = lastRelease.tag_name;
let lastElectronRelease = await getLastElectronRelease();
let electronVersion = lastElectronRelease.tag_name;
var downloadButtons = document.getElementById('download-buttons');
downloadButtons.style.display = 'block';
var downloadButtonsNojs = document.getElementById('download-buttons-nojs');
downloadButtonsNojs.style.display = 'none';
var sengiVersion = document.getElementById('sengi-version');
sengiVersion.textContent = `Current version: v${version}`;
var htmlElectronVersion = document.getElementById('electron-version');
htmlElectronVersion.textContent = `(${electronVersion})`;
document.getElementById('windows').href = `https://github.com/NicolasConstant/sengi-electron/releases/download/${electronVersion}/Sengi-${electronVersion.replace('v', '')}-win.exe`;
document.getElementById('mac').href = `https://github.com/NicolasConstant/sengi-electron/releases/download/${electronVersion}/Sengi-${electronVersion.replace('v', '')}-mac.dmg`;
document.getElementById('deb').href = `https://github.com/NicolasConstant/sengi-electron/releases/download/${electronVersion}/Sengi-${electronVersion.replace('v', '')}-linux.deb`;
document.getElementById('appimage').href = `https://github.com/NicolasConstant/sengi-electron/releases/download/${electronVersion}/Sengi-${electronVersion.replace('v', '')}-linux.AppImage`;
let userOs = getOS();
if(userOs === 'Linux'){
var illustration = document.getElementById('main-illustration');
illustration.src = 'images/sengi_image_ubuntu.png';
}
}, false);
</script>
</body>
</body>
</html>

5373
docs/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

18
docs/package.json Normal file
View File

@ -0,0 +1,18 @@
{
"name": "sengi-project-page",
"version": "1.0.0",
"description": "The Project Page of Sengi",
"main": "index.js",
"scripts": {
"start": "node-sass ./assets/sass/main.scss ./assets/css/main.css"
},
"author": "Nicolas Constant",
"license": "WTFPL",
"devDependencies": {
"gulp": "^4.0.2",
"gulp-run": "^1.7.1",
"gulp-sass": "^4.0.1",
"node-sass": "^4.13.1"
},
"dependencies": {}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

14
lighttpd.conf Normal file
View File

@ -0,0 +1,14 @@
server.port = 80
server.document-root = "/app"
server.errorlog = "/dev/stdout"
accesslog.filename = "/dev/stdout"
dir-listing.activate = "disable"
server.modules = (
"mod_access",
"mod_accesslog",
)
include "mime-types.conf"
server.pid-file = "/run/lighttpd.pid"
index-file.names = ( "index.html", "index.htm" )
#url.rewrite-once = ( "^sengi/(.*)" => "/sengi/index.html" )
server.error-handler-404 = "/index.html"

121
main.js
View File

@ -1,121 +0,0 @@
const { app, Menu, server, BrowserWindow, shell } = require('electron');
const path = require('path');
const url = require('url');
const http = require('http');
const fs = require('fs');
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win
function createWindow() {
// Create the browser window.
win = new BrowserWindow({ width: 393, height: 800, title: "Sengi", backgroundColor: '#FFF' });
var server = http.createServer(requestHandler).listen(9527);
win.loadURL('http://localhost:9527');
const template = [
{
label: 'View',
submenu: [
{ role: 'reload' },
{ role: 'forcereload' },
{ type: 'separator' },
{ role: 'close' }
]
},
{
role: 'help',
submenu: [
{ role: 'toggledevtools' },
{
label: 'Open GitHub project',
click() { require('electron').shell.openExternal('https://github.com/NicolasConstant/sengi') }
}
]
}
]
const menu = Menu.buildFromTemplate(template);
win.setMenu(menu);
// Open the DevTools.
// win.webContents.openDevTools()
//open external links to browser
win.webContents.on('new-window', function (event, url) {
event.preventDefault();
shell.openExternal(url);
});
// Emitted when the window is closed.
win.on('closed', () => {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
win = null
})
};
function requestHandler(req, res) {
var file = req.url == '/' ? '/index.html' : req.url,
root = __dirname + '/dist',
page404 = root + '/404.html';
if (file.includes('register') || file.includes('home')) file = '/index.html';
getFile((root + file), res, page404);
};
function getFile(filePath, res, page404) {
console.warn(`filePath: ${filePath}`)
fs.exists(filePath, function (exists) {
if (exists) {
fs.readFile(filePath, function (err, contents) {
if (!err) {
res.end(contents);
} else {
console.dir(err);
}
});
} else {
fs.readFile(page404, function (err, contents) {
if (!err) {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end(contents);
} else {
console.dir(err);
}
});
}
});
};
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (win === null) {
createWindow()
}
})
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

11464
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,65 +1,141 @@
{
"name": "sengi",
"version": "0.0.0",
"license": "MIT",
"main": "main.js",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build --prod",
"test": "ng test",
"test-nowatch": "ng test --watch=false",
"lint": "ng lint",
"e2e": "ng e2e",
"electron": "ng build --prod && electron .",
"electron-debug": "ng build && electron ."
},
"private": true,
"dependencies": {
"@angular/animations": "^6.1.0",
"@angular/common": "^6.1.0",
"@angular/compiler": "^6.1.0",
"@angular/core": "^6.1.0",
"@angular/forms": "^6.1.0",
"@angular/http": "^6.1.0",
"@angular/platform-browser": "^6.1.0",
"@angular/platform-browser-dynamic": "^6.1.0",
"@angular/router": "^6.1.0",
"@fortawesome/angular-fontawesome": "^0.3.0",
"@fortawesome/fontawesome-svg-core": "^1.2.13",
"@fortawesome/free-brands-svg-icons": "^5.7.0",
"@fortawesome/free-regular-svg-icons": "^5.7.0",
"@fortawesome/free-solid-svg-icons": "^5.7.0",
"@ngxs/storage-plugin": "^3.2.0",
"@ngxs/store": "^3.2.0",
"bootstrap": "^4.1.3",
"core-js": "^2.5.4",
"ionicons": "^4.4.3",
"ngx-electron": "^1.0.4",
"rxjs": "^6.0.0",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.7.0",
"@angular/cli": "~6.1.1",
"@angular/compiler-cli": "^6.1.0",
"@angular/language-service": "^6.1.0",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"codelyzer": "~4.2.1",
"electron": "^2.0.5",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"karma-junit-reporter": "^1.2.0",
"protractor": "~5.3.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1",
"typescript": "~2.7.2"
}
"name": "sengi",
"version": "1.7.0",
"license": "AGPL-3.0-or-later",
"main": "main-electron.js",
"description": "A multi-account desktop client for Mastodon and Pleroma",
"author": {
"name": "Nicolas Constant",
"email": "github@nicolas-constant.com"
},
"repository": {
"type": "git",
"url": "https://github.com/NicolasConstant/sengi.git"
},
"scripts": {
"ng": "ng",
"start": "ng serve",
"start-mem": "node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng serve",
"build": "ng build --prod",
"test": "ng test",
"test-nowatch": "ng test --watch=false",
"lint": "ng lint",
"e2e": "ng e2e",
"dist": "npm run build"
},
"private": true,
"dependencies": {
"@angular/animations": "^7.2.16",
"@angular/cdk": "^7.3.7",
"@angular/common": "^7.2.7",
"@angular/compiler": "^7.2.7",
"@angular/core": "^7.2.7",
"@angular/forms": "^7.2.7",
"@angular/http": "^7.2.7",
"@angular/material": "^16.2.1",
"@angular/platform-browser": "^7.2.7",
"@angular/platform-browser-dynamic": "^7.2.7",
"@angular/pwa": "^0.12.4",
"@angular/router": "^7.2.7",
"@angular/service-worker": "^7.2.7",
"@ctrl/ngx-emoji-mart": "^0.17.0",
"@fortawesome/angular-fontawesome": "^0.3.0",
"@fortawesome/fontawesome-svg-core": "^1.2.13",
"@fortawesome/free-brands-svg-icons": "^5.7.0",
"@fortawesome/free-regular-svg-icons": "^5.7.0",
"@fortawesome/free-solid-svg-icons": "^5.7.0",
"@ngxs/storage-plugin": "~3.2.0",
"@ngxs/store": "~3.2.0",
"angular2-hotkeys": "~2.1.5",
"bootstrap": "^4.1.3",
"core-js": "^2.5.4",
"emojione": "~4.5.0",
"howler": "^2.1.2",
"ng-pick-datetime": "^7.0.0",
"ngx-contextmenu": "^5.2.0",
"rxjs": "^6.4.0",
"smooth-scroll-into-view-if-needed": "^1.1.23",
"tslib": "^1.9.0",
"zone.js": "^0.8.29"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.13.0",
"@angular/cli": "~7.3.3",
"@angular/compiler-cli": "^7.2.7",
"@angular/language-service": "^7.2.7",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"codelyzer": "~4.2.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"karma-junit-reporter": "^1.2.0",
"protractor": "~5.3.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1",
"typescript": "~3.2.4"
},
"optionalDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.14.7"
},
"build": {
"productName": "Sengi",
"appId": "org.sengi.desktop",
"artifactName": "${productName}-${version}-${os}.${ext}",
"npmRebuild": false,
"directories": {
"output": "release"
},
"files": [
"dist/",
"node_modules/",
"main-electron.js",
"package.json"
],
"dmg": {
"contents": [
{
"x": 130,
"y": 220
},
{
"x": 410,
"y": 220,
"type": "link",
"path": "/Applications"
}
]
},
"mac": {
"icon": "assets/icons/mac/icon.icns",
"target": [
"dmg"
],
"category": "public.app-category.social-networking"
},
"win": {
"icon": "assets/icons/win/icon.ico",
"target": "nsis"
},
"linux": {
"icon": "assets/icons/png",
"target": [
"AppImage",
"deb",
"snap"
],
"category": "Network"
},
"snap": {
"publish": [
"github"
]
}
}
}

View File

@ -1,18 +1,46 @@
<app-left-side-bar>
</app-left-side-bar>
<!--<app-streams-main-display>
</app-streams-main-display>-->
<div id="display-zone">
<app-tutorial id="tutorial" *ngIf="tutorialActive"></app-tutorial>
<app-floating-column id="floating-column" *ngIf="floatingColumnActive"></app-floating-column>
<app-notification-hub></app-notification-hub>
<router-outlet></router-outlet>
<div class="drag-and-drop" *ngIf="drag" (dragover)="dragover($event)" (drop)="drop($event)"
[ngClass]="{'drag-and-drop__on-drag': drag2 === true }">
<!-- (dragleave)="dragleave($event)" -->
<div class="drag-and-drop__card">
<div class="drag-and-drop__border">
<div class="drag-and-drop__label">
Drag & drop to upload
</div>
</div>
</div>
</div>
<app-streams-selection-footer>
</app-streams-selection-footer>
<div *ngIf="showRestartNotification" class="auto-update" [class.auto-update__activated]="restartNotificationAvailable">
<div class="auto-update__display">
<div class="auto-update__display--text">{{restartNotificationLabel}}</div> <a href class="auto-update__display--reload" (click)="loadNewVersion()" title="reload">reload</a> <a href class="auto-update__display--close" (click)="closeRestartNotification()" title="close"><fa-icon [icon]="faTimes"></fa-icon></a>
</div>
</div>
<div *ngIf="enhancedTutorialActive" class="enhanced-tutorial"
[class.enhanced-tutorial__visible]="enhancedTutorialVisible">
<app-tutorial-enhanced class="enhanced-tutorial__content" (closeEvent)="closeTutorial()"></app-tutorial-enhanced>
</div>
<app-media-viewer id="media-viewer" *ngIf="openedMediaEvent" [openedMediaEvent]="openedMediaEvent"
(closeSubject)="closeMedia()" (dragenter)="dragenter($event)"></app-media-viewer>
<div class="app" (dragenter)="dragenter($event)">
<app-left-side-bar>
</app-left-side-bar>
<!--<app-streams-main-display>
</app-streams-main-display>-->
<div id="display-zone">
<app-tutorial id="tutorial" *ngIf="tutorialActive"></app-tutorial>
<app-floating-column id="floating-column" *ngIf="floatingColumnActive"></app-floating-column>
<app-notification-hub></app-notification-hub>
<router-outlet></router-outlet>
</div>
<app-streams-selection-footer>
</app-streams-selection-footer>
</div>
<!--<div style="text-align:center">
<h1>

View File

@ -1,3 +1,5 @@
@import"variables";
#display-zone {
position: absolute;
top: 0;
@ -18,16 +20,178 @@
#tutorial {
position: relative;
top: 0;
top: 0;
left: 0;
bottom: 0;
z-index: 1;
}
#media-viewer {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
z-index: 9999999;
}
.app {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.drag-and-drop {
transition: all .2s;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 99999999;
background: rgba(black, .8);
// opacity: 0.2;
&__on-drag {
opacity: 1;
// background: rgba(black, .7);
}
&__card {
background: $font-link-primary;
background: $column-color;
max-width: 300px;
$card-height: 200px;
height: $card-height;
position: relative;
top: calc(50% - #{$card-height}/2);
margin: auto;
padding: 10px;
border-radius: 5px;
// transform: perspective(1px) translateY(-50%);
// margin-top: calc(50%);
// transform: translateY(50px);
}
&__border {
border: 3px black dashed;
// margin: 50px 50px 0 50px;
height: calc(100%);
}
&__label {
font-size: 17px;
// font-weight: 400;
text-align: center;
height: 100px;
margin: auto;
padding-top: 70px;
}
}
app-streams-selection-footer {
position: absolute;
height: 30px;
right: 0;
bottom: 0;
left: 50px;
}
.auto-update {
transition: all .2s;
transition-timing-function: ease-in;
position: absolute;
height: 50px;
left: 0;
right: 0;
bottom: 0;
//bottom: -80px;
opacity: 0;
z-index: 999999999;
&__activated {
// opacity: 1;
transition: all .25s;
transition-timing-function: ease-out;
opacity: 1;
height: 70px;
}
&__display {
position: relative;
// height: 30px;
width: 300px;
// margin: 0 auto 30px auto;
margin: auto;
border-radius: 2px;
color: rgba(rgb(0, 4, 24), 1);
background: #ffffff;
box-shadow: 0px 0px 10px rgb(0, 0, 0);
&--text {
display: inline-block;
padding: 5px 10px;
}
&--reload {
transition: all .2s;
position: absolute;
right: 30px;
padding: 5px 10px;
text-decoration: none;
color: #ffffff;
background-color: #3e455f;
&:hover {
background-color: #1d202c;
}
}
&--close {
transition: all .2s;
position: absolute;
right: 0;
display: inline-block;
padding: 5px 10px;
text-decoration: none;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
color: #ffffff;
background-color: #3e455f;
&:hover {
background-color: #1d202c;
}
}
}
}
.enhanced-tutorial {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0,0,0,0.9);
z-index: 9999999;
opacity: 0;
transition: all .4s;
&__visible {
opacity: 1;
}
&__content {
display: block;
padding: 25px;
width: calc(100%);
height: calc(100%);
}
}

View File

@ -1,48 +1,266 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription, Observable } from 'rxjs';
import { Select } from '@ngxs/store';
// import { ElectronService } from 'ngx-electron';
import { ActivatedRoute, Router } from '@angular/router';
import { Subscription, Observable, Subject } from 'rxjs';
import { debounceTime, map } from 'rxjs/operators';
import { Select, Store } from '@ngxs/store';
import { NavigationService, LeftPanelType } from './services/navigation.service';
import { faTimes } from "@fortawesome/free-solid-svg-icons";
import { NavigationService, LeftPanelType, OpenLeftPanelEvent } from './services/navigation.service';
import { StreamElement } from './states/streams.state';
import { AccountInfo, AddAccount } from "./states/accounts.state";
import { OpenMediaEvent } from './models/common.model';
import { ToolsService } from './services/tools.service';
import { MediaService } from './services/media.service';
import { ServiceWorkerService } from './services/service-worker.service';
import { AuthService, CurrentAuthProcess } from './services/auth.service';
import { MastodonWrapperService } from './services/mastodon-wrapper.service';
import { TokenData, Account } from './services/models/mastodon.interfaces';
import { NotificationService } from './services/notification.service';
import { AppInfo, RegisteredAppsStateModel } from './states/registered-apps.state';
import { HttpErrorResponse } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, OnDestroy {
export class AppComponent implements OnInit, OnDestroy {
faTimes = faTimes;
title = 'Sengi';
floatingColumnActive: boolean;
tutorialActive: boolean;
openedMediaEvent: OpenMediaEvent
restartNotificationLabel: string;
restartNotificationAvailable: boolean;
showRestartNotification: boolean;
private authStorageKey: string = 'tempAuth';
private columnEditorSub: Subscription;
private openMediaSub: Subscription;
private streamSub: Subscription;
private dragoverSub: Subscription;
private paramsSub: Subscription;
private restartNotificationSub: Subscription;
@Select(state => state.streamsstatemodel.streams) streamElements$: Observable<StreamElement[]>;
constructor(private readonly navigationService: NavigationService) {
constructor(
private readonly router: Router,
private readonly notificationService: NotificationService,
private readonly store: Store,
private readonly mastodonService: MastodonWrapperService,
private readonly authService: AuthService,
private readonly activatedRoute: ActivatedRoute,
private readonly serviceWorkerService: ServiceWorkerService, // Ensure update checks
private readonly toolsService: ToolsService,
private readonly mediaService: MediaService,
private readonly navigationService: NavigationService) {
}
ngOnInit(): void {
this.streamElements$.subscribe((streams: StreamElement[]) => {
if(streams && streams.length === 0){
this.paramsSub = this.activatedRoute.queryParams.subscribe(params => {
const code = params['code'];
if (!code) {
return;
}
const appDataWrapper = <CurrentAuthProcess>JSON.parse(localStorage.getItem(this.authStorageKey));
if (!appDataWrapper) {
this.notificationService.notify('', 400, 'Something when wrong in the authentication process. Please retry.', true);
this.router.navigate(['/']);
return;
}
const appInfo = this.getAllSavedApps().filter(x => x.instance === appDataWrapper.instance)[0];
let usedTokenData: TokenData;
this.authService.getToken(appDataWrapper.instance, appInfo.app.client_id, appInfo.app.client_secret, code, appInfo.app.redirect_uri)
.then((tokenData: TokenData) => {
if (tokenData.refresh_token && !tokenData.created_at) {
const nowEpoch = Date.now() / 1000 | 0;
tokenData.created_at = nowEpoch;
}
usedTokenData = tokenData;
return this.mastodonService.retrieveAccountDetails({ 'instance': appDataWrapper.instance, 'id': '', 'username': '', 'order': 0, 'isSelected': true, 'token': tokenData });
})
.then((account: Account) => {
var username = account.username.toLowerCase();
var instance = appDataWrapper.instance.toLowerCase();
if (this.isAccountAlreadyPresent(username, instance)) {
this.notificationService.notify(null, null, `Account @${username}@${instance} is already registered`, true);
this.router.navigate(['/']);
return;
}
const accountInfo = new AccountInfo();
accountInfo.username = username;
accountInfo.instance = instance;
accountInfo.token = usedTokenData;
this.store.dispatch([new AddAccount(accountInfo)])
.subscribe(() => {
localStorage.removeItem(this.authStorageKey);
this.router.navigate(['/']);
});
})
.catch((err: HttpErrorResponse) => {
this.notificationService.notifyHttpError(err, null);
this.router.navigate(['/']);
});
});
this.streamSub = this.streamElements$.subscribe((streams: StreamElement[]) => {
if (streams && streams.length === 0) {
this.tutorialActive = true;
} else {
this.tutorialActive = false;
}
});
this.columnEditorSub = this.navigationService.activatedPanelSubject.subscribe((type: LeftPanelType) => {
if (type === LeftPanelType.Closed) {
this.columnEditorSub = this.navigationService.activatedPanelSubject.subscribe((event: OpenLeftPanelEvent) => {
if (event.type === LeftPanelType.Closed) {
this.floatingColumnActive = false;
this.checkEnhancedTutorial();
} else {
this.floatingColumnActive = true;
}
});
this.openMediaSub = this.navigationService.activatedMediaSubject.subscribe((openedMediaEvent: OpenMediaEvent) => {
if (openedMediaEvent) {
this.openedMediaEvent = openedMediaEvent;
// this.mediaViewerActive = true;
}
});
this.dragoverSub = this.dragoverSubject
.pipe(
debounceTime(1500)
)
.subscribe(() => {
this.drag = false;
});
this.restartNotificationSub = this.notificationService.restartNotificationStream.subscribe((label: string) => {
if (label) {
this.displayRestartNotification(label);
}
});
}
enhancedTutorialActive: boolean;
enhancedTutorialVisible: boolean;
private checkEnhancedTutorial() {
let enhancedTutorialDesactivated = JSON.parse(localStorage.getItem('tutorial'));
if (!this.floatingColumnActive && !this.tutorialActive && !enhancedTutorialDesactivated) {
setTimeout(() => {
this.enhancedTutorialActive = true;
setTimeout(() => {
this.enhancedTutorialVisible = true;
}, 100);
}, 500);
}
}
closeTutorial(){
localStorage.setItem('tutorial', JSON.stringify(true));
this.enhancedTutorialVisible = false;
setTimeout(() => {
this.enhancedTutorialActive = false;
}, 400);
}
ngOnDestroy(): void {
this.streamSub.unsubscribe();
this.columnEditorSub.unsubscribe();
this.openMediaSub.unsubscribe();
this.dragoverSub.unsubscribe();
this.paramsSub.unsubscribe();
this.restartNotificationSub.unsubscribe();
}
closeMedia() {
this.openedMediaEvent = null;
}
private dragoverSubject = new Subject<boolean>();
drag: boolean;
dragenter(event): boolean {
event.stopPropagation();
event.preventDefault();
this.drag = true;
return false;
}
dragleave(event): boolean {
event.stopPropagation();
event.preventDefault();
this.drag = false;
return false;
}
dragover(event): boolean {
event.stopPropagation();
event.preventDefault();
this.dragoverSubject.next(true);
return false;
}
drop(event): boolean {
event.stopPropagation();
event.preventDefault();
this.drag = false;
let files = <File[]>event.dataTransfer.files;
const selectedAccount = this.toolsService.getSelectedAccounts()[0];
this.mediaService.uploadMedia(selectedAccount, files);
return false;
}
loadNewVersion(): boolean {
document.location.reload();
// this.serviceWorkerService.loadNewAppVersion();
return false;
}
displayRestartNotification(label: string): boolean {
this.restartNotificationLabel = label;
this.showRestartNotification = true;
setTimeout(() => {
this.restartNotificationAvailable = true;
}, 200);
return false;
}
closeRestartNotification(): boolean {
this.restartNotificationAvailable = false;
setTimeout(() => {
this.showRestartNotification = false;
}, 250);
return false;
}
private isAccountAlreadyPresent(username: string, instance: string): boolean {
const accounts = <AccountInfo[]>this.store.snapshot().registeredaccounts.accounts;
for (let acc of accounts) {
if (acc.instance === instance && acc.username == username) {
return true;
}
}
return false;
}
private getAllSavedApps(): AppInfo[] {
const snapshot = <RegisteredAppsStateModel>this.store.snapshot().registeredapps;
return snapshot.apps;
}
}

View File

@ -1,23 +1,29 @@
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { HttpModule } from "@angular/http";
import { HttpClientModule } from '@angular/common/http';
import { NgModule, APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { NgxElectronModule } from "ngx-electron";
import { DragDropModule } from '@angular/cdk/drag-drop';
// import { NgxElectronModule } from 'ngx-electron';
import { NgxsModule } from '@ngxs/store';
import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
import { OverlayModule } from '@angular/cdk/overlay';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { ContextMenuModule } from 'ngx-contextmenu';
import { PickerModule } from '@ctrl/ngx-emoji-mart';
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
import { HotkeyModule } from 'angular2-hotkeys';
import { AppComponent } from "./app.component";
import { LeftSideBarComponent } from "./components/left-side-bar/left-side-bar.component";
import { StreamsMainDisplayComponent } from "./pages/streams-main-display/streams-main-display.component";
import { StreamComponent } from "./components/stream/stream.component";
import { StreamsSelectionFooterComponent } from "./components/streams-selection-footer/streams-selection-footer.component";
import { RegisterNewAccountComponent } from "./pages/register-new-account/register-new-account.component";
// import { RegisterNewAccountComponent } from "./pages/register-new-account/register-new-account.component";
import { AuthService } from "./services/auth.service";
import { StreamingService } from "./services/streaming.service";
import { RegisteredAppsState } from "./states/registered-apps.state";
@ -28,6 +34,7 @@ import { FloatingColumnComponent } from './components/floating-column/floating-c
import { StreamsState } from "./states/streams.state";
import { StatusComponent } from "./components/stream/status/status.component";
import { MastodonService } from "./services/mastodon.service";
import { MastodonWrapperService } from "./services/mastodon-wrapper.service";
import { AttachementsComponent } from './components/stream/status/attachements/attachements.component';
import { SettingsComponent } from './components/floating-column/settings/settings.component';
import { AddNewAccountComponent } from './components/floating-column/add-new-account/add-new-account.component';
@ -36,7 +43,6 @@ import { AddNewStatusComponent } from "./components/floating-column/add-new-stat
import { ManageAccountComponent } from "./components/floating-column/manage-account/manage-account.component";
import { ActionBarComponent } from './components/stream/status/action-bar/action-bar.component';
import { WaitingAnimationComponent } from './components/waiting-animation/waiting-animation.component';
import { ReplyToStatusComponent } from './components/stream/status/reply-to-status/reply-to-status.component';
import { UserProfileComponent } from './components/stream/user-profile/user-profile.component';
import { ThreadComponent } from './components/stream/thread/thread.component';
import { HashtagComponent } from './components/stream/hashtag/hashtag.component';
@ -48,63 +54,148 @@ import { StreamEditionComponent } from './components/stream/stream-edition/strea
import { TutorialComponent } from './components/tutorial/tutorial.component';
import { NotificationHubComponent } from './components/notification-hub/notification-hub.component';
import { NotificationService } from "./services/notification.service";
import { MediaViewerComponent } from './components/media-viewer/media-viewer.component';
import { CreateStatusComponent } from './components/create-status/create-status.component';
import { MediaComponent } from './components/create-status/media/media.component';
import { MyAccountComponent } from './components/floating-column/manage-account/my-account/my-account.component';
import { FavoritesComponent } from './components/floating-column/manage-account/favorites/favorites.component';
import { DirectMessagesComponent } from './components/floating-column/manage-account/direct-messages/direct-messages.component';
import { MentionsComponent } from './components/floating-column/manage-account/mentions/mentions.component';
import { NotificationsComponent } from './components/floating-column/manage-account/notifications/notifications.component';
import { SettingsState } from './states/settings.state';
import { AccountEmojiPipe } from './pipes/account-emoji.pipe';
import { CardComponent } from './components/stream/status/card/card.component';
import { ListEditorComponent } from './components/floating-column/manage-account/my-account/list-editor/list-editor.component';
import { ListAccountComponent } from './components/floating-column/manage-account/my-account/list-editor/list-account/list-account.component';
import { PollComponent } from './components/stream/status/poll/poll.component';
import { TimeLeftPipe } from './pipes/time-left.pipe';
import { AutosuggestComponent } from './components/create-status/autosuggest/autosuggest.component';
import { EmojiPickerComponent } from './components/create-status/emoji-picker/emoji-picker.component';
import { StatusUserContextMenuComponent } from './components/stream/status/action-bar/status-user-context-menu/status-user-context-menu.component';
import { StatusSchedulerComponent } from './components/create-status/status-scheduler/status-scheduler.component';
import { PollEditorComponent } from './components/create-status/poll-editor/poll-editor.component';
import { PollEntryComponent } from './components/create-status/poll-editor/poll-entry/poll-entry.component';
import { ScheduledStatusesComponent } from './components/floating-column/scheduled-statuses/scheduled-statuses.component';
import { ScheduledStatusComponent } from './components/floating-column/scheduled-statuses/scheduled-status/scheduled-status.component';
import { StreamNotificationsComponent } from './components/stream/stream-notifications/stream-notifications.component';
import { NotificationComponent } from './components/floating-column/manage-account/notifications/notification/notification.component';
import { ServiceWorkerModule } from '@angular/service-worker';
import { environment } from '../environments/environment';
import { BookmarksComponent } from './components/floating-column/manage-account/bookmarks/bookmarks.component';
import { AttachementImageComponent } from './components/stream/status/attachements/attachement-image/attachement-image.component';
import { EnsureHttpsPipe } from './pipes/ensure-https.pipe';
import { UserFollowsComponent } from './components/stream/user-follows/user-follows.component';
import { AccountComponent } from './components/common/account/account.component';
import { TutorialEnhancedComponent } from './components/tutorial-enhanced/tutorial-enhanced.component';
import { NotificationsTutorialComponent } from './components/tutorial-enhanced/notifications-tutorial/notifications-tutorial.component';
import { LabelsTutorialComponent } from './components/tutorial-enhanced/labels-tutorial/labels-tutorial.component';
import { ThankyouTutorialComponent } from './components/tutorial-enhanced/thankyou-tutorial/thankyou-tutorial.component';
import { StatusTranslateComponent } from './components/stream/status/status-translate/status-translate.component';
const routes: Routes = [
{ path: "", redirectTo: "home", pathMatch: "full" },
{ path: "home", component: StreamsMainDisplayComponent },
{ path: "register", component: RegisterNewAccountComponent},
{ path: "**", redirectTo: "home" }
{ path: "", component: StreamsMainDisplayComponent },
// { path: "home", component: StreamsMainDisplayComponent },
// { path: "register", component: RegisterNewAccountComponent },
{ path: "**", redirectTo: "" }
];
@NgModule({
declarations: [
AppComponent,
LeftSideBarComponent,
StreamsMainDisplayComponent,
StreamComponent,
StreamsSelectionFooterComponent,
StatusComponent,
RegisterNewAccountComponent,
AccountIconComponent,
FloatingColumnComponent,
ManageAccountComponent,
AddNewStatusComponent,
AttachementsComponent,
SettingsComponent,
AddNewAccountComponent,
SearchComponent,
ActionBarComponent,
WaitingAnimationComponent,
ReplyToStatusComponent,
UserProfileComponent,
ThreadComponent,
HashtagComponent,
StreamOverlayComponent,
DatabindedTextComponent,
TimeAgoPipe,
StreamStatusesComponent,
StreamEditionComponent,
TutorialComponent,
NotificationHubComponent
],
imports: [
FontAwesomeModule,
BrowserModule,
HttpModule,
HttpClientModule,
FormsModule,
NgxElectronModule,
RouterModule.forRoot(routes),
declarations: [
AppComponent,
LeftSideBarComponent,
StreamsMainDisplayComponent,
StreamComponent,
StreamsSelectionFooterComponent,
StatusComponent,
// RegisterNewAccountComponent,
AccountIconComponent,
FloatingColumnComponent,
ManageAccountComponent,
AddNewStatusComponent,
AttachementsComponent,
SettingsComponent,
AddNewAccountComponent,
SearchComponent,
ActionBarComponent,
WaitingAnimationComponent,
UserProfileComponent,
ThreadComponent,
HashtagComponent,
StreamOverlayComponent,
DatabindedTextComponent,
TimeAgoPipe,
StreamStatusesComponent,
StreamEditionComponent,
TutorialComponent,
NotificationHubComponent,
MediaViewerComponent,
CreateStatusComponent,
MediaComponent,
MyAccountComponent,
FavoritesComponent,
DirectMessagesComponent,
MentionsComponent,
NotificationsComponent,
AccountEmojiPipe,
CardComponent,
ListEditorComponent,
ListAccountComponent,
PollComponent,
TimeLeftPipe,
AutosuggestComponent,
EmojiPickerComponent,
StatusUserContextMenuComponent,
StatusSchedulerComponent,
PollEditorComponent,
PollEntryComponent,
ScheduledStatusesComponent,
ScheduledStatusComponent,
StreamNotificationsComponent,
NotificationComponent,
BookmarksComponent,
AttachementImageComponent,
EnsureHttpsPipe,
UserFollowsComponent,
AccountComponent,
TutorialEnhancedComponent,
NotificationsTutorialComponent,
LabelsTutorialComponent,
ThankyouTutorialComponent,
StatusTranslateComponent
],
entryComponents: [
EmojiPickerComponent
],
imports: [
FontAwesomeModule,
BrowserModule,
BrowserAnimationsModule,
HttpModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
PickerModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
OverlayModule,
DragDropModule,
// NgxElectronModule,
RouterModule.forRoot(routes),
NgxsModule.forRoot([
RegisteredAppsState,
AccountsState,
StreamsState
]),
NgxsStoragePluginModule.forRoot()
],
providers: [AuthService, NavigationService, NotificationService, MastodonService, StreamingService],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
NgxsModule.forRoot([
RegisteredAppsState,
AccountsState,
StreamsState,
SettingsState
]),
//], { developmentMode: !environment.production }),
NgxsStoragePluginModule.forRoot(),
ContextMenuModule.forRoot(),
HotkeyModule.forRoot(),
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
],
providers: [AuthService, NavigationService, NotificationService, MastodonWrapperService, MastodonService, StreamingService],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule { }

View File

@ -0,0 +1,5 @@
<a href class="account" title="open account" (click)="selected()" (auxclick)="openAccount()">
<img src="{{account.avatar}}" class="account__avatar" />
<div class="account__name" innerHTML="{{ account | accountEmoji }}"></div>
<div class="account__fullhandle">@{{ account.acct }}</div>
</a>

View File

@ -0,0 +1,48 @@
@import "variables";
@import "mixins";
.account {
font-size: $small-font-size;
display: block;
color: white;
border-radius: 2px;
transition: all .3s;
border-top: 1px solid $separator-color;
overflow: hidden;
&:last-of-type {
border-bottom: 1px solid $separator-color;
}
&__avatar {
width: 40px;
margin: 5px 10px 5px 5px;
float: left;
border-radius: 2px;
}
&__name {
margin: 7px 0 0 0;
}
&__fullhandle {
margin: 0 0 5px 0;
color: $status-secondary-color;
transition: all .3s;
white-space: nowrap;
}
&:hover,
&:hover &__fullhandle {
color: white;
text-decoration: none;
}
&:hover {
background-color: $button-background-color-hover;
}
@include clearfix;
}

View File

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AccountComponent } from './account.component';
xdescribe('AccountComponent', () => {
let component: AccountComponent;
let fixture: ComponentFixture<AccountComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AccountComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AccountComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,29 @@
import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';
import { Account } from '../../../services/models/mastodon.interfaces';
@Component({
selector: 'app-account',
templateUrl: './account.component.html',
styleUrls: ['./account.component.scss']
})
export class AccountComponent implements OnInit {
@Input() account: Account;
@Output() accountSelected = new EventEmitter<Account>();
constructor() { }
ngOnInit() {
}
selected(): boolean{
this.accountSelected.next(this.account);
return false;
}
openAccount(): boolean {
window.open(this.account.url, '_blank');
return false;
}
}

View File

@ -0,0 +1,25 @@
import { Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';
import { OpenThreadEvent } from '../../services/tools.service';
export abstract class BrowseBase implements OnInit, OnDestroy {
@Output() browseAccountEvent = new EventEmitter<string>();
@Output() browseHashtagEvent = new EventEmitter<string>();
@Output() browseThreadEvent = new EventEmitter<OpenThreadEvent>();
abstract ngOnInit();
abstract ngOnDestroy();
browseAccount(accountName: string): void {
this.browseAccountEvent.next(accountName);
}
browseHashtag(hashtag: string): void {
this.browseHashtagEvent.next(hashtag);
}
browseThread(openThreadEvent: OpenThreadEvent): void {
this.browseThreadEvent.next(openThreadEvent);
}
}

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